Compare commits
	
		
			2922 Commits
		
	
	
		
			@0xproject
			...
			@0x/testne
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | fe1b7f15e8 | ||
|  | 3f647c259a | ||
|  | 06dcf24496 | ||
|  | 77c77631e1 | ||
|  | b0e9f58033 | ||
|  | 4fc457b78b | ||
|  | 2f6b1273aa | ||
|  | da9de70bbc | ||
|  | b174a891bc | ||
|  | bb79a5e324 | ||
|  | 9e0c232a73 | ||
|  | e02dc13805 | ||
|  | 820ab062a6 | ||
|  | 7b4f63a39c | ||
|  | 3a3fe0e69a | ||
|  | 5c21d3f6af | ||
|  | baba78f545 | ||
|  | f03afe6f1b | ||
|  | a824264da2 | ||
|  | a66c03aa21 | ||
|  | bed134c1da | ||
|  | d36cf58b82 | ||
|  | 5527de62ff | ||
|  | 11f0bebd7f | ||
|  | 3fb29041b0 | ||
|  | 161a935003 | ||
|  | e8afc66a5a | ||
|  | 49a9345bf4 | ||
|  | d73faf1b81 | ||
|  | 0c6110b736 | ||
|  | 2da258f5be | ||
|  | e9bf7206bd | ||
|  | 2b4dcb419e | ||
|  | c67632dff5 | ||
|  | 01b36b4949 | ||
|  | 711b307e6c | ||
|  | 1ab19a7c23 | ||
|  | 7068f7b4d1 | ||
|  | 79f0324abc | ||
|  | b82148ea60 | ||
|  | add1cfd261 | ||
|  | cdf78494d5 | ||
|  | 789f573452 | ||
|  | 22f217807d | ||
|  | 08797392e0 | ||
|  | 853c77dc09 | ||
|  | 0ebbbdfca4 | ||
|  | 085d34834b | ||
|  | b866ce787c | ||
|  | 4d5bc8b8ee | ||
|  | 7f013515e7 | ||
|  | a4a46dc076 | ||
|  | 33dbdb0184 | ||
|  | 0d565fe32f | ||
|  | 320460feb9 | ||
|  | dbce3f8935 | ||
|  | c41622c20a | ||
|  | 348556a544 | ||
|  | 6fa6579c31 | ||
|  | 6f61268514 | ||
|  | 8efc6c2112 | ||
|  | b21c1bea46 | ||
|  | fd7ba3ecea | ||
|  | 8aeb18bcc3 | ||
|  | 9e4a594eb1 | ||
|  | 3b421ef796 | ||
|  | e0c4f58970 | ||
|  | df8fd36c94 | ||
|  | 76b3caa124 | ||
|  | 0101cd73aa | ||
|  | 6ef628613e | ||
|  | bc960fe8f8 | ||
|  | 517c620397 | ||
|  | 498be7ac41 | ||
|  | 0391f93490 | ||
|  | 399a7d5fec | ||
|  | 0d201173ef | ||
|  | 2d43f312c8 | ||
|  | 1ec8a4115f | ||
|  | 753b33aec5 | ||
|  | 7626d1d6fe | ||
|  | d3592d362e | ||
|  | a8a1ea92a6 | ||
|  | ff027ee36a | ||
|  | 397b4e2890 | ||
|  | ba292ead45 | ||
|  | 5355f3c538 | ||
|  | 478330c12d | ||
|  | 38896c9358 | ||
|  | 26cbe7ae66 | ||
|  | fd83ca2cb8 | ||
|  | b1376059d3 | ||
|  | 4072076965 | ||
|  | 2bba01c664 | ||
|  | 93054ae52b | ||
|  | 5c1b1a1203 | ||
|  | 433fb3597d | ||
|  | acb7e876b2 | ||
|  | 2c585bfbdc | ||
|  | 1f0ac47bd9 | ||
|  | 7460f2796a | ||
|  | 7249cc7b49 | ||
|  | b598827708 | ||
|  | 128abb39dd | ||
|  | 79a533940e | ||
|  | 773cf3cd14 | ||
|  | 53d0f5b98e | ||
|  | 3a51bd1e69 | ||
|  | 3f1f19e344 | ||
|  | 3aa831ad77 | ||
|  | 3fd667b3be | ||
|  | fa7bd072d0 | ||
|  | cc8debe53b | ||
|  | 36b8c9c5dd | ||
|  | 474db7c18d | ||
|  | daa011f7cb | ||
|  | 39657b633b | ||
|  | 2e8f74abce | ||
|  | 239eada7d9 | ||
|  | df91d34315 | ||
|  | 3980bf39a9 | ||
|  | b4a11de097 | ||
|  | a22d78e273 | ||
|  | a50f0ca997 | ||
|  | 12bc6f5d58 | ||
|  | b147cd8885 | ||
|  | d703c13f8e | ||
|  | 3dacc6157b | ||
|  | fd12bdbbd5 | ||
|  | 297a62fe80 | ||
|  | 1e39d56cf7 | ||
|  | ca6f99da61 | ||
|  | 39ae21d693 | ||
|  | e45b6c7e98 | ||
|  | fc138cd73d | ||
|  | 990d510d05 | ||
|  | 3eac119399 | ||
|  | 8755737344 | ||
|  | cd44470a29 | ||
|  | dd4d3b10cf | ||
|  | 211163b372 | ||
|  | f44c5b2292 | ||
|  | 5d74421e43 | ||
|  | eb5f514d25 | ||
|  | 57318a6ef2 | ||
|  | 857a35d4f7 | ||
|  | 4f4d901eca | ||
|  | 6a84877f9a | ||
|  | 117e2f583f | ||
|  | b074fe2de5 | ||
|  | 3dad385533 | ||
|  | 15a12cfa22 | ||
|  | c448a409c1 | ||
|  | dfef33bc41 | ||
|  | 27ea271842 | ||
|  | 316f3e2e76 | ||
|  | 624f5cee8d | ||
|  | 7acaae37a9 | ||
|  | fd73c17db1 | ||
|  | 689f8f1fbc | ||
|  | 5ffd20214c | ||
|  | 3395b8d095 | ||
|  | b388d54962 | ||
|  | c27194a357 | ||
|  | 8493d619b4 | ||
|  | adcfe51190 | ||
|  | d71362af99 | ||
|  | a5665a6875 | ||
|  | 7a99b2099d | ||
|  | c84e163edb | ||
|  | cde192df0d | ||
|  | d0c009adff | ||
|  | f6abc007ff | ||
|  | 88eb642aa5 | ||
|  | 8b09286173 | ||
|  | bfe708533f | ||
|  | d7742029c7 | ||
|  | 1151371e57 | ||
|  | ecb92a44bc | ||
|  | f7642c06f0 | ||
|  | 94d1e427c1 | ||
|  | 4181a040b5 | ||
|  | c0d8ceca82 | ||
|  | 771f8a6a6c | ||
|  | 54b51830d0 | ||
|  | 801004be66 | ||
|  | c6e7ad5a53 | ||
|  | 6d5f65b77e | ||
|  | 370452238f | ||
|  | 28df5bfd94 | ||
|  | eb8f7b0ef5 | ||
|  | dfbf10c94b | ||
|  | 95b2898b9c | ||
|  | 094f710662 | ||
|  | d1186e08b4 | ||
|  | cab71fd4d1 | ||
|  | 4cf6fbc6a3 | ||
|  | 10da1e24e1 | ||
|  | c30dca6961 | ||
|  | 42c441fafa | ||
|  | 6861cd7462 | ||
|  | d59027f0bc | ||
|  | d1444f228d | ||
|  | 9cc7090e28 | ||
|  | a73522e7f1 | ||
|  | d941901e32 | ||
|  | eb3fda059a | ||
|  | 0823bd24d6 | ||
|  | 897c15fd28 | ||
|  | 006a13448f | ||
|  | 88c7d907fa | ||
|  | e8814ecbe7 | ||
|  | f90486c99c | ||
|  | a2bc62b17a | ||
|  | ce4081bb18 | ||
|  | b7a111366b | ||
|  | f6487122d1 | ||
|  | 7c9d47451b | ||
|  | 8b06b36274 | ||
|  | 188e317504 | ||
|  | ecae3f9c48 | ||
|  | 543ff7739a | ||
|  | 18d24f8db1 | ||
|  | 58a65d0ed9 | ||
|  | 338594d3e5 | ||
|  | e4f9ae6ad5 | ||
|  | 7e2acb6e7e | ||
|  | 04e70df330 | ||
|  | eb46570a38 | ||
|  | bb9c21fb14 | ||
|  | 245fa95424 | ||
|  | 16fa0fdda1 | ||
|  | 66261102de | ||
|  | 6748c36b03 | ||
|  | d0f20a4fd5 | ||
|  | f5c7a3c26a | ||
|  | cfa748e206 | ||
|  | 8284f9c2ba | ||
|  | 18fef7ade4 | ||
|  | 5fc2483be7 | ||
|  | d5521ea5e0 | ||
|  | cc4ccda623 | ||
|  | 389665d3a1 | ||
|  | d160792923 | ||
|  | 819ba14303 | ||
|  | b0f2ab45e9 | ||
|  | 620f439816 | ||
|  | 6a57a7b5be | ||
|  | 1f3055c1bc | ||
|  | ec83a1d9e7 | ||
|  | b895b855cb | ||
|  | a770ea56ea | ||
|  | 5e66cc8a40 | ||
|  | 4fda2a2d04 | ||
|  | e7e9c2a2eb | ||
|  | 7619bc4f13 | ||
|  | 515b8712a1 | ||
|  | e2ff7b7c84 | ||
|  | 209b2c9dcb | ||
|  | cdaa1407da | ||
|  | 92706a4b43 | ||
|  | ab245fe7de | ||
|  | f5623632d8 | ||
|  | 7de33c5dd9 | ||
|  | 180f176716 | ||
|  | a2e1bf0e62 | ||
|  | ad96e953ce | ||
|  | 695d1453ac | ||
|  | 7c30fd4b2d | ||
|  | 5573b092a9 | ||
|  | d16499da4e | ||
|  | c50c4a4669 | ||
|  | 32de4862ba | ||
|  | f341626e29 | ||
|  | c2645b26b4 | ||
|  | ce19ec207b | ||
|  | 7858dafce4 | ||
|  | 0955feb023 | ||
|  | 9fd931f799 | ||
|  | 57fba86154 | ||
|  | 0a3af4eb22 | ||
|  | 7fc1a88680 | ||
|  | 9f5f31d39f | ||
|  | bda9d4c1b0 | ||
|  | b55ba3a318 | ||
|  | dc655fd903 | ||
|  | 82b6a81a22 | ||
|  | f9d13cd43a | ||
|  | 771e01162d | ||
|  | 61a1a0be97 | ||
|  | 3430896eb7 | ||
|  | cd79a2fad1 | ||
|  | f82d16a5b0 | ||
|  | 9990f8720c | ||
|  | 544ddd44a0 | ||
|  | 66b485c7d4 | ||
|  | 9ef6f82a95 | ||
|  | a148db5022 | ||
|  | f9a38fcb32 | ||
|  | 3f918622bc | ||
|  | 6091ee732d | ||
|  | 906909e33f | ||
|  | d192a7d466 | ||
|  | 096f9decee | ||
|  | ae84dac463 | ||
|  | 8c33692560 | ||
|  | 44a34ee541 | ||
|  | 76f88a0a62 | ||
|  | c1defba429 | ||
|  | c1ad1d203d | ||
|  | 3061afdafb | ||
|  | 59ad2b75c1 | ||
|  | 935e5da78e | ||
|  | 28ded5d02d | ||
|  | 27258fe3d4 | ||
|  | ad0129fa02 | ||
|  | 5911879639 | ||
|  | cc2719492d | ||
|  | d675547208 | ||
|  | d938ba4606 | ||
|  | 9a5b52036b | ||
|  | 229f11f164 | ||
|  | 91f8487947 | ||
|  | 0e1e9b27f6 | ||
|  | 9787d1085d | ||
|  | 1c0569cfc6 | ||
|  | 9cc82308e5 | ||
|  | 5d6fde356a | ||
|  | 96fcbeaba6 | ||
|  | d21487d0c0 | ||
|  | dc90136529 | ||
|  | abaa39a5e2 | ||
|  | 4456c3ee14 | ||
|  | a49bf353f8 | ||
|  | 05f059492b | ||
|  | 13b41c976b | ||
|  | bcb633e5cb | ||
|  | 05b74ba1c8 | ||
|  | a918e7099d | ||
|  | 12dad41143 | ||
|  | 9a0595a607 | ||
|  | 37405038e8 | ||
|  | 25039a036c | ||
|  | 728f70f51b | ||
|  | f9eba65aee | ||
|  | d0a0af5130 | ||
|  | 4cba70f32e | ||
|  | 5901ee7e96 | ||
|  | 09ee7d84f7 | ||
|  | 2ad2644b6b | ||
|  | 30454fe467 | ||
|  | 475698ed92 | ||
|  | 274e4b3bcd | ||
|  | a49fc27042 | ||
|  | 17f024056a | ||
|  | 10e6c3cd90 | ||
|  | cd419edf69 | ||
|  | ac72df4188 | ||
|  | 9610ada446 | ||
|  | 8ab8c27998 | ||
|  | 48ff13e3e2 | ||
|  | 25ca3d4c29 | ||
|  | 02a975dde4 | ||
|  | aeec8f47ef | ||
|  | fdf9e860de | ||
|  | 3f35239b27 | ||
|  | aab9bedd7f | ||
|  | 4e4291eccd | ||
|  | 7ed44f7b2f | ||
|  | 8288e8cce9 | ||
|  | 1bb7a28690 | ||
|  | 8d1689073b | ||
|  | 3052c8d303 | ||
|  | ff295daa5c | ||
|  | bb307a55d3 | ||
|  | ae6202ed3d | ||
|  | 0e55f76db8 | ||
|  | 667b1e03dd | ||
|  | 4f5ab1a72d | ||
|  | 6ad8ac6a48 | ||
|  | 86febc3cce | ||
|  | e73fceaa20 | ||
|  | cacfcc291a | ||
|  | e1ae551560 | ||
|  | 476cbbb6cb | ||
|  | 1880c34ce0 | ||
|  | cc7321cb5b | ||
|  | ae64fc15e0 | ||
|  | 6f4dbc71f2 | ||
|  | 4bd4ff46cf | ||
|  | edfb56de6c | ||
|  | 03007e420c | ||
|  | 7fa1f25e06 | ||
|  | 341d7b3407 | ||
|  | 9be4c47499 | ||
|  | 9512978de9 | ||
|  | ffecba21f4 | ||
|  | af91a56a55 | ||
|  | 51da5311b5 | ||
|  | a414dc9b83 | ||
|  | 0f63071696 | ||
|  | 951a5271e1 | ||
|  | 4c5b26db18 | ||
|  | e1306f55ed | ||
|  | d2bf23de71 | ||
|  | 3206e1528b | ||
|  | 68182fb6c4 | ||
|  | 80711eafeb | ||
|  | cbe595af54 | ||
|  | dcae27c1a4 | ||
|  | 81fb8d614f | ||
|  | 3e8d9510ec | ||
|  | a3d4482c4a | ||
|  | 1c5745dbd9 | ||
|  | 3e75daafa1 | ||
|  | 6696aa46ee | ||
|  | 14a9770d57 | ||
|  | b8d2cc1221 | ||
|  | 22d0c76bf1 | ||
|  | 30809e646b | ||
|  | 27d9e516e1 | ||
|  | 948d62200a | ||
|  | 39f92e4c95 | ||
|  | d5d99b9d2e | ||
|  | 4a96dbe085 | ||
|  | ced4c893ba | ||
|  | a2d09a68b0 | ||
|  | 98cf046b4c | ||
|  | e3510f3bcf | ||
|  | 89e59cca28 | ||
|  | 0515a914e0 | ||
|  | f04eba7773 | ||
|  | cd06c0e913 | ||
|  | 23b1656692 | ||
|  | d06b40bd8a | ||
|  | de18fa0069 | ||
|  | 1a10715fcb | ||
|  | 062187f28d | ||
|  | e55d8802e1 | ||
|  | 3adc6b6daa | ||
|  | c5e8bb1763 | ||
|  | acefeff5f0 | ||
|  | 2a1c2a55ed | ||
|  | 45d828e154 | ||
|  | dc3b867b35 | ||
|  | b7f4062ac8 | ||
|  | 73f5ea2906 | ||
|  | 11bc10a3ae | ||
|  | e45ce4c167 | ||
|  | 85b7362073 | ||
|  | 46a8aad87a | ||
|  | ab2759f431 | ||
|  | 379f7c7883 | ||
|  | c7a063ca47 | ||
|  | db3ad83ebc | ||
|  | 979527a5ee | ||
|  | 2d9c961d4f | ||
|  | 11f7f2d29f | ||
|  | c5554fe30c | ||
|  | 6da6540c03 | ||
|  | 059868e994 | ||
|  | f89b314a94 | ||
|  | 06ba26a6d3 | ||
|  | e50decfa8a | ||
|  | 78fb43f59c | ||
|  | 09f0bf7f00 | ||
|  | 05ce8aa124 | ||
|  | ce5bc3c1c9 | ||
|  | 33d8044f02 | ||
|  | fefb64442a | ||
|  | 119c4e2dc6 | ||
|  | c1f9f2e8d9 | ||
|  | 38f47a380b | ||
|  | 8635f8d732 | ||
|  | 47737d4d0f | ||
|  | b737313d16 | ||
|  | 9c26334eff | ||
|  | 2c04ee3f5e | ||
|  | 4df8e60f42 | ||
|  | df7a1bd8de | ||
|  | 657ae0cf57 | ||
|  | d43f89fa0a | ||
|  | 2e184f081e | ||
|  | 3cd9f40e63 | ||
|  | 8e501e5ec7 | ||
|  | 4c4286ac66 | ||
|  | 4a72dc6c6f | ||
|  | 7ccfa8a8af | ||
|  | 751b87af96 | ||
|  | 2110ac32b7 | ||
|  | c2e8390d21 | ||
|  | 075f3c9bfe | ||
|  | 6027e275b1 | ||
|  | a5edb0b421 | ||
|  | da54fc3296 | ||
|  | 053e147afc | ||
|  | f0c79473bd | ||
|  | 864f89c535 | ||
|  | 4db33ba2b3 | ||
|  | 37f87ab267 | ||
|  | 104b2ed759 | ||
|  | 56953320b3 | ||
|  | af2bf053bc | ||
|  | 117ee19370 | ||
|  | dcd428a4a2 | ||
|  | e086c7b8e6 | ||
|  | 1f0c7f8fbe | ||
|  | b75fe10c79 | ||
|  | b7a5e40c62 | ||
|  | 28f0deb3eb | ||
|  | bdf623dab5 | ||
|  | 921492e818 | ||
|  | 194cbc3ba9 | ||
|  | 1ba207f1fe | ||
|  | c5014af7fe | ||
|  | 579a49ba91 | ||
|  | 071f9a5a73 | ||
|  | 4bf1ca0d17 | ||
|  | 5e67756037 | ||
|  | 48e4452a04 | ||
|  | be97eebe02 | ||
|  | 37c5165319 | ||
|  | 15ed3b35df | ||
|  | 19f9649e74 | ||
|  | d52a04e725 | ||
|  | daf447361f | ||
|  | 1a3b1607b1 | ||
|  | 2bb53d5b1d | ||
|  | 38eaacdd44 | ||
|  | 77a4d7e2b7 | ||
|  | dbf75a43c3 | ||
|  | 39c7f3dc88 | ||
|  | 01f82ddf78 | ||
|  | 24b5b35a74 | ||
|  | 4dfbc6747e | ||
|  | 528ae4376e | ||
|  | e0149618f3 | ||
|  | 632d7b6fc1 | ||
|  | b9dccf9da3 | ||
|  | 7e24c04c0b | ||
|  | a766d78706 | ||
|  | bf0a4bd91b | ||
|  | 51779fec38 | ||
|  | ac2d93ab22 | ||
|  | 092d010c2d | ||
|  | 30b0770993 | ||
|  | a017f5e385 | ||
|  | 6510454337 | ||
|  | d2766d7ced | ||
|  | 6c79a858df | ||
|  | f06541ec94 | ||
|  | d5105b5c9f | ||
|  | 17b282b1d7 | ||
|  | 43ad2fe23b | ||
|  | 2c308c0f4c | ||
|  | d8001e696e | ||
|  | aeb607d485 | ||
|  | c070142dc0 | ||
|  | 6f80c7e6d9 | ||
|  | 48dd9569f7 | ||
|  | c66e2f6704 | ||
|  | b49e5c76e4 | ||
|  | ce4da870d7 | ||
|  | 6588cf919e | ||
|  | 2f4e498a09 | ||
|  | 66465816ca | ||
|  | bce9031868 | ||
|  | 100f446031 | ||
|  | 0de654bbd5 | ||
|  | eb3a4d2fab | ||
|  | 48f1e6057c | ||
|  | d129c922ed | ||
|  | 6f2217570f | ||
|  | 90ba8e0e8d | ||
|  | 669ea191a5 | ||
|  | 3f2b6482c3 | ||
|  | 16ba01cd2e | ||
|  | 7282e3ce03 | ||
|  | 977e20edc3 | ||
|  | 17643d98aa | ||
|  | 724f3b9cf7 | ||
|  | a7a17c85dc | ||
|  | 7742df8614 | ||
|  | 26cd5ec149 | ||
|  | da0c5dd9d3 | ||
|  | a60cf44d45 | ||
|  | 62f219ea74 | ||
|  | c26b3f5dfc | ||
|  | 0eb9769cd4 | ||
|  | eca862f818 | ||
|  | 3f43f9bb4c | ||
|  | ee6bb229e0 | ||
|  | f3a6800306 | ||
|  | 7bc2df5602 | ||
|  | 1737411ab7 | ||
|  | 7a8adf9db5 | ||
|  | ad6dc8e891 | ||
|  | 44635f34f0 | ||
|  | b4fb6b5ff3 | ||
|  | c87e68f833 | ||
|  | ff1f0a9678 | ||
|  | aa0e07b058 | ||
|  | a42347a776 | ||
|  | 8ff5e19269 | ||
|  | 8a6e077664 | ||
|  | f9d8610383 | ||
|  | b4af27dd44 | ||
|  | 9aa6753823 | ||
|  | 94ace00e0c | ||
|  | 12b6877aeb | ||
|  | 65d85ca500 | ||
|  | 3f0059d4bb | ||
|  | 4b348e1e60 | ||
|  | a764dfa789 | ||
|  | c2038eae5b | ||
|  | c4ae91c7c5 | ||
|  | 857eb95ac0 | ||
|  | 4fd3f12aeb | ||
|  | a7336d3c65 | ||
|  | 8b62b350b1 | ||
|  | 71d1e6b0ec | ||
|  | 7e49db2301 | ||
|  | 4b95e3d684 | ||
|  | 392d339443 | ||
|  | ece76e5874 | ||
|  | 8cb6d99f17 | ||
|  | ac377490dc | ||
|  | 058c887353 | ||
|  | 0affc7682f | ||
|  | 1c68bdabaa | ||
|  | 683c6f22af | ||
|  | 8c6de7f69d | ||
|  | 4bf50a0496 | ||
|  | 745d368130 | ||
|  | aa4a474e1d | ||
|  | ff99f84f15 | ||
|  | 10ff723287 | ||
|  | 56ef712d26 | ||
|  | 2735fb4fa6 | ||
|  | 88c929a408 | ||
|  | 9f924e459c | ||
|  | 9e8bca69a8 | ||
|  | 325af82217 | ||
|  | f8876ab60b | ||
|  | 47dc384ea3 | ||
|  | f74080fe0d | ||
|  | e7c6f2a357 | ||
|  | 56cb2470cc | ||
|  | ea65fa4f65 | ||
|  | d5daa68703 | ||
|  | 28863f9a6f | ||
|  | cdd650d0eb | ||
|  | bd8ba14bf4 | ||
|  | 6ab6a9aa2b | ||
|  | d0df074721 | ||
|  | 612e8db930 | ||
|  | 376034ac7e | ||
|  | 95775dca1f | ||
|  | 9f61735f94 | ||
|  | 86aa5f9643 | ||
|  | 02cf99fa36 | ||
|  | 6ea386a7af | ||
|  | 1d38b75d6f | ||
|  | 01b98c3ed0 | ||
|  | 6cf8d57aee | ||
|  | 7b43cd14b3 | ||
|  | f2f7598c0e | ||
|  | ae4f1a093a | ||
|  | 2b495a7935 | ||
|  | 155858de6e | ||
|  | d052342df7 | ||
|  | 32fa1bcc38 | ||
|  | 187bbc7fc1 | ||
|  | d46b288733 | ||
|  | dfc5d7d860 | ||
|  | 1d07949087 | ||
|  | db77cd10c5 | ||
|  | f36352be47 | ||
|  | 18c9907d6f | ||
|  | 91ca80b248 | ||
|  | 59743d32da | ||
|  | ac68f8db44 | ||
|  | 5ec4b27200 | ||
|  | b2012bf161 | ||
|  | 81505ba56c | ||
|  | 75e3b44d9e | ||
|  | 84057934c6 | ||
|  | bdae4ba2a2 | ||
|  | 87fabbb943 | ||
|  | a31f3b542f | ||
|  | f7de26f65c | ||
|  | 852f50d1a0 | ||
|  | f3f97896ed | ||
|  | 7c87d2e38b | ||
|  | 03b20eed29 | ||
|  | 4d275cc591 | ||
|  | e18f66e5b7 | ||
|  | 4ca89fc9f1 | ||
|  | f2e5a9635b | ||
|  | c767404ad0 | ||
|  | 492df3108c | ||
|  | 7db53cf92c | ||
|  | 7fab0a5a86 | ||
|  | 41bb38a776 | ||
|  | b7d7c5f38b | ||
|  | 0ecaa90ffd | ||
|  | abc00b05c3 | ||
|  | d87643fdfa | ||
|  | bd00f1279b | ||
|  | 9176e535aa | ||
|  | 7d9009bb96 | ||
|  | 78e6063d92 | ||
|  | 0013bafc62 | ||
|  | 336e456984 | ||
|  | 32beeae2f0 | ||
|  | eda0b3e693 | ||
|  | 35b001b081 | ||
|  | 8ba65346d4 | ||
|  | 009b5b575c | ||
|  | d2adbc3647 | ||
|  | 6a89935e3b | ||
|  | 62f4bb2117 | ||
|  | ce43724bd4 | ||
|  | 18c31a3bc0 | ||
|  | c328616330 | ||
|  | 2610868589 | ||
|  | fdefa5952c | ||
|  | 7f2636fd05 | ||
|  | fb7d0b9d0b | ||
|  | dbf5be6c21 | ||
|  | aa1085c8f3 | ||
|  | 55be070dcf | ||
|  | 2c286ad897 | ||
|  | 4976b34738 | ||
|  | 7aab4d10de | ||
|  | 2305109170 | ||
|  | 9bae3e51d9 | ||
|  | c84c92663d | ||
|  | c333d093b5 | ||
|  | 55a3bc8cb6 | ||
|  | e6e883e05a | ||
|  | 17fb4d5b57 | ||
|  | 05f7b73307 | ||
|  | bf51728466 | ||
|  | 6ad98420a0 | ||
|  | afe6181757 | ||
|  | ce68e20e82 | ||
|  | f35156517d | ||
|  | 72f5719b34 | ||
|  | be45a30851 | ||
|  | 13f8801e08 | ||
|  | ad235912d7 | ||
|  | 6ff35172d6 | ||
|  | e624587050 | ||
|  | 5938e8a52d | ||
|  | fca5260eb1 | ||
|  | 021041165a | ||
|  | 6c9277867d | ||
|  | 75b0781969 | ||
|  | eab88cbe7c | ||
|  | 2e56e2cc05 | ||
|  | 8cffe65047 | ||
|  | 5bdfad9b41 | ||
|  | 3c5812c5d2 | ||
|  | d268e19124 | ||
|  | 875f621f20 | ||
|  | f2e5fd8846 | ||
|  | 5509bf5aeb | ||
|  | 2c63909d5d | ||
|  | 18667d739c | ||
|  | 6f8e98e537 | ||
|  | fa18db84d9 | ||
|  | 05bf7a8280 | ||
|  | f8edef66e4 | ||
|  | b0a2cacd82 | ||
|  | e093864bff | ||
|  | ac3bfdfe5f | ||
|  | fcf3451448 | ||
|  | 38b146c395 | ||
|  | 43f8f2abbd | ||
|  | fb0e0473de | ||
|  | 45ff83d852 | ||
|  | e3af06ab10 | ||
|  | e7130af6a9 | ||
|  | be1a597250 | ||
|  | f13d061dd2 | ||
|  | 00db096d2e | ||
|  | 7325e16698 | ||
|  | 14b47f3a9f | ||
|  | f0e4837983 | ||
|  | 003ab1e5b3 | ||
|  | 24673be1cd | ||
|  | 7a6cace1ec | ||
|  | 8dc73d3d85 | ||
|  | d76d8abc1d | ||
|  | c83dec22c9 | ||
|  | 974ec23ecd | ||
|  | 68f150eff2 | ||
|  | 0e1cd9784b | ||
|  | 6d79e30266 | ||
|  | 1e9ea09f08 | ||
|  | fa346d9461 | ||
|  | 33e65c322e | ||
|  | 770cf52933 | ||
|  | 1b8b2c0b9b | ||
|  | 6c8fb370dc | ||
|  | a48e0a08bf | ||
|  | ecdd6e3303 | ||
|  | 17c6661e2d | ||
|  | 141121004c | ||
|  | 3af7d1ad02 | ||
|  | 255da32d29 | ||
|  | 29063cab18 | ||
|  | 3da032fb24 | ||
|  | d0b37fcab5 | ||
|  | 57d9fcf9e5 | ||
|  | 2bd7b0f66b | ||
|  | 8f0ceaf1d8 | ||
|  | 1da3604351 | ||
|  | 3a7bb97ad1 | ||
|  | 2aa73fc839 | ||
|  | 33335a6791 | ||
|  | 5b1b423b5e | ||
|  | 90f5e4d197 | ||
|  | 026ad1f9a1 | ||
|  | 81c4887241 | ||
|  | 20d60e2368 | ||
|  | 58ad7d7caf | ||
|  | af49514397 | ||
|  | 2aa4761d6d | ||
|  | 83a36aff3f | ||
|  | 8b8c958203 | ||
|  | 6bf27ac57f | ||
|  | ce151f630d | ||
|  | 96d145f54f | ||
|  | c9a0c7872d | ||
|  | a5e435d831 | ||
|  | 6ada38248e | ||
|  | 40512ea608 | ||
|  | 60208091a4 | ||
|  | 29437c5761 | ||
|  | 79db7147a4 | ||
|  | b3a323efa1 | ||
|  | bf9af95654 | ||
|  | eee0640b07 | ||
|  | 4298da118f | ||
|  | bd763ebb34 | ||
|  | 3fbf9c4285 | ||
|  | 23fb8dab13 | ||
|  | 9b1f765ced | ||
|  | d85daab967 | ||
|  | 11941b08b6 | ||
|  | 6f77b90836 | ||
|  | 2b2f5d6169 | ||
|  | 1d30a2f91d | ||
|  | 6baadc746e | ||
|  | 69e9dbd683 | ||
|  | e0e011eb66 | ||
|  | dc56ce4549 | ||
|  | 0aef2c8ade | ||
|  | 7102a23b0a | ||
|  | f39541436a | ||
|  | ccf021b8bf | ||
|  | 025614a7fd | ||
|  | 22abd1dfcf | ||
|  | a424c2adfa | ||
|  | 55f9348d0a | ||
|  | 2afa38c927 | ||
|  | 92fd0a9d24 | ||
|  | a5eb346dd1 | ||
|  | a4604cb2f2 | ||
|  | 11033c78f5 | ||
|  | f3391e1250 | ||
|  | 09c5ae4e65 | ||
|  | cd04a21e29 | ||
|  | 3ca9439481 | ||
|  | 36f202f7b4 | ||
|  | a86ca6257f | ||
|  | 16386bc99e | ||
|  | de20ef1a49 | ||
|  | 03b235bb42 | ||
|  | 1c92ae0ed0 | ||
|  | 0edd9b32ba | ||
|  | 63652df3b9 | ||
|  | 5c76c8586d | ||
|  | f3cba233ad | ||
|  | dcdc411ab7 | ||
|  | 7f217dcb3c | ||
|  | 295a8c760a | ||
|  | 1cfcc82ea9 | ||
|  | a1a0d120be | ||
|  | 2e3624d888 | ||
|  | 9b147f1495 | ||
|  | 636ce6331b | ||
|  | 8941b6cee5 | ||
|  | e4351789d2 | ||
|  | 19f61906d3 | ||
|  | a5a033c359 | ||
|  | 50442c3ebb | ||
|  | 9fe88b2146 | ||
|  | c8e7d225ca | ||
|  | 0aa7bfab0d | ||
|  | 7bc9cd8c94 | ||
|  | 0a3c543d5d | ||
|  | 01ccd8ff1a | ||
|  | f73e6a75b1 | ||
|  | a300a451c8 | ||
|  | 2a95d3269d | ||
|  | c8fd1ae05c | ||
|  | 19a657c38b | ||
|  | 7418932432 | ||
|  | aec0dd3835 | ||
|  | fb882b0c77 | ||
|  | 6c0d317380 | ||
|  | 0fd158ac64 | ||
|  | a165f5d25b | ||
|  | 2bd8cbb80c | ||
|  | afb34da729 | ||
|  | 402089db4e | ||
|  | 8155d311af | ||
|  | cd8e6d9cdf | ||
|  | f2fdb6e47d | ||
|  | 941448d65c | ||
|  | 764f402eb9 | ||
|  | bd06ebde8d | ||
|  | fbd7115500 | ||
|  | f93774f855 | ||
|  | d21e6f3aaf | ||
|  | 22160df2d2 | ||
|  | 31ee8870b8 | ||
|  | 9876f6cc34 | ||
|  | 6f600029a2 | ||
|  | 1bc4d47663 | ||
|  | 6bfe7d7b7e | ||
|  | 024bcf492d | ||
|  | 75b9e63919 | ||
|  | 6c9f7839c3 | ||
|  | 7f554303b4 | ||
|  | 9e8031d5e3 | ||
|  | 3ac9dac4f0 | ||
|  | 9654397b29 | ||
|  | 34c00eaeb3 | ||
|  | e1236a4846 | ||
|  | e5192507ab | ||
|  | 2e1222556f | ||
|  | 9171f9ec60 | ||
|  | d0fed1ae46 | ||
|  | ee0f2e46ee | ||
|  | c833b4f494 | ||
|  | bd3f101ab8 | ||
|  | f9f8e06c1c | ||
|  | cb1311ecc5 | ||
|  | 9ba00a1077 | ||
|  | 405234133b | ||
|  | 6cc9631ef6 | ||
|  | 2966ab12e0 | ||
|  | 3ce665eeab | ||
|  | 03bfc7dd40 | ||
|  | a5d0066d00 | ||
|  | df7210163a | ||
|  | ded6742ddd | ||
|  | fa6bd34899 | ||
|  | 5f2cd33da0 | ||
|  | e0355a2e39 | ||
|  | f7aee9c7a9 | ||
|  | e7de4b953f | ||
|  | d98de363eb | ||
|  | 055763cceb | ||
|  | 60ba8d57d4 | ||
|  | 75d274f330 | ||
|  | d7b6d8222f | ||
|  | 1eb8d17ce3 | ||
|  | 6e462b7dba | ||
|  | 3e2fe40a11 | ||
|  | 2a82ff48c0 | ||
|  | 07926ded6e | ||
|  | adcfaa2e80 | ||
|  | c5084f023a | ||
|  | bf0437324d | ||
|  | 1001dfcc30 | ||
|  | 98f8c77494 | ||
|  | d9b7aa2e4b | ||
|  | 0cfe5637c0 | ||
|  | 119f8c9449 | ||
|  | b04b649ec0 | ||
|  | e2220a939f | ||
|  | 831b4a1193 | ||
|  | b5d88079d9 | ||
|  | 266440f7c3 | ||
|  | d2e4a150d9 | ||
|  | 00eb3211c9 | ||
|  | 1e3ab76e9a | ||
|  | ba2ba628e8 | ||
|  | a8b01fedb1 | ||
|  | ab28e6af35 | ||
|  | 63d97f4c88 | ||
|  | 85c34b17aa | ||
|  | 85045267fe | ||
|  | c9bfb86960 | ||
|  | 3991e66a58 | ||
|  | 2da7626b53 | ||
|  | 98db4b1543 | ||
|  | bc067baf0d | ||
|  | 3624c63a46 | ||
|  | 08ba4ffd61 | ||
|  | d5379ab320 | ||
|  | c613b6741d | ||
|  | 4394036e34 | ||
|  | a7a007435c | ||
|  | 24e0fbd7b9 | ||
|  | 059162a90a | ||
|  | 250a9a4809 | ||
|  | 4b8348da8c | ||
|  | f7917cfa65 | ||
|  | 48e7aa6e77 | ||
|  | 10f54893ef | ||
|  | 93736c1567 | ||
|  | 260db053fe | ||
|  | 57b4396193 | ||
|  | a21cf0ad83 | ||
|  | 15f20cc18e | ||
|  | 700b7068a1 | ||
|  | 748091c768 | ||
|  | d0b2b4d0aa | ||
|  | 4184c5db85 | ||
|  | 7197f26494 | ||
|  | 46764c2d3f | ||
|  | a7955c0964 | ||
|  | 1bef42cdcb | ||
|  | 8d6bffa96c | ||
|  | 72b1c60f39 | ||
|  | 751e8eafe4 | ||
|  | 437612f8b8 | ||
|  | f614a2425f | ||
|  | 39a336ca6d | ||
|  | ab855cdd1c | ||
|  | 688325491f | ||
|  | 6d8427a024 | ||
|  | 80a6e6fe8d | ||
|  | 55d61b0dc7 | ||
|  | f13c482161 | ||
|  | 188564a343 | ||
|  | 773220f840 | ||
|  | 0c80fea821 | ||
|  | 4fb7b35153 | ||
|  | 37c55302e7 | ||
|  | bce43a0050 | ||
|  | 678deccfca | ||
|  | 81b08c0339 | ||
|  | efe173e4f7 | ||
|  | cca12b7170 | ||
|  | 49e494ab8d | ||
|  | 42083e1408 | ||
|  | 3cd7253f7b | ||
|  | 343b922ec1 | ||
|  | 6deb027bdf | ||
|  | ad56c9ea78 | ||
|  | dde918e9a0 | ||
|  | 8990b92dd6 | ||
|  | 75679835a7 | ||
|  | 2540660262 | ||
|  | 75d6970e6c | ||
|  | 98c1952956 | ||
|  | b3a868da0e | ||
|  | 20f18c3054 | ||
|  | a64bee9f83 | ||
|  | c07412a992 | ||
|  | f1ecb8c5cb | ||
|  | a4153144db | ||
|  | d6e0dc4bd2 | ||
|  | fed7e0c858 | ||
|  | 8ee34c49a9 | ||
|  | 194a5de564 | ||
|  | cc7710abd2 | ||
|  | 10f3ee32a4 | ||
|  | 8c985eb579 | ||
|  | 3a93c8a6e0 | ||
|  | 86cc98b245 | ||
|  | ddc0813d90 | ||
|  | a02e6c0441 | ||
|  | 52ac84335c | ||
|  | 97616eb8e4 | ||
|  | 9e3d1cd63d | ||
|  | f4e4eef48e | ||
|  | 16720d4fc7 | ||
|  | f884cc826f | ||
|  | 1059acf56f | ||
|  | c3be851c18 | ||
|  | 00051ae5bb | ||
|  | 9ad4a135d2 | ||
|  | f80faf0b48 | ||
|  | 8b7888b736 | ||
|  | a9ec51ac10 | ||
|  | 0c99680396 | ||
|  | 91afc37d2a | ||
|  | b79e3eaec6 | ||
|  | 94766cbe19 | ||
|  | d435341f9b | ||
|  | c42b340042 | ||
|  | 3a9791e794 | ||
|  | 0d57ed6c93 | ||
|  | 457ed57d70 | ||
|  | 67a2359014 | ||
|  | 136ef38277 | ||
|  | 42f6842844 | ||
|  | 8daf2df6e6 | ||
|  | 6a33c4685e | ||
|  | c1fb0d7fdf | ||
|  | 67e689158f | ||
|  | dbbf04bc7d | ||
|  | bad6761e13 | ||
|  | 0febb085c5 | ||
|  | 011cadc1ff | ||
|  | 6ffdc318e7 | ||
|  | 733bb28c1c | ||
|  | 3d1c2cb296 | ||
|  | c7371cc048 | ||
|  | 7fdde15a5d | ||
|  | 8651b7bc25 | ||
|  | e7ab9938ce | ||
|  | 9c6bb4245d | ||
|  | d4089a1794 | ||
|  | de7470d936 | ||
|  | b9eb2b3918 | ||
|  | 2b6a9911f5 | ||
|  | 005b7a55e8 | ||
|  | ac14dd2b29 | ||
|  | c354129b6f | ||
|  | c7e26cd448 | ||
|  | 822b848dd7 | ||
|  | 033340e304 | ||
|  | 9ae60d0abe | ||
|  | 2bf05193b4 | ||
|  | b865492137 | ||
|  | 4d23cf85b9 | ||
|  | 54f535b375 | ||
|  | 155a4a8f06 | ||
|  | 12cfa6b450 | ||
|  | 10bd255e9d | ||
|  | e664768890 | ||
|  | 2471e10346 | ||
|  | ba7de7204d | ||
|  | 005a2e12ba | ||
|  | 6dff24906e | ||
|  | 398b292636 | ||
|  | 545472a38f | ||
|  | 28f5cd0641 | ||
|  | 144561c53b | ||
|  | a737cfa004 | ||
|  | 21f6072186 | ||
|  | 94badedad4 | ||
|  | 8531f52456 | ||
|  | 092b184f45 | ||
|  | b2ff7bda02 | ||
|  | e0ff3484cf | ||
|  | 95e84aae49 | ||
|  | 338b7d2ec0 | ||
|  | 37ab789e84 | ||
|  | 957af23a64 | ||
|  | d4077ae970 | ||
|  | 17d4b467d4 | ||
|  | ac878d8fdb | ||
|  | ac04dbf7e4 | ||
|  | cfddea931d | ||
|  | a6672e0190 | ||
|  | 5347bf587f | ||
|  | 63ffdb3895 | ||
|  | e7b1374f23 | ||
|  | ceff5c9c2b | ||
|  | dddfe8ae50 | ||
|  | c0498944c3 | ||
|  | 5cc11912a7 | ||
|  | bf3795d2ac | ||
|  | bc48bc99c3 | ||
|  | 51bfd1ca5e | ||
|  | 9160cd4983 | ||
|  | c55a419178 | ||
|  | 63d79faa85 | ||
|  | 70e412e375 | ||
|  | a51919db0e | ||
|  | 60971be35a | ||
|  | cb99ebf78a | ||
|  | 6f02a3f40d | ||
|  | 0591f1d32a | ||
|  | 1402119c84 | ||
|  | a162281529 | ||
|  | 8c18a8fefc | ||
|  | 48f6452c3b | ||
|  | bd002caadd | ||
|  | d6090921a8 | ||
|  | 78a693e092 | ||
|  | 3f61d27656 | ||
|  | 30525d15f4 | ||
|  | f3ad64aa1c | ||
|  | c429409ed7 | ||
|  | 2bdaa58d71 | ||
|  | 75826fd559 | ||
|  | 0ce6f03ed5 | ||
|  | 5d73eebf6a | ||
|  | 13aa98f0f3 | ||
|  | d8c68b000b | ||
|  | a8d8f90d23 | ||
|  | ac1005b5a8 | ||
|  | a9b4027dc4 | ||
|  | 3504e875cc | ||
|  | 4a94f8b1ca | ||
|  | f8532b3f51 | ||
|  | b244f3e2c0 | ||
|  | f33ecfd2fc | ||
|  | f15751d800 | ||
|  | e5e439adb9 | ||
|  | 2d8f423cee | ||
|  | 5905fdb73b | ||
|  | 4ed9323804 | ||
|  | d77c6e13b0 | ||
|  | 4e10f2c6f2 | ||
|  | d3edb9721c | ||
|  | 1b35a6e3b5 | ||
|  | 900a8aee76 | ||
|  | de9f5d350f | ||
|  | e45f0b0eaf | ||
|  | 2e7b218f40 | ||
|  | 7fbfd9ccd9 | ||
|  | 1db5ff617f | ||
|  | ac5376a1ca | ||
|  | 600ffd93a6 | ||
|  | 22597674d2 | ||
|  | adf5acd5c4 | ||
|  | 055bcb52f8 | ||
|  | 6174267f69 | ||
|  | e8c8d3e722 | ||
|  | d20f713fad | ||
|  | b40861747b | ||
|  | b73df28454 | ||
|  | 5afc739397 | ||
|  | 9eecf3683b | ||
|  | 7570f3db51 | ||
|  | 04dd4ce6d1 | ||
|  | 977d55c61b | ||
|  | ebe731ea86 | ||
|  | b853f04972 | ||
|  | 49cdd85b1d | ||
|  | 47f8b5d6fc | ||
|  | 78ef98c27c | ||
|  | 411813d8d9 | ||
|  | 64f41259eb | ||
|  | fc3acec669 | ||
|  | b85db17e75 | ||
|  | a05530f821 | ||
|  | 173b36c54c | ||
|  | 55ca971186 | ||
|  | 284930eb58 | ||
|  | 902691e289 | ||
|  | 0afe55f2ff | ||
|  | 21910a7129 | ||
|  | 9c89d1e99b | ||
|  | 408f573188 | ||
|  | 574270d061 | ||
|  | 9af5e3ba8e | ||
|  | 89033e01e8 | ||
|  | 6f2ab23bd0 | ||
|  | 264b25c58d | ||
|  | 2116548eed | ||
|  | 57fca16d7b | ||
|  | a900255820 | ||
|  | bd7565ceda | ||
|  | 880cd6e440 | ||
|  | b830c28d83 | ||
|  | 4a316571ff | ||
|  | 5e1a2bd972 | ||
|  | fc33eacd2c | ||
|  | 748a8a8ae3 | ||
|  | 7516959c9f | ||
|  | 311b925919 | ||
|  | 5d88a56452 | ||
|  | ebddf82819 | ||
|  | d0448c2bbd | ||
|  | d8d1c98a40 | ||
|  | f49b231e91 | ||
|  | 7a43e19116 | ||
|  | e4b664bafa | ||
|  | 98d06d6d25 | ||
|  | 9f0dfb1e1a | ||
|  | 37cb18e1da | ||
|  | 3e5d427d4e | ||
|  | 8bce407aec | ||
|  | 7a5376621f | ||
|  | 29f6adc2ed | ||
|  | 5446de6308 | ||
|  | 5e84e9689f | ||
|  | 9540db2aad | ||
|  | 7dd28d6fab | ||
|  | 1bfaefb240 | ||
|  | c48cf3ab3b | ||
|  | c64dcec772 | ||
|  | 45dc2be083 | ||
|  | 31f6fc065f | ||
|  | 8dea48ebef | ||
|  | 97150cf55f | ||
|  | b0484eafe3 | ||
|  | 1b799e98e8 | ||
|  | e6840c60c7 | ||
|  | ba59879e7f | ||
|  | f3deabccf4 | ||
|  | 393f9e5a29 | ||
|  | c10807c4e3 | ||
|  | 4e8ec2359d | ||
|  | 79cf6969f9 | ||
|  | 3167bfde1a | ||
|  | cbd72b6e3d | ||
|  | fcca63a2dc | ||
|  | 90e28220fa | ||
|  | 35c324f67c | ||
|  | 301e491952 | ||
|  | 03e18ff7c6 | ||
|  | d23487bda9 | ||
|  | 3238925aa4 | ||
|  | abd308455a | ||
|  | a44f77a838 | ||
|  | 5b6c91bb3f | ||
|  | 6701ec68bd | ||
|  | 7b259c3f4c | ||
|  | ecbdf5f12b | ||
|  | 3e70ab015b | ||
|  | dab7f1a739 | ||
|  | f6438725eb | ||
|  | a03b1d4d6c | ||
|  | 14345ab24e | ||
|  | 60e2dfdbda | ||
|  | 83ffbd05be | ||
|  | 88be6b5e0d | ||
|  | aa47f85f48 | ||
|  | fec9c8f1c6 | ||
|  | 93f7e33f6a | ||
|  | fd4b4f8f82 | ||
|  | 0003666050 | ||
|  | b947609ff1 | ||
|  | 38afd108f8 | ||
|  | 65f709d50a | ||
|  | f5dbf212e3 | ||
|  | f6e1bf78c8 | ||
|  | 950f279508 | ||
|  | e46807c28b | ||
|  | e2559798df | ||
|  | ccc18620bf | ||
|  | febe00db4f | ||
|  | 6f36048a8e | ||
|  | 2457ecb7e7 | ||
|  | 30622631ff | ||
|  | 4bab402e95 | ||
|  | 91de15d50e | ||
|  | d40a670d0b | ||
|  | 4ade674ada | ||
|  | 401ef2edef | ||
|  | 9201273939 | ||
|  | 5b07669bd0 | ||
|  | 3c7155afb0 | ||
|  | 2378747570 | ||
|  | a75981da14 | ||
|  | d5f964b58e | ||
|  | 2df569b727 | ||
|  | 65aecc0024 | ||
|  | ce51edcf80 | ||
|  | fe38adfa08 | ||
|  | 92ee7c2194 | ||
|  | 074082ec94 | ||
|  | 6b9f0af828 | ||
|  | bfabf765e3 | ||
|  | e74f736eff | ||
|  | 45483557a5 | ||
|  | a22d2dc7ee | ||
|  | 9ec2b5a2d5 | ||
|  | af40989f5f | ||
|  | d57619b5db | ||
|  | c692115cdc | ||
|  | dfe58e4975 | ||
|  | 4e59be9afc | ||
|  | 190bf2599c | ||
|  | f1a22e9bd7 | ||
|  | 7b46cef83d | ||
|  | 8da7d39998 | ||
|  | 91702bbae2 | ||
|  | 90674d9038 | ||
|  | c0a14a4a41 | ||
|  | 8d6132736b | ||
|  | 8687b9533c | ||
|  | 07942a7aec | ||
|  | 3d1b7c10e8 | ||
|  | cf46d2c704 | ||
|  | 4434856add | ||
|  | 52d511df21 | ||
|  | 50f58f9121 | ||
|  | 7a20c7b946 | ||
|  | ce0e60ed84 | ||
|  | 4ad0a6c7b7 | ||
|  | b8d8651e43 | ||
|  | cbb5a425df | ||
|  | 45b68832aa | ||
|  | 6dfcaaf889 | ||
|  | 8131c5d6bc | ||
|  | df5779b6d1 | ||
|  | 4a5a0c8c78 | ||
|  | b3a17624c8 | ||
|  | e63841a604 | ||
|  | 7ec95e8c29 | ||
|  | b217495465 | ||
|  | db6ddc0c4b | ||
|  | 174b360593 | ||
|  | 481a752e70 | ||
|  | 38acdfd632 | ||
|  | 561e525778 | ||
|  | 69eb820d0d | ||
|  | 447f16fc4f | ||
|  | 1769609245 | ||
|  | e1dcdac1bb | ||
|  | 9d45d19c80 | ||
|  | 9858bb0ce4 | ||
|  | a3527a77a6 | ||
|  | 33a45fa739 | ||
|  | e70882a657 | ||
|  | e456332da7 | ||
|  | 4ed84c5dc5 | ||
|  | 2fe3f40be9 | ||
|  | 44bfdb718f | ||
|  | 3524efc41c | ||
|  | 01210c291c | ||
|  | 192d4b4dbf | ||
|  | 68246fc335 | ||
|  | 7ef86636aa | ||
|  | a5859c6cee | ||
|  | 3463903d02 | ||
|  | 4b0f1a8431 | ||
|  | 603e8aa671 | ||
|  | 6eb980abe2 | ||
|  | 46b168e10f | ||
|  | 508e6ccf89 | ||
|  | a173c5fc38 | ||
|  | f5237f7971 | ||
|  | 6f7a5d00e6 | ||
|  | 4061723863 | ||
|  | ab1b52ba87 | ||
|  | 16e94ecb40 | ||
|  | 6bb2c5877c | ||
|  | a14450f367 | ||
|  | 85df313a7a | ||
|  | 66ed6b9b88 | ||
|  | 9304d09da6 | ||
|  | e61dbbb6cf | ||
|  | 1690f59857 | ||
|  | c916dd6ebb | ||
|  | 8a683b8541 | ||
|  | 4883b8be10 | ||
|  | 51760f9bdd | ||
|  | 6a619a4084 | ||
|  | feeafa193a | ||
|  | 8d8528996a | ||
|  | 965d609829 | ||
|  | a52714bcf3 | ||
|  | bbfd7647a8 | ||
|  | 0aba5a3be4 | ||
|  | 61bf5864a8 | ||
|  | 56847a53f4 | ||
|  | 8324ab3af7 | ||
|  | d496a7585c | ||
|  | 8d7f2a993a | ||
|  | ed786f3e8f | ||
|  | 539c243733 | ||
|  | 40e0c829b3 | ||
|  | e34b1f2f8b | ||
|  | f6b6619c08 | ||
|  | e480e08aa4 | ||
|  | 652cf7a976 | ||
|  | 7a8ab6fbe8 | ||
|  | 9deec8ec35 | ||
|  | 3f1586045c | ||
|  | ada5563b1f | ||
|  | 6b41a570a5 | ||
|  | cebf6bfb34 | ||
|  | 47a1b48ad8 | ||
|  | ef82a9d2a6 | ||
|  | ba6351841d | ||
|  | cdc786a1e3 | ||
|  | 3ea137a78f | ||
|  | b525ccc825 | ||
|  | 77acbdd3ea | ||
|  | c13190ceab | ||
|  | 78d4fc59a5 | ||
|  | f9e86c057d | ||
|  | 1d8e133a30 | ||
|  | 99fbf384fd | ||
|  | cb4fcf4de7 | ||
|  | 800dd5fb4f | ||
|  | 3dc4eb4421 | ||
|  | 75664b6651 | ||
|  | 327b4ba554 | ||
|  | 50b725c687 | ||
|  | 72419816a8 | ||
|  | 9a4e6da02f | ||
|  | 823b6c4d7d | ||
|  | 675964dc5c | ||
|  | 6432f85eb0 | ||
|  | 66eef758c6 | ||
|  | c64f0ba34b | ||
|  | 6deffb6b28 | ||
|  | 5802713801 | ||
|  | 11df29fa8e | ||
|  | f4a41e80b8 | ||
|  | 5c655b55d3 | ||
|  | 63c15b6f4f | ||
|  | 4f2bc29744 | ||
|  | 2cac431c41 | ||
|  | 80b7a7842c | ||
|  | 8c7cec9822 | ||
|  | 971a4087d2 | ||
|  | 660e670d38 | ||
|  | 052824f4e3 | ||
|  | 1d5ef4d0ca | ||
|  | a6440b94f4 | ||
|  | 01685b7622 | ||
|  | 397fefa8d7 | ||
|  | 82a01ef020 | ||
|  | a224ce347e | ||
|  | 81ba2a8411 | ||
|  | a6e8b28da5 | ||
|  | e90dbf66f3 | ||
|  | 0be2219beb | ||
|  | 09b4d5e0e4 | ||
|  | 60f1bcf51f | ||
|  | 431ac3b401 | ||
|  | 50781bd77a | ||
|  | c3361bb86e | ||
|  | fd5ad69c26 | ||
|  | b1f97a27f3 | ||
|  | febddcb356 | ||
|  | 74d5af34eb | ||
|  | 365890291f | ||
|  | 0368de701f | ||
|  | f5e7b7e7e0 | ||
|  | 038c21324e | ||
|  | 5d008ee83e | ||
|  | 8d122006ba | ||
|  | 0e45497acb | ||
|  | d0f6933980 | ||
|  | 14793f30b5 | ||
|  | 86319291e3 | ||
|  | afa2dd7374 | ||
|  | fe7a62ba9a | ||
|  | b88a56e6b7 | ||
|  | 297cbd996d | ||
|  | f55234b4a0 | ||
|  | f76c88c549 | ||
|  | 863966787f | ||
|  | 7ed31d2fba | ||
|  | 6273339f7c | ||
|  | 29f2ae605e | ||
|  | 6450844d7f | ||
|  | 9834395a48 | ||
|  | f429032eef | ||
|  | 5088b7f23c | ||
|  | 1312e4caf2 | ||
|  | eb4517d737 | ||
|  | d80701c277 | ||
|  | bf3ab1127d | ||
|  | dcb12b6ad6 | ||
|  | f87420a776 | ||
|  | 6cedf5362b | ||
|  | aa833ef074 | ||
|  | 5f1c9cfee5 | ||
|  | 62b93cf2eb | ||
|  | b1c5f6e8f1 | ||
|  | 3bc9b309f6 | ||
|  | 6924a2b681 | ||
|  | d93d4c34f5 | ||
|  | 557267477e | ||
|  | b9f7979e91 | ||
|  | 8c803ab232 | ||
|  | 28246abec3 | ||
|  | 422e5e4dd7 | ||
|  | 2aea820d89 | ||
|  | 1c3b2b7141 | ||
|  | e7d5ceb9c5 | ||
|  | e6511c9c05 | ||
|  | a1959df911 | ||
|  | 775d1efd46 | ||
|  | 68af0e9eb7 | ||
|  | a18d0f6229 | ||
|  | 031807df9c | ||
|  | 72710be04b | ||
|  | ac135d55d3 | ||
|  | 1d55e94659 | ||
|  | 86284f1c7e | ||
|  | 61a4ae7fc4 | ||
|  | 55fab3d98f | ||
|  | de11b62e30 | ||
|  | 8e14e65b60 | ||
|  | 2d1d14d2e4 | ||
|  | f44644ad90 | ||
|  | ac1640140c | ||
|  | 1402a0aa22 | ||
|  | f225f9e7c8 | ||
|  | 14fdb71a71 | ||
|  | 9c4c4fb19a | ||
|  | 849e203812 | ||
|  | 80ed724f3a | ||
|  | 5c056b57b7 | ||
|  | 4779ebfd20 | ||
|  | 60ef45722c | ||
|  | 61bfbb86e1 | ||
|  | bc8cc35d18 | ||
|  | 4a524a5f27 | ||
|  | ee1e50a722 | ||
|  | ca0567ad09 | ||
|  | 9fd46c7900 | ||
|  | 4a40edbbb7 | ||
|  | 2997ba208f | ||
|  | cc2000e776 | ||
|  | 5785ec0713 | ||
|  | 2eab0e30b7 | ||
|  | 2c846ff145 | ||
|  | ca0dfc6610 | ||
|  | 0fd44ee2c1 | ||
|  | 7271fc0bab | ||
|  | 6c039bbeb1 | ||
|  | 38e6d26145 | ||
|  | b0f210dea9 | ||
|  | f7469080f9 | ||
|  | fb5ea5d99f | ||
|  | be2f4cbdca | ||
|  | 68f2dc11b4 | ||
|  | d6c670dfcb | ||
|  | 0736c41357 | ||
|  | 898bd75a18 | ||
|  | 260313a6ae | ||
|  | 6a99bfa68e | ||
|  | f60adbdd72 | ||
|  | 1be310cef4 | ||
|  | ff4f86f1d6 | ||
|  | b8241c0f80 | ||
|  | f4a4fefe42 | ||
|  | 00a4fa5f7c | ||
|  | 4475fefd07 | ||
|  | cd08a9c121 | ||
|  | b0c4eb8333 | ||
|  | 368dbda8f0 | ||
|  | bc4149683e | ||
|  | 6174d9ebb7 | ||
|  | fe7a8be98c | ||
|  | 925d5aa09b | ||
|  | a26237da66 | ||
|  | 791eae24c0 | ||
|  | e10561b4a5 | ||
|  | e718123478 | ||
|  | e4fc8a8414 | ||
|  | 907972c466 | ||
|  | 49f5fe635f | ||
|  | 77290c1efa | ||
|  | 4ac43a9fd2 | ||
|  | cc77d1dd49 | ||
|  | 51161784e8 | ||
|  | cb7660fbe7 | ||
|  | 82e51b8787 | ||
|  | fffa96bba7 | ||
|  | e6cb2e0fcd | ||
|  | 38abeaed9c | ||
|  | 90c9e3496a | ||
|  | 9fc8a6e214 | ||
|  | 9df87a199a | ||
|  | 7e9ba50502 | ||
|  | 41559c39b9 | ||
|  | 6a6b424c86 | ||
|  | 3a5c6ed00f | ||
|  | db54588d05 | ||
|  | 52fde551e4 | ||
|  | 40cf805e5e | ||
|  | 09d6496135 | ||
|  | c4dadf4bfd | ||
|  | 35ba3e6f7c | ||
|  | 3ac182ee91 | ||
|  | 00e7c70b4d | ||
|  | 0aa9ed3839 | ||
|  | d652deea23 | ||
|  | 878db3b849 | ||
|  | ec2e726be0 | ||
|  | 287830d6e0 | ||
|  | c7a7ae7e18 | ||
|  | 1c7ba6a315 | ||
|  | 0a6f107243 | ||
|  | a93f95c55e | ||
|  | 6833e243b7 | ||
|  | 81dc893d1d | ||
|  | f8e565bc06 | ||
|  | ba15fb6a06 | ||
|  | 1e6b83719a | ||
|  | 9fcb2dda73 | ||
|  | 9a5ec8d030 | ||
|  | ac872e5181 | ||
|  | 70863cca08 | ||
|  | 5a1dce15be | ||
|  | d291256158 | ||
|  | 8c706ac639 | ||
|  | f697814849 | ||
|  | ca5c9e77c0 | ||
|  | a32b201afe | ||
|  | 0ecdf1e213 | ||
|  | 057891b342 | ||
|  | 407f63ef20 | ||
|  | f938c989e3 | ||
|  | c8500cab10 | ||
|  | c28c3db63f | ||
|  | a09ee90739 | ||
|  | 7d5a23969d | ||
|  | 56c3c29feb | ||
|  | c75212bef0 | ||
|  | 6d0dedc62c | ||
|  | cf12daea2f | ||
|  | 6f88e9bdbd | ||
|  | d8cb56caa3 | ||
|  | 044415e23d | ||
|  | 6b866d6053 | ||
|  | 74ce893f52 | ||
|  | cc1fac9bbe | ||
|  | 94e01be9ed | ||
|  | 91a9014a50 | ||
|  | e215992859 | ||
|  | e6f5cac878 | ||
|  | 29971f36cf | ||
|  | 3e4493b389 | ||
|  | 749c6ecc30 | ||
|  | e6e7bae445 | ||
|  | a1d8943552 | ||
|  | 07e56b3cc7 | ||
|  | b16f5f55fb | ||
|  | d92fd43791 | ||
|  | e706fa76ac | ||
|  | 11328bd93d | ||
|  | bc686fcbf3 | ||
|  | 80291caf7c | ||
|  | cd5e9a5115 | ||
|  | ad161a973e | ||
|  | 103e1aa250 | ||
|  | 641d86cb98 | ||
|  | 813b2ca1fb | ||
|  | ec96c3bb77 | ||
|  | 65120e84e2 | ||
|  | 82b51db17e | ||
|  | 374ee2db32 | ||
|  | 3557cd93fc | ||
|  | 0629a7d143 | ||
|  | a27112cbef | ||
|  | d039a1adda | ||
|  | bb4d449e92 | ||
|  | 241534a63d | ||
|  | 1932aff35c | ||
|  | 4f27991959 | ||
|  | 8ce4f9c784 | ||
|  | 7351bf0b14 | ||
|  | 48ab151ec2 | ||
|  | f6080367fe | ||
|  | 7f78d7da9d | ||
|  | 6734f2f1bc | ||
|  | 0fb7617a78 | ||
|  | 4219af1430 | ||
|  | c109d1f545 | ||
|  | 50fab9feb3 | ||
|  | 3dad6ee55e | ||
|  | 5d70df771b | ||
|  | ab5df342e1 | ||
|  | 6a9669a409 | ||
|  | e68942ee78 | ||
|  | 4159e45aff | ||
|  | 92497d7df4 | ||
|  | 44a430802e | ||
|  | 070eff6f3a | ||
|  | 681ed822ec | ||
|  | 0a1ae2c311 | ||
|  | c5f8b9c2d2 | ||
|  | 6b03cfd40d | ||
|  | 7f36574a57 | ||
|  | b637ca105a | ||
|  | 9ffddb47b8 | ||
|  | 7bcaac4e10 | ||
|  | 7f585a15f5 | ||
|  | b38ef579fb | ||
|  | 8427db36e9 | ||
|  | 2d1c88c20d | ||
|  | 029ea52979 | ||
|  | a2b6255f40 | ||
|  | d4592c0a60 | ||
|  | fb6d511811 | ||
|  | c1b4fe999c | ||
|  | 1354f794a1 | ||
|  | 8f6a96740e | ||
|  | 1d6699585e | ||
|  | e96f36751a | ||
|  | a75c298de0 | ||
|  | d603d8da47 | ||
|  | 1040826b8b | ||
|  | a551d0a6dd | ||
|  | 21c37ba62f | ||
|  | 2c660e62d3 | ||
|  | 6b667f8eca | ||
|  | d52c1310b2 | ||
|  | 6338b5bd3c | ||
|  | 2713cca6ac | ||
|  | 57c104119c | ||
|  | cd5c73550b | ||
|  | 68b060cb6a | ||
|  | 7ad1a18a4a | ||
|  | 6e27324a34 | ||
|  | 8eb4b6f917 | ||
|  | 0ca64e394b | ||
|  | c4c47d9665 | ||
|  | f9b222c127 | ||
|  | 28f077b16f | ||
|  | 3563fabe88 | ||
|  | 1ca176e992 | ||
|  | 52e2c60361 | ||
|  | ae154f43df | ||
|  | 610caef73f | ||
|  | 29a9e1fc4e | ||
|  | ae937cfcce | ||
|  | 6c7dca7d07 | ||
|  | aa9efd79db | ||
|  | f0f4f873a9 | ||
|  | 0577ab96b8 | ||
|  | 15a34dca79 | ||
|  | 2b38163274 | ||
|  | 572ad4615a | ||
|  | b013cf2e14 | ||
|  | 3e56990db7 | ||
|  | 2de7a49000 | ||
|  | 2a63592994 | ||
|  | 2cef8d3a3e | ||
|  | 1417ee2ccb | ||
|  | 04e4fe251a | ||
|  | 61255309d2 | ||
|  | 27d329ff25 | ||
|  | cb19623a3a | ||
|  | 44ca6c4b71 | ||
|  | bfabdf6010 | ||
|  | cbcf8e8477 | ||
|  | b0b3f9e339 | ||
|  | a5c7ddcff5 | ||
|  | 6cef847a27 | ||
|  | 68dfd1bb22 | ||
|  | 67d33ec10c | ||
|  | 05ba049f59 | ||
|  | 867ff3c5ec | ||
|  | c2454d1428 | ||
|  | 7e0e195c88 | ||
|  | e8a1950a74 | ||
|  | 3c973ba9f6 | ||
|  | 2ef867f398 | ||
|  | 90f2813d0e | ||
|  | dd9c4b6e5d | ||
|  | a6cdc38d53 | ||
|  | 167c4f8519 | ||
|  | 799db64541 | ||
|  | 69b436babe | ||
|  | c83f2a070c | ||
|  | ba9e31d3c1 | ||
|  | e915d72202 | ||
|  | 74e7fa13d6 | ||
|  | b7c119b2aa | ||
|  | 3c2af2067f | ||
|  | 7c29cadb17 | ||
|  | 40b202f8c0 | ||
|  | 392c00a698 | ||
|  | fb4fbc0e13 | ||
|  | 730226081c | ||
|  | 1fdd7466b2 | ||
|  | 00b7620af1 | ||
|  | a39d79352d | ||
|  | 3b5c8a847b | ||
|  | 4b84081795 | ||
|  | 27ba218ed7 | ||
|  | d907b40378 | ||
|  | 0248add542 | ||
|  | c12f0d04bb | ||
|  | 22de88035c | ||
|  | 80e52464a6 | ||
|  | 3760eb5baf | ||
|  | c905b20ce6 | ||
|  | 301cb296ec | ||
|  | 1bbd7bf870 | ||
|  | da15df2c2d | ||
|  | fe43f84abd | ||
|  | e40a4addc9 | ||
|  | ad0fe2f079 | ||
|  | 9b4f5dfdda | ||
|  | 71a61a4dc3 | ||
|  | 1053aed74d | ||
|  | 7fa5b474eb | ||
|  | 3d25758b1d | ||
|  | f1ddbc9387 | ||
|  | dafb282432 | ||
|  | 0918f95421 | ||
|  | be67c25b0a | ||
|  | f53157414f | ||
|  | 6b838c034a | ||
|  | 86cb89feef | ||
|  | 1ba26ea5e8 | ||
|  | 8b79868c36 | ||
|  | 8bb7b5b543 | ||
|  | 809d301d58 | ||
|  | c00c477307 | ||
|  | 6216714be1 | ||
|  | cc90c806b0 | ||
|  | 04bbd60c11 | ||
|  | ad9bb3ea59 | ||
|  | 1ddac0bc7b | ||
|  | a7468eb858 | ||
|  | 213d82a2c2 | ||
|  | 7553411fb2 | ||
|  | c52c94214f | ||
|  | 151cf03f5b | ||
|  | 141c51eaf5 | ||
|  | ab7d083aa5 | ||
|  | 12881e60e3 | ||
|  | 1f65de60b4 | ||
|  | 635373febb | ||
|  | e7c7af8ef4 | ||
|  | cd2bbd850d | ||
|  | 83a36bc4b6 | ||
|  | 1c95f685bb | ||
|  | e45d320fc5 | ||
|  | dd2e54d60d | ||
|  | 64eac5f37f | ||
|  | 78ed6e0339 | ||
|  | 79aff1c57a | ||
|  | a21bfc5f2c | ||
|  | da3dc7affc | ||
|  | 254d88ffa0 | ||
|  | 4ded591624 | ||
|  | 2af99a1fe2 | ||
|  | 135fbf67ad | ||
|  | 6405c70d07 | ||
|  | 1255570b95 | ||
|  | a263e7dfce | ||
|  | cbe0ffb3ce | ||
|  | 67b4ba2a57 | ||
|  | ab71f54128 | ||
|  | cabce8cb67 | ||
|  | 44cc5e45cc | ||
|  | 1ae11ed8ae | ||
|  | 075e3a41c8 | ||
|  | 756787c61f | ||
|  | b67677f476 | ||
|  | b4cf69b021 | ||
|  | d149b6cdec | ||
|  | f29263c477 | ||
|  | 61ef6edaa5 | ||
|  | fae58ca695 | ||
|  | 1c68057999 | ||
|  | fb637d9234 | ||
|  | 0f7ced3625 | ||
|  | ea4d7f153a | ||
|  | f2d1d95355 | ||
|  | ddf85112d7 | ||
|  | 05ce002435 | ||
|  | 48ec78d3aa | ||
|  | e35788e2c8 | ||
|  | 8bce73dc67 | ||
|  | c13f538400 | ||
|  | 09d3d15db0 | ||
|  | 633e6c38c8 | ||
|  | a4d6bc3190 | ||
|  | 0b9a9d92af | ||
|  | a82e36c1d4 | ||
|  | 61ba012b1f | ||
|  | aeb9ffbf5a | ||
|  | 6dde6d7cb7 | ||
|  | 1d70724bcf | ||
|  | 77c87cd009 | ||
|  | 4dd59a370d | ||
|  | 7a6e647386 | ||
|  | f5459164d2 | ||
|  | 2743eee044 | ||
|  | bb3c345891 | ||
|  | 0f3201d72a | ||
|  | 8131a87046 | ||
|  | 64a85dfb9c | ||
|  | 68d7eb5712 | ||
|  | f7375fca98 | ||
|  | e079790f7f | ||
|  | 2604d40751 | ||
|  | 89174cd63f | ||
|  | 8cb1d2a0af | ||
|  | c1ec849554 | ||
|  | def575b995 | ||
|  | d0d6a6a500 | ||
|  | 445177bf42 | ||
|  | a4c3a0d39f | ||
|  | 7c08f6d30a | ||
|  | 0337b5a401 | ||
|  | 4d81ab679d | ||
|  | 72752bcb68 | ||
|  | e47e9c5b34 | ||
|  | 402ca27fbf | ||
|  | 8e3df2b5ae | ||
|  | bf9ee82d9f | ||
|  | ae7bce7674 | ||
|  | 7d09a94428 | ||
|  | b7079e9616 | ||
|  | 85427a84df | ||
|  | a59f18927d | ||
|  | a607a61bde | ||
|  | 421a7394df | ||
|  | acb3c0d0aa | ||
|  | 11231795cd | ||
|  | 6b6b368bf6 | ||
|  | 60f026e6fd | ||
|  | 36668f9409 | ||
|  | 480d28ea26 | ||
|  | 88c99396a2 | ||
|  | ca5e52920d | ||
|  | 30dfb7511d | ||
|  | 1c87e5f698 | ||
|  | badcb35525 | ||
|  | c325d638c9 | ||
|  | baab0f27b5 | ||
|  | 9e7657ac5d | ||
|  | 237bac920a | ||
|  | 89202b7bdf | ||
|  | 20ac6936ac | ||
|  | 976d159e52 | ||
|  | e7f19e350e | ||
|  | 41768617a9 | ||
|  | 455c78dfb1 | ||
|  | ec41e314b0 | ||
|  | 8959b0993e | ||
|  | 7c96fa45f8 | ||
|  | ad9a7d72ce | ||
|  | 558286467b | ||
|  | f0f94f199e | ||
|  | 6e74d1519b | ||
|  | a8d44ccc48 | ||
|  | d744468479 | ||
|  | c01810f0d7 | ||
|  | 622509c508 | ||
|  | bb992f8a49 | ||
|  | c11d805469 | ||
|  | 3b8a343711 | ||
|  | 83e3bb899e | ||
|  | bb4558e0be | ||
|  | 3eeb9ddfa6 | ||
|  | cb5d8d75bf | ||
|  | 267078ed6c | ||
|  | 80e5127a46 | ||
|  | 19e17ba128 | ||
|  | 04e00e0c28 | ||
|  | 8bebffb147 | ||
|  | 5c40c466f6 | ||
|  | f9f232f5d9 | ||
|  | 7b7b97dd7b | ||
|  | b6cdc00a31 | ||
|  | 644fe1de8f | ||
|  | ce88086e08 | ||
|  | 1d9408a8e0 | ||
|  | c743f010e3 | ||
|  | 2f2582a0da | ||
|  | c1cc92a46f | ||
|  | 9c3d10d5be | ||
|  | 3afe405bbe | ||
|  | 7eff195d61 | ||
|  | e79c7632e6 | ||
|  | aa27346f93 | ||
|  | db6de490b2 | ||
|  | 014d71d5ae | ||
|  | 783bc873db | ||
|  | 478bf14289 | ||
|  | d89934954d | ||
|  | 6baa5ef311 | ||
|  | db20ad1c5d | ||
|  | 56eb444ea4 | ||
|  | 6a2634d362 | ||
|  | a2192e62df | ||
|  | 66745c5260 | ||
|  | c10c4cec1d | ||
|  | f2d9dfb56b | ||
|  | 228387f995 | ||
|  | 336519a690 | ||
|  | 10dc3ea81c | ||
|  | dd7e03c7d7 | ||
|  | fadd292ecf | ||
|  | 7c8a7a2420 | ||
|  | 99b744ba52 | ||
|  | c320c8742e | ||
|  | 3a086cae1a | ||
|  | b10cba600d | ||
|  | 3b0fa1aa87 | ||
|  | d859399841 | ||
|  | 8169155a65 | ||
|  | 952367d532 | ||
|  | 67666446bf | ||
|  | 3d1c8dfe06 | ||
|  | 283175df98 | ||
|  | aeb368a1d9 | ||
|  | e51deb93ee | ||
|  | a351757493 | ||
|  | 0025c6640b | ||
|  | 25a8554be1 | ||
|  | cd76c129da | ||
|  | 7340338626 | ||
|  | 9d3c287918 | ||
|  | c2b5fe3d84 | ||
|  | 5ef84d61fa | ||
|  | 58321a36dc | ||
|  | ca4905c343 | ||
|  | b6d793aec4 | ||
|  | 83fb9df63d | ||
|  | 083319786f | ||
|  | 719699eb30 | ||
|  | 889ec81ff3 | ||
|  | 2f66f26048 | ||
|  | 713f285f37 | ||
|  | ab64ea7377 | ||
|  | b86210332f | ||
|  | af52598d32 | ||
|  | cbe639866e | ||
|  | fcd57d2743 | ||
|  | c0924d8067 | ||
|  | a1860b076d | ||
|  | 32ab4dcac7 | ||
|  | 938a99f435 | ||
|  | f97ec000e1 | ||
|  | 1b5c5e7a3b | ||
|  | c804e2230d | ||
|  | 3f610d4865 | ||
|  | 8404e0e73f | ||
|  | b2c666bb1f | ||
|  | f3761af567 | ||
|  | b9d8d2d5e3 | ||
|  | b60a74c8bc | ||
|  | 0113ecee96 | ||
|  | eb20e86947 | ||
|  | 15e15f994a | ||
|  | d44ff6a915 | ||
|  | 68605ca261 | ||
|  | 5d4dd406f2 | ||
|  | 9dd6ba7825 | ||
|  | 45e9fbe8f9 | ||
|  | 53713188fe | ||
|  | c4c37cafa0 | ||
|  | 5b7774f9d0 | ||
|  | ca7d8a8940 | ||
|  | 762bbe9bcd | ||
|  | 03fb73d1d2 | ||
|  | d10e2652ae | ||
|  | 9a5d7b7635 | ||
|  | 1fb3da6b53 | ||
|  | 970bef717e | ||
|  | 2a85f79040 | ||
|  | 651a468b44 | ||
|  | 5e8ad0aef4 | ||
|  | 44d909c0c7 | ||
|  | 44b01f2069 | ||
|  | d7d51791a6 | ||
|  | 9e3fe7092b | ||
|  | 083d42c8f7 | ||
|  | 6121a6d2bf | ||
|  | 09af23f950 | ||
|  | 52e094addc | ||
|  | 6a6739ebbe | ||
|  | 6a5965d73b | ||
|  | 19cda0eb03 | ||
|  | cc67c0df51 | ||
|  | 76b91cbcda | ||
|  | 13f0d27f7c | ||
|  | 5ccf41c566 | ||
|  | 797fd38e00 | ||
|  | 9aacceb0e4 | ||
|  | 68fb1bf376 | ||
|  | a6ccfaf9ca | ||
|  | c9e1b7c5dc | ||
|  | 6e2e658162 | ||
|  | 149c07dfd2 | ||
|  | 9f42ceb5a3 | ||
|  | 386b5bb122 | ||
|  | ca67e7d36f | ||
|  | d49af66add | ||
|  | 853b5aa38b | ||
|  | 4e30bc3e16 | ||
|  | 95b656f360 | ||
|  | b0a7db81cb | ||
|  | e6c91493f2 | ||
|  | 3771df728c | ||
|  | f6dbc23995 | ||
|  | f36a43a83f | ||
|  | f4c2fabbf8 | ||
|  | 3d6cf50364 | ||
|  | 0a616ad3b8 | ||
|  | 57a4429123 | ||
|  | 3b542bf356 | ||
|  | be472b61e7 | ||
|  | 8199e87943 | ||
|  | 35201af4b1 | ||
|  | 1a89905ab9 | ||
|  | b2b3c24fd2 | ||
|  | bc5835229d | ||
|  | 6182d2c7f6 | ||
|  | af90a777c6 | ||
|  | fdcb42d8e1 | ||
|  | 4e6322beb5 | ||
|  | 6e122691d1 | ||
|  | ea5684e054 | ||
|  | 50bbd793c6 | ||
|  | a1a777e715 | ||
|  | d234ee12de | ||
|  | 50e0ddcf79 | ||
|  | da304de3fc | ||
|  | ff3c77f7c4 | ||
|  | 0bc775cdb8 | ||
|  | 2273798df9 | ||
|  | 7d0bec9b2a | ||
|  | 8382161f75 | ||
|  | bc5f8e52de | ||
|  | 09c0fc94fc | ||
|  | e5d65b585a | ||
|  | d9933237a0 | ||
|  | a016747c36 | ||
|  | 1c06380ef5 | ||
|  | 47fef1f8ff | ||
|  | 3cb955c136 | ||
|  | 47673ba4bb | ||
|  | 4527e9ce00 | ||
|  | 7759e67a5a | ||
|  | 3865a081a0 | ||
|  | 4d75689790 | ||
|  | 6df8746871 | ||
|  | c68e183953 | ||
|  | f42119c928 | ||
|  | 30be039570 | ||
|  | d00ee5df0d | ||
|  | 4f381ca1d9 | ||
|  | bcc1ad2086 | ||
|  | 343cd05363 | ||
|  | d9f09b5e1e | ||
|  | 9337d207a1 | ||
|  | c17d6c47c3 | ||
|  | a728247d6c | ||
|  | 36d615318d | ||
|  | 1588f4ac39 | ||
|  | 0e82be1bda | ||
|  | d85ce6ac75 | ||
|  | 0d3d9dad84 | ||
|  | b8c8258404 | ||
|  | 3ee3fc2fb3 | ||
|  | bb4d15005a | ||
|  | 477c3dc4f6 | ||
|  | 81f689e693 | ||
|  | e80fa6e311 | ||
|  | c94168981c | ||
|  | 749ec0cefe | ||
|  | bd488020df | ||
|  | ab398751e1 | ||
|  | 74d5f2f0b9 | ||
|  | 10f6647ab3 | ||
|  | 406b7c33f5 | ||
|  | 13520dbd94 | ||
|  | d136df7679 | ||
|  | 8c96a31152 | ||
|  | d4bd4ec441 | ||
|  | e4aed98a3d | ||
|  | 4a2a22a43b | ||
|  | 47584b18e9 | ||
|  | 6dd656bdfc | ||
|  | 260640feed | ||
|  | 36e7cb16aa | ||
|  | 0390a5ecbf | ||
|  | 82092ab50a | ||
|  | c3e6be7956 | ||
|  | 1ce6579c3a | ||
|  | b5d98a2803 | ||
|  | c7a5b8c776 | ||
|  | 90ead59d34 | ||
|  | faa980ffc3 | ||
|  | afc5c2616a | ||
|  | 9a3b630b19 | ||
|  | b3473ff89f | ||
|  | 987971bd59 | ||
|  | 71a2f2d721 | ||
|  | 6e74896620 | ||
|  | 30c6fe08ec | ||
|  | 7c864b81e0 | ||
|  | 4f006fdc5c | ||
|  | 9f7f61085c | ||
|  | 2414b47a30 | ||
|  | 238eef6bae | ||
|  | b92b745ab7 | ||
|  | 0132286cab | ||
|  | f8a252d142 | ||
|  | 962d6e71b6 | ||
|  | 48aaf22855 | ||
|  | 8351f5998a | ||
|  | 2494af99aa | ||
|  | e5b93d1f02 | ||
|  | 86eafeb826 | ||
|  | 32e1c2ac97 | ||
|  | 5e3bbbbb3c | ||
|  | 3bdf6004ca | ||
|  | 11869122b4 | ||
|  | 9b24459108 | ||
|  | c5fbc5c991 | ||
|  | 0413e3e77f | ||
|  | 92fda0a940 | ||
|  | 63e088730a | ||
|  | a78d35f84e | ||
|  | 63e869f6d0 | ||
|  | 4aff9515d8 | ||
|  | 6f0daa5463 | ||
|  | a658aaaf30 | ||
|  | 37590d5f5e | ||
|  | ca1f926d6d | ||
|  | 5d44a67e62 | ||
|  | 8ed3d59f96 | ||
|  | bc93ff0cb5 | ||
|  | 44498f2263 | ||
|  | 045751a430 | ||
|  | 162fe797fc | ||
|  | e671563f1e | ||
|  | a7238d0fdb | ||
|  | 2a899f5295 | ||
|  | b7cd84fad6 | ||
|  | 36b6da7c4f | ||
|  | 02eb575813 | ||
|  | ca8a6665ba | ||
|  | ba00cd916a | ||
|  | b4f916d214 | ||
|  | 79faf7d3cb | ||
|  | 79b1b6c8e0 | ||
|  | 2ecf7a3349 | ||
|  | 5283dcce2e | ||
|  | b56fc697c4 | ||
|  | b7ff1fe5d3 | ||
|  | 1b24064c9f | ||
|  | bb9237b0f4 | ||
|  | fe2787fcc1 | ||
|  | 11778db05a | ||
|  | 454af2bda3 | ||
|  | 9f7479711e | ||
|  | 4579e1637d | ||
|  | f4a2e227e1 | ||
|  | 48e538f5c7 | ||
|  | c851c37630 | ||
|  | a0d7b1efa5 | ||
|  | 1a06e6b305 | ||
|  | 43d7045a5b | ||
|  | 9199a56b7a | ||
|  | 44d1be27e6 | ||
|  | 554d5f97df | ||
|  | 78a4b9897c | ||
|  | c1fcbe3f04 | ||
|  | efa67d87aa | ||
|  | 4fe410a277 | ||
|  | 3235606644 | ||
|  | 260976914d | ||
|  | 3ca4b7e7a7 | ||
|  | 95c627f581 | ||
|  | 512dbb448b | ||
|  | b793c1cc73 | ||
|  | aea048ecc7 | ||
|  | d0e6413fcf | ||
|  | 3b7ad1688b | ||
|  | e907b99314 | ||
|  | 973bcb0483 | ||
|  | 87fb9a76ce | ||
|  | 0187e0c47d | ||
|  | 8732d8ece8 | ||
|  | 2e7c130f62 | ||
|  | a90f434df5 | ||
|  | 3b005ad47c | ||
|  | 735bc2f178 | ||
|  | e3cfa6363d | ||
|  | 331b1cb9a0 | ||
|  | 55dbb0ece0 | ||
|  | af4071e119 | ||
|  | 9947e643d0 | ||
|  | d3be4f2852 | ||
|  | e320f343f8 | ||
|  | f6cc7d9c3c | ||
|  | b756f76b0e | ||
|  | 034948065d | ||
|  | 0c2df7e589 | ||
|  | 2ae6a71ca3 | ||
|  | 206fd0f78e | ||
|  | b84225ac70 | ||
|  | 5ebcea53d6 | ||
|  | a491e01144 | ||
|  | 1236efc008 | ||
|  | e63bbdeb87 | ||
|  | 084ccb62a6 | ||
|  | 015469885d | ||
|  | 061f223269 | ||
|  | 88ee35d5f9 | ||
|  | 6c5b33ec71 | ||
|  | 31b8dd1bfc | ||
|  | 35113487f1 | ||
|  | 9ce8e10115 | ||
|  | d07d059eda | ||
|  | d836b0f815 | ||
|  | 1b1733ce7c | ||
|  | 5fd64a969b | ||
|  | 9a762e584c | ||
|  | 7fc0fd9fb6 | ||
|  | da4b70fcae | ||
|  | a0db69ee05 | ||
|  | 2c62504b79 | ||
|  | 67303106dc | ||
|  | 600d574042 | ||
|  | 07d4f21807 | ||
|  | 4da12067b9 | ||
|  | 24ab24879c | ||
|  | dc51741b83 | ||
|  | dd979dbf6d | ||
|  | 0cfea5613a | ||
|  | 98dd3ecab7 | ||
|  | fe05e0bac3 | ||
|  | d3f9b72c84 | ||
|  | 05b35c0fdc | ||
|  | 36b61650b3 | ||
|  | c37b6f0eeb | ||
|  | 28114c3b5a | ||
|  | 2617df4ec7 | ||
|  | 0d28c48eb9 | ||
|  | c6a6a54cce | ||
|  | e5aa03da64 | ||
|  | 47c0195b07 | ||
|  | f13d43dbf5 | ||
|  | f9e99a27d3 | ||
|  | 854b8fad22 | ||
|  | 91c7105d43 | ||
|  | c1e3533287 | ||
|  | bb7c308081 | ||
|  | fcbaf2f4e3 | ||
|  | 109c5df973 | ||
|  | b0fab3ea4a | ||
|  | 490fed6228 | ||
|  | 9c81692d48 | ||
|  | c505ba6f3e | ||
|  | ee71f57453 | ||
|  | f133aebfaf | ||
|  | 88556d31e2 | ||
|  | c0d75c6476 | ||
|  | 5b6cf447e5 | ||
|  | 3890f8224d | ||
|  | b9f5c93830 | ||
|  | c40b3dea6c | ||
|  | dbc798596b | ||
|  | fac90c446c | ||
|  | c5859b65a3 | ||
|  | 14bb697924 | ||
|  | dbd815c1e0 | ||
|  | 9592a9a821 | ||
|  | dd9f020c9b | ||
|  | 56f21f4bab | ||
|  | 91bc1b468b | ||
|  | 97268d2253 | ||
|  | 14b3c50b69 | ||
|  | 333bf9de05 | ||
|  | 16a38c687e | ||
|  | 24aa5cd1bf | ||
|  | f699da90ba | ||
|  | d1e33a3dff | ||
|  | f50ac932d6 | ||
|  | cab32d7593 | ||
|  | 2073aa9abc | ||
|  | 0386025395 | ||
|  | 0772403ea9 | ||
|  | 8acfc9a2f9 | ||
|  | de087abc8d | ||
|  | 98b2875512 | ||
|  | e9e73aa0a3 | ||
|  | d280311734 | ||
|  | 789762617f | ||
|  | 6f38d1bee5 | ||
|  | 73d75bc405 | ||
|  | 91dcfd5ee8 | ||
|  | 5fe0e9f2e7 | ||
|  | 51fb6e6a23 | ||
|  | 9392d5c84f | ||
|  | e49d136b99 | ||
|  | d50174b89e | ||
|  | 1d9a77027e | ||
|  | b4cd8897b2 | ||
|  | df341717f7 | ||
|  | 68974313e1 | ||
|  | 39a06e1d3b | ||
|  | bfe57b84d6 | ||
|  | dae975b08c | ||
|  | 27d44e3021 | ||
|  | df00d93b9c | ||
|  | 15bbbb3762 | ||
|  | c9ee526d8b | ||
|  | b110d95de1 | ||
|  | 76eab5d3ec | ||
|  | 4a2715e61f | ||
|  | 7fbcc3999f | ||
|  | e873b8948f | ||
|  | c8108a1db2 | ||
|  | 195c3af84e | ||
|  | 39724292e3 | ||
|  | 24b5aa0e82 | ||
|  | 3af2ef8439 | ||
|  | e2d027e252 | ||
|  | bddcebfbb1 | ||
|  | a05b14e4d9 | ||
|  | 9a36e73f4e | ||
|  | a66ccaa1da | ||
|  | f05a563802 | ||
|  | 06396b8874 | ||
|  | e5e68de2d7 | ||
|  | dcc0908617 | ||
|  | 45d68285f1 | ||
|  | e20f3a0f97 | ||
|  | c5029e61e3 | ||
|  | e90ed01105 | ||
|  | d8099d53fe | ||
|  | 0a976a3fb8 | ||
|  | 4636d5fbc2 | ||
|  | 3506ec1caa | ||
|  | 1f0e819756 | ||
|  | 799ff2a5c3 | ||
|  | ec5f768f9b | ||
|  | 66ab010055 | ||
|  | 6fb157488c | ||
|  | 814518dd80 | ||
|  | 554b18a466 | ||
|  | 855b6b1dc5 | ||
|  | c2ae9f62a4 | ||
|  | 4159a8fe6e | ||
|  | d8b44283a2 | ||
|  | 2c1daf9c9a | ||
|  | c7962216e9 | ||
|  | ffdaf88fd0 | ||
|  | f84f879950 | ||
|  | eb6027fba7 | ||
|  | 9a1f0ac8e2 | ||
|  | 51b6f8bc71 | ||
|  | 4f73b81b9c | ||
|  | 195d11f9d0 | ||
|  | b325ad1735 | ||
|  | 74483631d0 | ||
|  | 89b24a21a0 | ||
|  | f0f13aa1dd | ||
|  | 06f61949f9 | ||
|  | 0e72b67865 | ||
|  | b987eebf21 | ||
|  | c808d12b74 | ||
|  | b466431ede | ||
|  | bf69ca6e53 | ||
|  | 6ffa907f0e | ||
|  | e54501522d | ||
|  | f2baeddc30 | ||
|  | fd349b618a | ||
|  | 6ca2a02766 | ||
|  | d9a282bd92 | ||
|  | dc151f7290 | ||
|  | cce2127f72 | ||
|  | 0f8e6b395e | ||
|  | b28cc6d7d3 | ||
|  | 3bf12a98a7 | ||
|  | f27084ced4 | ||
|  | cdcf624e9e | ||
|  | ad4c2b95e4 | ||
|  | 8e7c395f59 | ||
|  | 02d50a513a | ||
|  | d61759f6dd | ||
|  | 5790ed7ba9 | ||
|  | 067adbfb62 | ||
|  | 7fadba59e7 | ||
|  | bcde0731db | ||
|  | 052afb67a4 | ||
|  | 6e15d7bb0f | ||
|  | 5bb68974ec | ||
|  | 0a3ba4d27d | ||
|  | 482a226dc5 | ||
|  | 9e69458ba8 | ||
|  | 71e386d5fa | ||
|  | 60b501b137 | ||
|  | 36f8e9f1d5 | ||
|  | 78707bd3ca | ||
|  | 56137d0605 | ||
|  | 681a582630 | ||
|  | 846a447c4d | ||
|  | f76be4f016 | ||
|  | ed19067096 | ||
|  | eb9f7c2c9d | ||
|  | 52693f7d0a | ||
|  | 5e015872ef | ||
|  | 08c291bd3f | ||
|  | 48c5d69c9d | ||
|  | 0f9c262bb0 | ||
|  | dff0fc65bf | ||
|  | 161f96c07d | ||
|  | 67ad21b368 | ||
|  | d5e633c38f | ||
|  | 617ef5b6ce | ||
|  | 8bd4e38d02 | ||
|  | f364b5c5ab | ||
|  | 6486fced34 | ||
|  | bc9f2a51a2 | ||
|  | 9c03b54d75 | ||
|  | eae08ea1e4 | ||
|  | 6f276223c6 | ||
|  | 21effcaa8b | ||
|  | 114b31a813 | ||
|  | 1a1b7a2bc4 | ||
|  | c9b213839a | ||
|  | 4043fa76cc | ||
|  | 9c8e3bc4c9 | ||
|  | 18b1f01641 | ||
|  | 9085c674e4 | ||
|  | b5d19d3fb1 | ||
|  | cc0477153b | ||
|  | 76008b41c5 | ||
|  | 8193fdc304 | ||
|  | 9d06c81078 | ||
|  | cdf85e5eee | ||
|  | d774dbc432 | ||
|  | 0369f5ebc4 | ||
|  | 1e6b11b27e | ||
|  | 7a8231435b | ||
|  | b1aa7725df | ||
|  | bfe0ba3e9a | ||
|  | 2d39329ee7 | ||
|  | 761b0063a0 | ||
|  | 0f27ce3424 | ||
|  | 2b0c0a6ff7 | ||
|  | 5bd96f6fe9 | ||
|  | 37ac6749ba | ||
|  | bf955bd87f | ||
|  | 6bd921d0bc | ||
|  | 534decea95 | ||
|  | 267830d463 | ||
|  | e82d0c21ec | ||
|  | ece6417699 | ||
|  | 74d5449719 | ||
|  | 4af7ff9cc3 | ||
|  | 46dedfcb67 | ||
|  | a9fa1a0df6 | ||
|  | a8572b4944 | ||
|  | 91c0d47ad4 | ||
|  | fd2611794a | ||
|  | 1fe1c5321b | ||
|  | f063a5db0f | ||
|  | 3883315447 | ||
|  | 7679e07957 | ||
|  | c39ba37ad8 | ||
|  | f1c3840c3b | ||
|  | e5c5b36a73 | ||
|  | c51f7a8375 | ||
|  | e53e2ac31b | ||
|  | b72857cd8b | ||
|  | cc223b9eab | ||
|  | f2c49e8b37 | ||
|  | 9b6476a6b7 | ||
|  | d8898cf9a3 | ||
|  | 34df5af295 | ||
|  | 3de88d5345 | ||
|  | 9ab6ab1bf9 | ||
|  | b6de0bdd43 | ||
|  | a2b62fd808 | ||
|  | fc166dea26 | ||
|  | f9c4d0925e | ||
|  | 1df9370bc2 | ||
|  | 7d840c7a18 | ||
|  | ff12aafc0f | ||
|  | c08b4aa6a1 | ||
|  | 52a6e6357b | ||
|  | 74c0fd419b | ||
|  | 6f540e3e58 | ||
|  | dead04dce8 | ||
|  | 886a03fdcd | ||
|  | 81007c453c | ||
|  | 6529e06057 | ||
|  | 55336f96d7 | ||
|  | 938aabde3d | ||
|  | c7f196b579 | ||
|  | b28a88dbb2 | ||
|  | e6558b7135 | ||
|  | 2c8fb9aa31 | ||
|  | f48c6b6285 | ||
|  | 4f42f60bde | ||
|  | 3942647910 | ||
|  | e0fbc78925 | ||
|  | f3e43d7d94 | ||
|  | f36547241c | ||
|  | 7ad29950a8 | ||
|  | cbf91ad45c | ||
|  | a039b66533 | ||
|  | 3a18c249f5 | ||
|  | 7c0775aa1b | ||
|  | 6514c34ed8 | ||
|  | ba92754669 | ||
|  | 30afd39129 | ||
|  | 41699406cf | ||
|  | 9aa49e59d0 | ||
|  | 29d5034260 | ||
|  | 00d1622b3f | ||
|  | a1acf19ff3 | ||
|  | 86328af6b7 | ||
|  | 36c27bdbf8 | ||
|  | c839965c05 | ||
|  | e1a9f3435f | ||
|  | 9f74feb347 | ||
|  | f99232095b | ||
|  | 5044fe4fe4 | ||
|  | 8e49169e6b | ||
|  | c71781d9ab | ||
|  | 8a2a4052f3 | ||
|  | dad557164e | ||
|  | e2fb49a8f8 | ||
|  | f3241ff86a | ||
|  | b9e7973a0f | ||
|  | 004b1f5288 | ||
|  | 857bd24c6d | ||
|  | 904968cf4a | ||
|  | 83747934ad | ||
|  | 7f90f5ecd4 | ||
|  | 12f02b9814 | ||
|  | 8931388309 | ||
|  | 25160d7344 | ||
|  | ab6bf6edc7 | ||
|  | 56a4a374cd | ||
|  | caa5b4e342 | ||
|  | b6172c3965 | ||
|  | 02ddfa07a7 | ||
|  | 5022878680 | ||
|  | 2bfacbb8ba | ||
|  | b18d2b0274 | ||
|  | f20b496dca | ||
|  | cca17f70b8 | ||
|  | b8e69718a1 | ||
|  | 50ed7d2af2 | ||
|  | 698de932ed | ||
|  | a3d8858bb1 | ||
|  | 83f3ba21b8 | ||
|  | 2aa729b212 | ||
|  | 1de70e4474 | ||
|  | f2393de59b | ||
|  | 94ea7cc451 | ||
|  | f8dbf57582 | ||
|  | c59cd36da6 | ||
|  | 15e92958d6 | ||
|  | 96c648c4b4 | ||
|  | f56a7d0cb2 | ||
|  | 01e617bb83 | ||
|  | 59fd5c69c0 | ||
|  | 28a9a8c380 | ||
|  | 6c2796b433 | ||
|  | 82ad5f7897 | ||
|  | bf8ac3b9e6 | ||
|  | edcdc9b1b9 | ||
|  | 4227aaa68a | ||
|  | b750ce8be6 | ||
|  | 03a6a088c5 | ||
|  | 1e787a7646 | ||
|  | 766ac3f1fe | ||
|  | a9038f2afc | ||
|  | 9828fa335e | ||
|  | 0c04d490bb | ||
|  | bffffffc95 | ||
|  | e9589ff786 | ||
|  | c3bd3437f5 | ||
|  | 01789e6750 | ||
|  | c3f7ba1b91 | ||
|  | 90d72a3683 | ||
|  | f9bcf936ed | ||
|  | acff177c54 | ||
|  | 658214a2e2 | ||
|  | 55f6f02c9b | ||
|  | c5ba52910a | ||
|  | 994ccd6694 | ||
|  | 4921a83813 | ||
|  | a97ba41b86 | ||
|  | 67e2623d2c | ||
|  | 4111095da3 | ||
|  | 6c21ddcedb | ||
|  | d86349658f | ||
|  | 151ce6e3c7 | ||
|  | 6bdee26c30 | ||
|  | 5e4b1eed30 | ||
|  | ab5cd95ccc | ||
|  | a3dc398da5 | ||
|  | b70f5d1a1e | ||
|  | 26363931ed | ||
|  | e2438330f5 | ||
|  | c5fcdd0657 | ||
|  | 345f3c07a5 | ||
|  | f3477ff28c | ||
|  | 7ac4fa50b5 | ||
|  | 2f0a914838 | ||
|  | 5fc7d9a603 | ||
|  | ced68e4e02 | ||
|  | 80071beaac | ||
|  | de1029d5ef | ||
|  | ffeb3194a8 | ||
|  | 95e9f33f6a | ||
|  | c599a20b34 | ||
|  | ca59528a32 | ||
|  | 6f4fd06d38 | ||
|  | 4715c2d006 | ||
|  | fcfa43b6f1 | ||
|  | 56b4c55654 | ||
|  | 830790eeac | ||
|  | 39de9c7879 | ||
|  | 7b6cc14b71 | ||
|  | ec749a4033 | ||
|  | fe32214613 | ||
|  | f6fcb775b7 | ||
|  | d209108a95 | ||
|  | efc64cf17f | ||
|  | 2f41ed50c1 | ||
|  | fcc8cdd36a | ||
|  | 248632ce76 | ||
|  | 25681754bd | ||
|  | 179c487da9 | ||
|  | 350989bbec | ||
|  | f5293e6c38 | ||
|  | 70c3515c94 | ||
|  | 4c7fd5a4e8 | ||
|  | 9d24341d94 | ||
|  | 512502ca08 | ||
|  | 6ce662c7a4 | ||
|  | 701ea5c46b | ||
|  | 2e5ff53d72 | ||
|  | 1229c61ba4 | ||
|  | ee54438e92 | ||
|  | 65af78c85d | ||
|  | b4747c3f85 | ||
|  | 1df074b73e | ||
|  | 254d30b8df | ||
|  | ac5588c7c4 | ||
|  | ddb70a89ad | ||
|  | f4b2a9625d | ||
|  | c2a1317c38 | ||
|  | 49f1a6933c | ||
|  | 9b387b8ec3 | ||
|  | a45a29432e | ||
|  | 819d069edc | ||
|  | b0a57a5091 | ||
|  | d8678d562d | ||
|  | 34a9035164 | ||
|  | 0941e0a929 | ||
|  | 1ee78062d7 | ||
|  | 09f5609618 | ||
|  | 098322c564 | ||
|  | 365e24c1cd | ||
|  | b82fdd59e7 | ||
|  | 6190ac7791 | ||
|  | ed3aeb7997 | ||
|  | 33f92b6bcf | ||
|  | 9131a72a47 | ||
|  | e5617dfe61 | ||
|  | e67d67419f | ||
|  | 17c34716f9 | ||
|  | e12f7c3026 | ||
|  | af395eccda | ||
|  | c403dcdabf | ||
|  | c500cc095f | ||
|  | 6ecda647ad | ||
|  | 3e7ee1f090 | ||
|  | 0c120cb7a3 | ||
|  | cab6829df9 | ||
|  | 0efe6df416 | ||
|  | a4b6112a31 | ||
|  | 47debf0134 | ||
|  | 16ddd1edfc | ||
|  | 0f1fd0e90d | ||
|  | ef76d83d2a | ||
|  | df9f6004f2 | ||
|  | 9a87f99dcd | ||
|  | 30011db6d7 | ||
|  | b6ac132c78 | ||
|  | abf87a643d | ||
|  | 3824ea9079 | ||
|  | 5e22ce05c5 | ||
|  | 8fcc7aefa7 | ||
|  | 0b6ea1d046 | ||
|  | 22d3981a74 | ||
|  | 81b4f4928d | ||
|  | dd77a38535 | ||
|  | d319b53e23 | ||
|  | b9627e14d0 | ||
|  | 56a96d36a1 | ||
|  | e60630fa73 | ||
|  | 5ef6613024 | ||
|  | af7e02de27 | ||
|  | 51d5b9d35d | ||
|  | 092ca6bcf5 | ||
|  | 2625cbbfed | ||
|  | cedd1d5596 | ||
|  | fb9e14a229 | ||
|  | 4e1bd7b5f0 | ||
|  | 5dfed8cd00 | ||
|  | a2672a0d78 | ||
|  | ee5ac6b800 | ||
|  | a481d2ab46 | ||
|  | c8bb21d12d | ||
|  | e817cd7d43 | ||
|  | bd6085fffd | ||
|  | 7efe9a9385 | ||
|  | 50da40a727 | ||
|  | 48390a1875 | ||
|  | a3d27cd128 | ||
|  | 589c814ee6 | ||
|  | 4b60a3cbab | ||
|  | 1aaf633df8 | ||
|  | 82771ec64a | ||
|  | ada8a402da | ||
|  | 17956efe35 | ||
|  | 8378c9f85e | ||
|  | 324b1079e7 | ||
|  | c6da829713 | ||
|  | 844b0687a6 | ||
|  | 2ed2dd2fb7 | ||
|  | d2f7dd3d5a | ||
|  | 9f08916cf1 | ||
|  | a0e3676e3a | ||
|  | 2276793629 | ||
|  | cfe57f52f4 | 
| @@ -1,228 +1,353 @@ | ||||
| version: 2 | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|     environment: | ||||
|       CONTRACTS_COMMIT_HASH: '9ed05f5' | ||||
|     working_directory: ~/repo | ||||
|     steps: | ||||
|       - checkout | ||||
|       - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV | ||||
|       - restore_cache: | ||||
|           name: Restore Yarn Package Cache | ||||
|           keys: | ||||
|             - yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }} | ||||
|             - yarn-packages-{{ .Branch }} | ||||
|             - yarn-packages-master | ||||
|             - yarn-packages- | ||||
|       - run: | ||||
|           name: yarn | ||||
|           command: yarn --frozen-lockfile install | ||||
|       - save_cache: | ||||
|           name: Save Yarn Package Cache | ||||
|           key: yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }} | ||||
|           paths: | ||||
|             - node_modules/ | ||||
|       - run: > | ||||
|             if [ -z "$(git diff --name-only v2-prototype packages/website)" ]; then | ||||
|                 yarn build --exclude website | ||||
|             else | ||||
|                 yarn build | ||||
|             fi | ||||
|       - save_cache: | ||||
|           key: repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo | ||||
|   test-contracts-ganache: | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|     working_directory: ~/repo | ||||
|     steps: | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - run: yarn wsrun test:circleci contracts | ||||
|   test-contracts-geth: | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|       - image: albrow/0x-devnet | ||||
|     working_directory: ~/repo | ||||
|     steps: | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       # HACK(albrow): we need to sleep 10 seconds to ensure the devnet is | ||||
|       # initialized | ||||
|       - run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test contracts | ||||
|   test-rest: | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|     working_directory: ~/repo | ||||
|     steps: | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - run: yarn wsrun test:circleci @0xproject/0x.js | ||||
|       - run: yarn wsrun test:circleci @0xproject/assert | ||||
|       - run: yarn wsrun test:circleci @0xproject/base-contract | ||||
|       - run: yarn wsrun test:circleci @0xproject/connect | ||||
|       - run: yarn wsrun test:circleci @0xproject/contract-wrappers | ||||
|       - run: yarn wsrun test:circleci @0xproject/dev-utils | ||||
|       - run: yarn wsrun test:circleci @0xproject/json-schemas | ||||
|       - run: yarn wsrun test:circleci @0xproject/metacoin | ||||
|       - run: yarn wsrun test:circleci @0xproject/order-utils | ||||
|       - run: yarn wsrun test:circleci @0xproject/order-watcher | ||||
|       - run: yarn wsrun test:circleci @0xproject/sol-compiler | ||||
|       - run: yarn wsrun test:circleci @0xproject/sol-cov | ||||
|       - run: yarn wsrun test:circleci @0xproject/sra-report | ||||
|       - run: yarn wsrun test:circleci @0xproject/subproviders | ||||
|       - run: yarn wsrun test:circleci @0xproject/web3-wrapper | ||||
|       - save_cache: | ||||
|           key: coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/0x.js/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/assert/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/base-contract/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/connect/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/contract-wrappers/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/dev-utils/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/json-schemas/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/metacoin/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/order-utils/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/order-watcher/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/sol-compiler/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/sol-cov/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-sra-report-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/sra-report/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/subproviders/coverage/lcov.info | ||||
|       - save_cache: | ||||
|           key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} | ||||
|           paths: | ||||
|             - ~/repo/packages/web3-wrapper/coverage/lcov.info | ||||
|   static-tests: | ||||
|     working_directory: ~/repo | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|     steps: | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - run: yarn prettier:ci | ||||
|       - run: yarn lerna:run lint | ||||
|   submit-coverage: | ||||
|     docker: | ||||
|       - image: circleci/node:9 | ||||
|     working_directory: ~/repo | ||||
|     steps: | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-assert-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-connect-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-sra-report-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - restore_cache: | ||||
|           keys: | ||||
|             - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} | ||||
|       - run: yarn report_coverage | ||||
|     build: | ||||
|         resource_class: medium+ | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         environment: | ||||
|             CONTRACTS_COMMIT_HASH: '9ed05f5' | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - checkout | ||||
|             - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV | ||||
|             - run: | ||||
|                   name: install-yarn | ||||
|                   command: sudo npm install --global yarn@1.9.4 | ||||
|             - run: | ||||
|                   name: yarn | ||||
|                   command: yarn --frozen-lockfile install || yarn --frozen-lockfile install | ||||
|             - run: yarn build:ci:no_website | ||||
|             - save_cache: | ||||
|                   key: repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo | ||||
|     build-website: | ||||
|         resource_class: medium+ | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: cd packages/website && yarn build:prod | ||||
|     test-contracts-ganache: | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn wsrun test:circleci contracts | ||||
|     test-contracts-geth: | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|             - image: 0xorg/devnet | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             # HACK(albrow): we need to sleep 10 seconds to ensure the devnet is | ||||
|             # initialized | ||||
|             - run: sleep 10 && TEST_PROVIDER=geth yarn wsrun test contracts | ||||
|     test-publish: | ||||
|         resource_class: medium+ | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|             - image: 0xorg/verdaccio | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn test:publish:circleci | ||||
|     test-doc-generation: | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn test:generate_docs:circleci | ||||
|     test-rest: | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn wsrun test:circleci @0x/abi-gen | ||||
|             - run: yarn wsrun test:circleci @0x/assert | ||||
|             - run: yarn wsrun test:circleci @0x/base-contract | ||||
|             - run: yarn wsrun test:circleci @0x/connect | ||||
|             - run: yarn wsrun test:circleci @0x/contract-wrappers | ||||
|             - run: yarn wsrun test:circleci @0x/dev-utils | ||||
|             - run: yarn wsrun test:circleci @0x/json-schemas | ||||
|             - run: yarn wsrun test:circleci @0x/metacoin | ||||
|             - run: yarn wsrun test:circleci @0x/order-utils | ||||
|             - run: yarn wsrun test:circleci @0x/order-watcher | ||||
|             - run: yarn wsrun test:circleci @0x/sol-compiler | ||||
|             - run: yarn wsrun test:circleci @0x/sol-cov | ||||
|             - run: yarn wsrun test:circleci @0x/sol-doc | ||||
|             - run: yarn wsrun test:circleci @0x/subproviders | ||||
|             - run: yarn wsrun test:circleci @0x/web3-wrapper | ||||
|             - run: yarn wsrun test:circleci @0x/utils | ||||
|             - run: yarn wsrun test:circleci @0x/instant | ||||
|             - save_cache: | ||||
|                   key: coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/abi-gen/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/assert/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/base-contract/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/connect/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/contract-wrappers/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/dev-utils/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/json-schemas/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/metacoin/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/order-utils/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/order-watcher/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/sol-compiler/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/sol-cov/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/sol-doc/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/subproviders/coverage/lcov.info | ||||
|             - save_cache: | ||||
|                   key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/packages/web3-wrapper/coverage/lcov.info | ||||
|     test-python: | ||||
|         working_directory: ~/repo | ||||
|         docker: | ||||
|             - image: circleci/python | ||||
|             - image: 0xorg/ganache-cli | ||||
|               command: | | ||||
|                   ganache-cli --gasLimit 10000000 --noVMErrorsOnRPCResponse --db /snapshot --noVMErrorsOnRPCResponse -p 8545 --networkId 50 -m "concert load couple harbor equip island argue ramp clarify fence smart topic" | ||||
|         steps: | ||||
|             - checkout | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/bin | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages | ||||
|             - restore_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       python -m ensurepip | ||||
|                       python -m pip install -e .[dev] | ||||
|             - save_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - '/usr/local/bin' | ||||
|                       - '/usr/local/lib/python3.7/site-packages' | ||||
|                       - '.eggs' | ||||
|                       - '.mypy_cache' | ||||
|                       - '.pytest_cache' | ||||
|                       - '.tox' | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       coverage run setup.py test | ||||
|             - save_cache: | ||||
|                   key: coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - ~/repo/python-packages/order_utils/.coverage | ||||
|     test-rest-python: | ||||
|         working_directory: ~/repo | ||||
|         docker: | ||||
|             - image: circleci/python | ||||
|         steps: | ||||
|             - checkout | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/bin | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages | ||||
|             - restore_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       python -m ensurepip | ||||
|                       python -m pip install -e .[dev] | ||||
|             - save_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - '/usr/local/bin' | ||||
|                       - '/usr/local/lib/python3.7/site-packages' | ||||
|                       - '.eggs' | ||||
|                       - '.mypy_cache' | ||||
|                       - '.pytest_cache' | ||||
|                       - '.tox' | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       tox | ||||
|     static-tests-python: | ||||
|         working_directory: ~/repo | ||||
|         docker: | ||||
|             - image: circleci/python | ||||
|         steps: | ||||
|             - checkout | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/bin | ||||
|             - run: sudo chown -R circleci:circleci /usr/local/lib/python3.7/site-packages | ||||
|             - restore_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       python -m ensurepip | ||||
|                       python -m pip install -e .[dev] | ||||
|             - save_cache: | ||||
|                   key: deps9-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} | ||||
|                   paths: | ||||
|                       - '/usr/local/bin' | ||||
|                       - '/usr/local/lib/python3.7/site-packages' | ||||
|             - run: | ||||
|                   command: | | ||||
|                       cd python-packages/order_utils | ||||
|                       python setup.py lint | ||||
|     static-tests: | ||||
|         working_directory: ~/repo | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn lerna run lint | ||||
|             - run: yarn prettier:ci | ||||
|             - run: cd packages/0x.js && yarn build:umd:prod | ||||
|             - run: yarn bundlewatch | ||||
|     submit-coverage: | ||||
|         docker: | ||||
|             - image: circleci/node:9 | ||||
|         working_directory: ~/repo | ||||
|         steps: | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-abi-gen-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-assert-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-connect-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-contract-wrappers-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-order-watcher-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-sol-doc-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - restore_cache: | ||||
|                   keys: | ||||
|                       - coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||
|             - run: yarn report_coverage | ||||
| workflows: | ||||
|   version: 2 | ||||
|   main: | ||||
|     jobs: | ||||
|       - build | ||||
|       - test-contracts-ganache: | ||||
|           requires: | ||||
|     version: 2 | ||||
|     main: | ||||
|         jobs: | ||||
|             - build | ||||
|       - test-contracts-geth: | ||||
|           requires: | ||||
|             - build | ||||
|       - test-rest: | ||||
|           requires: | ||||
|             - build | ||||
|       - static-tests: | ||||
|           requires: | ||||
|             - build | ||||
|       - submit-coverage: | ||||
|           requires: | ||||
|             - test-rest | ||||
|             - build-website: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - test-contracts-ganache: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - test-contracts-geth: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - test-rest: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - static-tests: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - test-publish: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - test-doc-generation: | ||||
|                   requires: | ||||
|                       - build | ||||
|             - submit-coverage: | ||||
|                   requires: | ||||
|                       - test-rest | ||||
|                       - test-python | ||||
|             - test-python | ||||
|             - static-tests-python | ||||
|             # skip python tox run for now, as we don't yet have multiple test environments to support. | ||||
|             #- test-rest-python | ||||
|   | ||||
							
								
								
									
										6
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @@ -1 +1,7 @@ | ||||
| *.sol linguist-language=Solidity | ||||
|  | ||||
| # Automatically collapse generated files in GitHub. | ||||
| *.svg linguist-generated | ||||
| packages/contract-artifacts/artifacts/*json linguist-generated | ||||
| packages/abi-gen-wrappers/wrappers/*.ts liguist-generated | ||||
|  | ||||
|   | ||||
							
								
								
									
										26
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -41,6 +41,7 @@ typings/ | ||||
|  | ||||
| # Optional npm cache directory | ||||
| .npm | ||||
| .npmrc | ||||
|  | ||||
| # Optional eslint cache | ||||
| .eslintcache | ||||
| @@ -71,31 +72,34 @@ TODO.md | ||||
| .vscode | ||||
|  | ||||
| packages/website/public/bundle* | ||||
| packages/dev-tools-pages/public/bundle* | ||||
| packages/react-docs/example/public/bundle* | ||||
|  | ||||
| # server cli | ||||
| packages/testnet-faucets/server/ | ||||
|  | ||||
| # generated contract artifacts/ | ||||
| packages/contracts/generated-artifacts/ | ||||
| packages/sol-cov/test/fixtures/artifacts/ | ||||
| packages/metacoin/artifacts/ | ||||
| packages/order-watcher/test/artifacts/ | ||||
| packages/contract-wrappers/test/artifacts/ | ||||
|  | ||||
| # generated contract wrappers | ||||
| packages/0x.js/src/generated_contract_wrappers/ | ||||
| packages/contracts/generated_contract_wrappers/ | ||||
| packages/contract-wrappers/src/contract_wrappers/generated/ | ||||
| packages/abi-gen-wrappers/wrappers | ||||
| packages/contracts/generated-wrappers/ | ||||
| packages/metacoin/src/contract_wrappers | ||||
| packages/fill-scenarios/src/generated_contract_wrappers/ | ||||
| packages/order-watcher/src/generated_contract_wrappers/ | ||||
| packages/order-utils/src/generated_contract_wrappers/ | ||||
| packages/migrations/src/1.0.0/contract_wrappers | ||||
| packages/migrations/src/2.0.0/contract_wrappers | ||||
| packages/migrations/src/2.0.0-beta-testnet/contract_wrappers | ||||
|  | ||||
| # solc-bin in sol-compiler | ||||
| packages/sol-compiler/solc_bin/ | ||||
|  | ||||
| # Monorepo scripts | ||||
| packages/*/scripts/ | ||||
|  | ||||
| # python stuff | ||||
| .eggs | ||||
| .mypy_cache | ||||
| .tox | ||||
| python-packages/*/build | ||||
| python-packages/*/dist | ||||
| __pycache__ | ||||
| python-packages/*/src/*.egg-info | ||||
| python-packages/*/.coverage | ||||
|   | ||||
| @@ -1,22 +1,14 @@ | ||||
| lib | ||||
| .nyc_output | ||||
| /packages/contract-wrappers/src/contract_wrappers/generated/ | ||||
| /packages/contracts/generated-wrappers | ||||
| /packages/contracts/generated-artifacts | ||||
| /packages/abi-gen-wrappers/src/generated-wrappers | ||||
| /packages/contract-artifacts/artifacts | ||||
| /python-packages/order_utils/src/zero_ex/contract_artifacts/artifacts | ||||
| /packages/json-schemas/schemas | ||||
| /packages/metacoin/src/contract_wrappers | ||||
| /packages/0x.js/src/generated_contract_wrappers/ | ||||
| /packages/contracts/generated_contract_wrappers/ | ||||
| /packages/fill-scenarios/src/generated_contract_wrappers/ | ||||
| /packages/order-watcher/src/generated_contract_wrappers/ | ||||
| /packages/order-utils/src/generated_contract_wrappers/ | ||||
| /packages/migrations/src/1.0.0/contract_wrappers | ||||
| /packages/migrations/src/2.0.0/contract_wrappers | ||||
| /packages/migrations/src/2.0.0-beta-testnet/contract_wrappers | ||||
| /packages/0x.js/test/artifacts | ||||
| /packages/contracts/src/artifacts | ||||
| /packages/metacoin/artifacts | ||||
| /packages/contract-wrappers/test/artifacts | ||||
| /packages/order-watcher/test/artifacts | ||||
| /packages/migrations/artifacts/1.0.0 | ||||
| /packages/migrations/artifacts/2.0.0 | ||||
| /packages/migrations/artifacts/2.0.0-beta-testnet | ||||
| /packages/sra-spec/public/ | ||||
| package.json | ||||
| scripts/postpublish_utils.js | ||||
| packages/sol-cov/test/fixtures/artifacts | ||||
|   | ||||
							
								
								
									
										35
									
								
								CODEOWNERS
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								CODEOWNERS
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| # See https://help.github.com/articles/about-codeowners/ | ||||
| # for more info about CODEOWNERS file | ||||
|  | ||||
| # It uses the same pattern rule for gitignore file | ||||
| # https://git-scm.com/docs/gitignore#_pattern_format | ||||
|  | ||||
| # Website | ||||
| packages/asset-buyer/  @BMillman19 @fragosti @steveklebanoff | ||||
| packages/instant/  @BMillman19 @fragosti @steveklebanoff | ||||
| packages/website/  @BMillman19 @fragosti @fabioberger @steveklebanoff | ||||
|  | ||||
| # Dev tools & setup | ||||
| .circleci/ @LogvinovLeon | ||||
| packages/abi-gen/ @LogvinovLeon | ||||
| packages/base-contract/ @LogvinovLeon | ||||
| packages/connect/ @fragosti  | ||||
| packages/contract_templates/ @LogvinovLeon | ||||
| packages/contract-addresses/ @albrow | ||||
| packages/contract-artifacts/ @albrow | ||||
| packages/dev-utils/ @LogvinovLeon @fabioberger | ||||
| packages/devnet/ @albrow | ||||
| packages/ethereum-types/ @LogvinovLeon | ||||
| packages/metacoin/ @LogvinovLeon | ||||
| packages/monorepo-scripts/ @fabioberger | ||||
| packages/order-utils/ @fabioberger @LogvinovLeon  | ||||
| packages/sol-compiler/ @LogvinovLeon | ||||
| packages/sol-cov/ @LogvinovLeon | ||||
| packages/sol-resolver/ @LogvinovLeon | ||||
| packages/subproviders/ @fabioberger @dekz | ||||
| packages/verdaccio/ @albrow | ||||
| packages/web3-wrapper/ @LogvinovLeon @fabioberger | ||||
| python-packages/ @feuGeneA | ||||
|  | ||||
| # Protocol/smart contracts | ||||
| packages/contracts/test/ @albrow | ||||
| @@ -8,20 +8,20 @@ | ||||
|  | ||||
| ## Types of changes | ||||
|  | ||||
| <!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> | ||||
| <!--- What types of changes does your code introduce? Uncomment all the bullets that apply: --> | ||||
|  | ||||
| *   [ ] Bug fix (non-breaking change which fixes an issue) | ||||
| *   [ ] New feature (non-breaking change which adds functionality) | ||||
| *   [ ] Breaking change (fix or feature that would cause existing functionality to change) | ||||
| <!-- * Bug fix (non-breaking change which fixes an issue) --> | ||||
|  | ||||
| <!-- * New feature (non-breaking change which adds functionality) --> | ||||
|  | ||||
| <!-- * Breaking change (fix or feature that would cause existing functionality to change) --> | ||||
|  | ||||
| ## Checklist: | ||||
|  | ||||
| <!--- Go over all the following points, and put an `x` in all the boxes that apply. --> | ||||
| <!--- The following points should be used to indicate the progress of your PR.  Put an `x` in all the boxes that apply right now, and come back over time and check them off as you make progress.  If you're unsure about any of these, don't hesitate to ask. We're here to help! --> | ||||
|  | ||||
| <!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> | ||||
|  | ||||
| *   [ ] Change requires a change to the documentation. | ||||
| *   [ ] Added tests to cover my changes. | ||||
| *   [ ] Added new entries to the relevant CHANGELOG.jsons. | ||||
| *   [ ] Labeled this PR with the 'WIP' label if it is a work in progress. | ||||
| *   [ ] Labeled this PR with the labels corresponding to the changed package. | ||||
| *   [ ] Prefix PR title with `[WIP]` if necessary. | ||||
| *   [ ] Prefix PR title with bracketed package name(s) corresponding to the changed package(s). For example: `[sol-cov] Fixed bug`. | ||||
| *   [ ] Add tests to cover changes as needed. | ||||
| *   [ ] Update documentation as needed. | ||||
| *   [ ] Add new entries to the relevant CHANGELOG.jsons. | ||||
|   | ||||
							
								
								
									
										80
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								README.md
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume | ||||
|  | ||||
| If you're developing on 0x now or are interested in using 0x infrastructure in the future, please join our [developer mailing list][dev-mailing-list-url] for updates. | ||||
|  | ||||
| [website-url]: https://0xproject.com/ | ||||
| [website-url]: https://0xproject.com | ||||
| [whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf | ||||
| [dev-mailing-list-url]: http://eepurl.com/dx4cPf | ||||
|  | ||||
| @@ -20,36 +20,46 @@ If you're developing on 0x now or are interested in using 0x infrastructure in t | ||||
|  | ||||
| ### Published Packages | ||||
|  | ||||
| | Package                                                         | Version                                                                                                                               | Description                                                                                                               | | ||||
| | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | ||||
| | [`0x.js`](/packages/0x.js)                                      | [](https://www.npmjs.com/package/0x.js)                                                 | A Javascript library for interacting with the 0x protocol                                                                 | | ||||
| | [`@0xproject/abi-gen`](/packages/abi-gen)                       | [](https://www.npmjs.com/package/@0xproject/abi-gen)                       | Tool to generate TS wrappers from smart contract ABIs                                                                     | | ||||
| | [`@0xproject/assert`](/packages/assert)                         | [](https://www.npmjs.com/package/@0xproject/assert)                         | Type and schema assertions used by our packages                                                                           | | ||||
| | [`@0xproject/base-contract`](/packages/base-contract)           | [](https://www.npmjs.com/package/@0xproject/base-contract)           | BaseContract used by auto-generated `abi-gen` wrapper contracts                                                           | | ||||
| | [`@0xproject/connect`](/packages/connect)                       | [](https://www.npmjs.com/package/@0xproject/connect)                       | A Javascript library for interacting with the Standard Relayer API                                                        | | ||||
| | [`@0xproject/sol-compiler`](/packages/sol-compiler)             | [](https://www.npmjs.com/package/@0xproject/sol-compiler)             | A thin wrapper around Solc.js that outputs artifacts, resolves imports, only re-compiles when needed, and other niceties. | | ||||
| | [`@0xproject/dev-utils`](/packages/dev-utils)                   | [](https://www.npmjs.com/package/@0xproject/dev-utils)                   | Dev utils to be shared across 0x projects and packages                                                                    | | ||||
| | [`@0xproject/json-schemas`](/packages/json-schemas)             | [](https://www.npmjs.com/package/@0xproject/json-schemas)             | 0x-related json schemas                                                                                                   | | ||||
| | [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts)     | [](https://www.npmjs.com/package/@0xproject/monorepo-scripts)     | Monorepo scripts                                                                                                          | | ||||
| | [`@0xproject/react-docs`](/packages/react-docs)                 | [](https://www.npmjs.com/package/@0xproject/react-docs)                 | React documentation component for rendering TypeDoc & Doxity generated JSON                                               | | ||||
| | [`@0xproject/react-shared`](/packages/react-shared)             | [](https://www.npmjs.com/package/@0xproject/react-shared)             | 0x shared react components                                                                                                | | ||||
| | [`@0xproject/sra-report`](/packages/sra-report)                 | [](https://www.npmjs.com/package/@0xproject/sra-report)                 | Generate reports for standard relayer API compliance                                                                      | | ||||
| | [`@0xproject/sol-cov`](/packages/sol-cov)                       | [](https://www.npmjs.com/package/@0xproject/sol-cov)                       | Solidity test coverage tool                                                                                               | | ||||
| | [`@0xproject/subproviders`](/packages/subproviders)             | [](https://www.npmjs.com/package/@0xproject/subproviders)             | Useful web3 subproviders (e.g LedgerSubprovider)                                                                          | | ||||
| | [`@0xproject/tslint-config`](/packages/tslint-config)           | [](https://www.npmjs.com/package/@0xproject/tslint-config)           | Custom 0x development TSLint rules                                                                                        | | ||||
| | [`@0xproject/types`](/packages/types)                           | [](https://www.npmjs.com/package/@0xproject/types)                           | Shared type declarations                                                                                                  | | ||||
| | [`@0xproject/typescript-typings`](/packages/typescript-typings) | [](https://www.npmjs.com/package/@0xproject/typescript-typings) | Repository of types for external packages                                                                                 | | ||||
| | [`@0xproject/utils`](/packages/utils)                           | [](https://www.npmjs.com/package/@0xproject/utils)                           | Shared utilities                                                                                                          | | ||||
| | [`@0xproject/web3-wrapper`](/packages/web3-wrapper)             | [](https://www.npmjs.com/package/@0xproject/web3-wrapper)             | Web3 wrapper                                                                                                              | | ||||
| | Package                                                  | Version                                                                                                                 | Description                                                                                                              | | ||||
| | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | ||||
| | [`0x.js`](/packages/0x.js)                               | [](https://www.npmjs.com/package/0x.js)                                   | A Javascript library for interacting with the 0x protocol                                                                | | ||||
| | [`@0x/abi-gen`](/packages/abi-gen)                       | [](https://www.npmjs.com/package/@0x/abi-gen)                       | Tool to generate TS wrappers from smart contract ABIs                                                                    | | ||||
| | [`@0x/abi-gen-wrappers`](/packages/abi-gen-wrappers)     | [](https://www.npmjs.com/package/@0x/abi-gen-wrappers)     | Low-level 0x smart contract wrappers generated using @0x/abi-gen                                                         | | ||||
| | [`@0x/assert`](/packages/assert)                         | [](https://www.npmjs.com/package/@0x/assert)                         | Type and schema assertions used by our packages                                                                          | | ||||
| | [`@0x/asset-buyer`](/packages/asset-buyer)               | [](https://www.npmjs.com/package/@0x/asset-buyer)               | Convenience package for discovering and buying assets with Ether                                                         | | ||||
| | [`@0x/base-contract`](/packages/base-contract)           | [](https://www.npmjs.com/package/@0x/base-contract)           | BaseContract used by auto-generated `abi-gen` wrapper contracts                                                          | | ||||
| | [`@0x/connect`](/packages/connect)                       | [](https://www.npmjs.com/package/@0x/connect)                       | A Javascript library for interacting with the Standard Relayer API                                                       | | ||||
| | [`@0x/contract-addresses`](/packages/contract-addresses) | [](https://www.npmjs.com/package/@0x/contract-addresses) | Used to get known addresses of deployed 0x contracts                                                                     | | ||||
| | [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts                                                                                  | | ||||
| | [`@0x/contract-wrappers`](/packages/contract-wrappers)   | [](https://www.npmjs.com/package/@0x/contract-wrappers)   | Smart TS wrappers for 0x smart contracts                                                                                 | | ||||
| | [`@0x/dev-utils`](/packages/dev-utils)                   | [](https://www.npmjs.com/package/@0x/dev-utils)                   | Dev utils to be shared across 0x projects and packages                                                                   | | ||||
| | [`@0x/fill-scenarios`](/packages/fill-scenarios)         | [](https://www.npmjs.com/package/@0x/fill-scenarios)         | 0x order fill scenario generation                                                                                        | | ||||
| | [`@0x/json-schemas`](/packages/json-schemas)             | [](https://www.npmjs.com/package/@0x/json-schemas)             | 0x-related json schemas                                                                                                  | | ||||
| | [`@0x/migrations`](/packages/migrations)                 | [](https://www.npmjs.com/package/@0x/migrations)                 | 0x smart contract migrations                                                                                             | | ||||
| | [`@0x/order-utils`](/packages/order-utils)               | [](https://www.npmjs.com/package/@0x/order-utils)               | A set of utilities for generating, parsing, signing and validating 0x orders                                             | | ||||
| | [`@0x/order-watcher`](/packages/order-watcher)           | [](https://www.npmjs.com/package/@0x/order-watcher)           | An order watcher daemon that watches for order validity                                                                  | | ||||
| | [`@0x/react-docs`](/packages/react-docs)                 | [](https://www.npmjs.com/package/@0x/react-docs)                 | React documentation component for rendering TypeDoc & Doxity generated JSON                                              | | ||||
| | [`@0x/react-shared`](/packages/react-shared)             | [](https://www.npmjs.com/package/@0x/react-shared)             | 0x shared react components                                                                                               | | ||||
| | [`@0x/sol-compiler`](/packages/sol-compiler)             | [](https://www.npmjs.com/package/@0x/sol-compiler)             | A thin wrapper around Solc.js that outputs artifacts, resolves imports, only re-compiles when needed, and other niceties | | ||||
| | [`@0x/sol-cov`](/packages/sol-cov)                       | [](https://www.npmjs.com/package/@0x/sol-cov)                       | Solidity test coverage tool                                                                                              | | ||||
| | [`@0x/sol-doc`](/packages/sol-doc)                       | [](https://www.npmjs.com/package/@0x/sol-doc)                       | Solidity documentation generator                                                                                         | | ||||
| | [`@0x/sol-resolver`](/packages/sol-resolver)             | [](https://www.npmjs.com/package/@0x/sol-resolver)             | Import resolver for smart contracts dependencies                                                                         | | ||||
| | [`@0x/sra-spec`](/packages/sra-spec)                     | [](https://www.npmjs.com/package/@0x/sra-spec)                     | OpenAPI specification for the standard relayer API                                                                       | | ||||
| | [`@0x/subproviders`](/packages/subproviders)             | [](https://www.npmjs.com/package/@0x/subproviders)             | Useful web3 subproviders (e.g. LedgerSubprovider)                                                                        | | ||||
| | [`@0x/tslint-config`](/packages/tslint-config)           | [](https://www.npmjs.com/package/@0x/tslint-config)           | Custom 0x development TSLint rules                                                                                       | | ||||
| | [`@0x/types`](/packages/types)                           | [](https://www.npmjs.com/package/@0x/types)                           | Shared type declarations                                                                                                 | | ||||
| | [`@0x/typescript-typings`](/packages/typescript-typings) | [](https://www.npmjs.com/package/@0x/typescript-typings) | Repository of types for external packages                                                                                | | ||||
| | [`@0x/utils`](/packages/utils)                           | [](https://www.npmjs.com/package/@0x/utils)                           | Shared utilities                                                                                                         | | ||||
| | [`@0x/web3-wrapper`](/packages/web3-wrapper)             | [](https://www.npmjs.com/package/@0x/web3-wrapper)             | Web3 wrapper                                                                                                             | | ||||
|  | ||||
| ### Private Packages | ||||
|  | ||||
| | Package                                                         | Description                                                      | | ||||
| | --------------------------------------------------------------- | ---------------------------------------------------------------- | | ||||
| | [`@0xproject/contracts`](/packages/contracts)                   | 0x solidity smart contracts & tests                              | | ||||
| | [`@0xproject/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0xproject/react-docs`  | | ||||
| | [`@0xproject/testnet-faucets`](/packages/testnet-faucets)       | A faucet micro-service that dispenses test ERC20 tokens or Ether | | ||||
| | [`@0xproject/website`](/packages/website)                       | 0x website & Portal DApp                                         | | ||||
| | Package                                                  | Description                                                      | | ||||
| | -------------------------------------------------------- | ---------------------------------------------------------------- | | ||||
| | [`@0x/contracts`](/packages/contracts)                   | 0x solidity smart contracts & tests                              | | ||||
| | [`@0x/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0x/react-docs`         | | ||||
| | [`@0x/testnet-faucets`](/packages/testnet-faucets)       | A faucet micro-service that dispenses test ERC20 tokens or Ether | | ||||
| | [`@0x/website`](/packages/website)                       | 0x website & Portal DApp                                         | | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| @@ -68,10 +78,10 @@ Dedicated documentation pages: | ||||
| Node version >= 6.12 is required. | ||||
|  | ||||
| Most of the packages require additional typings for external dependencies. | ||||
| You can include those by prepending @0xproject/typescript-typings package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config. | ||||
| You can include those by prepending the `@0x/typescript-typings` package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config. | ||||
|  | ||||
| ```json | ||||
| "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], | ||||
| "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], | ||||
| ``` | ||||
|  | ||||
| ## Contributing | ||||
| @@ -82,10 +92,10 @@ We strongly recommend that the community help us make improvements and determine | ||||
|  | ||||
| ### Install dependencies | ||||
|  | ||||
| If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: | ||||
| Make sure you are using Yarn v1.9.4. To install using brew: | ||||
|  | ||||
| ```bash | ||||
| yarn config set workspaces-experimental true | ||||
| brew install yarn@1.9.4 | ||||
| ``` | ||||
|  | ||||
| Then install dependencies | ||||
| @@ -105,7 +115,7 @@ yarn build | ||||
| To build a specific package: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/web3-wrapper yarn build | ||||
| PKG=@0x/web3-wrapper yarn build | ||||
| ``` | ||||
|  | ||||
| ### Watch | ||||
| @@ -122,7 +132,7 @@ To watch a specific package and all it's dependent packages: | ||||
| PKG=[NPM_PACKAGE_NAME] yarn watch | ||||
|  | ||||
| e.g | ||||
| PKG=@0xproject/web3-wrapper yarn watch | ||||
| PKG=@0x/web3-wrapper yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
| @@ -178,5 +188,5 @@ yarn test | ||||
| Run a specific package's test: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/web3-wrapper yarn test | ||||
| PKG=@0x/web3-wrapper yarn test | ||||
| ``` | ||||
|   | ||||
							
								
								
									
										11
									
								
								lerna.json
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								lerna.json
									
									
									
									
									
								
							| @@ -1,15 +1,10 @@ | ||||
| { | ||||
|     "lerna": "2.5.1", | ||||
|     "lerna": "3.0.0-beta.23", | ||||
|     "packages": ["packages/*"], | ||||
|     "commands": { | ||||
|         "publish": { | ||||
|             "allowBranch": "development" | ||||
|         } | ||||
|     }, | ||||
|     "version": "independent", | ||||
|     "commands": { | ||||
|     "command": { | ||||
|         "publish": { | ||||
|             "ignore": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"] | ||||
|             "ignoreChanges": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"] | ||||
|         } | ||||
|     }, | ||||
|     "npmClient": "yarn", | ||||
|   | ||||
							
								
								
									
										64
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								package.json
									
									
									
									
									
								
							| @@ -11,43 +11,69 @@ | ||||
|         "ganache": "ganache-cli -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"", | ||||
|         "prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc", | ||||
|         "prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc", | ||||
|         "report_coverage": "lcov-result-merger 'packages/*/coverage/lcov.info' | coveralls", | ||||
|         "report_coverage": "lcov-result-merger './{packages/*/coverage/lcov.info,python-packages/*/.coverage}' | coveralls", | ||||
|         "test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js", | ||||
|         "run:publish": "run-s install:all build:monorepo_scripts script:prepublish_checks rebuild script:publish", | ||||
|         "run:publish:dry": "run-s install:all build:monorepo_scripts script:prepublish_checks rebuild script:publish:dry", | ||||
|         "test:installation:local": "IS_LOCAL_PUBLISH=true node ./packages/monorepo-scripts/lib/test_installation.js", | ||||
|         "test:publish:circleci": "yarn npm-cli-login -u test -p test -e test@example.com -r http://localhost:4873 && IS_LOCAL_PUBLISH=true run-s script:publish test:installation:local", | ||||
|         "run:publish": "run-s install:all build:monorepo_scripts script:prepublish_checks rebuild:no_website script:publish", | ||||
|         "run:publish:local": "IS_LOCAL_PUBLISH=true yarn run:publish", | ||||
|         "script:prepublish_checks": "node ./packages/monorepo-scripts/lib/prepublish_checks.js", | ||||
|         "script:publish": "node ./packages/monorepo-scripts/lib/publish.js", | ||||
|         "script:publish:dry": "IS_DRY_RUN=true yarn script:publish", | ||||
|         "install:all": "yarn install", | ||||
|         "wsrun": "wsrun", | ||||
|         "lerna:run": "lerna run", | ||||
|         "watch": "wsrun watch_without_deps $PKG --fast-exit -r --stages --done-criteria='complete|successfully'", | ||||
|         "lerna": "lerna", | ||||
|         "build": "wsrun build $PKG --fast-exit -r --stages", | ||||
|         "build:monorepo_scripts": "PKG=@0xproject/monorepo-scripts yarn build", | ||||
|         "build:no_website": "wsrun build $PKG --fast-exit -r --stages --exclude @0x/website", | ||||
|         "build:ci:no_website": "wsrun build:ci $PKG --fast-exit -r --stages --exclude @0x/website", | ||||
|         "build:monorepo_scripts": "PKG=@0x/monorepo-scripts yarn build", | ||||
|         "build:ts": "tsc -b", | ||||
|         "watch:ts": "tsc -b -w", | ||||
|         "clean": "wsrun clean $PKG --fast-exit -r --parallel", | ||||
|         "remove_node_modules": "lerna clean --yes; rm -rf node_modules", | ||||
|         "rebuild": "run-s clean build", | ||||
|         "rebuild:no_website": "run-s clean build:no_website", | ||||
|         "test": "wsrun test $PKG --fast-exit --serial --exclude-missing", | ||||
|         "stage_docs": "wsrun docs:stage $PKG --fast-exit --parallel --exclude-missing", | ||||
|         "lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing", | ||||
|         "comment:postinstall": "HACK: For some reason `yarn` is not setting up symlinks properly for order-utils. We temporarily set them manually. Remove this after V2 refactor is complete.", | ||||
|         "postinstall": "rm -rf `pwd`/packages/order-utils/node_modules/@0xproject; mkdir `pwd`/packages/order-utils/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/order-utils/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/assert `pwd`/packages/order-utils/node_modules/@0xproject/assert; ln -s `pwd`/packages/types `pwd`/packages/order-utils/node_modules/@0xproject/types; rm -f `pwd`/packages/contracts/node_modules/@0xproject/types; ln -s `pwd`/packages/types `pwd`/packages/contracts/node_modules/@0xproject/types; rm -rf `pwd`/packages/fill-scenarios/node_modules/@0xproject; mkdir -p `pwd`/packages/fill-scenarios/node_modules/@0xproject; ln -s `pwd`/packages/types `pwd`/packages/fill-scenarios/node_modules/@0xproject/types; ln -s `pwd`/packages/json-schemas `pwd`/packages/fill-scenarios/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/order-utils `pwd`/packages/fill-scenarios/node_modules/@0xproject/order-utils; rm -rf `pwd`/packages/contract-wrappers/node_modules/@0xproject; mkdir -p `pwd`/packages/contract-wrappers/node_modules/@0xproject; ln -s `pwd`/packages/order-utils `pwd`/packages/contract-wrappers/node_modules/@0xproject/order-utils; ln -s `pwd`/packages/assert `pwd`/packages/contract-wrappers/node_modules/@0xproject/assert; ln -s `pwd`/packages/json-schemas `pwd`/packages/contract-wrappers/node_modules/@0xproject/json-schemas; ln -s `pwd`/packages/types `pwd`/packages/contract-wrappers/node_modules/@0xproject/types; ln -s `pwd`/packages/fill-scenarios `pwd`/packages/contract-wrappers/node_modules/@0xproject/fill-scenarios; rm -rf `pwd`/packages/assert/node_modules/@0xproject; mkdir -p `pwd`/packages/assert/node_modules/@0xproject; ln -s `pwd`/packages/json-schemas `pwd`/packages/assert/node_modules/@0xproject/json-schemas" | ||||
|         "generate_doc": "node ./packages/monorepo-scripts/lib/doc_generate_and_upload.js", | ||||
|         "test:generate_docs:circleci": "for i in ${npm_package_config_packagesWithDocPages}; do yarn generate_doc --package $i --shouldUpload false --isStaging true || break -1; done;", | ||||
|         "bundlewatch": "bundlewatch", | ||||
|         "lint": "wsrun lint $PKG --fast-exit --parallel --exclude-missing" | ||||
|     }, | ||||
|     "config": { | ||||
|         "mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic" | ||||
|         "mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic", | ||||
|         "packagesWithDocPages": "0x.js connect json-schemas subproviders web3-wrapper contract-wrappers order-utils order-watcher sol-compiler sol-cov ethereum-types asset-buyer" | ||||
|     }, | ||||
|     "bundlewatch": { | ||||
|         "files": [ | ||||
|             { | ||||
|                 "path": "packages/0x.js/_bundles/index.min.js", | ||||
|                 "maxSize": "700kB" | ||||
|             }, | ||||
|             { | ||||
|                 "path": "packages/instant/public/main.bundle.js", | ||||
|                 "maxSize": "1000kB" | ||||
|             } | ||||
|         ], | ||||
|         "ci": { | ||||
|             "trackBranches": [ | ||||
|                 "master", | ||||
|                 "development" | ||||
|             ], | ||||
|             "repoBranchBase": "development" | ||||
|         } | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "@0x-lerna-fork/lerna": "3.0.0-beta.25", | ||||
|         "@0xproject/npm-cli-login": "^0.0.11", | ||||
|         "async-child-process": "^1.1.1", | ||||
|         "bundlewatch": "^0.2.1", | ||||
|         "coveralls": "^3.0.0", | ||||
|         "ganache-cli": "6.1.3", | ||||
|         "ganache-cli": "6.1.8", | ||||
|         "lcov-result-merger": "^3.0.0", | ||||
|         "lerna": "^2.5.1", | ||||
|         "lerna": "^3.0.0-beta.25", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "prettier": "^1.11.1", | ||||
|         "wsrun": "^2.2.0", | ||||
|         "source-map-support": "^0.5.6" | ||||
|     }, | ||||
|     "resolutions": { | ||||
|         "ethers": "0xproject/ethers.js#eip-838-reasons" | ||||
|         "source-map-support": "^0.5.6", | ||||
|         "typescript": "3.0.1", | ||||
|         "wsrun": "^2.2.0" | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -4,7 +4,6 @@ webpack.config.js | ||||
| yarn-error.log | ||||
| test/ | ||||
| /src/ | ||||
| /_bundles/ | ||||
| /contract_templates/ | ||||
| /generated_docs/ | ||||
| /scripts/ | ||||
|   | ||||
| @@ -1,4 +1,282 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1542208198, | ||||
|         "version": "2.0.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542134075, | ||||
|         "version": "2.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542028948, | ||||
|         "version": "2.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1541740904 | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Add support for `eth_signTypedData`.", | ||||
|                 "pr": 1102 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Added `MetamaskSubprovider` to handle inconsistencies in Metamask's signing JSON RPC endpoints.", | ||||
|                 "pr": 1102 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Removed `SignerType` (including `SignerType.Metamask`). Please use the `MetamaskSubprovider` to wrap `web3.currentProvider`.", | ||||
|                 "pr": 1102 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers", | ||||
|                 "pr": 1105 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Make web3-provider-engine types a 'dependency' so it's available to users of the library", | ||||
|                 "pr": 1105 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Export new `AssetData` type from types", | ||||
|                 "pr": 1131 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1539871071 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.8", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1538693146 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1538157789, | ||||
|         "version": "1.0.7", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537907159, | ||||
|         "version": "1.0.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537875740, | ||||
|         "version": "1.0.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537541580, | ||||
|         "version": "1.0.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Drastically reduce the bundle size by removing unused parts of included contract artifacts." | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1537369748 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Add ZRX & WETH mainnet contract addresses into the included artifacts" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1537265493 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1536142250, | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Fix missing `BlockParamLiteral` type import issue" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1535377027 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": | ||||
|                     "Fix `main` and `types` package.json entries so that they point to the new location of index.d.ts and index.js" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": | ||||
|                     "Re-organize the exported interface of 0x.js. Remove the `ZeroEx` class, and instead export the same exports as `0x.js`'s sub-packages: `@0xproject/contract-wrappers`, `@0xproject/order-utils` and `@0xproject/order-watcher`", | ||||
|                 "pr": 963 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1535133899 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             }, | ||||
|             { | ||||
|                 "pr": 914, | ||||
|                 "note": "Update ecSignOrderHashAsync to return the signature as a string for immediate use in contracts" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1534210131 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Fixed bug caused by importing non-existent dep" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1532619515 | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1-rc.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1532605697 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532357734, | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532043100, | ||||
|         "version": "1.0.0-rc.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Remove `zeroEx.assetData`  and instead re-export it's static functions directly off `ZeroEx`" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532043000, | ||||
|         "version": "1.0.0-rc.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Remove tokenRegistry wrapper", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Rename `zeroEx.token` to `zeroEx.erc20Token`, and add `zeroEx.erc721Token`", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Rename `zeroEx.proxy` to `zeroEx.erc20Proxy` and add `zeroEx.erc721Proxy`", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Refactored `ZeroEx.isValidSignature` to `zeroEx.isValidSignatureAsync`. It is now async so that it can verify contract-dependent signature types", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Refactored `signOrderHashAsync` to `ecSignOrderHashAsync`. There are now many non-ECSignature ways to sign orders too.", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Removed `createOrderWatcherAsync` method. Will be added back once OrderWatcher is refactored for V2", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "0x.js exports renamed contract events and event arg types", | ||||
|                 "pr": 863 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Export `ZeroEx.assetData` with methods to decode/encode assetData fields found in 0x orders", | ||||
|                 "pr": 884 | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531919263, | ||||
|         "version": "0.38.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531149657, | ||||
|         "version": "0.38.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1529397769, | ||||
|         "version": "0.38.4", | ||||
|   | ||||
| @@ -1,10 +1,119 @@ | ||||
| <!-- | ||||
| This file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v2.0.4 - _November 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.3 - _November 13, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.2 - _November 12, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.1 - _November 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.0 - _October 18, 2018_ | ||||
|  | ||||
|     * Add support for `eth_signTypedData`. (#1102) | ||||
|     * Added `MetamaskSubprovider` to handle inconsistencies in Metamask's signing JSON RPC endpoints. (#1102) | ||||
|     * Removed `SignerType` (including `SignerType.Metamask`). Please use the `MetamaskSubprovider` to wrap `web3.currentProvider`. (#1102) | ||||
|     * Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers (#1105) | ||||
|     * Make web3-provider-engine types a 'dependency' so it's available to users of the library (#1105) | ||||
|     * Export new `AssetData` type from types (#1131) | ||||
|  | ||||
| ## v1.0.8 - _October 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.7 - _September 28, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.6 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.5 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.4 - _September 21, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.3 - _September 19, 2018_ | ||||
|  | ||||
|     * Drastically reduce the bundle size by removing unused parts of included contract artifacts. | ||||
|  | ||||
| ## v1.0.2 - _September 18, 2018_ | ||||
|  | ||||
|     * Add ZRX & WETH mainnet contract addresses into the included artifacts | ||||
|  | ||||
| ## v1.0.1 - _September 5, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1-rc.6 - _August 27, 2018_ | ||||
|  | ||||
|     * Fix missing `BlockParamLiteral` type import issue | ||||
|  | ||||
| ## v1.0.1-rc.5 - _Invalid date_ | ||||
|  | ||||
|     * Fix `main` and `types` package.json entries so that they point to the new location of index.d.ts and index.js | ||||
|  | ||||
| ## v1.0.1-rc.4 - _August 24, 2018_ | ||||
|  | ||||
|     * Re-organize the exported interface of 0x.js. Remove the `ZeroEx` class, and instead export the same exports as `0x.js`'s sub-packages: `@0xproject/contract-wrappers`, `@0xproject/order-utils` and `@0xproject/order-watcher` (#963) | ||||
|  | ||||
| ## v1.0.1-rc.3 - _August 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|     * Update ecSignOrderHashAsync to return the signature as a string for immediate use in contracts (#914) | ||||
|  | ||||
| ## v1.0.1-rc.2 - _July 26, 2018_ | ||||
|  | ||||
|     * Fixed bug caused by importing non-existent dep | ||||
|  | ||||
| ## v1.0.1-rc.1 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0 - _July 23, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0-rc.2 - _July 19, 2018_ | ||||
|  | ||||
|     * Remove `zeroEx.assetData`  and instead re-export it's static functions directly off `ZeroEx` | ||||
|  | ||||
| ## v1.0.0-rc.1 - _July 19, 2018_ | ||||
|  | ||||
|     * Remove tokenRegistry wrapper (#863) | ||||
|     * Rename `zeroEx.token` to `zeroEx.erc20Token`, and add `zeroEx.erc721Token` (#863) | ||||
|     * Rename `zeroEx.proxy` to `zeroEx.erc20Proxy` and add `zeroEx.erc721Proxy` (#863) | ||||
|     * Refactored `ZeroEx.isValidSignature` to `zeroEx.isValidSignatureAsync`. It is now async so that it can verify contract-dependent signature types (#863) | ||||
|     * Refactored `signOrderHashAsync` to `ecSignOrderHashAsync`. There are now many non-ECSignature ways to sign orders too. (#863) | ||||
|     * Removed `createOrderWatcherAsync` method. Will be added back once OrderWatcher is refactored for V2 (#863) | ||||
|     * 0x.js exports renamed contract events and event arg types (#863) | ||||
|     * Export `ZeroEx.assetData` with methods to decode/encode assetData fields found in 0x orders (#884) | ||||
|  | ||||
| ## v0.38.6 - _July 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.38.5 - _July 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.38.4 - _June 19, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
| @@ -26,7 +135,7 @@ CHANGELOG | ||||
|     * Renamed createOrderStateWatcher to createOrderWatcherAsync since it is now async (#579) | ||||
|     * Renamed ZeroExError to ContractWrappersErrors since they now lives in the @0xproject/contract-wrappers subpackage (#579) | ||||
|  | ||||
| ## v0.37.2 - _May 5, 2018_ | ||||
| ## v0.37.2 - _May 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| ## 0x.js | ||||
|  | ||||
| A TypeScript/Javascript library for interacting with the 0x protocol. | ||||
| A TypeScript/Javascript library for interacting with the 0x protocol. It is a high level package which combines a number of underlying packages such as order-utils and order-watcher. | ||||
|  | ||||
| ### Read the [Documentation](https://0xproject.com/docs/0x.js). | ||||
|  | ||||
| @@ -19,14 +19,21 @@ npm install 0x.js --save | ||||
| **Import** | ||||
|  | ||||
| ```javascript | ||||
| import { ZeroEx } from '0x.js'; | ||||
| import { | ||||
|     assetDataUtils, | ||||
|     BigNumber, | ||||
|     ContractWrappers, | ||||
|     generatePseudoRandomSalt, | ||||
|     orderHashUtils, | ||||
|     signatureUtils, | ||||
| } from '0x.js'; | ||||
| ``` | ||||
|  | ||||
| If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: | ||||
|  | ||||
| ```json | ||||
| "compilerOptions": { | ||||
|     "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], | ||||
|     "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], | ||||
| } | ||||
| ``` | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "0x.js", | ||||
|     "version": "0.38.4", | ||||
|     "version": "2.0.4", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -12,55 +12,28 @@ | ||||
|         "tokens", | ||||
|         "exchange" | ||||
|     ], | ||||
|     "main": "lib/src/index.js", | ||||
|     "types": "lib/src/index.d.ts", | ||||
|     "main": "lib/index.js", | ||||
|     "types": "lib/index.d.ts", | ||||
|     "scripts": { | ||||
|         "watch_without_deps": "yarn pre_build && tsc -w", | ||||
|         "build": "yarn pre_build && yarn build:all && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts", | ||||
|         "build:all": "run-p build:umd:prod build:commonjs; exit 0;", | ||||
|         "pre_build": "run-s generate_contract_wrappers copy_artifacts", | ||||
|         "copy_artifacts": "copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts", | ||||
|         "generate_contract_wrappers": "abi-gen --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated_contract_wrappers --backend ethers", | ||||
|         "lint": "tslint --project . --exclude **/src/generated_contract_wrappers/**/*", | ||||
|         "build": "yarn build:all", | ||||
|         "build:ci": "yarn build:commonjs", | ||||
|         "build:all": "run-p build:umd:prod build:commonjs", | ||||
|         "lint": "tslint --format stylish --project .", | ||||
|         "test:circleci": "run-s test:coverage", | ||||
|         "test": "yarn run_mocha", | ||||
|         "rebuild_and_test": "run-s build test", | ||||
|         "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", | ||||
|         "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info", | ||||
|         "clean": "shx rm -rf _bundles lib test_temp scripts src/generated_contract_wrappers", | ||||
|         "clean": "shx rm -rf _bundles lib test_temp src/generated_contract_wrappers generated_docs", | ||||
|         "build:umd:prod": "NODE_ENV=production webpack", | ||||
|         "build:commonjs": "tsc && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts", | ||||
|         "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js lib/test/global_hooks.js --timeout 10000 --bail --exit", | ||||
|         "manual:postpublish": "yarn build; node ./scripts/postpublish.js", | ||||
|         "docs:stage": "node scripts/stage_docs.js", | ||||
|         "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES", | ||||
|         "upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json" | ||||
|         "build:commonjs": "tsc -b", | ||||
|         "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" | ||||
|     }, | ||||
|     "config": { | ||||
|         "compact_artifacts": "Exchange DummyToken ZRXToken Token EtherToken TokenTransferProxy TokenRegistry", | ||||
|         "postpublish": { | ||||
|             "assets": [ | ||||
|                 "packages/0x.js/_bundles/index.js", | ||||
|                 "packages/0x.js/_bundles/index.min.js" | ||||
|             ], | ||||
|             "docPublishConfigs": { | ||||
|                 "extraFileIncludes": [ | ||||
|                     "../types/src/index.ts", | ||||
|                     "../ethereum-types/src/index.ts", | ||||
|                     "../contract-wrappers/src/types.ts", | ||||
|                     "../contract-wrappers/src/contract_wrappers/ether_token_wrapper.ts", | ||||
|                     "../contract-wrappers/src/contract_wrappers/exchange_wrapper.ts", | ||||
|                     "../contract-wrappers/src/contract_wrappers/token_registry_wrapper.ts", | ||||
|                     "../contract-wrappers/src/contract_wrappers/token_transfer_proxy_wrapper.ts", | ||||
|                     "../contract-wrappers/src/contract_wrappers/token_wrapper.ts", | ||||
|                     "../order-watcher/src/order_watcher/order_watcher.ts", | ||||
|                     "./src/generated_contract_wrappers/ether_token.ts", | ||||
|                     "./src/generated_contract_wrappers/token.ts", | ||||
|                     "./src/generated_contract_wrappers/exchange.ts" | ||||
|                 ], | ||||
|                 "s3BucketPath": "s3://doc-jsons/0x.js/", | ||||
|                 "s3StagingBucketPath": "s3://staging-doc-jsons/0x.js/" | ||||
|             } | ||||
|             ] | ||||
|         } | ||||
|     }, | ||||
|     "repository": { | ||||
| @@ -69,50 +42,52 @@ | ||||
|     }, | ||||
|     "license": "Apache-2.0", | ||||
|     "devDependencies": { | ||||
|         "@0xproject/abi-gen": "^0.3.2", | ||||
|         "@0xproject/dev-utils": "^0.4.4", | ||||
|         "@0xproject/migrations": "^0.0.8", | ||||
|         "@0xproject/monorepo-scripts": "^0.2.1", | ||||
|         "@0xproject/sol-compiler": "^0.5.2", | ||||
|         "@0xproject/tslint-config": "^0.4.20", | ||||
|         "@0x/abi-gen": "^1.0.16", | ||||
|         "@0x/abi-gen-wrappers": "^1.0.5", | ||||
|         "@0x/contract-addresses": "^1.1.0", | ||||
|         "@0x/dev-utils": "^1.0.17", | ||||
|         "@0x/migrations": "^2.0.4", | ||||
|         "@0x/tslint-config": "^1.0.10", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^2.2.42", | ||||
|         "@types/node": "^8.0.53", | ||||
|         "@types/node": "*", | ||||
|         "@types/sinon": "^2.2.2", | ||||
|         "awesome-typescript-loader": "^3.1.3", | ||||
|         "awesome-typescript-loader": "^5.2.1", | ||||
|         "chai": "^4.0.1", | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^2.0.1", | ||||
|         "copyfiles": "^1.2.0", | ||||
|         "copyfiles": "^2.0.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "json-loader": "^0.5.4", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^4.0.1", | ||||
|         "mocha": "^4.1.0", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "nyc": "^11.0.1", | ||||
|         "opn-cli": "^3.1.0", | ||||
|         "shx": "^0.2.2", | ||||
|         "sinon": "^4.0.0", | ||||
|         "source-map-support": "^0.5.0", | ||||
|         "tslint": "5.8.0", | ||||
|         "typedoc": "0xProject/typedoc", | ||||
|         "typescript": "2.7.1", | ||||
|         "webpack": "^3.1.0" | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "0.13.0", | ||||
|         "typescript": "3.0.1", | ||||
|         "uglifyjs-webpack-plugin": "^2.0.1", | ||||
|         "webpack": "^4.20.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0xproject/assert": "^0.2.12", | ||||
|         "@0xproject/base-contract": "^0.3.4", | ||||
|         "@0xproject/contract-wrappers": "^0.0.5", | ||||
|         "@0xproject/order-utils": "^0.0.7", | ||||
|         "@0xproject/order-watcher": "^0.0.6", | ||||
|         "@0xproject/sol-compiler": "^0.5.2", | ||||
|         "@0xproject/types": "^0.8.1", | ||||
|         "@0xproject/typescript-typings": "^0.4.1", | ||||
|         "@0xproject/utils": "^0.7.1", | ||||
|         "@0xproject/web3-wrapper": "^0.7.1", | ||||
|         "ethereum-types": "^0.0.2", | ||||
|         "ethers": "3.0.22", | ||||
|         "lodash": "^4.17.4" | ||||
|         "@0x/assert": "^1.0.17", | ||||
|         "@0x/base-contract": "^3.0.6", | ||||
|         "@0x/contract-wrappers": "^4.0.2", | ||||
|         "@0x/order-utils": "^3.0.2", | ||||
|         "@0x/order-watcher": "^2.2.4", | ||||
|         "@0x/subproviders": "^2.1.4", | ||||
|         "@0x/types": "^1.2.1", | ||||
|         "@0x/typescript-typings": "^3.0.4", | ||||
|         "@0x/utils": "^2.0.5", | ||||
|         "@0x/web3-wrapper": "^3.1.4", | ||||
|         "@types/web3-provider-engine": "^14.0.0", | ||||
|         "ethereum-types": "^1.1.2", | ||||
|         "ethers": "~4.0.4", | ||||
|         "lodash": "^4.17.5", | ||||
|         "web3-provider-engine": "14.0.6" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,228 +0,0 @@ | ||||
| import { assert } from '@0xproject/assert'; | ||||
| import { | ||||
|     ContractWrappers, | ||||
|     ContractWrappersConfig, | ||||
|     EtherTokenWrapper, | ||||
|     ExchangeWrapper, | ||||
|     TokenRegistryWrapper, | ||||
|     TokenTransferProxyWrapper, | ||||
|     TokenWrapper, | ||||
| } from '@0xproject/contract-wrappers'; | ||||
| import { | ||||
|     generatePseudoRandomSalt, | ||||
|     getOrderHashHex, | ||||
|     isValidOrderHash, | ||||
|     isValidSignature, | ||||
|     signOrderHashAsync, | ||||
| } from '@0xproject/order-utils'; | ||||
| import { OrderWatcher, OrderWatcherConfig } from '@0xproject/order-watcher'; | ||||
| import { ECSignature, Order, Provider, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types'; | ||||
| import { BigNumber } from '@0xproject/utils'; | ||||
| import { Web3Wrapper } from '@0xproject/web3-wrapper'; | ||||
|  | ||||
| import { constants } from './utils/constants'; | ||||
|  | ||||
| /** | ||||
|  * The ZeroEx class is the single entry-point into the 0x.js library. It contains all of the library's functionality | ||||
|  * and all calls to the library should be made through a ZeroEx instance. | ||||
|  */ | ||||
| export class ZeroEx { | ||||
|     /** | ||||
|      * When creating an order without a specified taker or feeRecipient you must supply the Solidity | ||||
|      * address null type (as opposed to Javascripts `null`, `undefined` or empty string). We expose | ||||
|      * this constant for your convenience. | ||||
|      */ | ||||
|     public static NULL_ADDRESS = constants.NULL_ADDRESS; | ||||
|     /** | ||||
|      * An instance of the ExchangeWrapper class containing methods for interacting with the 0x Exchange smart contract. | ||||
|      */ | ||||
|     public exchange: ExchangeWrapper; | ||||
|     /** | ||||
|      * An instance of the TokenRegistryWrapper class containing methods for interacting with the 0x | ||||
|      * TokenRegistry smart contract. | ||||
|      */ | ||||
|     public tokenRegistry: TokenRegistryWrapper; | ||||
|     /** | ||||
|      * An instance of the TokenWrapper class containing methods for interacting with any ERC20 token smart contract. | ||||
|      */ | ||||
|     public token: TokenWrapper; | ||||
|     /** | ||||
|      * An instance of the EtherTokenWrapper class containing methods for interacting with the | ||||
|      * wrapped ETH ERC20 token smart contract. | ||||
|      */ | ||||
|     public etherToken: EtherTokenWrapper; | ||||
|     /** | ||||
|      * An instance of the TokenTransferProxyWrapper class containing methods for interacting with the | ||||
|      * tokenTransferProxy smart contract. | ||||
|      */ | ||||
|     public proxy: TokenTransferProxyWrapper; | ||||
|     private _contractWrappers: ContractWrappers; | ||||
|     /** | ||||
|      * Generates a pseudo-random 256-bit salt. | ||||
|      * The salt can be included in a 0x order, ensuring that the order generates a unique orderHash | ||||
|      * and will not collide with other outstanding orders that are identical in all other parameters. | ||||
|      * @return  A pseudo-random 256-bit number that can be used as a salt. | ||||
|      */ | ||||
|     public static generatePseudoRandomSalt(): BigNumber { | ||||
|         return generatePseudoRandomSalt(); | ||||
|     } | ||||
|     /** | ||||
|      * Verifies that the elliptic curve signature `signature` was generated | ||||
|      * by signing `data` with the private key corresponding to the `signerAddress` address. | ||||
|      * @param   data          The hex encoded data signed by the supplied signature. | ||||
|      * @param   signature     An object containing the elliptic curve signature parameters. | ||||
|      * @param   signerAddress The hex encoded address that signed the data, producing the supplied signature. | ||||
|      * @return  Whether the signature is valid for the supplied signerAddress and data. | ||||
|      */ | ||||
|     public static isValidSignature(data: string, signature: ECSignature, signerAddress: string): boolean { | ||||
|         return isValidSignature(data, signature, signerAddress); | ||||
|     } | ||||
|     /** | ||||
|      * Computes the orderHash for a supplied order. | ||||
|      * @param   order   An object that conforms to the Order or SignedOrder interface definitions. | ||||
|      * @return  The resulting orderHash from hashing the supplied order. | ||||
|      */ | ||||
|     public static getOrderHashHex(order: Order | SignedOrder): string { | ||||
|         return getOrderHashHex(order); | ||||
|     } | ||||
|     /** | ||||
|      * Checks if the supplied hex encoded order hash is valid. | ||||
|      * Note: Valid means it has the expected format, not that an order with the orderHash exists. | ||||
|      * Use this method when processing orderHashes submitted as user input. | ||||
|      * @param   orderHash    Hex encoded orderHash. | ||||
|      * @return  Whether the supplied orderHash has the expected format. | ||||
|      */ | ||||
|     public static isValidOrderHash(orderHash: string): boolean { | ||||
|         return isValidOrderHash(orderHash); | ||||
|     } | ||||
|     /** | ||||
|      * A unit amount is defined as the amount of a token above the specified decimal places (integer part). | ||||
|      * E.g: If a currency has 18 decimal places, 1e18 or one quintillion of the currency is equivalent | ||||
|      * to 1 unit. | ||||
|      * @param   amount      The amount in baseUnits that you would like converted to units. | ||||
|      * @param   decimals    The number of decimal places the unit amount has. | ||||
|      * @return  The amount in units. | ||||
|      */ | ||||
|     public static toUnitAmount(amount: BigNumber, decimals: number): BigNumber { | ||||
|         assert.isValidBaseUnitAmount('amount', amount); | ||||
|         assert.isNumber('decimals', decimals); | ||||
|         const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals); | ||||
|         return unitAmount; | ||||
|     } | ||||
|     /** | ||||
|      * A baseUnit is defined as the smallest denomination of a token. An amount expressed in baseUnits | ||||
|      * is the amount expressed in the smallest denomination. | ||||
|      * E.g: 1 unit of a token with 18 decimal places is expressed in baseUnits as 1000000000000000000 | ||||
|      * @param   amount      The amount of units that you would like converted to baseUnits. | ||||
|      * @param   decimals    The number of decimal places the unit amount has. | ||||
|      * @return  The amount in baseUnits. | ||||
|      */ | ||||
|     public static toBaseUnitAmount(amount: BigNumber, decimals: number): BigNumber { | ||||
|         assert.isBigNumber('amount', amount); | ||||
|         assert.isNumber('decimals', decimals); | ||||
|         const baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amount, decimals); | ||||
|         return baseUnitAmount; | ||||
|     } | ||||
|     /** | ||||
|      * Instantiates a new ZeroEx instance that provides the public interface to the 0x.js library. | ||||
|      * @param   provider    The Provider instance you would like the 0x.js library to use for interacting with | ||||
|      *                      the Ethereum network. | ||||
|      * @param   config      The configuration object. Look up the type for the description. | ||||
|      * @return  An instance of the 0x.js ZeroEx class. | ||||
|      */ | ||||
|     constructor(provider: Provider, config: ContractWrappersConfig) { | ||||
|         assert.isWeb3Provider('provider', provider); | ||||
|         this._contractWrappers = new ContractWrappers(provider, config); | ||||
|  | ||||
|         this.proxy = this._contractWrappers.proxy; | ||||
|         this.token = this._contractWrappers.token; | ||||
|         this.exchange = this._contractWrappers.exchange; | ||||
|         this.tokenRegistry = this._contractWrappers.tokenRegistry; | ||||
|         this.etherToken = this._contractWrappers.etherToken; | ||||
|     } | ||||
|     /** | ||||
|      * Sets a new web3 provider for 0x.js. Updating the provider will stop all | ||||
|      * subscriptions so you will need to re-subscribe to all events relevant to your app after this call. | ||||
|      * @param   provider    The Web3Provider you would like the 0x.js library to use from now on. | ||||
|      * @param   networkId   The id of the network your provider is connected to | ||||
|      */ | ||||
|     public setProvider(provider: Provider, networkId: number): void { | ||||
|         this._contractWrappers.setProvider(provider, networkId); | ||||
|     } | ||||
|     /** | ||||
|      * Get the provider instance currently used by 0x.js | ||||
|      * @return  Web3 provider instance | ||||
|      */ | ||||
|     public getProvider(): Provider { | ||||
|         return this._contractWrappers.getProvider(); | ||||
|     } | ||||
|     /** | ||||
|      * Get user Ethereum addresses available through the supplied web3 provider available for sending transactions. | ||||
|      * @return  An array of available user Ethereum addresses. | ||||
|      */ | ||||
|     public async getAvailableAddressesAsync(): Promise<string[]> { | ||||
|         // Hack: Get Web3Wrapper from ContractWrappers | ||||
|         const web3Wrapper: Web3Wrapper = (this._contractWrappers as any)._web3Wrapper; | ||||
|         const availableAddresses = await web3Wrapper.getAvailableAddressesAsync(); | ||||
|         return availableAddresses; | ||||
|     } | ||||
|     /** | ||||
|      * Signs an orderHash and returns it's elliptic curve signature. | ||||
|      * This method currently supports TestRPC, Geth and Parity above and below V1.6.6 | ||||
|      * @param   orderHash       Hex encoded orderHash to sign. | ||||
|      * @param   signerAddress   The hex encoded Ethereum address you wish to sign it with. This address | ||||
|      *          must be available via the Provider supplied to 0x.js. | ||||
|      * @param   shouldAddPersonalMessagePrefix  Some signers add the personal message prefix `\x19Ethereum Signed Message` | ||||
|      *          themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client | ||||
|      *          (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix | ||||
|      *          before sending the request. | ||||
|      * @return  An object containing the Elliptic curve signature parameters generated by signing the orderHash. | ||||
|      */ | ||||
|     public async signOrderHashAsync( | ||||
|         orderHash: string, | ||||
|         signerAddress: string, | ||||
|         shouldAddPersonalMessagePrefix: boolean, | ||||
|     ): Promise<ECSignature> { | ||||
|         return signOrderHashAsync( | ||||
|             this._contractWrappers.getProvider(), | ||||
|             orderHash, | ||||
|             signerAddress, | ||||
|             shouldAddPersonalMessagePrefix, | ||||
|         ); | ||||
|     } | ||||
|     /** | ||||
|      * Waits for a transaction to be mined and returns the transaction receipt. | ||||
|      * @param   txHash            Transaction hash | ||||
|      * @param   pollingIntervalMs How often (in ms) should we check if the transaction is mined. | ||||
|      * @param   timeoutMs         How long (in ms) to poll for transaction mined until aborting. | ||||
|      * @return  Transaction receipt with decoded log args. | ||||
|      */ | ||||
|     public async awaitTransactionMinedAsync( | ||||
|         txHash: string, | ||||
|         pollingIntervalMs: number = 1000, | ||||
|         timeoutMs?: number, | ||||
|     ): Promise<TransactionReceiptWithDecodedLogs> { | ||||
|         // Hack: Get Web3Wrapper from ContractWrappers | ||||
|         const web3Wrapper: Web3Wrapper = (this._contractWrappers as any)._web3Wrapper; | ||||
|         const transactionReceiptWithDecodedLogs = await web3Wrapper.awaitTransactionMinedAsync( | ||||
|             txHash, | ||||
|             pollingIntervalMs, | ||||
|             timeoutMs, | ||||
|         ); | ||||
|         return transactionReceiptWithDecodedLogs; | ||||
|     } | ||||
|     /** | ||||
|      * Instantiates and returns a new OrderWatcher instance. | ||||
|      * Defaults to watching the pending state. | ||||
|      * @param   config      The configuration object. Look up the type for the description. | ||||
|      * @return  An instance of the 0x.js OrderWatcher class. | ||||
|      */ | ||||
|     public async createOrderWatcherAsync(config?: OrderWatcherConfig): Promise<OrderWatcher> { | ||||
|         // Hack: Get Web3Wrapper from ContractWrappers | ||||
|         const web3Wrapper: Web3Wrapper = (this._contractWrappers as any)._web3Wrapper; | ||||
|         const networkId = await web3Wrapper.getNetworkIdAsync(); | ||||
|         const provider = this._contractWrappers.getProvider(); | ||||
|         const orderWatcher = new OrderWatcher(provider, networkId, config); | ||||
|         return orderWatcher; | ||||
|     } | ||||
| } | ||||
| @@ -1,22 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "DummyToken", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_target", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "setBalance", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
| @@ -1,287 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "EtherToken", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "name", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "approve", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "totalSupply", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_from", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transferFrom", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "amount", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "withdraw", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "decimals", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint8" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "balanceOf", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "symbol", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transfer", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [], | ||||
|             "name": "deposit", | ||||
|             "outputs": [], | ||||
|             "payable": true, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "allowance", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "payable": true, | ||||
|             "type": "fallback" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_from", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Transfer", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Approval", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Deposit", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Withdrawal", | ||||
|             "type": "event" | ||||
|         } | ||||
|     ], | ||||
|     "networks": { | ||||
|         "1": { | ||||
|             "address": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2" | ||||
|         }, | ||||
|         "3": { | ||||
|             "address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a" | ||||
|         }, | ||||
|         "4": { | ||||
|             "address": "0xc778417e063141139fce010982780140aa0cd5ab" | ||||
|         }, | ||||
|         "42": { | ||||
|             "address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1" | ||||
|         }, | ||||
|         "50": { | ||||
|             "address": "0x871dd7c2b4b25e1aa18728e9d5f2af4c4e431f5c" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,610 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "Exchange", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "numerator", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "denominator", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "target", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "isRoundingError", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "filled", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "cancelled", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "fillTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "shouldThrowOnInsufficientBalanceOrAllowance", | ||||
|                     "type": "bool" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32[]" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "fillOrdersUpTo", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "cancelTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "cancelOrder", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "ZRX_TOKEN_CONTRACT", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "fillTakerTokenAmounts", | ||||
|                     "type": "uint256[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32[]" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "batchFillOrKillOrders", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "fillTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "fillOrKillOrder", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderHash", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getUnavailableTakerTokenAmount", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "signer", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "hash", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "isValidSignature", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "numerator", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "denominator", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "target", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getPartialAmount", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "TOKEN_TRANSFER_PROXY_CONTRACT", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "fillTakerTokenAmounts", | ||||
|                     "type": "uint256[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "shouldThrowOnInsufficientBalanceOrAllowance", | ||||
|                     "type": "bool" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32[]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32[]" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "batchFillOrders", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6][]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "cancelTakerTokenAmounts", | ||||
|                     "type": "uint256[]" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "batchCancelOrders", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "fillTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "shouldThrowOnInsufficientBalanceOrAllowance", | ||||
|                     "type": "bool" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "v", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "r", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "s", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "fillOrder", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "filledTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "orderAddresses", | ||||
|                     "type": "address[5]" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "orderValues", | ||||
|                     "type": "uint256[6]" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getOrderHash", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "EXTERNAL_QUERY_GAS_LIMIT", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint16" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "VERSION", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_zrxToken", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_tokenTransferProxy", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "constructor" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "maker", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "taker", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "feeRecipient", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "makerToken", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "takerToken", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "filledMakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "filledTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "paidMakerFee", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "paidTakerFee", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "tokens", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "orderHash", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogFill", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "maker", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "feeRecipient", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "makerToken", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "takerToken", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "cancelledMakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "cancelledTakerTokenAmount", | ||||
|                     "type": "uint256" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "tokens", | ||||
|                     "type": "bytes32" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "orderHash", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogCancel", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "errorId", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "orderHash", | ||||
|                     "type": "bytes32" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogError", | ||||
|             "type": "event" | ||||
|         } | ||||
|     ], | ||||
|     "networks": { | ||||
|         "1": { | ||||
|             "address": "0x12459c951127e0c374ff9105dda097662a027093" | ||||
|         }, | ||||
|         "3": { | ||||
|             "address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac" | ||||
|         }, | ||||
|         "4": { | ||||
|             "address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05" | ||||
|         }, | ||||
|         "42": { | ||||
|             "address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364" | ||||
|         }, | ||||
|         "50": { | ||||
|             "address": "0x48bacb9266a570d521063ef5dd96e61686dbe788" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,172 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "Token", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "approve", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "success", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "totalSupply", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "supply", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_from", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transferFrom", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "success", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "balanceOf", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "balance", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transfer", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "success", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "allowance", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "remaining", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_from", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Transfer", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_owner", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "_spender", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "_value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "Approval", | ||||
|             "type": "event" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
| @@ -1,547 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "TokenRegistry", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_index", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "removeToken", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_name", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getTokenAddressByName", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_symbol", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getTokenAddressBySymbol", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_swarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "setTokenSwarmHash", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getTokenMetaData", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "owner", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_name", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_symbol", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_decimals", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_ipfsHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_swarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "addToken", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_name", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "setTokenName", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "tokens", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "name", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "symbol", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "decimals", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "ipfsHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "swarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "tokenAddresses", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_name", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getTokenByName", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "getTokenAddresses", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address[]" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_ipfsHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "setTokenIpfsHash", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_symbol", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "getTokenBySymbol", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "_token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "_symbol", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "setTokenSymbol", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "newOwner", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transferOwnership", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "name", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "symbol", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "decimals", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "ipfsHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "swarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogAddToken", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "name", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "symbol", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "decimals", | ||||
|                     "type": "uint8" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "ipfsHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "swarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogRemoveToken", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "oldName", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "newName", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogTokenNameChange", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "oldSymbol", | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "newSymbol", | ||||
|                     "type": "string" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogTokenSymbolChange", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "oldIpfsHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "newIpfsHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogTokenIpfsHashChange", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "oldSwarmHash", | ||||
|                     "type": "bytes" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": false, | ||||
|                     "name": "newSwarmHash", | ||||
|                     "type": "bytes" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogTokenSwarmHashChange", | ||||
|             "type": "event" | ||||
|         } | ||||
|     ], | ||||
|     "networks": { | ||||
|         "1": { | ||||
|             "address": "0x926a74c5c36adf004c87399e65f75628b0f98d2c" | ||||
|         }, | ||||
|         "3": { | ||||
|             "address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed" | ||||
|         }, | ||||
|         "4": { | ||||
|             "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6" | ||||
|         }, | ||||
|         "42": { | ||||
|             "address": "0xf18e504561f4347bea557f3d4558f559dddbae7f" | ||||
|         }, | ||||
|         "50": { | ||||
|             "address": "0x0b1ba0af832d7c05fd64161e0db78e85978e8082" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,187 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "TokenTransferProxy", | ||||
|     "abi": [ | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "token", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "from", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "to", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "name": "value", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transferFrom", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "target", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "addAuthorizedAddress", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "uint256" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "authorities", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "target", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "removeAuthorizedAddress", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "owner", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "authorized", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "bool" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": true, | ||||
|             "inputs": [], | ||||
|             "name": "getAuthorizedAddresses", | ||||
|             "outputs": [ | ||||
|                 { | ||||
|                     "name": "", | ||||
|                     "type": "address[]" | ||||
|                 } | ||||
|             ], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "constant": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "name": "newOwner", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "transferOwnership", | ||||
|             "outputs": [], | ||||
|             "payable": false, | ||||
|             "type": "function" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "target", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "caller", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogAuthorizedAddressAdded", | ||||
|             "type": "event" | ||||
|         }, | ||||
|         { | ||||
|             "anonymous": false, | ||||
|             "inputs": [ | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "target", | ||||
|                     "type": "address" | ||||
|                 }, | ||||
|                 { | ||||
|                     "indexed": true, | ||||
|                     "name": "caller", | ||||
|                     "type": "address" | ||||
|                 } | ||||
|             ], | ||||
|             "name": "LogAuthorizedAddressRemoved", | ||||
|             "type": "event" | ||||
|         } | ||||
|     ], | ||||
|     "networks": { | ||||
|         "1": { | ||||
|             "address": "0x8da0d80f5007ef1e431dd2127178d224e32c2ef4" | ||||
|         }, | ||||
|         "3": { | ||||
|             "address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6" | ||||
|         }, | ||||
|         "4": { | ||||
|             "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d" | ||||
|         }, | ||||
|         "42": { | ||||
|             "address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4" | ||||
|         }, | ||||
|         "50": { | ||||
|             "address": "0x1dc4c1cefef38a777b15aa20260a54e584b16c48" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,20 +0,0 @@ | ||||
| { | ||||
|     "contract_name": "ZRX", | ||||
|     "networks": { | ||||
|         "1": { | ||||
|             "address": "0xe41d2489571d322189246dafa5ebde1f4699f498" | ||||
|         }, | ||||
|         "3": { | ||||
|             "address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d" | ||||
|         }, | ||||
|         "4": { | ||||
|             "address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8" | ||||
|         }, | ||||
|         "42": { | ||||
|             "address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570" | ||||
|         }, | ||||
|         "50": { | ||||
|             "address": "0x1d7022f5b17d2f8b695918fb48fa1089c9f85401" | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -1,53 +1,117 @@ | ||||
| export { ZeroEx } from './0x'; | ||||
| export { ContractAddresses } from '@0x/contract-addresses'; | ||||
|  | ||||
| export { assetDataUtils, signatureUtils, generatePseudoRandomSalt, orderHashUtils } from '@0x/order-utils'; | ||||
|  | ||||
| export { | ||||
|     ContractWrappers, | ||||
|     ERC20TokenWrapper, | ||||
|     ERC721TokenWrapper, | ||||
|     EtherTokenWrapper, | ||||
|     ExchangeWrapper, | ||||
|     ERC20ProxyWrapper, | ||||
|     ERC721ProxyWrapper, | ||||
|     ForwarderWrapper, | ||||
|     OrderValidatorWrapper, | ||||
|     IndexedFilterValues, | ||||
|     BlockRange, | ||||
|     ContractWrappersConfig, | ||||
|     MethodOpts, | ||||
|     OrderTransactionOpts, | ||||
|     TransactionOpts, | ||||
|     OrderStatus, | ||||
|     OrderInfo, | ||||
|     EventCallback, | ||||
|     DecodedLogEvent, | ||||
|     TransactionEncoder, | ||||
|     BalanceAndAllowance, | ||||
|     OrderAndTraderInfo, | ||||
|     TraderInfo, | ||||
|     ValidateOrderFillableOpts, | ||||
| } from '@0x/contract-wrappers'; | ||||
|  | ||||
| export { | ||||
|     WETH9Events, | ||||
|     WETH9WithdrawalEventArgs, | ||||
|     WETH9ApprovalEventArgs, | ||||
|     WETH9EventArgs, | ||||
|     WETH9DepositEventArgs, | ||||
|     WETH9TransferEventArgs, | ||||
|     ERC20TokenTransferEventArgs, | ||||
|     ERC20TokenApprovalEventArgs, | ||||
|     ERC20TokenEvents, | ||||
|     ERC20TokenEventArgs, | ||||
|     ERC721TokenApprovalEventArgs, | ||||
|     ERC721TokenApprovalForAllEventArgs, | ||||
|     ERC721TokenTransferEventArgs, | ||||
|     ERC721TokenEvents, | ||||
|     ERC721TokenEventArgs, | ||||
|     ExchangeCancelUpToEventArgs, | ||||
|     ExchangeAssetProxyRegisteredEventArgs, | ||||
|     ExchangeSignatureValidatorApprovalEventArgs, | ||||
|     ExchangeFillEventArgs, | ||||
|     ExchangeCancelEventArgs, | ||||
|     ExchangeEventArgs, | ||||
|     ExchangeEvents, | ||||
| } from '@0x/abi-gen-wrappers'; | ||||
|  | ||||
| export { OrderWatcher, OnOrderStateChangeCallback, OrderWatcherConfig } from '@0x/order-watcher'; | ||||
|  | ||||
| export import Web3ProviderEngine = require('web3-provider-engine'); | ||||
|  | ||||
| export { | ||||
|     RPCSubprovider, | ||||
|     Callback, | ||||
|     JSONRPCRequestPayloadWithMethod, | ||||
|     ErrorCallback, | ||||
|     MetamaskSubprovider, | ||||
| } from '@0x/subproviders'; | ||||
|  | ||||
| export { AbiDecoder } from '@0x/utils'; | ||||
|  | ||||
| export { BigNumber } from '@0x/utils'; | ||||
|  | ||||
| export { | ||||
|     BlockParamLiteral, | ||||
|     FilterObject, | ||||
|     BlockParam, | ||||
|     ContractEventArg, | ||||
|     ExchangeContractErrs, | ||||
|     LogWithDecodedArgs, | ||||
|     Order, | ||||
|     Provider, | ||||
|     SignedOrder, | ||||
|     ECSignature, | ||||
|     OrderStateValid, | ||||
|     OrderStateInvalid, | ||||
|     OrderState, | ||||
|     Token, | ||||
|     TransactionReceipt, | ||||
|     TransactionReceiptWithDecodedLogs, | ||||
| } from '@0xproject/types'; | ||||
|  | ||||
| export { OrderWatcherConfig } from '@0xproject/order-watcher'; | ||||
|     AssetProxyId, | ||||
|     AssetData, | ||||
|     ERC20AssetData, | ||||
|     ERC721AssetData, | ||||
|     SignatureType, | ||||
|     OrderRelevantState, | ||||
|     Stats, | ||||
| } from '@0x/types'; | ||||
|  | ||||
| export { | ||||
|     EventCallback, | ||||
|     ContractEvent, | ||||
|     IndexedFilterValues, | ||||
|     BlockRange, | ||||
|     OrderCancellationRequest, | ||||
|     OrderFillRequest, | ||||
|     ContractEventArgs, | ||||
|     MethodOpts, | ||||
|     OrderTransactionOpts, | ||||
|     TransactionOpts, | ||||
|     LogEvent, | ||||
|     DecodedLogEvent, | ||||
|     OnOrderStateChangeCallback, | ||||
|     ContractWrappersError, | ||||
|     EtherTokenContractEventArgs, | ||||
|     WithdrawalContractEventArgs, | ||||
|     DepositContractEventArgs, | ||||
|     EtherTokenEvents, | ||||
|     TransferContractEventArgs, | ||||
|     ApprovalContractEventArgs, | ||||
|     TokenContractEventArgs, | ||||
|     TokenEvents, | ||||
|     LogErrorContractEventArgs, | ||||
|     LogCancelContractEventArgs, | ||||
|     LogFillContractEventArgs, | ||||
|     ExchangeContractEventArgs, | ||||
|     ExchangeEvents, | ||||
|     ContractWrappersConfig, | ||||
| } from '@0xproject/contract-wrappers'; | ||||
|     BlockParamLiteral, | ||||
|     ContractAbi, | ||||
|     BlockParam, | ||||
|     LogWithDecodedArgs, | ||||
|     ContractEventArg, | ||||
|     Provider, | ||||
|     JSONRPCRequestPayload, | ||||
|     JSONRPCResponsePayload, | ||||
|     JSONRPCErrorCallback, | ||||
|     JSONRPCResponseError, | ||||
|     LogEntry, | ||||
|     DecodedLogArgs, | ||||
|     LogEntryEvent, | ||||
|     DecodedLogEntry, | ||||
|     DecodedLogEntryEvent, | ||||
|     RawLog, | ||||
|     AbiDefinition, | ||||
|     FunctionAbi, | ||||
|     EventAbi, | ||||
|     EventParameter, | ||||
|     MethodAbi, | ||||
|     ConstructorAbi, | ||||
|     FallbackAbi, | ||||
|     DataItem, | ||||
|     ConstructorStateMutability, | ||||
|     StateMutability, | ||||
| } from 'ethereum-types'; | ||||
|   | ||||
| @@ -1,8 +0,0 @@ | ||||
| import { postpublishUtils } from '@0xproject/monorepo-scripts'; | ||||
|  | ||||
| import * as packageJSON from '../package.json'; | ||||
| import * as tsConfigJSON from '../tsconfig.json'; | ||||
|  | ||||
| const cwd = `${__dirname}/..`; | ||||
| // tslint:disable-next-line:no-floating-promises | ||||
| postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd); | ||||
| @@ -1,8 +0,0 @@ | ||||
| import { postpublishUtils } from '@0xproject/monorepo-scripts'; | ||||
|  | ||||
| import * as packageJSON from '../package.json'; | ||||
| import * as tsConfigJSON from '../tsconfig.json'; | ||||
|  | ||||
| const cwd = `${__dirname}/..`; | ||||
| // tslint:disable-next-line:no-floating-promises | ||||
| postpublishUtils.publishDocsToStagingAsync(packageJSON, tsConfigJSON, cwd); | ||||
| @@ -1,5 +0,0 @@ | ||||
| export const zeroExConfigSchema = { | ||||
|     id: '/ZeroExConfig', | ||||
|     oneOf: [{ $ref: '/ZeroExPrivateNetworkConfig' }, { $ref: '/ZeroExPublicNetworkConfig' }], | ||||
|     type: 'object', | ||||
| }; | ||||
| @@ -1,35 +0,0 @@ | ||||
| export const zeroExPrivateNetworkConfigSchema = { | ||||
|     id: '/ZeroExPrivateNetworkConfig', | ||||
|     properties: { | ||||
|         networkId: { | ||||
|             type: 'number', | ||||
|             minimum: 1, | ||||
|         }, | ||||
|         gasPrice: { $ref: '/Number' }, | ||||
|         zrxContractAddress: { $ref: '/Address' }, | ||||
|         exchangeContractAddress: { $ref: '/Address' }, | ||||
|         tokenRegistryContractAddress: { $ref: '/Address' }, | ||||
|         tokenTransferProxyContractAddress: { $ref: '/Address' }, | ||||
|         orderWatcherConfig: { | ||||
|             type: 'object', | ||||
|             properties: { | ||||
|                 pollingIntervalMs: { | ||||
|                     type: 'number', | ||||
|                     minimum: 0, | ||||
|                 }, | ||||
|                 numConfirmations: { | ||||
|                     type: 'number', | ||||
|                     minimum: 0, | ||||
|                 }, | ||||
|             }, | ||||
|         }, | ||||
|     }, | ||||
|     type: 'object', | ||||
|     required: [ | ||||
|         'networkId', | ||||
|         'zrxContractAddress', | ||||
|         'exchangeContractAddress', | ||||
|         'tokenRegistryContractAddress', | ||||
|         'tokenTransferProxyContractAddress', | ||||
|     ], | ||||
| }; | ||||
| @@ -1,43 +0,0 @@ | ||||
| const networkNameToId: { [networkName: string]: number } = { | ||||
|     mainnet: 1, | ||||
|     ropsten: 3, | ||||
|     rinkeby: 4, | ||||
|     kovan: 42, | ||||
|     ganache: 50, | ||||
| }; | ||||
|  | ||||
| export const zeroExPublicNetworkConfigSchema = { | ||||
|     id: '/ZeroExPublicNetworkConfig', | ||||
|     properties: { | ||||
|         networkId: { | ||||
|             type: 'number', | ||||
|             enum: [ | ||||
|                 networkNameToId.mainnet, | ||||
|                 networkNameToId.ropsten, | ||||
|                 networkNameToId.rinkeby, | ||||
|                 networkNameToId.kovan, | ||||
|                 networkNameToId.ganache, | ||||
|             ], | ||||
|         }, | ||||
|         gasPrice: { $ref: '/Number' }, | ||||
|         zrxContractAddress: { $ref: '/Address' }, | ||||
|         exchangeContractAddress: { $ref: '/Address' }, | ||||
|         tokenRegistryContractAddress: { $ref: '/Address' }, | ||||
|         tokenTransferProxyContractAddress: { $ref: '/Address' }, | ||||
|         orderWatcherConfig: { | ||||
|             type: 'object', | ||||
|             properties: { | ||||
|                 pollingIntervalMs: { | ||||
|                     type: 'number', | ||||
|                     minimum: 0, | ||||
|                 }, | ||||
|                 numConfirmations: { | ||||
|                     type: 'number', | ||||
|                     minimum: 0, | ||||
|                 }, | ||||
|             }, | ||||
|         }, | ||||
|     }, | ||||
|     type: 'object', | ||||
|     required: ['networkId'], | ||||
| }; | ||||
| @@ -1,7 +0,0 @@ | ||||
| export enum InternalZeroExError { | ||||
|     NoAbiDecoder = 'NO_ABI_DECODER', | ||||
|     ZrxNotInTokenRegistry = 'ZRX_NOT_IN_TOKEN_REGISTRY', | ||||
|     WethNotInTokenRegistry = 'WETH_NOT_IN_TOKEN_REGISTRY', | ||||
| } | ||||
|  | ||||
| // tslint:disable:max-file-line-count | ||||
| @@ -1,4 +0,0 @@ | ||||
| export const constants = { | ||||
|     NULL_ADDRESS: '0x0000000000000000000000000000000000000000', | ||||
|     TESTRPC_NETWORK_ID: 50, | ||||
| }; | ||||
| @@ -1,165 +0,0 @@ | ||||
| import { ContractWrappers } from '@0xproject/contract-wrappers'; | ||||
| import { BlockchainLifecycle } from '@0xproject/dev-utils'; | ||||
| import { BigNumber } from '@0xproject/utils'; | ||||
| import * as chai from 'chai'; | ||||
| import * as _ from 'lodash'; | ||||
| import 'mocha'; | ||||
|  | ||||
| import { ApprovalContractEventArgs, LogWithDecodedArgs, TokenEvents, ZeroEx } from '../src'; | ||||
|  | ||||
| import { chaiSetup } from './utils/chai_setup'; | ||||
| import { constants } from './utils/constants'; | ||||
| import { TokenUtils } from './utils/token_utils'; | ||||
| import { provider, web3Wrapper } from './utils/web3_wrapper'; | ||||
|  | ||||
| const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper); | ||||
| chaiSetup.configure(); | ||||
| const expect = chai.expect; | ||||
|  | ||||
| describe('ZeroEx library', () => { | ||||
|     let zeroEx: ZeroEx; | ||||
|     before(async () => { | ||||
|         const config = { | ||||
|             networkId: constants.TESTRPC_NETWORK_ID, | ||||
|         }; | ||||
|         zeroEx = new ZeroEx(provider, config); | ||||
|     }); | ||||
|     describe('#setProvider', () => { | ||||
|         it('overrides provider in nested web3s and invalidates contractInstances', async () => { | ||||
|             // Instantiate the contract instances with the current provider | ||||
|             await (zeroEx.exchange as any)._getExchangeContractAsync(); | ||||
|             await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync(); | ||||
|             expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined(); | ||||
|             expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined(); | ||||
|  | ||||
|             // Add property to newProvider so that we can differentiate it from old provider | ||||
|             (provider as any).zeroExTestId = 1; | ||||
|             zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID); | ||||
|  | ||||
|             // Check that contractInstances with old provider are removed after provider update | ||||
|             expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined(); | ||||
|             expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined(); | ||||
|  | ||||
|             // Check that all nested zeroExContract/web3Wrapper instances return the updated provider | ||||
|             const nestedWeb3WrapperProvider = ((zeroEx as any)._contractWrappers as ContractWrappers).getProvider(); | ||||
|             expect((nestedWeb3WrapperProvider as any).zeroExTestId).to.be.a('number'); | ||||
|             const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getProvider(); | ||||
|             expect(exchangeWeb3WrapperProvider.zeroExTestId).to.be.a('number'); | ||||
|             const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getProvider(); | ||||
|             expect(tokenRegistryWeb3WrapperProvider.zeroExTestId).to.be.a('number'); | ||||
|         }); | ||||
|     }); | ||||
|     describe('#isValidSignature', () => { | ||||
|         // The Exchange smart contract `isValidSignature` method only validates orderHashes and assumes | ||||
|         // the length of the data is exactly 32 bytes. Thus for these tests, we use data of this size. | ||||
|         const dataHex = '0x6927e990021d23b1eb7b8789f6a6feaf98fe104bb0cf8259421b79f9a34222b0'; | ||||
|         const signature = { | ||||
|             v: 27, | ||||
|             r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33', | ||||
|             s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254', | ||||
|         }; | ||||
|         const address = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; | ||||
|         it("should return false if the data doesn't pertain to the signature & address", async () => { | ||||
|             return expect( | ||||
|                 (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync('0x0', signature, address), | ||||
|             ).to.become(false); | ||||
|         }); | ||||
|         it("should return false if the address doesn't pertain to the signature & data", async () => { | ||||
|             const validUnrelatedAddress = '0x8b0292b11a196601ed2ce54b665cafeca0347d42'; | ||||
|             return expect( | ||||
|                 (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync( | ||||
|                     dataHex, | ||||
|                     signature, | ||||
|                     validUnrelatedAddress, | ||||
|                 ), | ||||
|             ).to.become(false); | ||||
|         }); | ||||
|         it("should return false if the signature doesn't pertain to the dataHex & address", async () => { | ||||
|             const wrongSignature = _.assign({}, signature, { v: 28 }); | ||||
|             return expect( | ||||
|                 (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync(dataHex, wrongSignature, address), | ||||
|             ).to.become(false); | ||||
|         }); | ||||
|         it('should return true if the signature does pertain to the dataHex & address', async () => { | ||||
|             return expect( | ||||
|                 (zeroEx.exchange as any)._isValidSignatureUsingContractCallAsync(dataHex, signature, address), | ||||
|             ).to.become(true); | ||||
|         }); | ||||
|     }); | ||||
|     describe('#toUnitAmount', () => { | ||||
|         it('should throw if invalid baseUnit amount supplied as argument', () => { | ||||
|             const invalidBaseUnitAmount = new BigNumber(1000000000.4); | ||||
|             const decimals = 6; | ||||
|             expect(() => ZeroEx.toUnitAmount(invalidBaseUnitAmount, decimals)).to.throw( | ||||
|                 'amount should be in baseUnits (no decimals), found value: 1000000000.4', | ||||
|             ); | ||||
|         }); | ||||
|         it('Should return the expected unit amount for the decimals passed in', () => { | ||||
|             const baseUnitAmount = new BigNumber(1000000000); | ||||
|             const decimals = 6; | ||||
|             const unitAmount = ZeroEx.toUnitAmount(baseUnitAmount, decimals); | ||||
|             const expectedUnitAmount = new BigNumber(1000); | ||||
|             expect(unitAmount).to.be.bignumber.equal(expectedUnitAmount); | ||||
|         }); | ||||
|     }); | ||||
|     describe('#toBaseUnitAmount', () => { | ||||
|         it('Should return the expected base unit amount for the decimals passed in', () => { | ||||
|             const unitAmount = new BigNumber(1000); | ||||
|             const decimals = 6; | ||||
|             const baseUnitAmount = ZeroEx.toBaseUnitAmount(unitAmount, decimals); | ||||
|             const expectedUnitAmount = new BigNumber(1000000000); | ||||
|             expect(baseUnitAmount).to.be.bignumber.equal(expectedUnitAmount); | ||||
|         }); | ||||
|         it('should throw if unitAmount has more decimals then specified as the max decimal precision', () => { | ||||
|             const unitAmount = new BigNumber(0.823091); | ||||
|             const decimals = 5; | ||||
|             expect(() => ZeroEx.toBaseUnitAmount(unitAmount, decimals)).to.throw( | ||||
|                 'Invalid unit amount: 0.823091 - Too many decimal places', | ||||
|             ); | ||||
|         }); | ||||
|     }); | ||||
|     describe('#awaitTransactionMinedAsync', () => { | ||||
|         beforeEach(async () => { | ||||
|             await blockchainLifecycle.startAsync(); | ||||
|         }); | ||||
|         afterEach(async () => { | ||||
|             await blockchainLifecycle.revertAsync(); | ||||
|         }); | ||||
|         it('returns transaction receipt with decoded logs', async () => { | ||||
|             const availableAddresses = await zeroEx.getAvailableAddressesAsync(); | ||||
|             const coinbase = availableAddresses[0]; | ||||
|             const tokens = await zeroEx.tokenRegistry.getTokensAsync(); | ||||
|             const tokenUtils = new TokenUtils(tokens); | ||||
|             const zrxTokenAddress = tokenUtils.getProtocolTokenOrThrow().address; | ||||
|             const proxyAddress = zeroEx.proxy.getContractAddress(); | ||||
|             const txHash = await zeroEx.token.setUnlimitedProxyAllowanceAsync(zrxTokenAddress, coinbase); | ||||
|             const txReceiptWithDecodedLogs = await zeroEx.awaitTransactionMinedAsync(txHash); | ||||
|             // tslint:disable-next-line:no-unnecessary-type-assertion | ||||
|             const log = txReceiptWithDecodedLogs.logs[0] as LogWithDecodedArgs<ApprovalContractEventArgs>; | ||||
|             expect(log.event).to.be.equal(TokenEvents.Approval); | ||||
|             expect(log.args._owner).to.be.equal(coinbase); | ||||
|             expect(log.args._spender).to.be.equal(proxyAddress); | ||||
|             expect(log.args._value).to.be.bignumber.equal(zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS); | ||||
|         }); | ||||
|     }); | ||||
|     describe('#config', () => { | ||||
|         it('allows to specify exchange contract address', async () => { | ||||
|             const zeroExConfig = { | ||||
|                 exchangeContractAddress: ZeroEx.NULL_ADDRESS, | ||||
|                 networkId: constants.TESTRPC_NETWORK_ID, | ||||
|             }; | ||||
|             const zeroExWithWrongExchangeAddress = new ZeroEx(provider, zeroExConfig); | ||||
|             expect(zeroExWithWrongExchangeAddress.exchange.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS); | ||||
|         }); | ||||
|         it('allows to specify token registry token contract address', async () => { | ||||
|             const zeroExConfig = { | ||||
|                 tokenRegistryContractAddress: ZeroEx.NULL_ADDRESS, | ||||
|                 networkId: constants.TESTRPC_NETWORK_ID, | ||||
|             }; | ||||
|             const zeroExWithWrongTokenRegistryAddress = new ZeroEx(provider, zeroExConfig); | ||||
|             expect(zeroExWithWrongTokenRegistryAddress.tokenRegistry.getContractAddress()).to.be.equal( | ||||
|                 ZeroEx.NULL_ADDRESS, | ||||
|             ); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| @@ -1,48 +0,0 @@ | ||||
| import { web3Factory } from '@0xproject/dev-utils'; | ||||
|  | ||||
| import { ZeroEx } from '../src'; | ||||
|  | ||||
| import { chaiSetup } from './utils/chai_setup'; | ||||
| import { constants } from './utils/constants'; | ||||
|  | ||||
| chaiSetup.configure(); | ||||
|  | ||||
| // Those tests are slower cause they're talking to a remote node | ||||
| const TIMEOUT = 10000; | ||||
|  | ||||
| describe('Artifacts', () => { | ||||
|     describe('contracts are deployed on kovan', () => { | ||||
|         const kovanRpcUrl = constants.KOVAN_RPC_URL; | ||||
|         const provider = web3Factory.getRpcProvider({ rpcUrl: kovanRpcUrl }); | ||||
|         const config = { | ||||
|             networkId: constants.KOVAN_NETWORK_ID, | ||||
|         }; | ||||
|         const zeroEx = new ZeroEx(provider, config); | ||||
|         it('token registry contract is deployed', async () => { | ||||
|             await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|         it('proxy contract is deployed', async () => { | ||||
|             await (zeroEx.proxy as any)._getTokenTransferProxyContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|         it('exchange contract is deployed', async () => { | ||||
|             await (zeroEx.exchange as any)._getExchangeContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|     }); | ||||
|     describe('contracts are deployed on ropsten', () => { | ||||
|         const ropstenRpcUrl = constants.ROPSTEN_RPC_URL; | ||||
|         const provider = web3Factory.getRpcProvider({ rpcUrl: ropstenRpcUrl }); | ||||
|         const config = { | ||||
|             networkId: constants.ROPSTEN_NETWORK_ID, | ||||
|         }; | ||||
|         const zeroEx = new ZeroEx(provider, config); | ||||
|         it('token registry contract is deployed', async () => { | ||||
|             await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|         it('proxy contract is deployed', async () => { | ||||
|             await (zeroEx.proxy as any)._getTokenTransferProxyContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|         it('exchange contract is deployed', async () => { | ||||
|             await (zeroEx.exchange as any)._getExchangeContractAsync(); | ||||
|         }).timeout(TIMEOUT); | ||||
|     }); | ||||
| }); | ||||
| @@ -1,17 +0,0 @@ | ||||
| import { devConstants } from '@0xproject/dev-utils'; | ||||
| import { runV1MigrationsAsync } from '@0xproject/migrations'; | ||||
|  | ||||
| import { provider } from './utils/web3_wrapper'; | ||||
|  | ||||
| before('migrate contracts', async function(): Promise<void> { | ||||
|     // HACK: Since the migrations take longer then our global mocha timeout limit | ||||
|     // we manually increase it for this before hook. | ||||
|     const mochaTestTimeoutMs = 20000; | ||||
|     this.timeout(mochaTestTimeoutMs); | ||||
|     const txDefaults = { | ||||
|         gas: devConstants.GAS_LIMIT, | ||||
|         from: devConstants.TESTRPC_FIRST_ADDRESS, | ||||
|     }; | ||||
|     const artifactsDir = `../migrations/artifacts/1.0.0`; | ||||
|     await runV1MigrationsAsync(provider, artifactsDir, txDefaults); | ||||
| }); | ||||
| @@ -1,9 +0,0 @@ | ||||
| export const constants = { | ||||
|     NULL_ADDRESS: '0x0000000000000000000000000000000000000000', | ||||
|     ROPSTEN_NETWORK_ID: 3, | ||||
|     KOVAN_NETWORK_ID: 42, | ||||
|     TESTRPC_NETWORK_ID: 50, | ||||
|     KOVAN_RPC_URL: 'https://kovan.infura.io/', | ||||
|     ROPSTEN_RPC_URL: 'https://ropsten.infura.io/', | ||||
|     ZRX_DECIMALS: 18, | ||||
| }; | ||||
| @@ -1,34 +0,0 @@ | ||||
| import { Token } from '@0xproject/types'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { InternalZeroExError } from '../../src/types'; | ||||
|  | ||||
| const PROTOCOL_TOKEN_SYMBOL = 'ZRX'; | ||||
| const WETH_TOKEN_SYMBOL = 'WETH'; | ||||
|  | ||||
| export class TokenUtils { | ||||
|     private _tokens: Token[]; | ||||
|     constructor(tokens: Token[]) { | ||||
|         this._tokens = tokens; | ||||
|     } | ||||
|     public getProtocolTokenOrThrow(): Token { | ||||
|         const zrxToken = _.find(this._tokens, { symbol: PROTOCOL_TOKEN_SYMBOL }); | ||||
|         if (_.isUndefined(zrxToken)) { | ||||
|             throw new Error(InternalZeroExError.ZrxNotInTokenRegistry); | ||||
|         } | ||||
|         return zrxToken; | ||||
|     } | ||||
|     public getWethTokenOrThrow(): Token { | ||||
|         const wethToken = _.find(this._tokens, { symbol: WETH_TOKEN_SYMBOL }); | ||||
|         if (_.isUndefined(wethToken)) { | ||||
|             throw new Error(InternalZeroExError.WethNotInTokenRegistry); | ||||
|         } | ||||
|         return wethToken; | ||||
|     } | ||||
|     public getDummyTokens(): Token[] { | ||||
|         const dummyTokens = _.filter(this._tokens, token => { | ||||
|             return !_.includes([PROTOCOL_TOKEN_SYMBOL, WETH_TOKEN_SYMBOL], token.symbol); | ||||
|         }); | ||||
|         return dummyTokens; | ||||
|     } | ||||
| } | ||||
| @@ -1,8 +0,0 @@ | ||||
| import { web3Factory } from '@0xproject/dev-utils'; | ||||
| import { Provider } from '@0xproject/types'; | ||||
| import { Web3Wrapper } from '@0xproject/web3-wrapper'; | ||||
|  | ||||
| const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); | ||||
| const web3Wrapper = new Web3Wrapper(provider); | ||||
|  | ||||
| export { provider, web3Wrapper }; | ||||
| @@ -1,7 +1,8 @@ | ||||
| { | ||||
|     "extends": "../../tsconfig", | ||||
|     "compilerOptions": { | ||||
|         "outDir": "lib" | ||||
|         "outDir": "lib", | ||||
|         "rootDir": "src" | ||||
|     }, | ||||
|     "include": ["./src/**/*", "./test/**/*"] | ||||
|     "include": ["./src/**/*"] | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| { | ||||
|     "extends": ["@0xproject/tslint-config"] | ||||
|     "extends": ["@0x/tslint-config"] | ||||
| } | ||||
|   | ||||
							
								
								
									
										7
									
								
								packages/0x.js/typedoc-tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								packages/0x.js/typedoc-tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| { | ||||
|     "extends": "../../typedoc-tsconfig", | ||||
|     "compilerOptions": { | ||||
|         "outDir": "lib" | ||||
|     }, | ||||
|     "include": ["./src/**/*"] | ||||
| } | ||||
| @@ -2,7 +2,7 @@ | ||||
|  * This is to generate the umd bundle only | ||||
|  */ | ||||
| const _ = require('lodash'); | ||||
| const webpack = require('webpack'); | ||||
| const TerserPlugin = require('terser-webpack-plugin'); | ||||
| const path = require('path'); | ||||
| const production = process.env.NODE_ENV === 'production'; | ||||
|  | ||||
| @@ -15,6 +15,7 @@ if (production) { | ||||
|  | ||||
| module.exports = { | ||||
|     entry, | ||||
|     mode: 'production', | ||||
|     output: { | ||||
|         path: path.resolve(__dirname, '_bundles'), | ||||
|         filename: '[name].js', | ||||
| @@ -26,13 +27,18 @@ module.exports = { | ||||
|         extensions: ['.ts', '.js', '.json'], | ||||
|     }, | ||||
|     devtool: 'source-map', | ||||
|     plugins: [ | ||||
|         new webpack.optimize.UglifyJsPlugin({ | ||||
|             minimize: true, | ||||
|             sourceMap: true, | ||||
|             include: /\.min\.js$/, | ||||
|         }), | ||||
|     ], | ||||
|     optimization: { | ||||
|         minimizer: [ | ||||
|             new TerserPlugin({ | ||||
|                 sourceMap: true, | ||||
|                 terserOptions: { | ||||
|                     mangle: { | ||||
|                         reserved: ['BigNumber'], | ||||
|                     }, | ||||
|                 }, | ||||
|             }), | ||||
|         ], | ||||
|     }, | ||||
|     module: { | ||||
|         rules: [ | ||||
|             { | ||||
| @@ -40,17 +46,18 @@ module.exports = { | ||||
|                 use: [ | ||||
|                     { | ||||
|                         loader: 'awesome-typescript-loader', | ||||
|                         // tsconfig.json contains some options required for | ||||
|                         // project references which do not work with webback. | ||||
|                         // We override those options here. | ||||
|                         query: { | ||||
|                             declaration: false, | ||||
|                             declarationMap: false, | ||||
|                             composite: false, | ||||
|                         }, | ||||
|                     }, | ||||
|                 ], | ||||
|                 exclude: /node_modules/, | ||||
|             }, | ||||
|             { | ||||
|                 test: /\.json$/, | ||||
|                 loader: 'json-loader', | ||||
|             }, | ||||
|         ], | ||||
|     }, | ||||
| }; | ||||
|   | ||||
							
								
								
									
										56
									
								
								packages/abi-gen-wrappers/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								packages/abi-gen-wrappers/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1542208198, | ||||
|         "version": "1.0.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542134075, | ||||
|         "version": "1.0.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542028948, | ||||
|         "version": "1.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1541740904 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1539871071, | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "pr": 1105, | ||||
|                 "note": "Initial release" | ||||
|             } | ||||
|         ] | ||||
|     } | ||||
| ] | ||||
							
								
								
									
										30
									
								
								packages/abi-gen-wrappers/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								packages/abi-gen-wrappers/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| <!-- | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v1.0.5 - _November 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.4 - _November 13, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.3 - _November 12, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.2 - _November 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1 - _October 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0 - _Invalid date_ | ||||
|  | ||||
|     * Initial release (#1105) | ||||
							
								
								
									
										73
									
								
								packages/abi-gen-wrappers/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								packages/abi-gen-wrappers/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| ## @0x/abi-gen-wrappers | ||||
|  | ||||
| Low-level 0x smart contract wrappers generated using @0x/abi-gen. These | ||||
| low-level wrappers are imported by other packages in the 0x monorepo and | ||||
| application developers are not expected to import this package directly. | ||||
|  | ||||
| You may also be interested in the | ||||
| [@0x/contract-wrappers](../contract-wrappers/README.md) package which | ||||
| includes some higher-level features. | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ```bash | ||||
| yarn add @0x/abi-gen-wrappers | ||||
| ``` | ||||
|  | ||||
| **Import** | ||||
|  | ||||
| ```typescript | ||||
| import * as wrappers from '@0x/abi-gen-wrappers'; | ||||
| ``` | ||||
|  | ||||
| or | ||||
|  | ||||
| ```javascript | ||||
| var wrappers = require('@0x/abi-gen-wrappers'); | ||||
| ``` | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository. | ||||
|  | ||||
| Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. | ||||
|  | ||||
| ### Install dependencies | ||||
|  | ||||
| If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: | ||||
|  | ||||
| ```bash | ||||
| yarn config set workspaces-experimental true | ||||
| ``` | ||||
|  | ||||
| Then install dependencies | ||||
|  | ||||
| ```bash | ||||
| yarn install | ||||
| ``` | ||||
|  | ||||
| ### Build | ||||
|  | ||||
| To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/abi-gen-wrappers yarn build | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
|  | ||||
| ```bash | ||||
| yarn clean | ||||
| ``` | ||||
|  | ||||
| ### Lint | ||||
|  | ||||
| ```bash | ||||
| yarn lint | ||||
| ``` | ||||
|  | ||||
| ### Run Tests | ||||
|  | ||||
| ```bash | ||||
| yarn test | ||||
| ``` | ||||
							
								
								
									
										48
									
								
								packages/abi-gen-wrappers/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								packages/abi-gen-wrappers/package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| { | ||||
|     "name": "@0x/abi-gen-wrappers", | ||||
|     "version": "1.0.5", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
|     "description": "Low-level 0x smart contract wrappers generated using @0x/abi-gen", | ||||
|     "main": "lib/src/index.js", | ||||
|     "directories": { | ||||
|         "test": "test" | ||||
|     }, | ||||
|     "scripts": { | ||||
|         "build": "yarn pre_build && tsc -b", | ||||
|         "build:ci": "yarn build", | ||||
|         "lint": "tslint --format stylish --project .", | ||||
|         "pre_build": "yarn generate_contract_wrappers", | ||||
|         "clean": "shx rm -rf lib wrappers", | ||||
|         "generate_contract_wrappers": "abi-gen --abis  ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/generated-wrappers --backend ethers" | ||||
|     }, | ||||
|     "config": { | ||||
|         "abis": "../contract-artifacts/artifacts/@(AssetProxyOwner|DummyERC20Token|DummyERC721Token|ERC20Proxy|ERC20Token|ERC721Proxy|ERC721Token|Exchange|Forwarder|IValidator|IWallet|OrderValidator|WETH9|ZRXToken).json" | ||||
|     }, | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" | ||||
|     }, | ||||
|     "license": "Apache-2.0", | ||||
|     "bugs": { | ||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen-wrappers/README.md", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^1.0.16", | ||||
|         "@0x/tslint-config": "^1.0.10", | ||||
|         "@0x/utils": "^2.0.5", | ||||
|         "@0x/web3-wrapper": "^3.1.4", | ||||
|         "ethereum-types": "^1.1.2", | ||||
|         "ethers": "~4.0.4", | ||||
|         "lodash": "^4.17.5", | ||||
|         "shx": "^0.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^3.0.6" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|     } | ||||
| } | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										649
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										649
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc20_proxy.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,649 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type ERC20ProxyEventArgs = | ||||
|     | ERC20ProxyAuthorizedAddressAddedEventArgs | ||||
|     | ERC20ProxyAuthorizedAddressRemovedEventArgs; | ||||
|  | ||||
| export enum ERC20ProxyEvents { | ||||
|     AuthorizedAddressAdded = 'AuthorizedAddressAdded', | ||||
|     AuthorizedAddressRemoved = 'AuthorizedAddressRemoved', | ||||
| } | ||||
|  | ||||
| export interface ERC20ProxyAuthorizedAddressAddedEventArgs extends DecodedLogArgs { | ||||
|     target: string; | ||||
|     caller: string; | ||||
| } | ||||
|  | ||||
| export interface ERC20ProxyAuthorizedAddressRemovedEventArgs extends DecodedLogArgs { | ||||
|     target: string; | ||||
|     caller: string; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ERC20ProxyContract extends BaseContract { | ||||
|     public addAuthorizedAddress = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.addAuthorizedAddress.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'addAuthorizedAddress(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.addAuthorizedAddress; | ||||
|             const encodedData = ethersFunction.encode([target | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'addAuthorizedAddress'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public authorities = { | ||||
|         async callAsync( | ||||
|             index_0: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'authorities(uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.authorities; | ||||
|             const encodedData = ethersFunction.encode([index_0 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'authorities'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public removeAuthorizedAddress = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.removeAuthorizedAddress.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'removeAuthorizedAddress(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.removeAuthorizedAddress; | ||||
|             const encodedData = ethersFunction.encode([target | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'removeAuthorizedAddress'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public owner = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'owner()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.owner; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'owner'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public removeAuthorizedAddressAtIndex = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|     index | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.removeAuthorizedAddressAtIndex.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target, | ||||
|                     index | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'removeAuthorizedAddressAtIndex(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target, | ||||
|         index | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|         index | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|         index | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.removeAuthorizedAddressAtIndex; | ||||
|             const encodedData = ethersFunction.encode([target, | ||||
|         index | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'removeAuthorizedAddressAtIndex'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getProxyId = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'getProxyId()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getProxyId; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getProxyId'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public authorized = { | ||||
|         async callAsync( | ||||
|             index_0: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'authorized(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.authorized; | ||||
|             const encodedData = ethersFunction.encode([index_0 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'authorized'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public getAuthorizedAddresses = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string[] | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'getAuthorizedAddresses()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getAuthorizedAddresses; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getAuthorizedAddresses'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transferOwnership = { | ||||
|         async sendTransactionAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferOwnership.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     newOwner | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             newOwner: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             newOwner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC20ProxyContract; | ||||
|             const functionSignature = 'transferOwnership(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [newOwner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferOwnership; | ||||
|             const encodedData = ethersFunction.encode([newOwner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferOwnership'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC20ProxyContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ERC20ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC20ProxyContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`ERC20Proxy successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ERC20ProxyContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('ERC20Proxy', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										556
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										556
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc20_token.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,556 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type ERC20TokenEventArgs = | ||||
|     | ERC20TokenTransferEventArgs | ||||
|     | ERC20TokenApprovalEventArgs; | ||||
|  | ||||
| export enum ERC20TokenEvents { | ||||
|     Transfer = 'Transfer', | ||||
|     Approval = 'Approval', | ||||
| } | ||||
|  | ||||
| export interface ERC20TokenTransferEventArgs extends DecodedLogArgs { | ||||
|     _from: string; | ||||
|     _to: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface ERC20TokenApprovalEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _spender: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ERC20TokenContract extends BaseContract { | ||||
|     public approve = { | ||||
|         async sendTransactionAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.approve.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _spender, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'approve(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_spender, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_spender, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.approve; | ||||
|             const encodedData = ethersFunction.encode([_spender, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'approve'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public totalSupply = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'totalSupply()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.totalSupply; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'totalSupply'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transferFrom = { | ||||
|         async sendTransactionAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferFrom.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _from, | ||||
|                     _to, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'transferFrom(address,address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferFrom; | ||||
|             const encodedData = ethersFunction.encode([_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public balanceOf = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'balanceOf(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.balanceOf; | ||||
|             const encodedData = ethersFunction.encode([_owner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'balanceOf'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transfer = { | ||||
|         async sendTransactionAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transfer.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _to, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'transfer(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_to, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_to, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transfer; | ||||
|             const encodedData = ethersFunction.encode([_to, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transfer'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public allowance = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             _spender: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ERC20TokenContract; | ||||
|             const functionSignature = 'allowance(address,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner, | ||||
|         _spender | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner, | ||||
|         _spender | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner, | ||||
|         _spender | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.allowance; | ||||
|             const encodedData = ethersFunction.encode([_owner, | ||||
|         _spender | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'allowance'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC20TokenContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ERC20TokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC20TokenContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`ERC20Token successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ERC20TokenContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('ERC20Token', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										649
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										649
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc721_proxy.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,649 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type ERC721ProxyEventArgs = | ||||
|     | ERC721ProxyAuthorizedAddressAddedEventArgs | ||||
|     | ERC721ProxyAuthorizedAddressRemovedEventArgs; | ||||
|  | ||||
| export enum ERC721ProxyEvents { | ||||
|     AuthorizedAddressAdded = 'AuthorizedAddressAdded', | ||||
|     AuthorizedAddressRemoved = 'AuthorizedAddressRemoved', | ||||
| } | ||||
|  | ||||
| export interface ERC721ProxyAuthorizedAddressAddedEventArgs extends DecodedLogArgs { | ||||
|     target: string; | ||||
|     caller: string; | ||||
| } | ||||
|  | ||||
| export interface ERC721ProxyAuthorizedAddressRemovedEventArgs extends DecodedLogArgs { | ||||
|     target: string; | ||||
|     caller: string; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ERC721ProxyContract extends BaseContract { | ||||
|     public addAuthorizedAddress = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.addAuthorizedAddress.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('addAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('addAuthorizedAddress(address)').functions.addAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'addAuthorizedAddress(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.addAuthorizedAddress; | ||||
|             const encodedData = ethersFunction.encode([target | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'addAuthorizedAddress'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public authorities = { | ||||
|         async callAsync( | ||||
|             index_0: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'authorities(uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.authorities; | ||||
|             const encodedData = ethersFunction.encode([index_0 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'authorities'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public removeAuthorizedAddress = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.removeAuthorizedAddress.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddress(address)').inputs; | ||||
|             [target | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('removeAuthorizedAddress(address)').functions.removeAuthorizedAddress.encode([target | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'removeAuthorizedAddress(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.removeAuthorizedAddress; | ||||
|             const encodedData = ethersFunction.encode([target | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'removeAuthorizedAddress'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public owner = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'owner()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.owner; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'owner'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public removeAuthorizedAddressAtIndex = { | ||||
|         async sendTransactionAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|     index | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.removeAuthorizedAddressAtIndex.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     target, | ||||
|                     index | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('removeAuthorizedAddressAtIndex(address,uint256)').inputs; | ||||
|             [target, | ||||
|     index | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|     index | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('removeAuthorizedAddressAtIndex(address,uint256)').functions.removeAuthorizedAddressAtIndex.encode([target, | ||||
|     index | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             index: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'removeAuthorizedAddressAtIndex(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target, | ||||
|         index | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|         index | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|         index | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.removeAuthorizedAddressAtIndex; | ||||
|             const encodedData = ethersFunction.encode([target, | ||||
|         index | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'removeAuthorizedAddressAtIndex'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getProxyId = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'getProxyId()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getProxyId; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getProxyId'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public authorized = { | ||||
|         async callAsync( | ||||
|             index_0: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'authorized(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.authorized; | ||||
|             const encodedData = ethersFunction.encode([index_0 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'authorized'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public getAuthorizedAddresses = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string[] | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'getAuthorizedAddresses()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getAuthorizedAddresses; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getAuthorizedAddresses'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transferOwnership = { | ||||
|         async sendTransactionAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferOwnership.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     newOwner | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             newOwner: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             newOwner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721ProxyContract; | ||||
|             const functionSignature = 'transferOwnership(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [newOwner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferOwnership; | ||||
|             const encodedData = ethersFunction.encode([newOwner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferOwnership'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC721ProxyContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ERC721ProxyContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC721ProxyContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`ERC721Proxy successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ERC721ProxyContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('ERC721Proxy', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										893
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										893
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/erc721_token.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,893 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type ERC721TokenEventArgs = | ||||
|     | ERC721TokenTransferEventArgs | ||||
|     | ERC721TokenApprovalEventArgs | ||||
|     | ERC721TokenApprovalForAllEventArgs; | ||||
|  | ||||
| export enum ERC721TokenEvents { | ||||
|     Transfer = 'Transfer', | ||||
|     Approval = 'Approval', | ||||
|     ApprovalForAll = 'ApprovalForAll', | ||||
| } | ||||
|  | ||||
| export interface ERC721TokenTransferEventArgs extends DecodedLogArgs { | ||||
|     _from: string; | ||||
|     _to: string; | ||||
|     _tokenId: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface ERC721TokenApprovalEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _approved: string; | ||||
|     _tokenId: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface ERC721TokenApprovalForAllEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _operator: string; | ||||
|     _approved: boolean; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ERC721TokenContract extends BaseContract { | ||||
|     public getApproved = { | ||||
|         async callAsync( | ||||
|             _tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'getApproved(uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getApproved; | ||||
|             const encodedData = ethersFunction.encode([_tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getApproved'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public approve = { | ||||
|         async sendTransactionAsync( | ||||
|             _approved: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_approved, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_approved, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_approved, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_approved, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.approve.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _approved, | ||||
|                     _tokenId | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _approved: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_approved, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_approved, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_approved, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _approved: string, | ||||
|             _tokenId: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_approved, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_approved, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_approved, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _approved: string, | ||||
|             _tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'approve(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_approved, | ||||
|         _tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_approved, | ||||
|         _tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_approved, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.approve; | ||||
|             const encodedData = ethersFunction.encode([_approved, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'approve'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public transferFrom = { | ||||
|         async sendTransactionAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferFrom.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _from, | ||||
|                     _to, | ||||
|                     _tokenId | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'transferFrom(address,address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferFrom; | ||||
|             const encodedData = ethersFunction.encode([_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public safeTransferFrom1 = { | ||||
|         async sendTransactionAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.safeTransferFrom1.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _from, | ||||
|                     _to, | ||||
|                     _tokenId | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'safeTransferFrom(address,address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.safeTransferFrom; | ||||
|             const encodedData = ethersFunction.encode([_from, | ||||
|         _to, | ||||
|         _tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'safeTransferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public ownerOf = { | ||||
|         async callAsync( | ||||
|             _tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'ownerOf(uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.ownerOf; | ||||
|             const encodedData = ethersFunction.encode([_tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'ownerOf'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public balanceOf = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'balanceOf(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.balanceOf; | ||||
|             const encodedData = ethersFunction.encode([_owner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'balanceOf'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public setApprovalForAll = { | ||||
|         async sendTransactionAsync( | ||||
|             _operator: string, | ||||
|             _approved: boolean, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('setApprovalForAll(address,bool)').inputs; | ||||
|             [_operator, | ||||
|     _approved | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_operator, | ||||
|     _approved | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_operator, | ||||
|     _approved | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('setApprovalForAll(address,bool)').functions.setApprovalForAll.encode([_operator, | ||||
|     _approved | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.setApprovalForAll.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _operator, | ||||
|                     _approved | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _operator: string, | ||||
|             _approved: boolean, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('setApprovalForAll(address,bool)').inputs; | ||||
|             [_operator, | ||||
|     _approved | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_operator, | ||||
|     _approved | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('setApprovalForAll(address,bool)').functions.setApprovalForAll.encode([_operator, | ||||
|     _approved | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _operator: string, | ||||
|             _approved: boolean, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('setApprovalForAll(address,bool)').inputs; | ||||
|             [_operator, | ||||
|     _approved | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_operator, | ||||
|     _approved | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('setApprovalForAll(address,bool)').functions.setApprovalForAll.encode([_operator, | ||||
|     _approved | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _operator: string, | ||||
|             _approved: boolean, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'setApprovalForAll(address,bool)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_operator, | ||||
|         _approved | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_operator, | ||||
|         _approved | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_operator, | ||||
|         _approved | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.setApprovalForAll; | ||||
|             const encodedData = ethersFunction.encode([_operator, | ||||
|         _approved | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'setApprovalForAll'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public safeTransferFrom2 = { | ||||
|         async sendTransactionAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             _data: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256,bytes)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256,bytes)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.safeTransferFrom2.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _from, | ||||
|                     _to, | ||||
|                     _tokenId, | ||||
|                     _data | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             _data: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256,bytes)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256,bytes)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             _data: string, | ||||
|         ): string { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const inputAbi = self._lookupAbi('safeTransferFrom(address,address,uint256,bytes)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('safeTransferFrom(address,address,uint256,bytes)').functions.safeTransferFrom.encode([_from, | ||||
|     _to, | ||||
|     _tokenId, | ||||
|     _data | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _tokenId: BigNumber, | ||||
|             _data: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'safeTransferFrom(address,address,uint256,bytes)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_from, | ||||
|         _to, | ||||
|         _tokenId, | ||||
|         _data | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId, | ||||
|         _data | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|         _to, | ||||
|         _tokenId, | ||||
|         _data | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.safeTransferFrom; | ||||
|             const encodedData = ethersFunction.encode([_from, | ||||
|         _to, | ||||
|         _tokenId, | ||||
|         _data | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'safeTransferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public isApprovedForAll = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             _operator: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ERC721TokenContract; | ||||
|             const functionSignature = 'isApprovedForAll(address,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner, | ||||
|         _operator | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner, | ||||
|         _operator | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner, | ||||
|         _operator | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.isApprovedForAll; | ||||
|             const encodedData = ethersFunction.encode([_owner, | ||||
|         _operator | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'isApprovedForAll'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC721TokenContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ERC721TokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ERC721TokenContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`ERC721Token successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ERC721TokenContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('ERC721Token', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										3072
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3072
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/exchange.ts
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										730
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										730
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/forwarder.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,730 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ForwarderContract extends BaseContract { | ||||
|     public marketBuyOrdersWithEth = { | ||||
|         async sendTransactionAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             makerAssetFillAmount: BigNumber, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             txData: Partial<TxDataPayable> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').functions.marketBuyOrdersWithEth.encode([orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.marketBuyOrdersWithEth.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     orders, | ||||
|                     makerAssetFillAmount, | ||||
|                     signatures, | ||||
|                     feeOrders, | ||||
|                     feeSignatures, | ||||
|                     feePercentage, | ||||
|                     feeRecipient | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             makerAssetFillAmount: BigNumber, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').functions.marketBuyOrdersWithEth.encode([orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             makerAssetFillAmount: BigNumber, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|         ): string { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)').functions.marketBuyOrdersWithEth.encode([orders, | ||||
|     makerAssetFillAmount, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             makerAssetFillAmount: BigNumber, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[{makerAssetFilledAmount: BigNumber;takerAssetFilledAmount: BigNumber;makerFeePaid: BigNumber;takerFeePaid: BigNumber}, {makerAssetFilledAmount: BigNumber;takerAssetFilledAmount: BigNumber;makerFeePaid: BigNumber;takerFeePaid: BigNumber}] | ||||
|         > { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const functionSignature = 'marketBuyOrdersWithEth(tuple[],uint256,bytes[],tuple[],bytes[],uint256,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [orders, | ||||
|         makerAssetFillAmount, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|         makerAssetFillAmount, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|         makerAssetFillAmount, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.marketBuyOrdersWithEth; | ||||
|             const encodedData = ethersFunction.encode([orders, | ||||
|         makerAssetFillAmount, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'marketBuyOrdersWithEth'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public withdrawAsset = { | ||||
|         async sendTransactionAsync( | ||||
|             assetData: string, | ||||
|             amount: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('withdrawAsset(bytes,uint256)').inputs; | ||||
|             [assetData, | ||||
|     amount | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [assetData, | ||||
|     amount | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [assetData, | ||||
|     amount | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('withdrawAsset(bytes,uint256)').functions.withdrawAsset.encode([assetData, | ||||
|     amount | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.withdrawAsset.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     assetData, | ||||
|                     amount | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             assetData: string, | ||||
|             amount: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('withdrawAsset(bytes,uint256)').inputs; | ||||
|             [assetData, | ||||
|     amount | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [assetData, | ||||
|     amount | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('withdrawAsset(bytes,uint256)').functions.withdrawAsset.encode([assetData, | ||||
|     amount | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             assetData: string, | ||||
|             amount: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('withdrawAsset(bytes,uint256)').inputs; | ||||
|             [assetData, | ||||
|     amount | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [assetData, | ||||
|     amount | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('withdrawAsset(bytes,uint256)').functions.withdrawAsset.encode([assetData, | ||||
|     amount | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             assetData: string, | ||||
|             amount: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const functionSignature = 'withdrawAsset(bytes,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [assetData, | ||||
|         amount | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [assetData, | ||||
|         amount | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [assetData, | ||||
|         amount | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.withdrawAsset; | ||||
|             const encodedData = ethersFunction.encode([assetData, | ||||
|         amount | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'withdrawAsset'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public owner = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const functionSignature = 'owner()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.owner; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'owner'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public marketSellOrdersWithEth = { | ||||
|         async sendTransactionAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             txData: Partial<TxDataPayable> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').functions.marketSellOrdersWithEth.encode([orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.marketSellOrdersWithEth.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     orders, | ||||
|                     signatures, | ||||
|                     feeOrders, | ||||
|                     feeSignatures, | ||||
|                     feePercentage, | ||||
|                     feeRecipient | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').functions.marketSellOrdersWithEth.encode([orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|         ): string { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').inputs; | ||||
|             [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)').functions.marketSellOrdersWithEth.encode([orders, | ||||
|     signatures, | ||||
|     feeOrders, | ||||
|     feeSignatures, | ||||
|     feePercentage, | ||||
|     feeRecipient | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             signatures: string[], | ||||
|             feeOrders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             feeSignatures: string[], | ||||
|             feePercentage: BigNumber, | ||||
|             feeRecipient: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[{makerAssetFilledAmount: BigNumber;takerAssetFilledAmount: BigNumber;makerFeePaid: BigNumber;takerFeePaid: BigNumber}, {makerAssetFilledAmount: BigNumber;takerAssetFilledAmount: BigNumber;makerFeePaid: BigNumber;takerFeePaid: BigNumber}] | ||||
|         > { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const functionSignature = 'marketSellOrdersWithEth(tuple[],bytes[],tuple[],bytes[],uint256,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [orders, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.marketSellOrdersWithEth; | ||||
|             const encodedData = ethersFunction.encode([orders, | ||||
|         signatures, | ||||
|         feeOrders, | ||||
|         feeSignatures, | ||||
|         feePercentage, | ||||
|         feeRecipient | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'marketSellOrdersWithEth'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public transferOwnership = { | ||||
|         async sendTransactionAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferOwnership.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     newOwner | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             newOwner: string, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             newOwner: string, | ||||
|         ): string { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const inputAbi = self._lookupAbi('transferOwnership(address)').inputs; | ||||
|             [newOwner | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferOwnership(address)').functions.transferOwnership.encode([newOwner | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             newOwner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as ForwarderContract; | ||||
|             const functionSignature = 'transferOwnership(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [newOwner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [newOwner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [newOwner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferOwnership; | ||||
|             const encodedData = ethersFunction.encode([newOwner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferOwnership'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|             _exchange: string, | ||||
|             _zrxAssetData: string, | ||||
|             _wethAssetData: string, | ||||
|     ): Promise<ForwarderContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ForwarderContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange, | ||||
| _zrxAssetData, | ||||
| _wethAssetData | ||||
| ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|             _exchange: string, | ||||
|             _zrxAssetData: string, | ||||
|             _wethAssetData: string, | ||||
|     ): Promise<ForwarderContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [_exchange, | ||||
| _zrxAssetData, | ||||
| _wethAssetData | ||||
| ] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [_exchange, | ||||
| _zrxAssetData, | ||||
| _wethAssetData | ||||
| ], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, [_exchange, | ||||
| _zrxAssetData, | ||||
| _wethAssetData | ||||
| ]); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`Forwarder successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ForwarderContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = [_exchange, | ||||
| _zrxAssetData, | ||||
| _wethAssetData | ||||
| ]; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('Forwarder', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										108
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/i_validator.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,108 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class IValidatorContract extends BaseContract { | ||||
|     public isValidSignature = { | ||||
|         async callAsync( | ||||
|             hash: string, | ||||
|             signerAddress: string, | ||||
|             signature: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as IValidatorContract; | ||||
|             const functionSignature = 'isValidSignature(bytes32,address,bytes)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [hash, | ||||
|         signerAddress, | ||||
|         signature | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [hash, | ||||
|         signerAddress, | ||||
|         signature | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [hash, | ||||
|         signerAddress, | ||||
|         signature | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.isValidSignature; | ||||
|             const encodedData = ethersFunction.encode([hash, | ||||
|         signerAddress, | ||||
|         signature | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'isValidSignature'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<IValidatorContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return IValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<IValidatorContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`IValidator successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new IValidatorContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('IValidator', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										103
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/i_wallet.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class IWalletContract extends BaseContract { | ||||
|     public isValidSignature = { | ||||
|         async callAsync( | ||||
|             hash: string, | ||||
|             signature: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as IWalletContract; | ||||
|             const functionSignature = 'isValidSignature(bytes32,bytes)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [hash, | ||||
|         signature | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [hash, | ||||
|         signature | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [hash, | ||||
|         signature | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.isValidSignature; | ||||
|             const encodedData = ethersFunction.encode([hash, | ||||
|         signature | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'isValidSignature'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<IWalletContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return IWalletContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<IWalletContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`IWallet successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new IWalletContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('IWallet', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
| @@ -0,0 +1,357 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class OrderValidatorContract extends BaseContract { | ||||
|     public getOrderAndTraderInfo = { | ||||
|         async callAsync( | ||||
|             order: {makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}, | ||||
|             takerAddress: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[{orderStatus: number;orderHash: string;orderTakerAssetFilledAmount: BigNumber}, {makerBalance: BigNumber;makerAllowance: BigNumber;takerBalance: BigNumber;takerAllowance: BigNumber;makerZrxBalance: BigNumber;makerZrxAllowance: BigNumber;takerZrxBalance: BigNumber;takerZrxAllowance: BigNumber}] | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getOrderAndTraderInfo({address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes},address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [order, | ||||
|         takerAddress | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [order, | ||||
|         takerAddress | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [order, | ||||
|         takerAddress | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getOrderAndTraderInfo; | ||||
|             const encodedData = ethersFunction.encode([order, | ||||
|         takerAddress | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getOrderAndTraderInfo'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getBalanceAndAllowance = { | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             assetData: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[BigNumber, BigNumber] | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getBalanceAndAllowance(address,bytes)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target, | ||||
|         assetData | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|         assetData | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|         assetData | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getBalanceAndAllowance; | ||||
|             const encodedData = ethersFunction.encode([target, | ||||
|         assetData | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getBalanceAndAllowance'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getOrdersAndTradersInfo = { | ||||
|         async callAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             takerAddresses: string[], | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[Array<{orderStatus: number;orderHash: string;orderTakerAssetFilledAmount: BigNumber}>, Array<{makerBalance: BigNumber;makerAllowance: BigNumber;takerBalance: BigNumber;takerAllowance: BigNumber;makerZrxBalance: BigNumber;makerZrxAllowance: BigNumber;takerZrxBalance: BigNumber;takerZrxAllowance: BigNumber}>] | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getOrdersAndTradersInfo(tuple[],address[])'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [orders, | ||||
|         takerAddresses | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|         takerAddresses | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|         takerAddresses | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getOrdersAndTradersInfo; | ||||
|             const encodedData = ethersFunction.encode([orders, | ||||
|         takerAddresses | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getOrdersAndTradersInfo'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getTradersInfo = { | ||||
|         async callAsync( | ||||
|             orders: Array<{makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}>, | ||||
|             takerAddresses: string[], | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<Array<{makerBalance: BigNumber;makerAllowance: BigNumber;takerBalance: BigNumber;takerAllowance: BigNumber;makerZrxBalance: BigNumber;makerZrxAllowance: BigNumber;takerZrxBalance: BigNumber;takerZrxAllowance: BigNumber}> | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getTradersInfo(tuple[],address[])'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [orders, | ||||
|         takerAddresses | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [orders, | ||||
|         takerAddresses | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [orders, | ||||
|         takerAddresses | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getTradersInfo; | ||||
|             const encodedData = ethersFunction.encode([orders, | ||||
|         takerAddresses | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getTradersInfo'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public getERC721TokenOwner = { | ||||
|         async callAsync( | ||||
|             token: string, | ||||
|             tokenId: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getERC721TokenOwner(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [token, | ||||
|         tokenId | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [token, | ||||
|         tokenId | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [token, | ||||
|         tokenId | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getERC721TokenOwner; | ||||
|             const encodedData = ethersFunction.encode([token, | ||||
|         tokenId | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getERC721TokenOwner'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public getBalancesAndAllowances = { | ||||
|         async callAsync( | ||||
|             target: string, | ||||
|             assetData: string[], | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<[BigNumber[], BigNumber[]] | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getBalancesAndAllowances(address,bytes[])'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [target, | ||||
|         assetData | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [target, | ||||
|         assetData | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [target, | ||||
|         assetData | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getBalancesAndAllowances; | ||||
|             const encodedData = ethersFunction.encode([target, | ||||
|         assetData | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getBalancesAndAllowances'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public getTraderInfo = { | ||||
|         async callAsync( | ||||
|             order: {makerAddress: string;takerAddress: string;feeRecipientAddress: string;senderAddress: string;makerAssetAmount: BigNumber;takerAssetAmount: BigNumber;makerFee: BigNumber;takerFee: BigNumber;expirationTimeSeconds: BigNumber;salt: BigNumber;makerAssetData: string;takerAssetData: string}, | ||||
|             takerAddress: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<{makerBalance: BigNumber;makerAllowance: BigNumber;takerBalance: BigNumber;takerAllowance: BigNumber;makerZrxBalance: BigNumber;makerZrxAllowance: BigNumber;takerZrxBalance: BigNumber;takerZrxAllowance: BigNumber} | ||||
|         > { | ||||
|             const self = this as any as OrderValidatorContract; | ||||
|             const functionSignature = 'getTraderInfo({address,address,address,address,uint256,uint256,uint256,uint256,uint256,uint256,bytes,bytes},address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [order, | ||||
|         takerAddress | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [order, | ||||
|         takerAddress | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [order, | ||||
|         takerAddress | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.getTraderInfo; | ||||
|             const encodedData = ethersFunction.encode([order, | ||||
|         takerAddress | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'getTraderInfo'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|             _exchange: string, | ||||
|             _zrxAssetData: string, | ||||
|     ): Promise<OrderValidatorContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return OrderValidatorContract.deployAsync(bytecode, abi, provider, txDefaults, _exchange, | ||||
| _zrxAssetData | ||||
| ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|             _exchange: string, | ||||
|             _zrxAssetData: string, | ||||
|     ): Promise<OrderValidatorContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [_exchange, | ||||
| _zrxAssetData | ||||
| ] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [_exchange, | ||||
| _zrxAssetData | ||||
| ], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, [_exchange, | ||||
| _zrxAssetData | ||||
| ]); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`OrderValidator successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new OrderValidatorContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = [_exchange, | ||||
| _zrxAssetData | ||||
| ]; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('OrderValidator', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										835
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										835
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/weth9.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,835 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type WETH9EventArgs = | ||||
|     | WETH9ApprovalEventArgs | ||||
|     | WETH9TransferEventArgs | ||||
|     | WETH9DepositEventArgs | ||||
|     | WETH9WithdrawalEventArgs; | ||||
|  | ||||
| export enum WETH9Events { | ||||
|     Approval = 'Approval', | ||||
|     Transfer = 'Transfer', | ||||
|     Deposit = 'Deposit', | ||||
|     Withdrawal = 'Withdrawal', | ||||
| } | ||||
|  | ||||
| export interface WETH9ApprovalEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _spender: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface WETH9TransferEventArgs extends DecodedLogArgs { | ||||
|     _from: string; | ||||
|     _to: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface WETH9DepositEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface WETH9WithdrawalEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class WETH9Contract extends BaseContract { | ||||
|     public name = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'name()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.name; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'name'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public approve = { | ||||
|         async sendTransactionAsync( | ||||
|             guy: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [guy, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [guy, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [guy, | ||||
|     wad | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([guy, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.approve.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     guy, | ||||
|                     wad | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             guy: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [guy, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [guy, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([guy, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             guy: string, | ||||
|             wad: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [guy, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [guy, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([guy, | ||||
|     wad | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             guy: string, | ||||
|             wad: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'approve(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [guy, | ||||
|         wad | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [guy, | ||||
|         wad | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [guy, | ||||
|         wad | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.approve; | ||||
|             const encodedData = ethersFunction.encode([guy, | ||||
|         wad | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'approve'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public totalSupply = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'totalSupply()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.totalSupply; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'totalSupply'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transferFrom = { | ||||
|         async sendTransactionAsync( | ||||
|             src: string, | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([src, | ||||
|     dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferFrom.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     src, | ||||
|                     dst, | ||||
|                     wad | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             src: string, | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([src, | ||||
|     dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             src: string, | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [src, | ||||
|     dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([src, | ||||
|     dst, | ||||
|     wad | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             src: string, | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'transferFrom(address,address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [src, | ||||
|         dst, | ||||
|         wad | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [src, | ||||
|         dst, | ||||
|         wad | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [src, | ||||
|         dst, | ||||
|         wad | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferFrom; | ||||
|             const encodedData = ethersFunction.encode([src, | ||||
|         dst, | ||||
|         wad | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public withdraw = { | ||||
|         async sendTransactionAsync( | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('withdraw(uint256)').inputs; | ||||
|             [wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [wad | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [wad | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('withdraw(uint256)').functions.withdraw.encode([wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.withdraw.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     wad | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('withdraw(uint256)').inputs; | ||||
|             [wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('withdraw(uint256)').functions.withdraw.encode([wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             wad: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('withdraw(uint256)').inputs; | ||||
|             [wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('withdraw(uint256)').functions.withdraw.encode([wad | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             wad: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'withdraw(uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [wad | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [wad | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [wad | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.withdraw; | ||||
|             const encodedData = ethersFunction.encode([wad | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'withdraw'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public decimals = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<number | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'decimals()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.decimals; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'decimals'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public balanceOf = { | ||||
|         async callAsync( | ||||
|             index_0: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'balanceOf(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.balanceOf; | ||||
|             const encodedData = ethersFunction.encode([index_0 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'balanceOf'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public symbol = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'symbol()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.symbol; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'symbol'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transfer = { | ||||
|         async sendTransactionAsync( | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transfer.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     dst, | ||||
|                     wad | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([dst, | ||||
|     wad | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [dst, | ||||
|     wad | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [dst, | ||||
|     wad | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([dst, | ||||
|     wad | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             dst: string, | ||||
|             wad: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'transfer(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [dst, | ||||
|         wad | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [dst, | ||||
|         wad | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [dst, | ||||
|         wad | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transfer; | ||||
|             const encodedData = ethersFunction.encode([dst, | ||||
|         wad | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transfer'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public deposit = { | ||||
|         async sendTransactionAsync( | ||||
|             txData: Partial<TxDataPayable> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('deposit()').inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const encodedData = self._lookupEthersInterface('deposit()').functions.deposit.encode([]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.deposit.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('deposit()').inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('deposit()').functions.deposit.encode([]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|         ): string { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const inputAbi = self._lookupAbi('deposit()').inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('deposit()').functions.deposit.encode([]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<void | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'deposit()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.deposit; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'deposit'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray; | ||||
|         }, | ||||
|     }; | ||||
|     public allowance = { | ||||
|         async callAsync( | ||||
|             index_0: string, | ||||
|             index_1: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as WETH9Contract; | ||||
|             const functionSignature = 'allowance(address,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [index_0, | ||||
|         index_1 | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [index_0, | ||||
|         index_1 | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [index_0, | ||||
|         index_1 | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.allowance; | ||||
|             const encodedData = ethersFunction.encode([index_0, | ||||
|         index_1 | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'allowance'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<WETH9Contract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return WETH9Contract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<WETH9Contract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`WETH9 successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new WETH9Contract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('WETH9', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										646
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										646
									
								
								packages/abi-gen-wrappers/src/generated-wrappers/zrx_token.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,646 @@ | ||||
| // tslint:disable:no-consecutive-blank-lines ordered-imports align trailing-comma whitespace class-name | ||||
| // tslint:disable:no-unused-variable | ||||
| // tslint:disable:no-unbound-method | ||||
| import { BaseContract } from '@0x/base-contract'; | ||||
| import { BlockParam, BlockParamLiteral, CallData, ContractAbi, ContractArtifact, DecodedLogArgs, MethodAbi, Provider, TxData, TxDataPayable } from 'ethereum-types'; | ||||
| import { BigNumber, classUtils, logUtils } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import * as ethers from 'ethers'; | ||||
| import * as _ from 'lodash'; | ||||
| // tslint:enable:no-unused-variable | ||||
|  | ||||
| export type ZRXTokenEventArgs = | ||||
|     | ZRXTokenTransferEventArgs | ||||
|     | ZRXTokenApprovalEventArgs; | ||||
|  | ||||
| export enum ZRXTokenEvents { | ||||
|     Transfer = 'Transfer', | ||||
|     Approval = 'Approval', | ||||
| } | ||||
|  | ||||
| export interface ZRXTokenTransferEventArgs extends DecodedLogArgs { | ||||
|     _from: string; | ||||
|     _to: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
| export interface ZRXTokenApprovalEventArgs extends DecodedLogArgs { | ||||
|     _owner: string; | ||||
|     _spender: string; | ||||
|     _value: BigNumber; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* istanbul ignore next */ | ||||
| // tslint:disable:no-parameter-reassignment | ||||
| // tslint:disable-next-line:class-name | ||||
| export class ZRXTokenContract extends BaseContract { | ||||
|     public name = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'name()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.name; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'name'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public approve = { | ||||
|         async sendTransactionAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.approve.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _spender, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('approve(address,uint256)').inputs; | ||||
|             [_spender, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('approve(address,uint256)').functions.approve.encode([_spender, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _spender: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'approve(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_spender, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_spender, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_spender, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.approve; | ||||
|             const encodedData = ethersFunction.encode([_spender, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'approve'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public totalSupply = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'totalSupply()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.totalSupply; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'totalSupply'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transferFrom = { | ||||
|         async sendTransactionAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transferFrom.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _from, | ||||
|                     _to, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transferFrom(address,address,uint256)').inputs; | ||||
|             [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transferFrom(address,address,uint256)').functions.transferFrom.encode([_from, | ||||
|     _to, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _from: string, | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'transferFrom(address,address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transferFrom; | ||||
|             const encodedData = ethersFunction.encode([_from, | ||||
|         _to, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transferFrom'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public decimals = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<number | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'decimals()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.decimals; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'decimals'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public balanceOf = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'balanceOf(address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.balanceOf; | ||||
|             const encodedData = ethersFunction.encode([_owner | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'balanceOf'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public symbol = { | ||||
|         async callAsync( | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<string | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'symbol()'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [] = BaseContract._formatABIDataItemList(inputAbi, [], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, []); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.symbol; | ||||
|             const encodedData = ethersFunction.encode([]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'symbol'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public transfer = { | ||||
|         async sendTransactionAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<string> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|                 self.transfer.estimateGasAsync.bind( | ||||
|                     self, | ||||
|                     _to, | ||||
|                     _value | ||||
|                 ), | ||||
|             ); | ||||
|             const txHash = await self._web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|             return txHash; | ||||
|         }, | ||||
|         async estimateGasAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             txData: Partial<TxData> = {}, | ||||
|         ): Promise<number> { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const encodedData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...txData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const gas = await self._web3Wrapper.estimateGasAsync(txDataWithDefaults); | ||||
|             return gas; | ||||
|         }, | ||||
|         getABIEncodedTransactionData( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|         ): string { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const inputAbi = self._lookupAbi('transfer(address,uint256)').inputs; | ||||
|             [_to, | ||||
|     _value | ||||
|     ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|     _value | ||||
|     ], BaseContract._bigNumberToString); | ||||
|             const abiEncodedTransactionData = self._lookupEthersInterface('transfer(address,uint256)').functions.transfer.encode([_to, | ||||
|     _value | ||||
|     ]); | ||||
|             return abiEncodedTransactionData; | ||||
|         }, | ||||
|         async callAsync( | ||||
|             _to: string, | ||||
|             _value: BigNumber, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<boolean | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'transfer(address,uint256)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_to, | ||||
|         _value | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_to, | ||||
|         _value | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_to, | ||||
|         _value | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.transfer; | ||||
|             const encodedData = ethersFunction.encode([_to, | ||||
|         _value | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'transfer'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public allowance = { | ||||
|         async callAsync( | ||||
|             _owner: string, | ||||
|             _spender: string, | ||||
|             callData: Partial<CallData> = {}, | ||||
|             defaultBlock?: BlockParam, | ||||
|         ): Promise<BigNumber | ||||
|         > { | ||||
|             const self = this as any as ZRXTokenContract; | ||||
|             const functionSignature = 'allowance(address,address)'; | ||||
|             const inputAbi = self._lookupAbi(functionSignature).inputs; | ||||
|             [_owner, | ||||
|         _spender | ||||
|         ] = BaseContract._formatABIDataItemList(inputAbi, [_owner, | ||||
|         _spender | ||||
|         ], BaseContract._bigNumberToString.bind(self)); | ||||
|             BaseContract.strictArgumentEncodingCheck(inputAbi, [_owner, | ||||
|         _spender | ||||
|         ]); | ||||
|             const ethersFunction = self._lookupEthersInterface(functionSignature).functions.allowance; | ||||
|             const encodedData = ethersFunction.encode([_owner, | ||||
|         _spender | ||||
|         ]); | ||||
|             const callDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|                 { | ||||
|                     to: self.address, | ||||
|                     ...callData, | ||||
|                     data: encodedData, | ||||
|                 }, | ||||
|                 self._web3Wrapper.getContractDefaults(), | ||||
|             ); | ||||
|             const rawCallResult = await self._web3Wrapper.callAsync(callDataWithDefaults, defaultBlock); | ||||
|             BaseContract._throwIfRevertWithReasonCallResult(rawCallResult); | ||||
|             let resultArray = ethersFunction.decode(rawCallResult); | ||||
|             const outputAbi = (_.find(self.abi, {name: 'allowance'}) as MethodAbi).outputs; | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this)); | ||||
|             resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this)); | ||||
|             return resultArray[0]; | ||||
|         }, | ||||
|     }; | ||||
|     public static async deployFrom0xArtifactAsync( | ||||
|         artifact: ContractArtifact, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ZRXTokenContract> { | ||||
|         if (_.isUndefined(artifact.compilerOutput)) { | ||||
|             throw new Error('Compiler output not found in the artifact file'); | ||||
|         } | ||||
|         const bytecode = artifact.compilerOutput.evm.bytecode.object; | ||||
|         const abi = artifact.compilerOutput.abi; | ||||
|         return ZRXTokenContract.deployAsync(bytecode, abi, provider, txDefaults, ); | ||||
|     } | ||||
|     public static async deployAsync( | ||||
|         bytecode: string, | ||||
|         abi: ContractAbi, | ||||
|         provider: Provider, | ||||
|         txDefaults: Partial<TxData>, | ||||
|     ): Promise<ZRXTokenContract> { | ||||
|         const constructorAbi = BaseContract._lookupConstructorAbi(abi); | ||||
|         [] = BaseContract._formatABIDataItemList( | ||||
|             constructorAbi.inputs, | ||||
|             [], | ||||
|             BaseContract._bigNumberToString, | ||||
|         ); | ||||
|         const iface = new ethers.utils.Interface(abi); | ||||
|         const deployInfo = iface.deployFunction; | ||||
|         const txData = deployInfo.encode(bytecode, []); | ||||
|         const web3Wrapper = new Web3Wrapper(provider); | ||||
|         const txDataWithDefaults = await BaseContract._applyDefaultsToTxDataAsync( | ||||
|             {data: txData}, | ||||
|             txDefaults, | ||||
|             web3Wrapper.estimateGasAsync.bind(web3Wrapper), | ||||
|         ); | ||||
|         const txHash = await web3Wrapper.sendTransactionAsync(txDataWithDefaults); | ||||
|         logUtils.log(`transactionHash: ${txHash}`); | ||||
|         const txReceipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); | ||||
|         logUtils.log(`ZRXToken successfully deployed at ${txReceipt.contractAddress}`); | ||||
|         const contractInstance = new ZRXTokenContract(abi, txReceipt.contractAddress as string, provider, txDefaults); | ||||
|         contractInstance.constructorArgs = []; | ||||
|         return contractInstance; | ||||
|     } | ||||
|     constructor(abi: ContractAbi, address: string, provider: Provider, txDefaults?: Partial<TxData>) { | ||||
|         super('ZRXToken', abi, address, provider, txDefaults); | ||||
|         classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']); | ||||
|     } | ||||
| } // tslint:disable:max-file-line-count | ||||
| // tslint:enable:no-unbound-method | ||||
							
								
								
									
										14
									
								
								packages/abi-gen-wrappers/src/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								packages/abi-gen-wrappers/src/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| export * from './generated-wrappers/asset_proxy_owner'; | ||||
| export * from './generated-wrappers/dummy_erc20_token'; | ||||
| export * from './generated-wrappers/dummy_erc721_token'; | ||||
| export * from './generated-wrappers/erc20_proxy'; | ||||
| export * from './generated-wrappers/erc20_token'; | ||||
| export * from './generated-wrappers/erc721_proxy'; | ||||
| export * from './generated-wrappers/erc721_token'; | ||||
| export * from './generated-wrappers/exchange'; | ||||
| export * from './generated-wrappers/forwarder'; | ||||
| export * from './generated-wrappers/i_validator'; | ||||
| export * from './generated-wrappers/i_wallet'; | ||||
| export * from './generated-wrappers/order_validator'; | ||||
| export * from './generated-wrappers/weth9'; | ||||
| export * from './generated-wrappers/zrx_token'; | ||||
							
								
								
									
										8
									
								
								packages/abi-gen-wrappers/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								packages/abi-gen-wrappers/tsconfig.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| { | ||||
|     "extends": "../../tsconfig", | ||||
|     "compilerOptions": { | ||||
|         "outDir": "lib", | ||||
|         "rootDir": "." | ||||
|     }, | ||||
|     "include": ["./src/**/*"] | ||||
| } | ||||
							
								
								
									
										3
									
								
								packages/abi-gen-wrappers/tslint.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								packages/abi-gen-wrappers/tslint.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| { | ||||
|     "extends": ["@0x/tslint-config"] | ||||
| } | ||||
| @@ -1,6 +1,152 @@ | ||||
| [ | ||||
|     { | ||||
|         "version": "0.4.0", | ||||
|         "timestamp": 1542208198, | ||||
|         "version": "1.0.16", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.15", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1541740904 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1539871071, | ||||
|         "version": "1.0.14", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.13", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1538693146 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1538157789, | ||||
|         "version": "1.0.12", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537907159, | ||||
|         "version": "1.0.11", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537875740, | ||||
|         "version": "1.0.10", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537541580, | ||||
|         "version": "1.0.9", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1536142250, | ||||
|         "version": "1.0.8", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1535377027, | ||||
|         "version": "1.0.7", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1535133899, | ||||
|         "version": "1.0.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1534210131, | ||||
|         "version": "1.0.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532619515, | ||||
|         "version": "1.0.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532614997, | ||||
|         "version": "1.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532605697, | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Fix the abi-gen entry point in package.json", | ||||
|                 "pr": 901 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1532357734 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532043000, | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Convert e_r_c to erc in generated file names", | ||||
| @@ -9,6 +155,28 @@ | ||||
|             { | ||||
|                 "note": "Remove the output directory before writing to it", | ||||
|                 "pr": 822 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "skip generation of wrappers that are already up to date", | ||||
|                 "pr": 788 | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531919263, | ||||
|         "version": "0.3.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531149657, | ||||
|         "version": "0.3.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|   | ||||
| @@ -1,15 +1,93 @@ | ||||
| <!-- | ||||
| This file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v1.0.16 - _November 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.15 - _November 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.14 - _October 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.13 - _October 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.12 - _September 28, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.11 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.10 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.9 - _September 21, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.8 - _September 5, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.7 - _August 27, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.6 - _August 24, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.5 - _August 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.4 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.3 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.2 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1 - _July 23, 2018_ | ||||
|  | ||||
|     * Fix the abi-gen entry point in package.json (#901) | ||||
|  | ||||
| ## v1.0.0 - _July 19, 2018_ | ||||
|  | ||||
|     * Convert e_r_c to erc in generated file names (#822) | ||||
|     * Remove the output directory before writing to it (#822) | ||||
|     * skip generation of wrappers that are already up to date (#788) | ||||
|  | ||||
| ## v0.3.4 - _July 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.3.3 - _July 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.3.2 - _June 19, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.3.1 - _June 1, 2018_ | ||||
| ## v0.3.1 - _May 31, 2018_ | ||||
|  | ||||
|     * Incorrect publish that was unpublished | ||||
|  | ||||
| @@ -17,7 +95,7 @@ CHANGELOG | ||||
|  | ||||
|     * Properly export the executable binary (#588) | ||||
|  | ||||
| ## v0.2.13 - _May 5, 2018_ | ||||
| ## v0.2.13 - _May 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ You can write your custom handlebars templates which will allow you to seamlessl | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| `yarn add -g @0xproject/abi-gen` | ||||
| `yarn add -g @0x/abi-gen` | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| @@ -82,13 +82,13 @@ yarn install | ||||
| To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/abi-gen yarn build | ||||
| PKG=@0x/abi-gen yarn build | ||||
| ``` | ||||
|  | ||||
| Or continuously rebuild on change: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/abi-gen yarn watch | ||||
| PKG=@0x/abi-gen yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
|   | ||||
| @@ -1,2 +1,2 @@ | ||||
| #!/usr/bin/env node | ||||
| require('../lib/index.js') | ||||
| require('../lib/src/index.js'); | ||||
|   | ||||
| @@ -1,18 +1,22 @@ | ||||
| { | ||||
|     "name": "@0xproject/abi-gen", | ||||
|     "version": "0.3.2", | ||||
|     "name": "@0x/abi-gen", | ||||
|     "version": "1.0.16", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
|     "description": "Generate contract wrappers from ABI and handlebars templates", | ||||
|     "main": "lib/index.js", | ||||
|     "types": "lib/index.d.ts", | ||||
|     "main": "lib/src/index.js", | ||||
|     "types": "lib/src/index.d.ts", | ||||
|     "scripts": { | ||||
|         "watch_without_deps": "tsc -w", | ||||
|         "lint": "tslint --project .", | ||||
|         "clean": "shx rm -rf lib scripts", | ||||
|         "build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts", | ||||
|         "manual:postpublish": "yarn build; node ./scripts/postpublish.js" | ||||
|         "lint": "tslint --format stylish --project .", | ||||
|         "clean": "shx rm -rf lib", | ||||
|         "build": "tsc -b", | ||||
|         "build:ci": "yarn build", | ||||
|         "test": "yarn run_mocha", | ||||
|         "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --bail --exit", | ||||
|         "test:circleci": "yarn test:coverage", | ||||
|         "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", | ||||
|         "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info" | ||||
|     }, | ||||
|     "bin": { | ||||
|         "abi-gen": "bin/abi-gen.js" | ||||
| @@ -27,33 +31,36 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md", | ||||
|     "dependencies": { | ||||
|         "@0xproject/typescript-typings": "^0.4.1", | ||||
|         "@0xproject/utils": "^0.7.1", | ||||
|         "ethereum-types": "^0.0.2", | ||||
|         "@0x/typescript-typings": "^3.0.4", | ||||
|         "@0x/utils": "^2.0.5", | ||||
|         "chalk": "^2.3.0", | ||||
|         "ethereum-types": "^1.1.2", | ||||
|         "glob": "^7.1.2", | ||||
|         "handlebars": "^4.0.11", | ||||
|         "lodash": "^4.17.4", | ||||
|         "rimraf": "^2.6.2", | ||||
|         "lodash": "^4.17.5", | ||||
|         "mkdirp": "^0.5.1", | ||||
|         "sleep": "^5.1.1", | ||||
|         "tmp": "^0.0.33", | ||||
|         "to-snake-case": "^1.0.0", | ||||
|         "yargs": "^10.0.3" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "@0xproject/monorepo-scripts": "^0.2.1", | ||||
|         "@0xproject/tslint-config": "^0.4.20", | ||||
|         "@types/glob": "^5.0.33", | ||||
|         "@types/rimraf": "^2.0.2", | ||||
|         "@0x/tslint-config": "^1.0.10", | ||||
|         "@types/glob": "5.0.35", | ||||
|         "@types/handlebars": "^4.0.36", | ||||
|         "@types/mkdirp": "^0.5.1", | ||||
|         "@types/node": "^8.0.53", | ||||
|         "@types/node": "*", | ||||
|         "@types/sleep": "^0.0.7", | ||||
|         "@types/tmp": "^0.0.33", | ||||
|         "@types/yargs": "^10.0.0", | ||||
|         "copyfiles": "^1.2.0", | ||||
|         "chai": "^4.1.2", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^5.2.0", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "shx": "^0.2.2", | ||||
|         "tslint": "5.8.0", | ||||
|         "typescript": "2.7.1" | ||||
|         "tslint": "5.11.0", | ||||
|         "typescript": "3.0.1" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,18 +1,14 @@ | ||||
| #!/usr/bin/env node | ||||
|  | ||||
| import { abiUtils, logUtils } from '@0xproject/utils'; | ||||
| import { abiUtils, logUtils } from '@0x/utils'; | ||||
| import chalk from 'chalk'; | ||||
| import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from 'ethereum-types'; | ||||
| import * as fs from 'fs'; | ||||
| import { sync as globSync } from 'glob'; | ||||
| import * as Handlebars from 'handlebars'; | ||||
| import * as _ from 'lodash'; | ||||
| import * as mkdirp from 'mkdirp'; | ||||
| import * as rimraf from 'rimraf'; | ||||
| import * as yargs from 'yargs'; | ||||
|  | ||||
| import toSnakeCase = require('to-snake-case'); | ||||
|  | ||||
| import { ContextData, ContractsBackend, ParamKind } from './types'; | ||||
| import { utils } from './utils'; | ||||
|  | ||||
| @@ -71,16 +67,6 @@ function registerPartials(partialsGlob: string): void { | ||||
|     } | ||||
| } | ||||
|  | ||||
| function writeOutputFile(name: string, renderedTsCode: string): void { | ||||
|     let fileName = toSnakeCase(name); | ||||
|     // HACK: Snake case doesn't make a lot of sense for abbreviated names but we can't reliably detect abbreviations | ||||
|     // so we special-case the abbreviations we use. | ||||
|     fileName = fileName.replace('z_r_x', 'zrx').replace('e_r_c', 'erc'); | ||||
|     const filePath = `${args.output}/${fileName}.ts`; | ||||
|     fs.writeFileSync(filePath, renderedTsCode); | ||||
|     logUtils.log(`Created: ${chalk.bold(filePath)}`); | ||||
| } | ||||
|  | ||||
| Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend)); | ||||
| Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output, args.backend)); | ||||
| if (args.partials) { | ||||
| @@ -97,7 +83,6 @@ if (_.isEmpty(abiFileNames)) { | ||||
|     process.exit(1); | ||||
| } else { | ||||
|     logUtils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`); | ||||
|     rimraf.sync(args.output); | ||||
|     mkdirp.sync(args.output); | ||||
| } | ||||
| for (const abiFileName of abiFileNames) { | ||||
| @@ -120,6 +105,14 @@ for (const abiFileName of abiFileNames) { | ||||
|         process.exit(1); | ||||
|     } | ||||
|  | ||||
|     const outFileName = utils.makeOutputFileName(namedContent.name); | ||||
|     const outFilePath = `${args.output}/${outFileName}.ts`; | ||||
|  | ||||
|     if (utils.isOutputFileUpToDate(abiFileName, outFilePath)) { | ||||
|         logUtils.log(`Already up to date: ${chalk.bold(outFilePath)}`); | ||||
|         continue; | ||||
|     } | ||||
|  | ||||
|     let ctor = ABI.find((abi: AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as ConstructorAbi; | ||||
|     if (_.isUndefined(ctor)) { | ||||
|         ctor = utils.getEmptyConstructor(); // The constructor exists, but it's implicit in JSON's ABI definition | ||||
| @@ -154,5 +147,6 @@ for (const abiFileName of abiFileNames) { | ||||
|         events: eventAbis, | ||||
|     }; | ||||
|     const renderedTsCode = template(contextData); | ||||
|     writeOutputFile(namedContent.name, renderedTsCode); | ||||
|     utils.writeOutputFile(outFilePath, renderedTsCode); | ||||
|     logUtils.log(`Created: ${chalk.bold(outFilePath)}`); | ||||
| } | ||||
|   | ||||
| @@ -1,8 +0,0 @@ | ||||
| import { postpublishUtils } from '@0xproject/monorepo-scripts'; | ||||
|  | ||||
| import * as packageJSON from '../package.json'; | ||||
| import * as tsConfigJSON from '../tsconfig.json'; | ||||
|  | ||||
| const cwd = `${__dirname}/..`; | ||||
| // tslint:disable-next-line:no-floating-promises | ||||
| postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd); | ||||
| @@ -2,6 +2,7 @@ import { AbiType, ConstructorAbi, DataItem } from 'ethereum-types'; | ||||
| import * as fs from 'fs'; | ||||
| import * as _ from 'lodash'; | ||||
| import * as path from 'path'; | ||||
| import toSnakeCase = require('to-snake-case'); | ||||
|  | ||||
| import { ContractsBackend, ParamKind } from './types'; | ||||
|  | ||||
| @@ -92,4 +93,27 @@ export const utils = { | ||||
|             inputs: [], | ||||
|         }; | ||||
|     }, | ||||
|     makeOutputFileName(name: string): string { | ||||
|         let fileName = toSnakeCase(name); | ||||
|         // HACK: Snake case doesn't make a lot of sense for abbreviated names but we can't reliably detect abbreviations | ||||
|         // so we special-case the abbreviations we use. | ||||
|         fileName = fileName.replace('z_r_x', 'zrx').replace('e_r_c', 'erc'); | ||||
|         return fileName; | ||||
|     }, | ||||
|     writeOutputFile(filePath: string, renderedTsCode: string): void { | ||||
|         fs.writeFileSync(filePath, renderedTsCode); | ||||
|     }, | ||||
|     isOutputFileUpToDate(abiFile: string, outputFile: string): boolean { | ||||
|         const abiFileModTimeMs = fs.statSync(abiFile).mtimeMs; | ||||
|         try { | ||||
|             const outFileModTimeMs = fs.statSync(outputFile).mtimeMs; | ||||
|             return outFileModTimeMs > abiFileModTimeMs; | ||||
|         } catch (err) { | ||||
|             if (err.code === 'ENOENT') { | ||||
|                 return false; | ||||
|             } else { | ||||
|                 throw err; | ||||
|             } | ||||
|         } | ||||
|     }, | ||||
| }; | ||||
|   | ||||
							
								
								
									
										86
									
								
								packages/abi-gen/test/utils_test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								packages/abi-gen/test/utils_test.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,86 @@ | ||||
| import * as chai from 'chai'; | ||||
| import * as dirtyChai from 'dirty-chai'; | ||||
| import * as fs from 'fs'; | ||||
| import 'mocha'; | ||||
| import * as tmp from 'tmp'; | ||||
|  | ||||
| import { utils } from '../src/utils'; | ||||
|  | ||||
| tmp.setGracefulCleanup(); // remove tmp files even if there are failures | ||||
|  | ||||
| chai.use(dirtyChai); | ||||
|  | ||||
| const expect = chai.expect; | ||||
|  | ||||
| describe('makeOutputFileName()', () => { | ||||
|     it('should handle Metacoin usage', () => { | ||||
|         expect(utils.makeOutputFileName('Metacoin')).to.equal('metacoin'); | ||||
|     }); | ||||
|     it('should handle special zrx_token case', () => { | ||||
|         expect(utils.makeOutputFileName('ZRXToken')).to.equal('zrx_token'); | ||||
|     }); | ||||
|     it('should handle special erc_token case', () => { | ||||
|         expect(utils.makeOutputFileName('ERC20Token')).to.equal('erc20_token'); | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| describe('writeOutputFile()', () => { | ||||
|     let tempFilePath: string; | ||||
|     before(() => { | ||||
|         tempFilePath = tmp.fileSync( | ||||
|             { discardDescriptor: true }, // close file (so we can update it) | ||||
|         ).name; | ||||
|     }); | ||||
|     it('should write content to output file', () => { | ||||
|         const content = 'hello world'; | ||||
|  | ||||
|         utils.writeOutputFile(tempFilePath, content); | ||||
|  | ||||
|         expect(fs.readFileSync(tempFilePath).toString()).to.equal(content); | ||||
|     }); | ||||
| }); | ||||
|  | ||||
| describe('isOutputFileUpToDate()', () => { | ||||
|     it('should throw ENOENT when there is no abi file', () => { | ||||
|         expect(utils.isOutputFileUpToDate.bind('nonexistant1', 'nonexistant2')).to.throw('ENOENT'); | ||||
|     }); | ||||
|  | ||||
|     describe('when the abi input file exists', () => { | ||||
|         let abiFile: string; | ||||
|         before(() => { | ||||
|             abiFile = tmp.fileSync( | ||||
|                 { discardDescriptor: true }, // close file (set timestamp) | ||||
|             ).name; | ||||
|         }); | ||||
|  | ||||
|         describe('without an existing output file', () => { | ||||
|             it('should return false', () => { | ||||
|                 expect(utils.isOutputFileUpToDate(abiFile, 'nonexistant_file')).to.be.false(); | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         describe('with an existing output file', () => { | ||||
|             let outputFile: string; | ||||
|             before(() => { | ||||
|                 outputFile = tmp.fileSync( | ||||
|                     { discardDescriptor: true }, // close file (set timestamp) | ||||
|                 ).name; | ||||
|                 const abiFileModTimeMs = fs.statSync(abiFile).mtimeMs; | ||||
|                 const outfileModTimeMs = abiFileModTimeMs + 1; | ||||
|                 fs.utimesSync(outputFile, outfileModTimeMs, outfileModTimeMs); | ||||
|             }); | ||||
|  | ||||
|             it('should return true when output file is newer than abi file', async () => { | ||||
|                 expect(utils.isOutputFileUpToDate(abiFile, outputFile)).to.be.true(); | ||||
|             }); | ||||
|  | ||||
|             it('should return false when output file exists but is older than abi file', () => { | ||||
|                 const outFileModTimeMs = fs.statSync(outputFile).mtimeMs; | ||||
|                 const abiFileModTimeMs = outFileModTimeMs + 1; | ||||
|                 fs.utimesSync(abiFile, abiFileModTimeMs, abiFileModTimeMs); | ||||
|  | ||||
|                 expect(utils.isOutputFileUpToDate(abiFile, outputFile)).to.be.false(); | ||||
|             }); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| @@ -1,7 +1,8 @@ | ||||
| { | ||||
|     "extends": "../../tsconfig", | ||||
|     "compilerOptions": { | ||||
|         "outDir": "lib" | ||||
|         "outDir": "lib", | ||||
|         "rootDir": "." | ||||
|     }, | ||||
|     "include": ["./src/**/*", "./test/**/*"] | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| { | ||||
|     "extends": ["@0xproject/tslint-config"] | ||||
|     "extends": ["@0x/tslint-config"] | ||||
| } | ||||
|   | ||||
| @@ -1,6 +1,160 @@ | ||||
| [ | ||||
|     { | ||||
|         "version": "0.2.13", | ||||
|         "timestamp": 1542208198, | ||||
|         "version": "1.0.17", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542028948, | ||||
|         "version": "1.0.16", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.15", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1541740904 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1539871071, | ||||
|         "version": "1.0.14", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.13", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1538693146 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1538157789, | ||||
|         "version": "1.0.12", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537907159, | ||||
|         "version": "1.0.11", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537875740, | ||||
|         "version": "1.0.10", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537541580, | ||||
|         "version": "1.0.9", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1536142250, | ||||
|         "version": "1.0.8", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1535377027, | ||||
|         "version": "1.0.7", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1535133899, | ||||
|         "version": "1.0.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1534210131, | ||||
|         "version": "1.0.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532619515, | ||||
|         "version": "1.0.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532614997, | ||||
|         "version": "1.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532605697, | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532357734, | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1532043000, | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": | ||||
| @@ -9,6 +163,24 @@ | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531919263, | ||||
|         "version": "0.2.14", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1531149657, | ||||
|         "version": "0.2.13", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1529397769, | ||||
|         "version": "0.2.12", | ||||
|   | ||||
| @@ -1,15 +1,95 @@ | ||||
| <!-- | ||||
| This file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v1.0.17 - _November 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.16 - _November 12, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.15 - _November 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.14 - _October 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.13 - _October 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.12 - _September 28, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.11 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.10 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.9 - _September 21, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.8 - _September 5, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.7 - _August 27, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.6 - _August 24, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.5 - _August 14, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.4 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.3 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.2 - _July 26, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1 - _July 23, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0 - _July 19, 2018_ | ||||
|  | ||||
|     * Fix bug in string enum assertion. We erroneously were checking against the enum keys, not values (#821) | ||||
|  | ||||
| ## v0.2.14 - _July 18, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.2.13 - _July 9, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.2.12 - _June 19, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.2.11 - _June 1, 2018_ | ||||
| ## v0.2.11 - _May 31, 2018_ | ||||
|  | ||||
|     * Incorrect publish that was unpublished | ||||
|  | ||||
| @@ -17,7 +97,7 @@ CHANGELOG | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v0.2.9 - _May 5, 2018_ | ||||
| ## v0.2.9 - _May 4, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
|   | ||||
| @@ -1,17 +1,17 @@ | ||||
| ## @0xproject/assert | ||||
| ## @0x/assert | ||||
|  | ||||
| Standard type and schema assertions to be used across all 0x projects and packages | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ```bash | ||||
| yarn add @0xproject/assert | ||||
| yarn add @0x/assert | ||||
| ``` | ||||
|  | ||||
| ## Usage | ||||
|  | ||||
| ```typescript | ||||
| import { assert } from '@0xproject/assert'; | ||||
| import { assert } from '@0x/assert'; | ||||
|  | ||||
| assert.isValidBaseUnitAmount('baseUnitAmount', baseUnitAmount); | ||||
| ``` | ||||
| @@ -20,7 +20,7 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol | ||||
|  | ||||
| ```json | ||||
| "compilerOptions": { | ||||
|     "typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"], | ||||
|     "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], | ||||
| } | ||||
| ``` | ||||
|  | ||||
| @@ -49,13 +49,13 @@ yarn install | ||||
| To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/assert yarn build | ||||
| PKG=@0x/assert yarn build | ||||
| ``` | ||||
|  | ||||
| Or continuously rebuild on change: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0xproject/assert yarn watch | ||||
| PKG=@0x/assert yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0xproject/assert", | ||||
|     "version": "0.3.0", | ||||
|     "name": "@0x/assert", | ||||
|     "version": "1.0.17", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -8,18 +8,16 @@ | ||||
|     "main": "lib/src/index.js", | ||||
|     "types": "lib/src/index.d.ts", | ||||
|     "scripts": { | ||||
|         "watch_without_deps": "tsc -w", | ||||
|         "build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts", | ||||
|         "clean": "shx rm -rf lib test_temp scripts", | ||||
|         "lint": "tslint --project .", | ||||
|         "build": "tsc -b", | ||||
|         "build:ci": "yarn build", | ||||
|         "clean": "shx rm -rf lib test_temp", | ||||
|         "lint": "tslint --format stylish --project .", | ||||
|         "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --exit", | ||||
|         "prepublishOnly": "run-p build", | ||||
|         "test": "yarn run_mocha", | ||||
|         "rebuild_and_test": "run-s clean build test", | ||||
|         "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", | ||||
|         "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info", | ||||
|         "test:circleci": "yarn test:coverage", | ||||
|         "manual:postpublish": "yarn build; node ./scripts/postpublish.js" | ||||
|         "test:circleci": "yarn test:coverage" | ||||
|     }, | ||||
|     "license": "Apache-2.0", | ||||
|     "repository": { | ||||
| @@ -31,27 +29,25 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/packages/assert/README.md", | ||||
|     "devDependencies": { | ||||
|         "@0xproject/monorepo-scripts": "^0.2.1", | ||||
|         "@0xproject/tslint-config": "^0.4.20", | ||||
|         "@0x/tslint-config": "^1.0.10", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^2.2.42", | ||||
|         "@types/valid-url": "^1.0.2", | ||||
|         "chai": "^4.0.1", | ||||
|         "copyfiles": "^1.2.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^4.0.1", | ||||
|         "mocha": "^4.1.0", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "nyc": "^11.0.1", | ||||
|         "shx": "^0.2.2", | ||||
|         "tslint": "5.8.0", | ||||
|         "typescript": "2.7.1" | ||||
|         "tslint": "5.11.0", | ||||
|         "typescript": "3.0.1" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0xproject/json-schemas": "^1.0.0", | ||||
|         "@0xproject/typescript-typings": "^0.4.1", | ||||
|         "@0xproject/utils": "^0.7.1", | ||||
|         "lodash": "^4.17.4", | ||||
|         "@0x/json-schemas": "^2.1.1", | ||||
|         "@0x/typescript-typings": "^3.0.4", | ||||
|         "@0x/utils": "^2.0.5", | ||||
|         "lodash": "^4.17.5", | ||||
|         "valid-url": "^1.0.9" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { Schema, SchemaValidator } from '@0xproject/json-schemas'; | ||||
| import { addressUtils, BigNumber } from '@0xproject/utils'; | ||||
| import { Schema, SchemaValidator } from '@0x/json-schemas'; | ||||
| import { addressUtils, BigNumber } from '@0x/utils'; | ||||
| import * as _ from 'lodash'; | ||||
| import * as validUrl from 'valid-url'; | ||||
|  | ||||
| @@ -8,33 +8,33 @@ const HEX_REGEX = /^0x[0-9A-F]*$/i; | ||||
| export const assert = { | ||||
|     isBigNumber(variableName: string, value: BigNumber): void { | ||||
|         const isBigNumber = _.isObject(value) && (value as any).isBigNumber; | ||||
|         this.assert(isBigNumber, this.typeAssertionMessage(variableName, 'BigNumber', value)); | ||||
|         assert.assert(isBigNumber, assert.typeAssertionMessage(variableName, 'BigNumber', value)); | ||||
|     }, | ||||
|     isValidBaseUnitAmount(variableName: string, value: BigNumber): void { | ||||
|         assert.isBigNumber(variableName, value); | ||||
|         const isNegative = value.lessThan(0); | ||||
|         this.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`); | ||||
|         assert.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`); | ||||
|         const hasDecimals = value.decimalPlaces() !== 0; | ||||
|         this.assert( | ||||
|         assert.assert( | ||||
|             !hasDecimals, | ||||
|             `${variableName} should be in baseUnits (no decimals), found value: ${value.toNumber()}`, | ||||
|         ); | ||||
|     }, | ||||
|     isString(variableName: string, value: string): void { | ||||
|         this.assert(_.isString(value), this.typeAssertionMessage(variableName, 'string', value)); | ||||
|         assert.assert(_.isString(value), assert.typeAssertionMessage(variableName, 'string', value)); | ||||
|     }, | ||||
|     isFunction(variableName: string, value: any): void { | ||||
|         this.assert(_.isFunction(value), this.typeAssertionMessage(variableName, 'function', value)); | ||||
|         assert.assert(_.isFunction(value), assert.typeAssertionMessage(variableName, 'function', value)); | ||||
|     }, | ||||
|     isHexString(variableName: string, value: string): void { | ||||
|         this.assert( | ||||
|         assert.assert( | ||||
|             _.isString(value) && HEX_REGEX.test(value), | ||||
|             this.typeAssertionMessage(variableName, 'HexString', value), | ||||
|             assert.typeAssertionMessage(variableName, 'HexString', value), | ||||
|         ); | ||||
|     }, | ||||
|     isETHAddressHex(variableName: string, value: string): void { | ||||
|         this.assert(_.isString(value), this.typeAssertionMessage(variableName, 'string', value)); | ||||
|         this.assert(addressUtils.isAddress(value), this.typeAssertionMessage(variableName, 'ETHAddressHex', value)); | ||||
|         assert.assert(_.isString(value), assert.typeAssertionMessage(variableName, 'string', value)); | ||||
|         assert.assert(addressUtils.isAddress(value), assert.typeAssertionMessage(variableName, 'ETHAddressHex', value)); | ||||
|     }, | ||||
|     doesBelongToStringEnum( | ||||
|         variableName: string, | ||||
| @@ -51,17 +51,17 @@ export const assert = { | ||||
|         ); | ||||
|     }, | ||||
|     hasAtMostOneUniqueValue(value: any[], errMsg: string): void { | ||||
|         this.assert(_.uniq(value).length <= 1, errMsg); | ||||
|         assert.assert(_.uniq(value).length <= 1, errMsg); | ||||
|     }, | ||||
|     isNumber(variableName: string, value: number): void { | ||||
|         this.assert(_.isFinite(value), this.typeAssertionMessage(variableName, 'number', value)); | ||||
|         assert.assert(_.isFinite(value), assert.typeAssertionMessage(variableName, 'number', value)); | ||||
|     }, | ||||
|     isBoolean(variableName: string, value: boolean): void { | ||||
|         this.assert(_.isBoolean(value), this.typeAssertionMessage(variableName, 'boolean', value)); | ||||
|         assert.assert(_.isBoolean(value), assert.typeAssertionMessage(variableName, 'boolean', value)); | ||||
|     }, | ||||
|     isWeb3Provider(variableName: string, value: any): void { | ||||
|         const isWeb3Provider = _.isFunction(value.send) || _.isFunction(value.sendAsync); | ||||
|         this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Provider', value)); | ||||
|         assert.assert(isWeb3Provider, assert.typeAssertionMessage(variableName, 'Provider', value)); | ||||
|     }, | ||||
|     doesConformToSchema(variableName: string, value: any, schema: Schema, subSchemas?: Schema[]): void { | ||||
|         if (_.isUndefined(value)) { | ||||
| @@ -76,15 +76,15 @@ export const assert = { | ||||
|         const msg = `Expected ${variableName} to conform to schema ${schema.id} | ||||
| Encountered: ${JSON.stringify(value, null, '\t')} | ||||
| Validation errors: ${validationResult.errors.join(', ')}`; | ||||
|         this.assert(!hasValidationErrors, msg); | ||||
|         assert.assert(!hasValidationErrors, msg); | ||||
|     }, | ||||
|     isWebUri(variableName: string, value: any): void { | ||||
|         const isValidUrl = !_.isUndefined(validUrl.isWebUri(value)); | ||||
|         this.assert(isValidUrl, this.typeAssertionMessage(variableName, 'web uri', value)); | ||||
|         assert.assert(isValidUrl, assert.typeAssertionMessage(variableName, 'web uri', value)); | ||||
|     }, | ||||
|     isUri(variableName: string, value: any): void { | ||||
|         const isValidUri = !_.isUndefined(validUrl.isUri(value)); | ||||
|         this.assert(isValidUri, this.typeAssertionMessage(variableName, 'uri', value)); | ||||
|         assert.assert(isValidUri, assert.typeAssertionMessage(variableName, 'uri', value)); | ||||
|     }, | ||||
|     assert(condition: boolean, message: string): void { | ||||
|         if (!condition) { | ||||
|   | ||||
| @@ -1,8 +0,0 @@ | ||||
| import { postpublishUtils } from '@0xproject/monorepo-scripts'; | ||||
|  | ||||
| import * as packageJSON from '../package.json'; | ||||
| import * as tsConfigJSON from '../tsconfig.json'; | ||||
|  | ||||
| const cwd = `${__dirname}/..`; | ||||
| // tslint:disable-next-line:no-floating-promises | ||||
| postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd); | ||||
| @@ -1,5 +1,5 @@ | ||||
| import { schemas } from '@0xproject/json-schemas'; | ||||
| import { BigNumber } from '@0xproject/utils'; | ||||
| import { schemas } from '@0x/json-schemas'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
| import * as chai from 'chai'; | ||||
| import * as dirtyChai from 'dirty-chai'; | ||||
| import 'mocha'; | ||||
| @@ -49,7 +49,7 @@ describe('Assertions', () => { | ||||
|     }); | ||||
|     describe('#isFunction', () => { | ||||
|         it('should not throw for valid input', () => { | ||||
|             const validInputs = [BigNumber, assert.isString]; | ||||
|             const validInputs = [BigNumber, assert.isString.bind(assert)]; | ||||
|             validInputs.forEach(input => expect(assert.isFunction.bind(assert, variableName, input)).to.not.throw()); | ||||
|         }); | ||||
|         it('should throw for invalid input', () => { | ||||
|   | ||||
| @@ -1,7 +1,8 @@ | ||||
| { | ||||
|     "extends": "../../tsconfig", | ||||
|     "compilerOptions": { | ||||
|         "outDir": "lib" | ||||
|         "outDir": "lib", | ||||
|         "rootDir": "." | ||||
|     }, | ||||
|     "include": ["./src/**/*", "./test/**/*"] | ||||
| } | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| { | ||||
|     "extends": ["@0xproject/tslint-config"] | ||||
|     "extends": ["@0x/tslint-config"] | ||||
| } | ||||
|   | ||||
| @@ -2,5 +2,7 @@ | ||||
| yarn-error.log | ||||
| /src/ | ||||
| /scripts/ | ||||
| /schemas/ | ||||
| test/ | ||||
| tsconfig.json | ||||
| /lib/monorepo_scripts/ | ||||
| /lib/src/monorepo_scripts/ | ||||
							
								
								
									
										155
									
								
								packages/asset-buyer/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										155
									
								
								packages/asset-buyer/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,155 @@ | ||||
| [ | ||||
|     { | ||||
|         "version": "3.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "update `getBuyQuoteAsync` to return eth spent on assets instead of per unit amount", | ||||
|                 "pr": 1252 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1542208198 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542134075, | ||||
|         "version": "2.2.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1542028948, | ||||
|         "version": "2.2.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.2.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "`getAssetBuyerForProvidedOrders` factory function now takes 3 args instead of 4", | ||||
|                 "pr": 1187 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "the `OrderProvider` now requires a new method `getAvailableMakerAssetDatasAsync` and the `StandardRelayerAPIOrderProvider` requires the network id at init.", | ||||
|                 "pr": 1203 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "No longer require that provided orders all have the same maker and taker asset data", | ||||
|                 "pr": 1197 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Fix bug where `BuyQuoteInfo` objects could return `totalEthAmount` and `feeEthAmount` that were not whole numbers", | ||||
|                 "pr": 1207 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Fix bug where default values for `AssetBuyer` public facing methods could get overriden by `undefined` values", | ||||
|                 "pr": 1207 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Lower default expiry buffer from 5 minutes to 2 minutes", | ||||
|                 "pr": 1217 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1541740904 | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.1.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts`" | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Export `BuyQuoteInfo` type", | ||||
|                 "pr": 1131 | ||||
|             }, | ||||
|             { | ||||
|                 "note": | ||||
|                     "Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers", | ||||
|                 "pr": 1105 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts`", | ||||
|                 "pr": 1116 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Add `docs:json` command to package.json", | ||||
|                 "pr": 1139 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Add missing types to public interface", | ||||
|                 "pr": 1139 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Throw `SignatureRequestDenied` and `TransactionValueTooLow` errors when executing buy", | ||||
|                 "pr": 1147 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1539871071 | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Expand AssetBuyer to work with multiple assets at once", | ||||
|                 "pr": 1086 | ||||
|             }, | ||||
|             { | ||||
|                 "note": "Fix minRate and maxRate calculation", | ||||
|                 "pr": 1113 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1538693146 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1538475601, | ||||
|         "version": "1.0.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1538157789, | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537907159, | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1537875740, | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.0-rc.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Init" | ||||
|             } | ||||
|         ] | ||||
|     } | ||||
| ] | ||||
							
								
								
									
										62
									
								
								packages/asset-buyer/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								packages/asset-buyer/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| <!-- | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v3.0.0 - _November 14, 2018_ | ||||
|  | ||||
|     * update `getBuyQuoteAsync` to return eth spent on assets instead of per unit amount (#1252) | ||||
|  | ||||
| ## v2.2.2 - _November 13, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.2.1 - _November 12, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.2.0 - _November 9, 2018_ | ||||
|  | ||||
|     * `getAssetBuyerForProvidedOrders` factory function now takes 3 args instead of 4 (#1187) | ||||
|     * the `OrderProvider` now requires a new method `getAvailableMakerAssetDatasAsync` and the `StandardRelayerAPIOrderProvider` requires the network id at init. (#1203) | ||||
|     * No longer require that provided orders all have the same maker and taker asset data (#1197) | ||||
|     * Fix bug where `BuyQuoteInfo` objects could return `totalEthAmount` and `feeEthAmount` that were not whole numbers (#1207) | ||||
|     * Fix bug where default values for `AssetBuyer` public facing methods could get overriden by `undefined` values (#1207) | ||||
|     * Lower default expiry buffer from 5 minutes to 2 minutes (#1217) | ||||
|  | ||||
| ## v2.1.0 - _October 18, 2018_ | ||||
|  | ||||
|     * Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts` | ||||
|     * Export `BuyQuoteInfo` type (#1131) | ||||
|     * Updated to use new modularized artifacts and the latest version of @0xproject/contract-wrappers (#1105) | ||||
|     * Add `gasLimit` and `gasPrice` as optional properties on `BuyQuoteExecutionOpts` (#1116) | ||||
|     * Add `docs:json` command to package.json (#1139) | ||||
|     * Add missing types to public interface (#1139) | ||||
|     * Throw `SignatureRequestDenied` and `TransactionValueTooLow` errors when executing buy (#1147) | ||||
|  | ||||
| ## v2.0.0 - _October 4, 2018_ | ||||
|  | ||||
|     * Expand AssetBuyer to work with multiple assets at once (#1086) | ||||
|     * Fix minRate and maxRate calculation (#1113) | ||||
|  | ||||
| ## v1.0.3 - _October 2, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.2 - _September 28, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0 - _September 25, 2018_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0-rc.1 - _Invalid date_ | ||||
|  | ||||
|     * Init | ||||
							
								
								
									
										85
									
								
								packages/asset-buyer/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								packages/asset-buyer/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,85 @@ | ||||
| ## @0x/asset-buyer | ||||
|  | ||||
| **Warning: In Beta, has not been extensively tested.** | ||||
|  | ||||
| Convenience package for buying assets represented on the Ethereum blockchain using 0x. In its simplest form, the package helps in the usage of the [0x forwarder contract](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/forwarder-specification.md), which allows users to execute [Wrapped Ether](https://weth.io/) based 0x orders without having to set allowances, wrap Ether or own ZRX, meaning they can buy tokens with Ether alone. Given some liquidity (0x signed orders), it helps estimate the Ether cost of buying a certain asset (giving a range) and then buying that asset. | ||||
|  | ||||
| In its more advanced and useful form, it integrates with the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api) and takes care of sourcing liquidity for you given an SRA compliant endpoint. The final result is a library that tells you what assets are available, provides an Ether based quote for any asset desired, and allows you to buy that asset using Ether alone. | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| ```bash | ||||
| yarn add @0x/asset-buyer | ||||
| ``` | ||||
|  | ||||
| **Import** | ||||
|  | ||||
| ```typescript | ||||
| import { AssetBuyer } from '@0x/asset-buyer'; | ||||
| ``` | ||||
|  | ||||
| or | ||||
|  | ||||
| ```javascript | ||||
| var AssetBuyer = require('@0x/asset-buyer').AssetBuyer; | ||||
| ``` | ||||
|  | ||||
| If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: | ||||
|  | ||||
| ```json | ||||
| "compilerOptions": { | ||||
|     "typeRoots": ["node_modules/@0x/typescript-typings/types", "node_modules/@types"], | ||||
| } | ||||
| ``` | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository. | ||||
|  | ||||
| Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. | ||||
|  | ||||
| ### Install dependencies | ||||
|  | ||||
| If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: | ||||
|  | ||||
| ```bash | ||||
| yarn config set workspaces-experimental true | ||||
| ``` | ||||
|  | ||||
| Then install dependencies | ||||
|  | ||||
| ```bash | ||||
| yarn install | ||||
| ``` | ||||
|  | ||||
| ### Build | ||||
|  | ||||
| To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/asset-buyer yarn build | ||||
| ``` | ||||
|  | ||||
| Or continuously rebuild on change: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/asset-buyer yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
|  | ||||
| ```bash | ||||
| yarn clean | ||||
| ``` | ||||
|  | ||||
| ### Lint | ||||
|  | ||||
| ```bash | ||||
| yarn lint | ||||
| ``` | ||||
|  | ||||
| ### Run Tests | ||||
|  | ||||
| ```bash | ||||
| yarn test | ||||
| ``` | ||||
							
								
								
									
										73
									
								
								packages/asset-buyer/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								packages/asset-buyer/package.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| { | ||||
|     "name": "@0x/asset-buyer", | ||||
|     "version": "3.0.0", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
|     "description": "Convenience package for discovering and buying assets with Ether.", | ||||
|     "main": "lib/src/index.js", | ||||
|     "types": "lib/src/index.d.ts", | ||||
|     "scripts": { | ||||
|         "build": "yarn tsc -b", | ||||
|         "build:ci": "yarn build", | ||||
|         "lint": "tslint --format stylish --project .", | ||||
|         "test": "yarn run_mocha", | ||||
|         "rebuild_and_test": "run-s clean build test", | ||||
|         "test:coverage": "nyc npm run test --all && yarn coverage:report:lcov", | ||||
|         "coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info", | ||||
|         "test:circleci": "yarn test:coverage", | ||||
|         "run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js --exit", | ||||
|         "clean": "shx rm -rf lib test_temp", | ||||
|         "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" | ||||
|     }, | ||||
|     "config": { | ||||
|         "postpublish": { | ||||
|             "assets": [] | ||||
|         } | ||||
|     }, | ||||
|     "repository": { | ||||
|         "type": "git", | ||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" | ||||
|     }, | ||||
|     "author": "", | ||||
|     "license": "Apache-2.0", | ||||
|     "bugs": { | ||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/packages/asset-buyer/README.md", | ||||
|     "dependencies": { | ||||
|         "@0x/assert": "^1.0.17", | ||||
|         "@0x/connect": "^3.0.6", | ||||
|         "@0x/contract-wrappers": "^4.0.2", | ||||
|         "@0x/json-schemas": "^2.1.1", | ||||
|         "@0x/order-utils": "^3.0.2", | ||||
|         "@0x/subproviders": "^2.1.4", | ||||
|         "@0x/types": "^1.2.1", | ||||
|         "@0x/typescript-typings": "^3.0.4", | ||||
|         "@0x/utils": "^2.0.5", | ||||
|         "@0x/web3-wrapper": "^3.1.4", | ||||
|         "ethereum-types": "^1.1.2", | ||||
|         "lodash": "^4.17.10" | ||||
|     }, | ||||
|     "devDependencies": { | ||||
|         "@0x/tslint-config": "^1.0.10", | ||||
|         "@types/lodash": "^4.14.116", | ||||
|         "@types/mocha": "^2.2.42", | ||||
|         "@types/node": "*", | ||||
|         "chai": "^4.0.1", | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^2.0.1", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^4.1.0", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "nyc": "^11.0.1", | ||||
|         "shx": "^0.2.2", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "0.13.0", | ||||
|         "typescript": "3.0.1" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|     } | ||||
| } | ||||
							
								
								
									
										327
									
								
								packages/asset-buyer/src/asset_buyer.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										327
									
								
								packages/asset-buyer/src/asset_buyer.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,327 @@ | ||||
| import { ContractWrappers, ContractWrappersError, ForwarderWrapperError } from '@0x/contract-wrappers'; | ||||
| import { schemas } from '@0x/json-schemas'; | ||||
| import { SignedOrder } from '@0x/order-utils'; | ||||
| import { ObjectMap } from '@0x/types'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
| import { Web3Wrapper } from '@0x/web3-wrapper'; | ||||
| import { Provider } from 'ethereum-types'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { constants } from './constants'; | ||||
| import { BasicOrderProvider } from './order_providers/basic_order_provider'; | ||||
| import { StandardRelayerAPIOrderProvider } from './order_providers/standard_relayer_api_order_provider'; | ||||
| import { | ||||
|     AssetBuyerError, | ||||
|     AssetBuyerOpts, | ||||
|     BuyQuote, | ||||
|     BuyQuoteExecutionOpts, | ||||
|     BuyQuoteRequestOpts, | ||||
|     OrderProvider, | ||||
|     OrderProviderResponse, | ||||
|     OrdersAndFillableAmounts, | ||||
| } from './types'; | ||||
|  | ||||
| import { assert } from './utils/assert'; | ||||
| import { assetDataUtils } from './utils/asset_data_utils'; | ||||
| import { buyQuoteCalculator } from './utils/buy_quote_calculator'; | ||||
| import { orderProviderResponseProcessor } from './utils/order_provider_response_processor'; | ||||
|  | ||||
| interface OrdersEntry { | ||||
|     ordersAndFillableAmounts: OrdersAndFillableAmounts; | ||||
|     lastRefreshTime: number; | ||||
| } | ||||
|  | ||||
| export class AssetBuyer { | ||||
|     public readonly provider: Provider; | ||||
|     public readonly orderProvider: OrderProvider; | ||||
|     public readonly networkId: number; | ||||
|     public readonly orderRefreshIntervalMs: number; | ||||
|     public readonly expiryBufferSeconds: number; | ||||
|     private readonly _contractWrappers: ContractWrappers; | ||||
|     // cache of orders along with the time last updated keyed by assetData | ||||
|     private readonly _ordersEntryMap: ObjectMap<OrdersEntry> = {}; | ||||
|     /** | ||||
|      * Instantiates a new AssetBuyer instance given existing liquidity in the form of orders and feeOrders. | ||||
|      * @param   provider                The Provider instance you would like to use for interacting with the Ethereum network. | ||||
|      * @param   orders                  A non-empty array of objects that conform to SignedOrder. All orders must have the same makerAssetData and takerAssetData (WETH). | ||||
|      * @param   feeOrders               A array of objects that conform to SignedOrder. All orders must have the same makerAssetData (ZRX) and takerAssetData (WETH). Defaults to an empty array. | ||||
|      * @param   options                 Initialization options for the AssetBuyer. See type definition for details. | ||||
|      * | ||||
|      * @return  An instance of AssetBuyer | ||||
|      */ | ||||
|     public static getAssetBuyerForProvidedOrders( | ||||
|         provider: Provider, | ||||
|         orders: SignedOrder[], | ||||
|         options: Partial<AssetBuyerOpts> = {}, | ||||
|     ): AssetBuyer { | ||||
|         assert.isWeb3Provider('provider', provider); | ||||
|         assert.doesConformToSchema('orders', orders, schemas.signedOrdersSchema); | ||||
|         assert.assert(orders.length !== 0, `Expected orders to contain at least one order`); | ||||
|         const orderProvider = new BasicOrderProvider(orders); | ||||
|         const assetBuyer = new AssetBuyer(provider, orderProvider, options); | ||||
|         return assetBuyer; | ||||
|     } | ||||
|     /** | ||||
|      * Instantiates a new AssetBuyer instance given a [Standard Relayer API](https://github.com/0xProject/standard-relayer-api) endpoint | ||||
|      * @param   provider                The Provider instance you would like to use for interacting with the Ethereum network. | ||||
|      * @param   sraApiUrl               The standard relayer API base HTTP url you would like to source orders from. | ||||
|      * @param   options                 Initialization options for the AssetBuyer. See type definition for details. | ||||
|      * | ||||
|      * @return  An instance of AssetBuyer | ||||
|      */ | ||||
|     public static getAssetBuyerForStandardRelayerAPIUrl( | ||||
|         provider: Provider, | ||||
|         sraApiUrl: string, | ||||
|         options: Partial<AssetBuyerOpts> = {}, | ||||
|     ): AssetBuyer { | ||||
|         assert.isWeb3Provider('provider', provider); | ||||
|         assert.isWebUri('sraApiUrl', sraApiUrl); | ||||
|         const networkId = options.networkId || constants.DEFAULT_ASSET_BUYER_OPTS.networkId; | ||||
|         const orderProvider = new StandardRelayerAPIOrderProvider(sraApiUrl, networkId); | ||||
|         const assetBuyer = new AssetBuyer(provider, orderProvider, options); | ||||
|         return assetBuyer; | ||||
|     } | ||||
|     /** | ||||
|      * Instantiates a new AssetBuyer instance | ||||
|      * @param   provider            The Provider instance you would like to use for interacting with the Ethereum network. | ||||
|      * @param   orderProvider       An object that conforms to OrderProvider, see type for definition. | ||||
|      * @param   options             Initialization options for the AssetBuyer. See type definition for details. | ||||
|      * | ||||
|      * @return  An instance of AssetBuyer | ||||
|      */ | ||||
|     constructor(provider: Provider, orderProvider: OrderProvider, options: Partial<AssetBuyerOpts> = {}) { | ||||
|         const { networkId, orderRefreshIntervalMs, expiryBufferSeconds } = _.merge( | ||||
|             {}, | ||||
|             constants.DEFAULT_ASSET_BUYER_OPTS, | ||||
|             options, | ||||
|         ); | ||||
|         assert.isWeb3Provider('provider', provider); | ||||
|         assert.isValidOrderProvider('orderProvider', orderProvider); | ||||
|         assert.isNumber('networkId', networkId); | ||||
|         assert.isNumber('orderRefreshIntervalMs', orderRefreshIntervalMs); | ||||
|         assert.isNumber('expiryBufferSeconds', expiryBufferSeconds); | ||||
|         this.provider = provider; | ||||
|         this.orderProvider = orderProvider; | ||||
|         this.networkId = networkId; | ||||
|         this.orderRefreshIntervalMs = orderRefreshIntervalMs; | ||||
|         this.expiryBufferSeconds = expiryBufferSeconds; | ||||
|         this._contractWrappers = new ContractWrappers(this.provider, { | ||||
|             networkId, | ||||
|         }); | ||||
|     } | ||||
|     /** | ||||
|      * Get a `BuyQuote` containing all information relevant to fulfilling a buy given a desired assetData. | ||||
|      * You can then pass the `BuyQuote` to `executeBuyQuoteAsync` to execute the buy. | ||||
|      * @param   assetData           The assetData of the desired asset to buy (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md). | ||||
|      * @param   assetBuyAmount      The amount of asset to buy. | ||||
|      * @param   options             Options for the request. See type definition for more information. | ||||
|      * | ||||
|      * @return  An object that conforms to BuyQuote that satisfies the request. See type definition for more information. | ||||
|      */ | ||||
|     public async getBuyQuoteAsync( | ||||
|         assetData: string, | ||||
|         assetBuyAmount: BigNumber, | ||||
|         options: Partial<BuyQuoteRequestOpts> = {}, | ||||
|     ): Promise<BuyQuote> { | ||||
|         const { feePercentage, shouldForceOrderRefresh, slippagePercentage } = _.merge( | ||||
|             {}, | ||||
|             constants.DEFAULT_BUY_QUOTE_REQUEST_OPTS, | ||||
|             options, | ||||
|         ); | ||||
|         assert.isString('assetData', assetData); | ||||
|         assert.isBigNumber('assetBuyAmount', assetBuyAmount); | ||||
|         assert.isValidPercentage('feePercentage', feePercentage); | ||||
|         assert.isBoolean('shouldForceOrderRefresh', shouldForceOrderRefresh); | ||||
|         assert.isNumber('slippagePercentage', slippagePercentage); | ||||
|         const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow(); | ||||
|         const isMakerAssetZrxToken = assetData === zrxTokenAssetData; | ||||
|         // get the relevant orders for the makerAsset and fees | ||||
|         // if the requested assetData is ZRX, don't get the fee info | ||||
|         const [ordersAndFillableAmounts, feeOrdersAndFillableAmounts] = await Promise.all([ | ||||
|             this._getOrdersAndFillableAmountsAsync(assetData, shouldForceOrderRefresh), | ||||
|             isMakerAssetZrxToken | ||||
|                 ? Promise.resolve(constants.EMPTY_ORDERS_AND_FILLABLE_AMOUNTS) | ||||
|                 : this._getOrdersAndFillableAmountsAsync(zrxTokenAssetData, shouldForceOrderRefresh), | ||||
|             shouldForceOrderRefresh, | ||||
|         ]); | ||||
|         if (ordersAndFillableAmounts.orders.length === 0) { | ||||
|             throw new Error(`${AssetBuyerError.AssetUnavailable}: For assetData ${assetData}`); | ||||
|         } | ||||
|         const buyQuote = buyQuoteCalculator.calculate( | ||||
|             ordersAndFillableAmounts, | ||||
|             feeOrdersAndFillableAmounts, | ||||
|             assetBuyAmount, | ||||
|             feePercentage, | ||||
|             slippagePercentage, | ||||
|             isMakerAssetZrxToken, | ||||
|         ); | ||||
|         return buyQuote; | ||||
|     } | ||||
|     /** | ||||
|      * Get a `BuyQuote` containing all information relevant to fulfilling a buy given a desired ERC20 token address. | ||||
|      * You can then pass the `BuyQuote` to `executeBuyQuoteAsync` to execute the buy. | ||||
|      * @param   tokenAddress        The ERC20 token address. | ||||
|      * @param   assetBuyAmount      The amount of asset to buy. | ||||
|      * @param   options             Options for the request. See type definition for more information. | ||||
|      * | ||||
|      * @return  An object that conforms to BuyQuote that satisfies the request. See type definition for more information. | ||||
|      */ | ||||
|     public async getBuyQuoteForERC20TokenAddressAsync( | ||||
|         tokenAddress: string, | ||||
|         assetBuyAmount: BigNumber, | ||||
|         options: Partial<BuyQuoteRequestOpts> = {}, | ||||
|     ): Promise<BuyQuote> { | ||||
|         assert.isETHAddressHex('tokenAddress', tokenAddress); | ||||
|         assert.isBigNumber('assetBuyAmount', assetBuyAmount); | ||||
|         const assetData = assetDataUtils.encodeERC20AssetData(tokenAddress); | ||||
|         const buyQuote = this.getBuyQuoteAsync(assetData, assetBuyAmount, options); | ||||
|         return buyQuote; | ||||
|     } | ||||
|     /** | ||||
|      * Given a BuyQuote and desired rate, attempt to execute the buy. | ||||
|      * @param   buyQuote        An object that conforms to BuyQuote. See type definition for more information. | ||||
|      * @param   options         Options for the execution of the BuyQuote. See type definition for more information. | ||||
|      * | ||||
|      * @return  A promise of the txHash. | ||||
|      */ | ||||
|     public async executeBuyQuoteAsync( | ||||
|         buyQuote: BuyQuote, | ||||
|         options: Partial<BuyQuoteExecutionOpts> = {}, | ||||
|     ): Promise<string> { | ||||
|         const { ethAmount, takerAddress, feeRecipient, gasLimit, gasPrice } = _.merge( | ||||
|             {}, | ||||
|             constants.DEFAULT_BUY_QUOTE_EXECUTION_OPTS, | ||||
|             options, | ||||
|         ); | ||||
|         assert.isValidBuyQuote('buyQuote', buyQuote); | ||||
|         if (!_.isUndefined(ethAmount)) { | ||||
|             assert.isBigNumber('ethAmount', ethAmount); | ||||
|         } | ||||
|         if (!_.isUndefined(takerAddress)) { | ||||
|             assert.isETHAddressHex('takerAddress', takerAddress); | ||||
|         } | ||||
|         assert.isETHAddressHex('feeRecipient', feeRecipient); | ||||
|         if (!_.isUndefined(gasLimit)) { | ||||
|             assert.isNumber('gasLimit', gasLimit); | ||||
|         } | ||||
|         if (!_.isUndefined(gasPrice)) { | ||||
|             assert.isBigNumber('gasPrice', gasPrice); | ||||
|         } | ||||
|         const { orders, feeOrders, feePercentage, assetBuyAmount, worstCaseQuoteInfo } = buyQuote; | ||||
|         // if no takerAddress is provided, try to get one from the provider | ||||
|         let finalTakerAddress; | ||||
|         if (!_.isUndefined(takerAddress)) { | ||||
|             finalTakerAddress = takerAddress; | ||||
|         } else { | ||||
|             const web3Wrapper = new Web3Wrapper(this.provider); | ||||
|             const availableAddresses = await web3Wrapper.getAvailableAddressesAsync(); | ||||
|             const firstAvailableAddress = _.head(availableAddresses); | ||||
|             if (!_.isUndefined(firstAvailableAddress)) { | ||||
|                 finalTakerAddress = firstAvailableAddress; | ||||
|             } else { | ||||
|                 throw new Error(AssetBuyerError.NoAddressAvailable); | ||||
|             } | ||||
|         } | ||||
|         try { | ||||
|             // if no ethAmount is provided, default to the worst ethAmount from buyQuote | ||||
|             const txHash = await this._contractWrappers.forwarder.marketBuyOrdersWithEthAsync( | ||||
|                 orders, | ||||
|                 assetBuyAmount, | ||||
|                 finalTakerAddress, | ||||
|                 ethAmount || worstCaseQuoteInfo.totalEthAmount, | ||||
|                 feeOrders, | ||||
|                 feePercentage, | ||||
|                 feeRecipient, | ||||
|                 { | ||||
|                     gasLimit, | ||||
|                     gasPrice, | ||||
|                     shouldValidate: true, | ||||
|                 }, | ||||
|             ); | ||||
|             return txHash; | ||||
|         } catch (err) { | ||||
|             if (_.includes(err.message, ContractWrappersError.SignatureRequestDenied)) { | ||||
|                 throw new Error(AssetBuyerError.SignatureRequestDenied); | ||||
|             } else if (_.includes(err.message, ForwarderWrapperError.CompleteFillFailed)) { | ||||
|                 throw new Error(AssetBuyerError.TransactionValueTooLow); | ||||
|             } else { | ||||
|                 throw err; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     /** | ||||
|      * Get the asset data of all assets that are purchaseable with ether token (wETH) in the order provider passed in at init. | ||||
|      * | ||||
|      * @return  An array of asset data strings that can be purchased using wETH. | ||||
|      */ | ||||
|     public async getAvailableAssetDatasAsync(): Promise<string[]> { | ||||
|         const etherTokenAssetData = this._getEtherTokenAssetDataOrThrow(); | ||||
|         return this.orderProvider.getAvailableMakerAssetDatasAsync(etherTokenAssetData); | ||||
|     } | ||||
|     /** | ||||
|      * Grab orders from the map, if there is a miss or it is time to refresh, fetch and process the orders | ||||
|      */ | ||||
|     private async _getOrdersAndFillableAmountsAsync( | ||||
|         assetData: string, | ||||
|         shouldForceOrderRefresh: boolean, | ||||
|     ): Promise<OrdersAndFillableAmounts> { | ||||
|         // try to get ordersEntry from the map | ||||
|         const ordersEntryIfExists = this._ordersEntryMap[assetData]; | ||||
|         // we should refresh if: | ||||
|         // we do not have any orders OR | ||||
|         // we are forced to OR | ||||
|         // we have some last refresh time AND that time was sufficiently long ago | ||||
|         const shouldRefresh = | ||||
|             _.isUndefined(ordersEntryIfExists) || | ||||
|             shouldForceOrderRefresh || | ||||
|             // tslint:disable:restrict-plus-operands | ||||
|             ordersEntryIfExists.lastRefreshTime + this.orderRefreshIntervalMs < Date.now(); | ||||
|         if (!shouldRefresh) { | ||||
|             const result = ordersEntryIfExists.ordersAndFillableAmounts; | ||||
|             return result; | ||||
|         } | ||||
|         const etherTokenAssetData = this._getEtherTokenAssetDataOrThrow(); | ||||
|         const zrxTokenAssetData = this._getZrxTokenAssetDataOrThrow(); | ||||
|         // construct orderProvider request | ||||
|         const orderProviderRequest = { | ||||
|             makerAssetData: assetData, | ||||
|             takerAssetData: etherTokenAssetData, | ||||
|             networkId: this.networkId, | ||||
|         }; | ||||
|         const request = orderProviderRequest; | ||||
|         // get provider response | ||||
|         const response = await this.orderProvider.getOrdersAsync(request); | ||||
|         // since the order provider is an injected dependency, validate that it respects the API | ||||
|         // ie. it should only return maker/taker assetDatas that are specified | ||||
|         orderProviderResponseProcessor.throwIfInvalidResponse(response, request); | ||||
|         // process the responses into one object | ||||
|         const isMakerAssetZrxToken = assetData === zrxTokenAssetData; | ||||
|         const ordersAndFillableAmounts = await orderProviderResponseProcessor.processAsync( | ||||
|             response, | ||||
|             isMakerAssetZrxToken, | ||||
|             this.expiryBufferSeconds, | ||||
|             this._contractWrappers.orderValidator, | ||||
|         ); | ||||
|         const lastRefreshTime = Date.now(); | ||||
|         const updatedOrdersEntry = { | ||||
|             ordersAndFillableAmounts, | ||||
|             lastRefreshTime, | ||||
|         }; | ||||
|         this._ordersEntryMap[assetData] = updatedOrdersEntry; | ||||
|         return ordersAndFillableAmounts; | ||||
|     } | ||||
|     /** | ||||
|      * Get the assetData that represents the WETH token. | ||||
|      * Will throw if WETH does not exist for the current network. | ||||
|      */ | ||||
|     private _getEtherTokenAssetDataOrThrow(): string { | ||||
|         return assetDataUtils.getEtherTokenAssetData(this._contractWrappers); | ||||
|     } | ||||
|     /** | ||||
|      * Get the assetData that represents the ZRX token. | ||||
|      * Will throw if ZRX does not exist for the current network. | ||||
|      */ | ||||
|     private _getZrxTokenAssetDataOrThrow(): string { | ||||
|         return this._contractWrappers.exchange.getZRXAssetData(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										40
									
								
								packages/asset-buyer/src/constants.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								packages/asset-buyer/src/constants.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| import { SignedOrder } from '@0x/types'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
|  | ||||
| import { AssetBuyerOpts, BuyQuoteExecutionOpts, BuyQuoteRequestOpts, OrdersAndFillableAmounts } from './types'; | ||||
|  | ||||
| const NULL_ADDRESS = '0x0000000000000000000000000000000000000000'; | ||||
| const MAINNET_NETWORK_ID = 1; | ||||
|  | ||||
| const DEFAULT_ASSET_BUYER_OPTS: AssetBuyerOpts = { | ||||
|     networkId: MAINNET_NETWORK_ID, | ||||
|     orderRefreshIntervalMs: 10000, // 10 seconds | ||||
|     expiryBufferSeconds: 120, // 2 minutes | ||||
| }; | ||||
|  | ||||
| const DEFAULT_BUY_QUOTE_REQUEST_OPTS: BuyQuoteRequestOpts = { | ||||
|     feePercentage: 0, | ||||
|     shouldForceOrderRefresh: false, | ||||
|     slippagePercentage: 0.2, // 20% slippage protection | ||||
| }; | ||||
|  | ||||
| // Other default values are dynamically determined | ||||
| const DEFAULT_BUY_QUOTE_EXECUTION_OPTS: BuyQuoteExecutionOpts = { | ||||
|     feeRecipient: NULL_ADDRESS, | ||||
| }; | ||||
|  | ||||
| const EMPTY_ORDERS_AND_FILLABLE_AMOUNTS: OrdersAndFillableAmounts = { | ||||
|     orders: [] as SignedOrder[], | ||||
|     remainingFillableMakerAssetAmounts: [] as BigNumber[], | ||||
| }; | ||||
|  | ||||
| export const constants = { | ||||
|     ZERO_AMOUNT: new BigNumber(0), | ||||
|     NULL_ADDRESS, | ||||
|     MAINNET_NETWORK_ID, | ||||
|     ETHER_TOKEN_DECIMALS: 18, | ||||
|     DEFAULT_ASSET_BUYER_OPTS, | ||||
|     DEFAULT_BUY_QUOTE_EXECUTION_OPTS, | ||||
|     DEFAULT_BUY_QUOTE_REQUEST_OPTS, | ||||
|     EMPTY_ORDERS_AND_FILLABLE_AMOUNTS, | ||||
| }; | ||||
							
								
								
									
										25
									
								
								packages/asset-buyer/src/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								packages/asset-buyer/src/index.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| export { | ||||
|     JSONRPCRequestPayload, | ||||
|     JSONRPCResponsePayload, | ||||
|     JSONRPCResponseError, | ||||
|     JSONRPCErrorCallback, | ||||
|     Provider, | ||||
| } from 'ethereum-types'; | ||||
| export { SignedOrder } from '@0x/types'; | ||||
| export { BigNumber } from '@0x/utils'; | ||||
|  | ||||
| export { AssetBuyer } from './asset_buyer'; | ||||
| export { BasicOrderProvider } from './order_providers/basic_order_provider'; | ||||
| export { StandardRelayerAPIOrderProvider } from './order_providers/standard_relayer_api_order_provider'; | ||||
| export { | ||||
|     AssetBuyerError, | ||||
|     AssetBuyerOpts, | ||||
|     BuyQuote, | ||||
|     BuyQuoteExecutionOpts, | ||||
|     BuyQuoteInfo, | ||||
|     BuyQuoteRequestOpts, | ||||
|     OrderProvider, | ||||
|     OrderProviderRequest, | ||||
|     OrderProviderResponse, | ||||
|     SignedOrderWithRemainingFillableMakerAssetAmount, | ||||
| } from './types'; | ||||
| @@ -0,0 +1,41 @@ | ||||
| import { schemas } from '@0x/json-schemas'; | ||||
| import { SignedOrder } from '@0x/types'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { OrderProvider, OrderProviderRequest, OrderProviderResponse } from '../types'; | ||||
| import { assert } from '../utils/assert'; | ||||
|  | ||||
| export class BasicOrderProvider implements OrderProvider { | ||||
|     public readonly orders: SignedOrder[]; | ||||
|     /** | ||||
|      * Instantiates a new BasicOrderProvider instance | ||||
|      * @param   orders  An array of objects that conform to SignedOrder to fetch from. | ||||
|      * @return  An instance of BasicOrderProvider | ||||
|      */ | ||||
|     constructor(orders: SignedOrder[]) { | ||||
|         assert.doesConformToSchema('orders', orders, schemas.signedOrdersSchema); | ||||
|         this.orders = orders; | ||||
|     } | ||||
|     /** | ||||
|      * Given an object that conforms to OrderFetcherRequest, return the corresponding OrderProviderResponse that satisfies the request. | ||||
|      * @param   orderProviderRequest   An instance of OrderFetcherRequest. See type for more information. | ||||
|      * @return  An instance of OrderProviderResponse. See type for more information. | ||||
|      */ | ||||
|     public async getOrdersAsync(orderProviderRequest: OrderProviderRequest): Promise<OrderProviderResponse> { | ||||
|         assert.isValidOrderProviderRequest('orderProviderRequest', orderProviderRequest); | ||||
|         const { makerAssetData, takerAssetData } = orderProviderRequest; | ||||
|         const orders = _.filter(this.orders, order => { | ||||
|             return order.makerAssetData === makerAssetData && order.takerAssetData === takerAssetData; | ||||
|         }); | ||||
|         return { orders }; | ||||
|     } | ||||
|     /** | ||||
|      * Given a taker asset data string, return all availabled paired maker asset data strings. | ||||
|      * @param   takerAssetData   A string representing the taker asset data. | ||||
|      * @return  An array of asset data strings that can be purchased using takerAssetData. | ||||
|      */ | ||||
|     public async getAvailableMakerAssetDatasAsync(takerAssetData: string): Promise<string[]> { | ||||
|         const ordersWithTakerAssetData = _.filter(this.orders, { takerAssetData }); | ||||
|         return _.map(ordersWithTakerAssetData, order => order.makerAssetData); | ||||
|     } | ||||
| } | ||||
| @@ -0,0 +1,105 @@ | ||||
| import { HttpClient } from '@0x/connect'; | ||||
| import { APIOrder, AssetPairsResponse, OrderbookResponse } from '@0x/types'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { | ||||
|     AssetBuyerError, | ||||
|     OrderProvider, | ||||
|     OrderProviderRequest, | ||||
|     OrderProviderResponse, | ||||
|     SignedOrderWithRemainingFillableMakerAssetAmount, | ||||
| } from '../types'; | ||||
| import { assert } from '../utils/assert'; | ||||
| import { orderUtils } from '../utils/order_utils'; | ||||
|  | ||||
| export class StandardRelayerAPIOrderProvider implements OrderProvider { | ||||
|     public readonly apiUrl: string; | ||||
|     public readonly networkId: number; | ||||
|     private readonly _sraClient: HttpClient; | ||||
|     /** | ||||
|      * Given an array of APIOrder objects from a standard relayer api, return an array | ||||
|      * of SignedOrderWithRemainingFillableMakerAssetAmounts | ||||
|      */ | ||||
|     private static _getSignedOrderWithRemainingFillableMakerAssetAmountFromApi( | ||||
|         apiOrders: APIOrder[], | ||||
|     ): SignedOrderWithRemainingFillableMakerAssetAmount[] { | ||||
|         const result = _.map(apiOrders, apiOrder => { | ||||
|             const { order, metaData } = apiOrder; | ||||
|             // calculate remainingFillableMakerAssetAmount from api metadata, else assume order is completely fillable | ||||
|             const remainingFillableTakerAssetAmount = _.get( | ||||
|                 metaData, | ||||
|                 'remainingTakerAssetAmount', | ||||
|                 order.takerAssetAmount, | ||||
|             ); | ||||
|             const remainingFillableMakerAssetAmount = orderUtils.getRemainingMakerAmount( | ||||
|                 order, | ||||
|                 remainingFillableTakerAssetAmount, | ||||
|             ); | ||||
|             const newOrder = { | ||||
|                 ...order, | ||||
|                 remainingFillableMakerAssetAmount, | ||||
|             }; | ||||
|             return newOrder; | ||||
|         }); | ||||
|         return result; | ||||
|     } | ||||
|     /** | ||||
|      * Instantiates a new StandardRelayerAPIOrderProvider instance | ||||
|      * @param   apiUrl      The standard relayer API base HTTP url you would like to source orders from. | ||||
|      * @param   networkId   The ethereum network id. | ||||
|      * @return  An instance of StandardRelayerAPIOrderProvider | ||||
|      */ | ||||
|     constructor(apiUrl: string, networkId: number) { | ||||
|         assert.isWebUri('apiUrl', apiUrl); | ||||
|         assert.isNumber('networkId', networkId); | ||||
|         this.apiUrl = apiUrl; | ||||
|         this.networkId = networkId; | ||||
|         this._sraClient = new HttpClient(apiUrl); | ||||
|     } | ||||
|     /** | ||||
|      * Given an object that conforms to OrderProviderRequest, return the corresponding OrderProviderResponse that satisfies the request. | ||||
|      * @param   orderProviderRequest   An instance of OrderProviderRequest. See type for more information. | ||||
|      * @return  An instance of OrderProviderResponse. See type for more information. | ||||
|      */ | ||||
|     public async getOrdersAsync(orderProviderRequest: OrderProviderRequest): Promise<OrderProviderResponse> { | ||||
|         assert.isValidOrderProviderRequest('orderProviderRequest', orderProviderRequest); | ||||
|         const { makerAssetData, takerAssetData } = orderProviderRequest; | ||||
|         const orderbookRequest = { baseAssetData: makerAssetData, quoteAssetData: takerAssetData }; | ||||
|         const requestOpts = { networkId: this.networkId }; | ||||
|         let orderbook: OrderbookResponse; | ||||
|         try { | ||||
|             orderbook = await this._sraClient.getOrderbookAsync(orderbookRequest, requestOpts); | ||||
|         } catch (err) { | ||||
|             throw new Error(AssetBuyerError.StandardRelayerApiError); | ||||
|         } | ||||
|         const apiOrders = orderbook.asks.records; | ||||
|         const orders = StandardRelayerAPIOrderProvider._getSignedOrderWithRemainingFillableMakerAssetAmountFromApi( | ||||
|             apiOrders, | ||||
|         ); | ||||
|         return { | ||||
|             orders, | ||||
|         }; | ||||
|     } | ||||
|     /** | ||||
|      * Given a taker asset data string, return all availabled paired maker asset data strings. | ||||
|      * @param   takerAssetData   A string representing the taker asset data. | ||||
|      * @return  An array of asset data strings that can be purchased using takerAssetData. | ||||
|      */ | ||||
|     public async getAvailableMakerAssetDatasAsync(takerAssetData: string): Promise<string[]> { | ||||
|         // Return a maximum of 1000 asset datas | ||||
|         const maxPerPage = 1000; | ||||
|         const requestOpts = { networkId: this.networkId, perPage: maxPerPage }; | ||||
|         const assetPairsRequest = { assetDataA: takerAssetData }; | ||||
|         const fullRequest = { | ||||
|             ...requestOpts, | ||||
|             ...assetPairsRequest, | ||||
|         }; | ||||
|         let response: AssetPairsResponse; | ||||
|         try { | ||||
|             response = await this._sraClient.getAssetPairsAsync(fullRequest); | ||||
|         } catch (err) { | ||||
|             throw new Error(AssetBuyerError.StandardRelayerApiError); | ||||
|         } | ||||
|         return _.map(response.records, item => item.assetDataB.assetData); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										123
									
								
								packages/asset-buyer/src/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								packages/asset-buyer/src/types.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,123 @@ | ||||
| import { SignedOrder } from '@0x/types'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
|  | ||||
| /** | ||||
|  * makerAssetData: The assetData representing the desired makerAsset. | ||||
|  * takerAssetData: The assetData representing the desired takerAsset. | ||||
|  * networkId: The networkId that the desired orders should be for. | ||||
|  */ | ||||
| export interface OrderProviderRequest { | ||||
|     makerAssetData: string; | ||||
|     takerAssetData: string; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * orders: An array of orders with optional remaining fillable makerAsset amounts. See type for more info. | ||||
|  */ | ||||
| export interface OrderProviderResponse { | ||||
|     orders: SignedOrderWithRemainingFillableMakerAssetAmount[]; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * A normal SignedOrder with one extra optional property `remainingFillableMakerAssetAmount` | ||||
|  * remainingFillableMakerAssetAmount: The amount of the makerAsset that is available to be filled | ||||
|  */ | ||||
| export interface SignedOrderWithRemainingFillableMakerAssetAmount extends SignedOrder { | ||||
|     remainingFillableMakerAssetAmount?: BigNumber; | ||||
| } | ||||
| /** | ||||
|  * gerOrdersAsync: Given an OrderProviderRequest, get an OrderProviderResponse. | ||||
|  * getAvailableMakerAssetDatasAsync: Given a taker asset data string, return all availabled paired maker asset data strings. | ||||
|  */ | ||||
| export interface OrderProvider { | ||||
|     getOrdersAsync: (orderProviderRequest: OrderProviderRequest) => Promise<OrderProviderResponse>; | ||||
|     getAvailableMakerAssetDatasAsync: (takerAssetData: string) => Promise<string[]>; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * assetData: String that represents a specific asset (for more info: https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md). | ||||
|  * assetBuyAmount: The amount of asset to buy. | ||||
|  * orders: An array of objects conforming to SignedOrder. These orders can be used to cover the requested assetBuyAmount plus slippage. | ||||
|  * feeOrders: An array of objects conforming to SignedOrder. These orders can be used to cover the fees for the orders param above. | ||||
|  * feePercentage: Optional affiliate fee percentage used to calculate the eth amounts above. | ||||
|  * bestCaseQuoteInfo: Info about the best case price for the asset. | ||||
|  * worstCaseQuoteInfo: Info about the worst case price for the asset. | ||||
|  */ | ||||
| export interface BuyQuote { | ||||
|     assetData: string; | ||||
|     assetBuyAmount: BigNumber; | ||||
|     orders: SignedOrder[]; | ||||
|     feeOrders: SignedOrder[]; | ||||
|     feePercentage?: number; | ||||
|     bestCaseQuoteInfo: BuyQuoteInfo; | ||||
|     worstCaseQuoteInfo: BuyQuoteInfo; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * assetEthAmount: The amount of eth required to pay for the requested asset. | ||||
|  * feeEthAmount: The amount of eth required to pay the affiliate fee. | ||||
|  * totalEthAmount: The total amount of eth required to complete the buy (filling orders, feeOrders, and paying affiliate fee). | ||||
|  */ | ||||
| export interface BuyQuoteInfo { | ||||
|     assetEthAmount: BigNumber; | ||||
|     feeEthAmount: BigNumber; | ||||
|     totalEthAmount: BigNumber; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * feePercentage: The affiliate fee percentage. Defaults to 0. | ||||
|  * shouldForceOrderRefresh: If set to true, new orders and state will be fetched instead of waiting for the next orderRefreshIntervalMs. Defaults to false. | ||||
|  * slippagePercentage: The percentage buffer to add to account for slippage. Affects max ETH price estimates. Defaults to 0.2 (20%). | ||||
|  */ | ||||
| export interface BuyQuoteRequestOpts { | ||||
|     feePercentage: number; | ||||
|     shouldForceOrderRefresh: boolean; | ||||
|     slippagePercentage: number; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * ethAmount: The desired amount of eth to spend. Defaults to buyQuote.worstCaseQuoteInfo.totalEthAmount. | ||||
|  * takerAddress: The address to perform the buy. Defaults to the first available address from the provider. | ||||
|  * gasLimit: The amount of gas to send with a transaction (in Gwei). Defaults to an eth_estimateGas rpc call. | ||||
|  * gasPrice: Gas price in Wei to use for a transaction | ||||
|  * feeRecipient: The address where affiliate fees are sent. Defaults to null address (0x000...000). | ||||
|  */ | ||||
| export interface BuyQuoteExecutionOpts { | ||||
|     ethAmount?: BigNumber; | ||||
|     takerAddress?: string; | ||||
|     gasLimit?: number; | ||||
|     gasPrice?: BigNumber; | ||||
|     feeRecipient: string; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * networkId: The ethereum network id. Defaults to 1 (mainnet). | ||||
|  * orderRefreshIntervalMs: The interval in ms that getBuyQuoteAsync should trigger an refresh of orders and order states. Defaults to 10000ms (10s). | ||||
|  * expiryBufferSeconds: The number of seconds to add when calculating whether an order is expired or not. Defaults to 300s (5m). | ||||
|  */ | ||||
| export interface AssetBuyerOpts { | ||||
|     networkId: number; | ||||
|     orderRefreshIntervalMs: number; | ||||
|     expiryBufferSeconds: number; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Possible errors thrown by an AssetBuyer instance or associated static methods. | ||||
|  */ | ||||
| export enum AssetBuyerError { | ||||
|     NoEtherTokenContractFound = 'NO_ETHER_TOKEN_CONTRACT_FOUND', | ||||
|     NoZrxTokenContractFound = 'NO_ZRX_TOKEN_CONTRACT_FOUND', | ||||
|     StandardRelayerApiError = 'STANDARD_RELAYER_API_ERROR', | ||||
|     InsufficientAssetLiquidity = 'INSUFFICIENT_ASSET_LIQUIDITY', | ||||
|     InsufficientZrxLiquidity = 'INSUFFICIENT_ZRX_LIQUIDITY', | ||||
|     NoAddressAvailable = 'NO_ADDRESS_AVAILABLE', | ||||
|     InvalidOrderProviderResponse = 'INVALID_ORDER_PROVIDER_RESPONSE', | ||||
|     AssetUnavailable = 'ASSET_UNAVAILABLE', | ||||
|     SignatureRequestDenied = 'SIGNATURE_REQUEST_DENIED', | ||||
|     TransactionValueTooLow = 'TRANSACTION_VALUE_TOO_LOW', | ||||
| } | ||||
|  | ||||
| export interface OrdersAndFillableAmounts { | ||||
|     orders: SignedOrder[]; | ||||
|     remainingFillableMakerAssetAmounts: BigNumber[]; | ||||
| } | ||||
							
								
								
									
										39
									
								
								packages/asset-buyer/src/utils/assert.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								packages/asset-buyer/src/utils/assert.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| import { assert as sharedAssert } from '@0x/assert'; | ||||
| import { schemas } from '@0x/json-schemas'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { BuyQuote, BuyQuoteInfo, OrderProvider, OrderProviderRequest } from '../types'; | ||||
|  | ||||
| export const assert = { | ||||
|     ...sharedAssert, | ||||
|     isValidBuyQuote(variableName: string, buyQuote: BuyQuote): void { | ||||
|         sharedAssert.isHexString(`${variableName}.assetData`, buyQuote.assetData); | ||||
|         sharedAssert.doesConformToSchema(`${variableName}.orders`, buyQuote.orders, schemas.signedOrdersSchema); | ||||
|         sharedAssert.doesConformToSchema(`${variableName}.feeOrders`, buyQuote.feeOrders, schemas.signedOrdersSchema); | ||||
|         assert.isValidBuyQuoteInfo(`${variableName}.bestCaseQuoteInfo`, buyQuote.bestCaseQuoteInfo); | ||||
|         assert.isValidBuyQuoteInfo(`${variableName}.worstCaseQuoteInfo`, buyQuote.worstCaseQuoteInfo); | ||||
|         sharedAssert.isBigNumber(`${variableName}.assetBuyAmount`, buyQuote.assetBuyAmount); | ||||
|         if (!_.isUndefined(buyQuote.feePercentage)) { | ||||
|             sharedAssert.isNumber(`${variableName}.feePercentage`, buyQuote.feePercentage); | ||||
|         } | ||||
|     }, | ||||
|     isValidBuyQuoteInfo(variableName: string, buyQuoteInfo: BuyQuoteInfo): void { | ||||
|         sharedAssert.isBigNumber(`${variableName}.assetEthAmount`, buyQuoteInfo.assetEthAmount); | ||||
|         sharedAssert.isBigNumber(`${variableName}.feeEthAmount`, buyQuoteInfo.feeEthAmount); | ||||
|         sharedAssert.isBigNumber(`${variableName}.totalEthAmount`, buyQuoteInfo.totalEthAmount); | ||||
|     }, | ||||
|     isValidOrderProvider(variableName: string, orderFetcher: OrderProvider): void { | ||||
|         sharedAssert.isFunction(`${variableName}.getOrdersAsync`, orderFetcher.getOrdersAsync); | ||||
|     }, | ||||
|     isValidOrderProviderRequest(variableName: string, orderFetcherRequest: OrderProviderRequest): void { | ||||
|         sharedAssert.isHexString(`${variableName}.makerAssetData`, orderFetcherRequest.makerAssetData); | ||||
|         sharedAssert.isHexString(`${variableName}.takerAssetData`, orderFetcherRequest.takerAssetData); | ||||
|     }, | ||||
|     isValidPercentage(variableName: string, percentage: number): void { | ||||
|         assert.isNumber(variableName, percentage); | ||||
|         assert.assert( | ||||
|             percentage >= 0 && percentage <= 1, | ||||
|             `Expected ${variableName} to be between 0 and 1, but is ${percentage}`, | ||||
|         ); | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										12
									
								
								packages/asset-buyer/src/utils/asset_data_utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								packages/asset-buyer/src/utils/asset_data_utils.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| import { ContractWrappers } from '@0x/contract-wrappers'; | ||||
| import { assetDataUtils as sharedAssetDataUtils } from '@0x/order-utils'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| export const assetDataUtils = { | ||||
|     ...sharedAssetDataUtils, | ||||
|     getEtherTokenAssetData(contractWrappers: ContractWrappers): string { | ||||
|         const etherTokenAddress = contractWrappers.forwarder.etherTokenAddress; | ||||
|         const etherTokenAssetData = sharedAssetDataUtils.encodeERC20AssetData(etherTokenAddress); | ||||
|         return etherTokenAssetData; | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										207
									
								
								packages/asset-buyer/src/utils/buy_quote_calculator.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										207
									
								
								packages/asset-buyer/src/utils/buy_quote_calculator.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,207 @@ | ||||
| import { marketUtils, SignedOrder } from '@0x/order-utils'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { constants } from '../constants'; | ||||
| import { AssetBuyerError, BuyQuote, BuyQuoteInfo, OrdersAndFillableAmounts } from '../types'; | ||||
|  | ||||
| import { orderUtils } from './order_utils'; | ||||
|  | ||||
| // Calculates a buy quote for orders that have WETH as the takerAsset | ||||
| export const buyQuoteCalculator = { | ||||
|     calculate( | ||||
|         ordersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|         feeOrdersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|         assetBuyAmount: BigNumber, | ||||
|         feePercentage: number, | ||||
|         slippagePercentage: number, | ||||
|         isMakerAssetZrxToken: boolean, | ||||
|     ): BuyQuote { | ||||
|         const orders = ordersAndFillableAmounts.orders; | ||||
|         const remainingFillableMakerAssetAmounts = ordersAndFillableAmounts.remainingFillableMakerAssetAmounts; | ||||
|         const feeOrders = feeOrdersAndFillableAmounts.orders; | ||||
|         const remainingFillableFeeAmounts = feeOrdersAndFillableAmounts.remainingFillableMakerAssetAmounts; | ||||
|         const slippageBufferAmount = assetBuyAmount.mul(slippagePercentage).round(); | ||||
|         // find the orders that cover the desired assetBuyAmount (with slippage) | ||||
|         const { | ||||
|             resultOrders, | ||||
|             remainingFillAmount, | ||||
|             ordersRemainingFillableMakerAssetAmounts, | ||||
|         } = marketUtils.findOrdersThatCoverMakerAssetFillAmount(orders, assetBuyAmount, { | ||||
|             remainingFillableMakerAssetAmounts, | ||||
|             slippageBufferAmount, | ||||
|         }); | ||||
|         // if we do not have enough orders to cover the desired assetBuyAmount, throw | ||||
|         if (remainingFillAmount.gt(constants.ZERO_AMOUNT)) { | ||||
|             throw new Error(AssetBuyerError.InsufficientAssetLiquidity); | ||||
|         } | ||||
|         // if we are not buying ZRX: | ||||
|         // given the orders calculated above, find the fee-orders that cover the desired assetBuyAmount (with slippage) | ||||
|         // TODO(bmillman): optimization | ||||
|         // update this logic to find the minimum amount of feeOrders to cover the worst case as opposed to | ||||
|         // finding order that cover all fees, this will help with estimating ETH and minimizing gas usage | ||||
|         let resultFeeOrders = [] as SignedOrder[]; | ||||
|         let feeOrdersRemainingFillableMakerAssetAmounts = [] as BigNumber[]; | ||||
|         if (!isMakerAssetZrxToken) { | ||||
|             const feeOrdersAndRemainingFeeAmount = marketUtils.findFeeOrdersThatCoverFeesForTargetOrders( | ||||
|                 resultOrders, | ||||
|                 feeOrders, | ||||
|                 { | ||||
|                     remainingFillableMakerAssetAmounts: ordersRemainingFillableMakerAssetAmounts, | ||||
|                     remainingFillableFeeAmounts, | ||||
|                 }, | ||||
|             ); | ||||
|             // if we do not have enough feeOrders to cover the fees, throw | ||||
|             if (feeOrdersAndRemainingFeeAmount.remainingFeeAmount.gt(constants.ZERO_AMOUNT)) { | ||||
|                 throw new Error(AssetBuyerError.InsufficientZrxLiquidity); | ||||
|             } | ||||
|             resultFeeOrders = feeOrdersAndRemainingFeeAmount.resultFeeOrders; | ||||
|             feeOrdersRemainingFillableMakerAssetAmounts = | ||||
|                 feeOrdersAndRemainingFeeAmount.feeOrdersRemainingFillableMakerAssetAmounts; | ||||
|         } | ||||
|  | ||||
|         // assetData information for the result | ||||
|         const assetData = orders[0].makerAssetData; | ||||
|         // compile the resulting trimmed set of orders for makerAsset and feeOrders that are needed for assetBuyAmount | ||||
|         const trimmedOrdersAndFillableAmounts: OrdersAndFillableAmounts = { | ||||
|             orders: resultOrders, | ||||
|             remainingFillableMakerAssetAmounts: ordersRemainingFillableMakerAssetAmounts, | ||||
|         }; | ||||
|         const trimmedFeeOrdersAndFillableAmounts: OrdersAndFillableAmounts = { | ||||
|             orders: resultFeeOrders, | ||||
|             remainingFillableMakerAssetAmounts: feeOrdersRemainingFillableMakerAssetAmounts, | ||||
|         }; | ||||
|         const bestCaseQuoteInfo = calculateQuoteInfo( | ||||
|             trimmedOrdersAndFillableAmounts, | ||||
|             trimmedFeeOrdersAndFillableAmounts, | ||||
|             assetBuyAmount, | ||||
|             feePercentage, | ||||
|             isMakerAssetZrxToken, | ||||
|         ); | ||||
|         // in order to calculate the maxRate, reverse the ordersAndFillableAmounts such that they are sorted from worst rate to best rate | ||||
|         const worstCaseQuoteInfo = calculateQuoteInfo( | ||||
|             reverseOrdersAndFillableAmounts(trimmedOrdersAndFillableAmounts), | ||||
|             reverseOrdersAndFillableAmounts(trimmedFeeOrdersAndFillableAmounts), | ||||
|             assetBuyAmount, | ||||
|             feePercentage, | ||||
|             isMakerAssetZrxToken, | ||||
|         ); | ||||
|         return { | ||||
|             assetData, | ||||
|             orders: resultOrders, | ||||
|             feeOrders: resultFeeOrders, | ||||
|             bestCaseQuoteInfo, | ||||
|             worstCaseQuoteInfo, | ||||
|             assetBuyAmount, | ||||
|             feePercentage, | ||||
|         }; | ||||
|     }, | ||||
| }; | ||||
|  | ||||
| function calculateQuoteInfo( | ||||
|     ordersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|     feeOrdersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|     assetBuyAmount: BigNumber, | ||||
|     feePercentage: number, | ||||
|     isMakerAssetZrxToken: boolean, | ||||
| ): BuyQuoteInfo { | ||||
|     // find the total eth and zrx needed to buy assetAmount from the resultOrders from left to right | ||||
|     let assetEthAmount = constants.ZERO_AMOUNT; | ||||
|     let zrxEthAmount = constants.ZERO_AMOUNT; | ||||
|     if (isMakerAssetZrxToken) { | ||||
|         assetEthAmount = findEthAmountNeededToBuyZrx(ordersAndFillableAmounts, assetBuyAmount); | ||||
|     } else { | ||||
|         // find eth and zrx amounts needed to buy | ||||
|         const ethAndZrxAmountToBuyAsset = findEthAndZrxAmountNeededToBuyAsset(ordersAndFillableAmounts, assetBuyAmount); | ||||
|         assetEthAmount = ethAndZrxAmountToBuyAsset[0]; | ||||
|         const zrxAmountToBuyAsset = ethAndZrxAmountToBuyAsset[1]; | ||||
|         // find eth amount needed to buy zrx | ||||
|         zrxEthAmount = findEthAmountNeededToBuyZrx(feeOrdersAndFillableAmounts, zrxAmountToBuyAsset); | ||||
|     } | ||||
|     // eth amount needed to buy the affiliate fee | ||||
|     const affiliateFeeEthAmount = assetEthAmount.mul(feePercentage).ceil(); | ||||
|     // eth amount needed for fees is the sum of affiliate fee and zrx fee | ||||
|     const feeEthAmount = affiliateFeeEthAmount.plus(zrxEthAmount); | ||||
|     // eth amount needed in total is the sum of the amount needed for the asset and the amount needed for fees | ||||
|     const totalEthAmount = assetEthAmount.plus(feeEthAmount); | ||||
|     return { | ||||
|         assetEthAmount, | ||||
|         feeEthAmount, | ||||
|         totalEthAmount, | ||||
|     }; | ||||
| } | ||||
|  | ||||
| // given an OrdersAndFillableAmounts, reverse the orders and remainingFillableMakerAssetAmounts properties | ||||
| function reverseOrdersAndFillableAmounts(ordersAndFillableAmounts: OrdersAndFillableAmounts): OrdersAndFillableAmounts { | ||||
|     const ordersCopy = _.clone(ordersAndFillableAmounts.orders); | ||||
|     const remainingFillableMakerAssetAmountsCopy = _.clone(ordersAndFillableAmounts.remainingFillableMakerAssetAmounts); | ||||
|     return { | ||||
|         orders: ordersCopy.reverse(), | ||||
|         remainingFillableMakerAssetAmounts: remainingFillableMakerAssetAmountsCopy.reverse(), | ||||
|     }; | ||||
| } | ||||
|  | ||||
| function findEthAmountNeededToBuyZrx( | ||||
|     feeOrdersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|     zrxBuyAmount: BigNumber, | ||||
| ): BigNumber { | ||||
|     const { orders, remainingFillableMakerAssetAmounts } = feeOrdersAndFillableAmounts; | ||||
|     const result = _.reduce( | ||||
|         orders, | ||||
|         (acc, order, index) => { | ||||
|             const { totalEthAmount, remainingZrxBuyAmount } = acc; | ||||
|             const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index]; | ||||
|             const makerFillAmount = BigNumber.min(remainingZrxBuyAmount, remainingFillableMakerAssetAmount); | ||||
|             const [takerFillAmount, adjustedMakerFillAmount] = orderUtils.getTakerFillAmountForFeeOrder( | ||||
|                 order, | ||||
|                 makerFillAmount, | ||||
|             ); | ||||
|             const extraFeeAmount = remainingFillableMakerAssetAmount.greaterThanOrEqualTo(adjustedMakerFillAmount) | ||||
|                 ? constants.ZERO_AMOUNT | ||||
|                 : adjustedMakerFillAmount.sub(makerFillAmount); | ||||
|             return { | ||||
|                 totalEthAmount: totalEthAmount.plus(takerFillAmount), | ||||
|                 remainingZrxBuyAmount: BigNumber.max( | ||||
|                     constants.ZERO_AMOUNT, | ||||
|                     remainingZrxBuyAmount.minus(makerFillAmount).plus(extraFeeAmount), | ||||
|                 ), | ||||
|             }; | ||||
|         }, | ||||
|         { | ||||
|             totalEthAmount: constants.ZERO_AMOUNT, | ||||
|             remainingZrxBuyAmount: zrxBuyAmount, | ||||
|         }, | ||||
|     ); | ||||
|     return result.totalEthAmount; | ||||
| } | ||||
|  | ||||
| function findEthAndZrxAmountNeededToBuyAsset( | ||||
|     ordersAndFillableAmounts: OrdersAndFillableAmounts, | ||||
|     assetBuyAmount: BigNumber, | ||||
| ): [BigNumber, BigNumber] { | ||||
|     const { orders, remainingFillableMakerAssetAmounts } = ordersAndFillableAmounts; | ||||
|     const result = _.reduce( | ||||
|         orders, | ||||
|         (acc, order, index) => { | ||||
|             const { totalEthAmount, totalZrxAmount, remainingAssetBuyAmount } = acc; | ||||
|             const remainingFillableMakerAssetAmount = remainingFillableMakerAssetAmounts[index]; | ||||
|             const makerFillAmount = BigNumber.min(acc.remainingAssetBuyAmount, remainingFillableMakerAssetAmount); | ||||
|             const takerFillAmount = orderUtils.getTakerFillAmount(order, makerFillAmount); | ||||
|             const takerFeeAmount = orderUtils.getTakerFeeAmount(order, takerFillAmount); | ||||
|             return { | ||||
|                 totalEthAmount: totalEthAmount.plus(takerFillAmount), | ||||
|                 totalZrxAmount: totalZrxAmount.plus(takerFeeAmount), | ||||
|                 remainingAssetBuyAmount: BigNumber.max( | ||||
|                     constants.ZERO_AMOUNT, | ||||
|                     remainingAssetBuyAmount.minus(makerFillAmount), | ||||
|                 ), | ||||
|             }; | ||||
|         }, | ||||
|         { | ||||
|             totalEthAmount: constants.ZERO_AMOUNT, | ||||
|             totalZrxAmount: constants.ZERO_AMOUNT, | ||||
|             remainingAssetBuyAmount: assetBuyAmount, | ||||
|         }, | ||||
|     ); | ||||
|     return [result.totalEthAmount, result.totalZrxAmount]; | ||||
| } | ||||
| @@ -0,0 +1,169 @@ | ||||
| import { OrderAndTraderInfo, OrderStatus, OrderValidatorWrapper } from '@0x/contract-wrappers'; | ||||
| import { sortingUtils } from '@0x/order-utils'; | ||||
| import { RemainingFillableCalculator } from '@0x/order-utils/lib/src/remaining_fillable_calculator'; | ||||
| import { SignedOrder } from '@0x/types'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { constants } from '../constants'; | ||||
| import { | ||||
|     AssetBuyerError, | ||||
|     OrderProviderRequest, | ||||
|     OrderProviderResponse, | ||||
|     OrdersAndFillableAmounts, | ||||
|     SignedOrderWithRemainingFillableMakerAssetAmount, | ||||
| } from '../types'; | ||||
|  | ||||
| import { orderUtils } from './order_utils'; | ||||
|  | ||||
| export const orderProviderResponseProcessor = { | ||||
|     throwIfInvalidResponse(response: OrderProviderResponse, request: OrderProviderRequest): void { | ||||
|         const { makerAssetData, takerAssetData } = request; | ||||
|         _.forEach(response.orders, order => { | ||||
|             if (order.makerAssetData !== makerAssetData || order.takerAssetData !== takerAssetData) { | ||||
|                 throw new Error(AssetBuyerError.InvalidOrderProviderResponse); | ||||
|             } | ||||
|         }); | ||||
|     }, | ||||
|     /** | ||||
|      * Take the responses for the target orders to buy and fee orders and process them. | ||||
|      * Processing includes: | ||||
|      * - Drop orders that are expired or not open orders (null taker address) | ||||
|      * - If shouldValidateOnChain, attempt to grab fillable amounts from on-chain otherwise assume completely fillable | ||||
|      * - Sort by rate | ||||
|      */ | ||||
|     async processAsync( | ||||
|         orderProviderResponse: OrderProviderResponse, | ||||
|         isMakerAssetZrxToken: boolean, | ||||
|         expiryBufferSeconds: number, | ||||
|         orderValidator?: OrderValidatorWrapper, | ||||
|     ): Promise<OrdersAndFillableAmounts> { | ||||
|         // drop orders that are expired or not open | ||||
|         const filteredOrders = filterOutExpiredAndNonOpenOrders(orderProviderResponse.orders, expiryBufferSeconds); | ||||
|         // set the orders to be sorted equal to the filtered orders | ||||
|         let unsortedOrders = filteredOrders; | ||||
|         // if an orderValidator is provided, use on chain information to calculate remaining fillable makerAsset amounts | ||||
|         if (!_.isUndefined(orderValidator)) { | ||||
|             // TODO(bmillman): improvement | ||||
|             // try/catch this request and throw a more domain specific error | ||||
|             const takerAddresses = _.map(filteredOrders, () => constants.NULL_ADDRESS); | ||||
|             const ordersAndTradersInfo = await orderValidator.getOrdersAndTradersInfoAsync( | ||||
|                 filteredOrders, | ||||
|                 takerAddresses, | ||||
|             ); | ||||
|             // take orders + on chain information and find the valid orders and remaining fillable maker asset amounts | ||||
|             unsortedOrders = getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain( | ||||
|                 filteredOrders, | ||||
|                 ordersAndTradersInfo, | ||||
|                 isMakerAssetZrxToken, | ||||
|             ); | ||||
|         } | ||||
|         // sort orders by rate | ||||
|         // TODO(bmillman): optimization | ||||
|         // provide a feeRate to the sorting function to more accurately sort based on the current market for ZRX tokens | ||||
|         const sortedOrders = isMakerAssetZrxToken | ||||
|             ? sortingUtils.sortFeeOrdersByFeeAdjustedRate(unsortedOrders) | ||||
|             : sortingUtils.sortOrdersByFeeAdjustedRate(unsortedOrders); | ||||
|         // unbundle orders and fillable amounts and compile final result | ||||
|         const result = unbundleOrdersWithAmounts(sortedOrders); | ||||
|         return result; | ||||
|     }, | ||||
| }; | ||||
|  | ||||
| /** | ||||
|  * Given an array of orders, return a new array with expired and non open orders filtered out. | ||||
|  */ | ||||
| function filterOutExpiredAndNonOpenOrders( | ||||
|     orders: SignedOrderWithRemainingFillableMakerAssetAmount[], | ||||
|     expiryBufferSeconds: number, | ||||
| ): SignedOrderWithRemainingFillableMakerAssetAmount[] { | ||||
|     const result = _.filter(orders, order => { | ||||
|         return orderUtils.isOpenOrder(order) && !orderUtils.willOrderExpire(order, expiryBufferSeconds); | ||||
|     }); | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Given an array of orders and corresponding on-chain infos, return a subset of the orders | ||||
|  * that are still fillable orders with their corresponding remainingFillableMakerAssetAmounts. | ||||
|  */ | ||||
| function getValidOrdersWithRemainingFillableMakerAssetAmountsFromOnChain( | ||||
|     inputOrders: SignedOrder[], | ||||
|     ordersAndTradersInfo: OrderAndTraderInfo[], | ||||
|     isMakerAssetZrxToken: boolean, | ||||
| ): SignedOrderWithRemainingFillableMakerAssetAmount[] { | ||||
|     // iterate through the input orders and find the ones that are still fillable | ||||
|     // for the orders that are still fillable, calculate the remaining fillable maker asset amount | ||||
|     const result = _.reduce( | ||||
|         inputOrders, | ||||
|         (accOrders, order, index) => { | ||||
|             // get corresponding on-chain state for the order | ||||
|             const { orderInfo, traderInfo } = ordersAndTradersInfo[index]; | ||||
|             // if the order IS NOT fillable, do not add anything to the accumulations and continue iterating | ||||
|             if (orderInfo.orderStatus !== OrderStatus.FILLABLE) { | ||||
|                 return accOrders; | ||||
|             } | ||||
|             // if the order IS fillable, add the order and calculate the remaining fillable amount | ||||
|             const transferrableAssetAmount = BigNumber.min([traderInfo.makerAllowance, traderInfo.makerBalance]); | ||||
|             const transferrableFeeAssetAmount = BigNumber.min([ | ||||
|                 traderInfo.makerZrxAllowance, | ||||
|                 traderInfo.makerZrxBalance, | ||||
|             ]); | ||||
|             const remainingTakerAssetAmount = order.takerAssetAmount.minus(orderInfo.orderTakerAssetFilledAmount); | ||||
|             const remainingMakerAssetAmount = orderUtils.getRemainingMakerAmount(order, remainingTakerAssetAmount); | ||||
|             const remainingFillableCalculator = new RemainingFillableCalculator( | ||||
|                 order.makerFee, | ||||
|                 order.makerAssetAmount, | ||||
|                 isMakerAssetZrxToken, | ||||
|                 transferrableAssetAmount, | ||||
|                 transferrableFeeAssetAmount, | ||||
|                 remainingMakerAssetAmount, | ||||
|             ); | ||||
|             const remainingFillableAmount = remainingFillableCalculator.computeRemainingFillable(); | ||||
|             // if the order does not have any remaining fillable makerAsset, do not add anything to the accumulations and continue iterating | ||||
|             if (remainingFillableAmount.lte(constants.ZERO_AMOUNT)) { | ||||
|                 return accOrders; | ||||
|             } | ||||
|             const orderWithRemainingFillableMakerAssetAmount = { | ||||
|                 ...order, | ||||
|                 remainingFillableMakerAssetAmount: remainingFillableAmount, | ||||
|             }; | ||||
|             const newAccOrders = _.concat(accOrders, orderWithRemainingFillableMakerAssetAmount); | ||||
|             return newAccOrders; | ||||
|         }, | ||||
|         [] as SignedOrderWithRemainingFillableMakerAssetAmount[], | ||||
|     ); | ||||
|     return result; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Given an array of orders with remaining fillable maker asset amounts. Unbundle into an instance of OrdersAndRemainingFillableMakerAssetAmounts. | ||||
|  * If an order is missing a corresponding remainingFillableMakerAssetAmount, assume it is completely fillable. | ||||
|  */ | ||||
| function unbundleOrdersWithAmounts( | ||||
|     ordersWithAmounts: SignedOrderWithRemainingFillableMakerAssetAmount[], | ||||
| ): OrdersAndFillableAmounts { | ||||
|     const result = _.reduce( | ||||
|         ordersWithAmounts, | ||||
|         (acc, orderWithAmount) => { | ||||
|             const { orders, remainingFillableMakerAssetAmounts } = acc; | ||||
|             const { remainingFillableMakerAssetAmount, ...order } = orderWithAmount; | ||||
|             // if we are still missing a remainingFillableMakerAssetAmount, assume the order is completely fillable | ||||
|             const newRemainingAmount = remainingFillableMakerAssetAmount || order.makerAssetAmount; | ||||
|             // if remaining amount is less than or equal to zero, do not add it | ||||
|             if (newRemainingAmount.lte(constants.ZERO_AMOUNT)) { | ||||
|                 return acc; | ||||
|             } | ||||
|             const newAcc = { | ||||
|                 orders: _.concat(orders, order), | ||||
|                 remainingFillableMakerAssetAmounts: _.concat(remainingFillableMakerAssetAmounts, newRemainingAmount), | ||||
|             }; | ||||
|             return newAcc; | ||||
|         }, | ||||
|         { | ||||
|             orders: [] as SignedOrder[], | ||||
|             remainingFillableMakerAssetAmounts: [] as BigNumber[], | ||||
|         }, | ||||
|     ); | ||||
|     return result; | ||||
| } | ||||
							
								
								
									
										74
									
								
								packages/asset-buyer/src/utils/order_utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								packages/asset-buyer/src/utils/order_utils.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,74 @@ | ||||
| import { SignedOrder } from '@0x/types'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
|  | ||||
| import { constants } from '../constants'; | ||||
|  | ||||
| export const orderUtils = { | ||||
|     isOrderExpired(order: SignedOrder): boolean { | ||||
|         return orderUtils.willOrderExpire(order, 0); | ||||
|     }, | ||||
|     willOrderExpire(order: SignedOrder, secondsFromNow: number): boolean { | ||||
|         const millisecondsInSecond = 1000; | ||||
|         const currentUnixTimestampSec = new BigNumber(Date.now() / millisecondsInSecond).round(); | ||||
|         return order.expirationTimeSeconds.lessThan(currentUnixTimestampSec.plus(secondsFromNow)); | ||||
|     }, | ||||
|     isOpenOrder(order: SignedOrder): boolean { | ||||
|         return order.takerAddress === constants.NULL_ADDRESS; | ||||
|     }, | ||||
|     // given a remaining amount of takerAsset, calculate how much makerAsset is available | ||||
|     getRemainingMakerAmount(order: SignedOrder, remainingTakerAmount: BigNumber): BigNumber { | ||||
|         const remainingMakerAmount = remainingTakerAmount | ||||
|             .times(order.makerAssetAmount) | ||||
|             .div(order.takerAssetAmount) | ||||
|             .floor(); | ||||
|         return remainingMakerAmount; | ||||
|     }, | ||||
|     // given a desired amount of makerAsset, calculate how much takerAsset is required to fill that amount | ||||
|     getTakerFillAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber { | ||||
|         // Round up because exchange rate favors Maker | ||||
|         const takerFillAmount = makerFillAmount | ||||
|             .mul(order.takerAssetAmount) | ||||
|             .div(order.makerAssetAmount) | ||||
|             .ceil(); | ||||
|         return takerFillAmount; | ||||
|     }, | ||||
|     // given a desired amount of takerAsset to fill, calculate how much fee is required by the taker to fill that amount | ||||
|     getTakerFeeAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber { | ||||
|         // Round down because Taker fee rate favors Taker | ||||
|         const takerFeeAmount = takerFillAmount | ||||
|             .mul(order.takerFee) | ||||
|             .div(order.takerAssetAmount) | ||||
|             .floor(); | ||||
|         return takerFeeAmount; | ||||
|     }, | ||||
|     // given a desired amount of takerAsset to fill, calculate how much makerAsset will be filled | ||||
|     getMakerFillAmount(order: SignedOrder, takerFillAmount: BigNumber): BigNumber { | ||||
|         // Round down because exchange rate favors Maker | ||||
|         const makerFillAmount = takerFillAmount | ||||
|             .mul(order.makerAssetAmount) | ||||
|             .div(order.takerAssetAmount) | ||||
|             .floor(); | ||||
|         return makerFillAmount; | ||||
|     }, | ||||
|     // given a desired amount of makerAsset, calculate how much fee is required by the maker to fill that amount | ||||
|     getMakerFeeAmount(order: SignedOrder, makerFillAmount: BigNumber): BigNumber { | ||||
|         // Round down because Maker fee rate favors Maker | ||||
|         const makerFeeAmount = makerFillAmount | ||||
|             .mul(order.makerFee) | ||||
|             .div(order.makerAssetAmount) | ||||
|             .floor(); | ||||
|         return makerFeeAmount; | ||||
|     }, | ||||
|     // given a desired amount of ZRX from a fee order, calculate how much takerAsset is required to fill that amount | ||||
|     // also calculate how much ZRX needs to be bought in order fill the desired amount + takerFee | ||||
|     getTakerFillAmountForFeeOrder(order: SignedOrder, makerFillAmount: BigNumber): [BigNumber, BigNumber] { | ||||
|         // For each unit of TakerAsset we buy (MakerAsset - TakerFee) | ||||
|         const adjustedTakerFillAmount = makerFillAmount | ||||
|             .mul(order.takerAssetAmount) | ||||
|             .div(order.makerAssetAmount.sub(order.takerFee)) | ||||
|             .ceil(); | ||||
|         // The amount that we buy will be greater than makerFillAmount, since we buy some amount for fees. | ||||
|         const adjustedMakerFillAmount = orderUtils.getMakerFillAmount(order, adjustedTakerFillAmount); | ||||
|         return [adjustedTakerFillAmount, adjustedMakerFillAmount]; | ||||
|     }, | ||||
| }; | ||||
							
								
								
									
										170
									
								
								packages/asset-buyer/test/buy_quote_calculator_test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										170
									
								
								packages/asset-buyer/test/buy_quote_calculator_test.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,170 @@ | ||||
| import { orderFactory } from '@0x/order-utils/lib/src/order_factory'; | ||||
| import { BigNumber } from '@0x/utils'; | ||||
| import * as chai from 'chai'; | ||||
| import * as _ from 'lodash'; | ||||
| import 'mocha'; | ||||
|  | ||||
| import { AssetBuyerError, OrdersAndFillableAmounts } from '../src/types'; | ||||
| import { buyQuoteCalculator } from '../src/utils/buy_quote_calculator'; | ||||
|  | ||||
| import { chaiSetup } from './utils/chai_setup'; | ||||
|  | ||||
| chaiSetup.configure(); | ||||
| const expect = chai.expect; | ||||
|  | ||||
| // tslint:disable:custom-no-magic-numbers | ||||
| describe('buyQuoteCalculator', () => { | ||||
|     describe('#calculate', () => { | ||||
|         let ordersAndFillableAmounts: OrdersAndFillableAmounts; | ||||
|         let smallFeeOrderAndFillableAmount: OrdersAndFillableAmounts; | ||||
|         let allFeeOrdersAndFillableAmounts: OrdersAndFillableAmounts; | ||||
|         beforeEach(() => { | ||||
|             // generate two orders for our desired maker asset | ||||
|             // the first order has a rate of 4 makerAsset / WETH with a takerFee of 200 ZRX and has only 200 / 400 makerAsset units left to fill (half fillable) | ||||
|             // the second order has a rate of 2 makerAsset / WETH with a takerFee of 100 ZRX and has 200 / 200 makerAsset units left to fill (completely fillable) | ||||
|             // generate one order for fees | ||||
|             // the fee order has a rate of 1 ZRX / WETH with no taker fee and has 100 ZRX left to fill (completely fillable) | ||||
|             const firstOrder = orderFactory.createSignedOrderFromPartial({ | ||||
|                 makerAssetAmount: new BigNumber(400), | ||||
|                 takerAssetAmount: new BigNumber(100), | ||||
|                 takerFee: new BigNumber(200), | ||||
|             }); | ||||
|             const firstRemainingFillAmount = new BigNumber(200); | ||||
|             const secondOrder = orderFactory.createSignedOrderFromPartial({ | ||||
|                 makerAssetAmount: new BigNumber(200), | ||||
|                 takerAssetAmount: new BigNumber(100), | ||||
|                 takerFee: new BigNumber(100), | ||||
|             }); | ||||
|             const secondRemainingFillAmount = secondOrder.makerAssetAmount; | ||||
|             ordersAndFillableAmounts = { | ||||
|                 orders: [firstOrder, secondOrder], | ||||
|                 remainingFillableMakerAssetAmounts: [firstRemainingFillAmount, secondRemainingFillAmount], | ||||
|             }; | ||||
|             const smallFeeOrder = orderFactory.createSignedOrderFromPartial({ | ||||
|                 makerAssetAmount: new BigNumber(100), | ||||
|                 takerAssetAmount: new BigNumber(100), | ||||
|             }); | ||||
|             smallFeeOrderAndFillableAmount = { | ||||
|                 orders: [smallFeeOrder], | ||||
|                 remainingFillableMakerAssetAmounts: [smallFeeOrder.makerAssetAmount], | ||||
|             }; | ||||
|             const largeFeeOrder = orderFactory.createSignedOrderFromPartial({ | ||||
|                 makerAssetAmount: new BigNumber(113), | ||||
|                 takerAssetAmount: new BigNumber(200), | ||||
|                 takerFee: new BigNumber(11), | ||||
|             }); | ||||
|             allFeeOrdersAndFillableAmounts = { | ||||
|                 orders: [smallFeeOrder, largeFeeOrder], | ||||
|                 remainingFillableMakerAssetAmounts: [ | ||||
|                     smallFeeOrder.makerAssetAmount, | ||||
|                     largeFeeOrder.makerAssetAmount.minus(largeFeeOrder.takerFee), | ||||
|                 ], | ||||
|             }; | ||||
|         }); | ||||
|         it('should throw if not enough maker asset liquidity', () => { | ||||
|             // we have 400 makerAsset units available to fill but attempt to calculate a quote for 500 makerAsset units | ||||
|             expect(() => | ||||
|                 buyQuoteCalculator.calculate( | ||||
|                     ordersAndFillableAmounts, | ||||
|                     smallFeeOrderAndFillableAmount, | ||||
|                     new BigNumber(500), | ||||
|                     0, | ||||
|                     0, | ||||
|                     false, | ||||
|                 ), | ||||
|             ).to.throw(AssetBuyerError.InsufficientAssetLiquidity); | ||||
|         }); | ||||
|         it('should throw if not enough ZRX liquidity', () => { | ||||
|             // we request 300 makerAsset units but the ZRX order is only enough to fill the first order, which only has 200 makerAssetUnits available | ||||
|             expect(() => | ||||
|                 buyQuoteCalculator.calculate( | ||||
|                     ordersAndFillableAmounts, | ||||
|                     smallFeeOrderAndFillableAmount, | ||||
|                     new BigNumber(300), | ||||
|                     0, | ||||
|                     0, | ||||
|                     false, | ||||
|                 ), | ||||
|             ).to.throw(AssetBuyerError.InsufficientZrxLiquidity); | ||||
|         }); | ||||
|         it('calculates a correct buyQuote with no slippage', () => { | ||||
|             // we request 200 makerAsset units which can be filled using the first order | ||||
|             // the first order requires a fee of 100 ZRX from the taker which can be filled by the feeOrder | ||||
|             const assetBuyAmount = new BigNumber(200); | ||||
|             const feePercentage = 0.02; | ||||
|             const slippagePercentage = 0; | ||||
|             const buyQuote = buyQuoteCalculator.calculate( | ||||
|                 ordersAndFillableAmounts, | ||||
|                 smallFeeOrderAndFillableAmount, | ||||
|                 assetBuyAmount, | ||||
|                 feePercentage, | ||||
|                 slippagePercentage, | ||||
|                 false, | ||||
|             ); | ||||
|             // test if orders are correct | ||||
|             expect(buyQuote.orders).to.deep.equal([ordersAndFillableAmounts.orders[0]]); | ||||
|             expect(buyQuote.feeOrders).to.deep.equal([smallFeeOrderAndFillableAmount.orders[0]]); | ||||
|             // test if rates are correct | ||||
|             // 50 eth to fill the first order + 100 eth for fees | ||||
|             const expectedEthAmountForAsset = new BigNumber(50); | ||||
|             const expectedEthAmountForZrxFees = new BigNumber(100); | ||||
|             const expectedFillEthAmount = expectedEthAmountForAsset; | ||||
|             const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.mul(feePercentage); | ||||
|             const expectedFeeEthAmount = expectedAffiliateFeeEthAmount.plus(expectedEthAmountForZrxFees); | ||||
|             const expectedTotalEthAmount = expectedFillEthAmount.plus(expectedFeeEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedFillEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.feeEthAmount).to.bignumber.equal(expectedFeeEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.totalEthAmount).to.bignumber.equal(expectedTotalEthAmount); | ||||
|             // because we have no slippage protection, minRate is equal to maxRate | ||||
|             expect(buyQuote.worstCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedFillEthAmount); | ||||
|             expect(buyQuote.worstCaseQuoteInfo.feeEthAmount).to.bignumber.equal(expectedFeeEthAmount); | ||||
|             expect(buyQuote.worstCaseQuoteInfo.totalEthAmount).to.bignumber.equal(expectedTotalEthAmount); | ||||
|             // test if feePercentage gets passed through | ||||
|             expect(buyQuote.feePercentage).to.equal(feePercentage); | ||||
|         }); | ||||
|         it('calculates a correct buyQuote with with slippage', () => { | ||||
|             // we request 200 makerAsset units which can be filled using the first order | ||||
|             // however with 50% slippage we are protecting the buy with 100 extra makerAssetUnits | ||||
|             // so we need enough orders to fill 300 makerAssetUnits | ||||
|             // 300 makerAssetUnits can only be filled using both orders | ||||
|             // the first order requires a fee of 100 ZRX from the taker which can be filled by the feeOrder | ||||
|             const assetBuyAmount = new BigNumber(200); | ||||
|             const feePercentage = 0.02; | ||||
|             const slippagePercentage = 0.5; | ||||
|             const buyQuote = buyQuoteCalculator.calculate( | ||||
|                 ordersAndFillableAmounts, | ||||
|                 allFeeOrdersAndFillableAmounts, | ||||
|                 assetBuyAmount, | ||||
|                 feePercentage, | ||||
|                 slippagePercentage, | ||||
|                 false, | ||||
|             ); | ||||
|             // test if orders are correct | ||||
|             expect(buyQuote.orders).to.deep.equal(ordersAndFillableAmounts.orders); | ||||
|             expect(buyQuote.feeOrders).to.deep.equal(allFeeOrdersAndFillableAmounts.orders); | ||||
|             // test if rates are correct | ||||
|             // 50 eth to fill the first order + 100 eth for fees | ||||
|             const expectedEthAmountForAsset = new BigNumber(50); | ||||
|             const expectedEthAmountForZrxFees = new BigNumber(100); | ||||
|             const expectedFillEthAmount = expectedEthAmountForAsset; | ||||
|             const expectedAffiliateFeeEthAmount = expectedEthAmountForAsset.mul(feePercentage); | ||||
|             const expectedFeeEthAmount = expectedAffiliateFeeEthAmount.plus(expectedEthAmountForZrxFees); | ||||
|             const expectedTotalEthAmount = expectedFillEthAmount.plus(expectedFeeEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedFillEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.feeEthAmount).to.bignumber.equal(expectedFeeEthAmount); | ||||
|             expect(buyQuote.bestCaseQuoteInfo.totalEthAmount).to.bignumber.equal(expectedTotalEthAmount); | ||||
|             // 100 eth to fill the first order + 208 eth for fees | ||||
|             const expectedWorstEthAmountForAsset = new BigNumber(100); | ||||
|             const expectedWorstEthAmountForZrxFees = new BigNumber(208); | ||||
|             const expectedWorstFillEthAmount = expectedWorstEthAmountForAsset; | ||||
|             const expectedWorstAffiliateFeeEthAmount = expectedWorstEthAmountForAsset.mul(feePercentage); | ||||
|             const expectedWorstFeeEthAmount = expectedWorstAffiliateFeeEthAmount.plus(expectedWorstEthAmountForZrxFees); | ||||
|             const expectedWorstTotalEthAmount = expectedWorstFillEthAmount.plus(expectedWorstFeeEthAmount); | ||||
|             expect(buyQuote.worstCaseQuoteInfo.assetEthAmount).to.bignumber.equal(expectedWorstFillEthAmount); | ||||
|             expect(buyQuote.worstCaseQuoteInfo.feeEthAmount).to.bignumber.equal(expectedWorstFeeEthAmount); | ||||
|             expect(buyQuote.worstCaseQuoteInfo.totalEthAmount).to.bignumber.equal(expectedWorstTotalEthAmount); | ||||
|             // test if feePercentage gets passed through | ||||
|             expect(buyQuote.feePercentage).to.equal(feePercentage); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user