Compare commits
	
		
			568 Commits
		
	
	
		
			@0x/contra
			...
			protocol@3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 33e260f9db | ||
|  | c44f8d0060 | ||
|  | 411548a33e | ||
|  | 9a17ce1383 | ||
|  | 2b120d0669 | ||
|  | 6d877d5242 | ||
|  | e4abd690e7 | ||
|  | 2a194384b6 | ||
|  | 1e069e6f8a | ||
|  | a019bb913d | ||
|  | 9ce73931f7 | ||
|  | 97020df178 | ||
|  | dfb7b3de8f | ||
|  | 9e152912fe | ||
|  | b2c2f1e1aa | ||
|  | 629c7d8e92 | ||
|  | 62f24d4356 | ||
|  | ae281c33ca | ||
|  | 5d034dd106 | ||
|  | c1f8df0eca | ||
|  | 76dda9eeda | ||
|  | a9b84a92ac | ||
|  | 0f7e881899 | ||
|  | 6045f777ab | ||
|  | 5a15044ead | ||
|  | a69d76e487 | ||
|  | 3adfcdffa8 | ||
|  | 164a5d44d9 | ||
|  | 70ddab0231 | ||
|  | 7bf009fbf6 | ||
|  | 525bc8197b | ||
|  | 24397c51a8 | ||
|  | 06b3464756 | ||
|  | bbaa90bd9a | ||
|  | 5c683cbc0f | ||
|  | 95345f18bc | ||
|  | 4c3fbe83ac | ||
|  | 7caa43d02c | ||
|  | 3d4c03c9df | ||
|  | 22e1ed35d3 | ||
|  | dabe6fd793 | ||
|  | 3cc639c8d0 | ||
|  | 22c8e0b6db | ||
|  | f3ca4293bc | ||
|  | db3e076d03 | ||
|  | 1a6759820a | ||
|  | 61c5e7b948 | ||
|  | 5fd78ef32f | ||
|  | 14ff9b827c | ||
|  | 598dc2cd71 | ||
|  | 08e1c5109f | ||
|  | 6f7a843742 | ||
|  | c9c9615bb5 | ||
|  | f98609686d | ||
|  | 5b8bbc34e8 | ||
|  | 49cb00a9ab | ||
|  | 74b240fb88 | ||
|  | 514f9d2621 | ||
|  | fa78d1092a | ||
|  | 297342092b | ||
|  | 076f263a86 | ||
|  | 0c56207abc | ||
|  | 23953d8a5a | ||
|  | c6919eb25a | ||
|  | d509604b52 | ||
|  | a74a3450eb | ||
|  | 72c5399b9d | ||
|  | b29196b983 | ||
|  | ce76a7033d | ||
|  | 3f4bb933d1 | ||
|  | 501b7b9b65 | ||
|  | c0ea88e864 | ||
|  | 48f8bea460 | ||
|  | f4e5b6e38d | ||
|  | 477cb0a48d | ||
|  | d6bc0a3368 | ||
|  | e544a804c2 | ||
|  | 96e0ad7899 | ||
|  | 5a1fee5d31 | ||
|  | 3557a5e5a9 | ||
|  | 0bd43d5265 | ||
|  | 8fd7c1b386 | ||
|  | 50068750f5 | ||
|  | a7a905de4c | ||
|  | f283108586 | ||
|  | 9afe05095a | ||
|  | 3dab892978 | ||
|  | e40ddb800e | ||
|  | 72a74e7c66 | ||
|  | e8ae64673f | ||
|  | 2451f419c8 | ||
|  | 2394eb62aa | ||
|  | f9078bb1c3 | ||
|  | bf25c81f1c | ||
|  | 03ecc530c3 | ||
|  | d52b1d24d0 | ||
|  | 5083fab06a | ||
|  | 1249bf9ccc | ||
|  | 681f6b3f07 | ||
|  | d3ca1fe96b | ||
|  | 9e4f5815e4 | ||
|  | c3c27eaedc | ||
|  | 4bf6a23d23 | ||
|  | aaaf0d02de | ||
|  | 825cc4d035 | ||
|  | c2d44e5c10 | ||
|  | 0efd0860c8 | ||
|  | a890a06664 | ||
|  | 5befb87071 | ||
|  | 12ba4c373a | ||
|  | 7fd25be02e | ||
|  | aa688c4a92 | ||
|  | fb437551c9 | ||
|  | 6fa1de7889 | ||
|  | 7a42df9a65 | ||
|  | 15a508f3ea | ||
|  | b3c20ff909 | ||
|  | 682c07cb73 | ||
|  | 602605ab4b | ||
|  | 0eff2548d5 | ||
|  | 93ee681204 | ||
|  | d7bea98075 | ||
|  | 437a3b048d | ||
|  | f55a9454b5 | ||
|  | 3b03ad0db4 | ||
|  | 27d679e1f1 | ||
|  | 1e16d59c23 | ||
|  | 1e7c9bbb1f | ||
|  | edda1edc50 | ||
|  | d1eb6279b4 | ||
|  | 4ace79d947 | ||
|  | e5eee96487 | ||
|  | 907adf9145 | ||
|  | c046fe6220 | ||
|  | 84bf20de41 | ||
|  | f5a6f74d9a | ||
|  | 7c7fc51ccf | ||
|  | fa22f6de0d | ||
|  | 4f41214af2 | ||
|  | 607b7169bc | ||
|  | 1253490a38 | ||
|  | 0a37a588e8 | ||
|  | 23ee108089 | ||
|  | 64feeeea75 | ||
|  | 2ebef23b8c | ||
|  | cc9f43ba3b | ||
|  | 5f1c139176 | ||
|  | 9eea7de340 | ||
|  | 4480f84efa | ||
|  | 5a8b8afff1 | ||
|  | 67c95bc0b7 | ||
|  | e70ec02be8 | ||
|  | db81a94adb | ||
|  | 475b608338 | ||
|  | 27e36b112e | ||
|  | f698721484 | ||
|  | 0c08353b2c | ||
|  | a074b49732 | ||
|  | 43b75c7953 | ||
|  | 84a78eafc4 | ||
|  | 3c1ab889dd | ||
|  | 012fff46f6 | ||
|  | 6307ebc3a2 | ||
|  | 88d7e73eba | ||
|  | 9653eb9e70 | ||
|  | ad337271d3 | ||
|  | 7591e99316 | ||
|  | ca20df4752 | ||
|  | 841e4ee666 | ||
|  | e2ee3414ea | ||
|  | 5306cc03e9 | ||
|  | 85f5d32de2 | ||
|  | ab698cec14 | ||
|  | b463a39bfa | ||
|  | 018e25345b | ||
|  | b60fa8a7d7 | ||
|  | 048d8dee60 | ||
|  | 927fe2b58b | ||
|  | 89948b360c | ||
|  | 561b60a24d | ||
|  | 4f82543bdf | ||
|  | 3133c509f9 | ||
|  | 426c15692d | ||
|  | 8c87a77faa | ||
|  | d2018f07a2 | ||
|  | d2e57d8163 | ||
|  | 7403c0255a | ||
|  | 75dcd687e2 | ||
|  | afd4805421 | ||
|  | 6aa582d140 | ||
|  | 534d92fa00 | ||
|  | 37aae134ab | ||
|  | 36bd8f68c9 | ||
|  | c3ad42221e | ||
|  | 602ac1f626 | ||
|  | 3126795efe | ||
|  | dbcb221a59 | ||
|  | 6bbc179f52 | ||
|  | 48e7a391c8 | ||
|  | 2334e64d0c | ||
|  | 14f920ee84 | ||
|  | e10a81023a | ||
|  | f4709ed1cb | ||
|  | e2e14a977a | ||
|  | 866f958a10 | ||
|  | 717db99b38 | ||
|  | 02006118c7 | ||
|  | 9816019bc5 | ||
|  | 9c821dbfc3 | ||
|  | af1b890423 | ||
|  | 673835d2de | ||
|  | 500b57e935 | ||
|  | 3f7d0580c1 | ||
|  | a71c356bba | ||
|  | c3a95b7fb1 | ||
|  | f01540fb35 | ||
|  | 689a8881c2 | ||
|  | 99f5be8378 | ||
|  | 8de0282d92 | ||
|  | f99804d56a | ||
|  | f13d27b749 | ||
|  | 465fd59cbc | ||
|  | 5fdabe6612 | ||
|  | 861871134b | ||
|  | c246d98093 | ||
|  | 02076dba1b | ||
|  | 7b136a5ad8 | ||
|  | 0c4a67fa35 | ||
|  | 668aeb77f7 | ||
|  | 135ae392d5 | ||
|  | 88ba04307c | ||
|  | e4b8000a48 | ||
|  | b9df108314 | ||
|  | 6106185bf6 | ||
|  | 3a3e289864 | ||
|  | 6558632f10 | ||
|  | 376ee6bdff | ||
|  | fc5d759131 | ||
|  | 7c16bb3df8 | ||
|  | 5df74d35d0 | ||
|  | 72fc0c845a | ||
|  | b995715a2c | ||
|  | 857b5c97b0 | ||
|  | 178d9c280a | ||
|  | 2416deba25 | ||
|  | 0ce6243653 | ||
|  | 40dc10729b | ||
|  | 0571244e9e | ||
|  | 3213131cad | ||
|  | 61bf93aac2 | ||
|  | a9d0cec6d1 | ||
|  | b5e3f0b90c | ||
|  | 61f1fe42b0 | ||
|  | 1cfdc49021 | ||
|  | c4d58277cf | ||
|  | 9ac66c2130 | ||
|  | 6366163006 | ||
|  | 85fde8f9a5 | ||
|  | a03d0800b0 | ||
|  | 9cb21006a7 | ||
|  | 649202f1c4 | ||
|  | b798556774 | ||
|  | 03bc15fbdf | ||
|  | b2dfd8740c | ||
|  | 3182c12b4d | ||
|  | f783625d60 | ||
|  | 891aa8e8bf | ||
|  | 4b508d255d | ||
|  | 1cad43bf5d | ||
|  | a0cd727832 | ||
|  | ab90e15015 | ||
|  | 52cbddf054 | ||
|  | db98ff8cb7 | ||
|  | 1d8dd2f89c | ||
|  | 0ae1c926d3 | ||
|  | 1fcab58e2f | ||
|  | a8cbd1a16c | ||
|  | 3aaa0ad6b2 | ||
|  | e34bc77157 | ||
|  | 088b331f19 | ||
|  | 56f2dec441 | ||
|  | ac8b08d3cf | ||
|  | c4ead689a9 | ||
|  | 07ab10b000 | ||
|  | c969a8652a | ||
|  | fb21ca5404 | ||
|  | bbfa9c34ab | ||
|  | 7161bbe836 | ||
|  | ef65aa5bf6 | ||
|  | 2cf31f05a1 | ||
|  | 2b1a1ba0db | ||
|  | 05b25c6229 | ||
|  | 2db52c6983 | ||
|  | 4803e2f68c | ||
|  | 7030572f1d | ||
|  | 6e2eb9c5bb | ||
|  | eb27e260e0 | ||
|  | c72aa653e8 | ||
|  | 4d04b72674 | ||
|  | e3b92d2c8b | ||
|  | 4aa5a89cd7 | ||
|  | c6b9ea5723 | ||
|  | 2dc0bff1ea | ||
|  | 408e66e8b4 | ||
|  | 40fe12a86b | ||
|  | 1adb56f092 | ||
|  | 629d48c766 | ||
|  | c8886febb9 | ||
|  | efe598c8fd | ||
|  | 32218ce25e | ||
|  | f7ae697475 | ||
|  | 6e954385ce | ||
|  | f8df89b506 | ||
|  | a3ff406461 | ||
|  | 221de054f4 | ||
|  | 98e6aa4bac | ||
|  | 199808dc44 | ||
|  | 5d8e35fb68 | ||
|  | 36546480b1 | ||
|  | cd9e408ea3 | ||
|  | 7698f21517 | ||
|  | 10724e5745 | ||
|  | dde76a4dbb | ||
|  | 86ff5c53bb | ||
|  | efef5f122f | ||
|  | 83c942ad8c | ||
|  | 31e90e314c | ||
|  | 33caae705e | ||
|  | 961273a2ff | ||
|  | 46e512a27c | ||
|  | 290a04a0ad | ||
|  | 12ff4ec438 | ||
|  | 1c15ecacb0 | ||
|  | c6d738ed0c | ||
|  | f089f5d87f | ||
|  | 78e3cd39d1 | ||
|  | 1588c1f362 | ||
|  | a35d1b8a9d | ||
|  | 32923ec7e1 | ||
|  | 5a3bd716ad | ||
|  | 84862f15c1 | ||
|  | 9e42dce5c4 | ||
|  | a360109013 | ||
|  | 68d6b3a033 | ||
|  | 733c3046bc | ||
|  | 23d4b6bf1c | ||
|  | 39bd0c5459 | ||
|  | c13ffb2072 | ||
|  | 38bcab1f86 | ||
|  | a24f01c90f | ||
|  | 708e34602b | ||
|  | d60c8ddd5a | ||
|  | eea63292f0 | ||
|  | a97342a594 | ||
|  | 00f55be83e | ||
|  | 90ed283b20 | ||
|  | 61272961a8 | ||
|  | 507690f9db | ||
|  | 90ad5eb6c4 | ||
|  | 7bc9701c81 | ||
|  | a7d502a501 | ||
|  | fbe99b41f8 | ||
|  | 66e2d93e9c | ||
|  | 4672c72fef | ||
|  | ac6b03cd4a | ||
|  | d7de191947 | ||
|  | de7f1fc207 | ||
|  | 99de5a3814 | ||
|  | 4cf566cad8 | ||
|  | 6138955f93 | ||
|  | a57cf68ee4 | ||
|  | 20edcd1ae5 | ||
|  | 5333befd89 | ||
|  | 235e406620 | ||
|  | 5f570b772d | ||
|  | f2507cb94a | ||
|  | f84b375cde | ||
|  | 32d11d1ba5 | ||
|  | 5c9b6eb078 | ||
|  | f53a512e70 | ||
|  | ec08715090 | ||
|  | 79e0a9ef37 | ||
|  | 1ce8a33937 | ||
|  | b3053dfb91 | ||
|  | 3da05f2812 | ||
|  | 0ba79b060d | ||
|  | c4bcc26e29 | ||
|  | 630108ccb6 | ||
|  | 1ab33aa132 | ||
|  | ee456ea6e7 | ||
|  | e7541ac2af | ||
|  | d34d46b7fd | ||
|  | 08ae43aad3 | ||
|  | eb141075c7 | ||
|  | bd3387a408 | ||
|  | e1a48e80e1 | ||
|  | bf899d40a0 | ||
|  | dc66f1b886 | ||
|  | 3753b1a7d0 | ||
|  | 05c5acdb15 | ||
|  | ca63bcc9b0 | ||
|  | 3733d503db | ||
|  | ab28e42c22 | ||
|  | 7e53b4f834 | ||
|  | 3bb60fee19 | ||
|  | 9f7840e12b | ||
|  | f41e13b574 | ||
|  | 4049143630 | ||
|  | 705f46717f | ||
|  | a6cf8ae0b6 | ||
|  | dba6972281 | ||
|  | 52d36f5a8b | ||
|  | 889b58a914 | ||
|  | 43810835d7 | ||
|  | 4b9867f167 | ||
|  | e9c91e59bd | ||
|  | d8844f6970 | ||
|  | 1cdc6e7184 | ||
|  | 36ad373f03 | ||
|  | 78dfb6d525 | ||
|  | 79254de7bc | ||
|  | 1d6aef5cd6 | ||
|  | f9d02c9e27 | ||
|  | 228246089e | ||
|  | b6319ba3d8 | ||
|  | 2636384ead | ||
|  | 0425f76284 | ||
|  | d93e72f56a | ||
|  | 195d543ce3 | ||
|  | 9cda9f69cd | ||
|  | 7b0a1c3630 | ||
|  | a8f3a47240 | ||
|  | db0f3a8780 | ||
|  | 514db24ceb | ||
|  | e738743c89 | ||
|  | f471e1a8a3 | ||
|  | a2f0d5eedf | ||
|  | 2f9b894d71 | ||
|  | bab34c2d21 | ||
|  | a68421b0f8 | ||
|  | e9b0ac8820 | ||
|  | 4f78f55c2a | ||
|  | 156093127b | ||
|  | 47d91bb4e0 | ||
|  | cc31445189 | ||
|  | af78238507 | ||
|  | b30f87f50c | ||
|  | 3cd03ed0f1 | ||
|  | e7ad7c3af7 | ||
|  | 7e8b56eef4 | ||
|  | 458a014e6d | ||
|  | 9b6703398e | ||
|  | 71700e69af | ||
|  | 14d6330b40 | ||
|  | d31d646ecc | ||
|  | 270d7a3f19 | ||
|  | e078f3d479 | ||
|  | 6aa8f17ed5 | ||
|  | 8e73ae3614 | ||
|  | 89117beda2 | ||
|  | e27e6baabe | ||
|  | 15ce90c0ec | ||
|  | 39e157499d | ||
|  | d22c0641fb | ||
|  | 82806b6fcb | ||
|  | fe293d91ee | ||
|  | 7842bb4cad | ||
|  | 6f7e156f49 | ||
|  | 0d19cac487 | ||
|  | f30dfcc572 | ||
|  | 3df39d8cfe | ||
|  | ece93fed78 | ||
|  | 3a2c6ae9d6 | ||
|  | 2ed71b36b6 | ||
|  | ae9c301795 | ||
|  | 68206ffb6e | ||
|  | 25a3c18bfe | ||
|  | d28476e9f7 | ||
|  | 7cd30610f9 | ||
|  | ceb90989d0 | ||
|  | bb39d63d37 | ||
|  | 213709d020 | ||
|  | d0e9081852 | ||
|  | 71cde281b9 | ||
|  | c03f1586e6 | ||
|  | 10aceb164d | ||
|  | 34f516a417 | ||
|  | 5dd686f22f | ||
|  | 5f47ad3363 | ||
|  | e166e9762a | ||
|  | 341c5782e5 | ||
|  | d5180d3ebc | ||
|  | 2c73bbd689 | ||
|  | b10522479c | ||
|  | 2b39ae4800 | ||
|  | 788bdba8cd | ||
|  | 222fd5d822 | ||
|  | eedfc64a8c | ||
|  | 78170b26e9 | ||
|  | f966b6f4df | ||
|  | 053b55fbbf | ||
|  | 84a55a2d84 | ||
|  | 498a50b229 | ||
|  | 766888ec41 | ||
|  | 466d962c07 | ||
|  | ae2a6fb685 | ||
|  | 5afe2616a4 | ||
|  | 72c869649a | ||
|  | 34138fc3b5 | ||
|  | f67d2b96ac | ||
|  | d877d3686c | ||
|  | 8260615b4e | ||
|  | c3f6d48966 | ||
|  | 02f979bc74 | ||
|  | de1c71aacc | ||
|  | ca2aa72e0f | ||
|  | 9a16f5736e | ||
|  | 82774df715 | ||
|  | 314f53c0b3 | ||
|  | 6553ee0130 | ||
|  | d7918ea047 | ||
|  | 4aa9c85503 | ||
|  | f172591059 | ||
|  | dfa7e30e42 | ||
|  | 3fe2013398 | ||
|  | 391d501ce6 | ||
|  | 9edaa3a64e | ||
|  | 6e4e313792 | ||
|  | e6dcf92ec8 | ||
|  | f359de2cac | ||
|  | 2d29014091 | ||
|  | 0450e430f1 | ||
|  | b6700af6a8 | ||
|  | bcee7546ae | ||
|  | 4dac620156 | ||
|  | 74d9df2fb0 | ||
|  | 9d1615fa23 | ||
|  | b1b9949e72 | ||
|  | 957ef5ab77 | ||
|  | 07a681c77e | ||
|  | 145ec8ede1 | ||
|  | 5f5a158060 | ||
|  | 3e99c95791 | ||
|  | 4f83521be8 | ||
|  | aae93bb6a7 | ||
|  | 5c1ffe7fc8 | ||
|  | b1c3c60def | ||
|  | 8763713596 | ||
|  | 3e823cc9e3 | ||
|  | 1c84709db3 | ||
|  | 9150d6bd2a | ||
|  | 10f29b66b8 | ||
|  | 259aec52a9 | ||
|  | 6554bf9f08 | ||
|  | d8558f5956 | ||
|  | 31fa530845 | ||
|  | 120714ecfc | ||
|  | 615874d2ec | ||
|  | 67b195c942 | ||
|  | 75689cee96 | ||
|  | 8ba77e95a4 | ||
|  | 934fbca860 | ||
|  | e78c8038c7 | ||
|  | f64a42ebb5 | ||
|  | e79db7de89 | ||
|  | e58c25aa18 | ||
|  | 8ec44b63b1 | ||
|  | 41907936a1 | 
| @@ -4,23 +4,13 @@ jobs: | |||||||
|     build: |     build: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         environment: |         environment: | ||||||
|             CONTRACTS_COMMIT_HASH: '9ed05f5' |             CONTRACTS_COMMIT_HASH: '9ed05f5' | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - checkout |             - checkout | ||||||
|             - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV |             - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV | ||||||
|             # HACK(feuGeneA): commented out this hack as we're changing |  | ||||||
|             # from a circleci-maintained container to a different |  | ||||||
|             # container, and this hack may not apply anymore, as |  | ||||||
|             # suggested by the non-existance of `/home/circleci/.bashrc` |  | ||||||
|             # when running the command below. |  | ||||||
|             # - run: |  | ||||||
|             #       # HACK(albrow): Without this, yarn commands will sometimes |  | ||||||
|             #       # fail with a "permission denied" error. |  | ||||||
|             #       name: Set npm path |  | ||||||
|             #       command: npm set prefix=/home/circleci/npm && echo 'export PATH=$HOME/circleci/npm/bin:$PATH' >> /home/circleci/.bashrc |  | ||||||
|             - run: |             - run: | ||||||
|                   name: install-yarn |                   name: install-yarn | ||||||
|                   command: npm install --force --global yarn@1.17.0 |                   command: npm install --force --global yarn@1.17.0 | ||||||
| @@ -41,7 +31,7 @@ jobs: | |||||||
|     test-exchange-ganache: |     test-exchange-ganache: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
| @@ -51,7 +41,7 @@ jobs: | |||||||
|     test-integrations-ganache: |     test-integrations-ganache: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
| @@ -61,27 +51,37 @@ jobs: | |||||||
|     test-contracts-staking-ganache: |     test-contracts-staking-ganache: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - run: yarn wsrun test:circleci @0x/contracts-staking |             - run: yarn wsrun test:circleci @0x/contracts-staking | ||||||
|     test-contracts-rest-ganache: |     test-contracts-extra-ganache: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - run: yarn wsrun test:circleci @0x/contracts-multisig @0x/contracts-utils @0x/contracts-exchange-libs @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-asset-proxy @0x/contracts-exchange-forwarder @0x/contracts-coordinator @0x/contracts-erc20-bridge-sampler @0x/contracts-broker @0x/contracts-zero-ex |             - run: yarn wsrun test:circleci @0x/contracts-exchange-forwarder @0x/contracts-coordinator | ||||||
|  |     test-contracts-rest-ganache: | ||||||
|  |         resource_class: medium+ | ||||||
|  |         docker: | ||||||
|  |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|  |         working_directory: ~/repo | ||||||
|  |         steps: | ||||||
|  |             - restore_cache: | ||||||
|  |                   keys: | ||||||
|  |                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|  |             - run: yarn wsrun test:circleci @0x/contracts-multisig @0x/contracts-utils @0x/contracts-exchange-libs @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-asset-proxy @0x/contracts-broker @0x/contracts-zero-ex | ||||||
|     test-publish: |     test-publish: | ||||||
|         resource_class: medium+ |         resource_class: medium+ | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|             - image: 0xorg/verdaccio |             - image: 0xorg/verdaccio | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
| @@ -95,7 +95,7 @@ jobs: | |||||||
|                   path: ~/.npm/_logs |                   path: ~/.npm/_logs | ||||||
|     test-doc-generation: |     test-doc-generation: | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
| @@ -106,230 +106,35 @@ jobs: | |||||||
|                   no_output_timeout: 1200 |                   no_output_timeout: 1200 | ||||||
|     test-rest: |     test-rest: | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |                       - repo-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - run: yarn wsrun test:circleci @0x/contracts-test-utils |             - run: yarn wsrun test:circleci @0x/contracts-test-utils | ||||||
|             - run: yarn wsrun test:circleci @0x/abi-gen |  | ||||||
|             - run: yarn wsrun test:circleci @0x/asset-swapper |  | ||||||
|             - run: yarn wsrun test:circleci @0x/contract-artifacts |             - run: yarn wsrun test:circleci @0x/contract-artifacts | ||||||
|             - 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-test |             - run: yarn wsrun test:circleci @0x/contract-wrappers-test | ||||||
|             - run: yarn wsrun test:circleci @0x/dev-utils |             - run: yarn wsrun test:circleci @0x/migrations | ||||||
|             - run: yarn wsrun test:circleci @0x/json-schemas |  | ||||||
|             - run: yarn wsrun test:circleci @0x/order-utils |             - run: yarn wsrun test:circleci @0x/order-utils | ||||||
|             - run: yarn wsrun test:circleci @0x/orderbook |             - run: yarn wsrun test:circleci @0x/asset-swapper | ||||||
|             - run: yarn wsrun test:circleci @0x/sol-compiler |  | ||||||
|             - run: yarn wsrun test:circleci @0x/sol-tracing-utils |  | ||||||
|             - 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-asset-swapper-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/packages/asset-swapper/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: |             - save_cache: | ||||||
|                   key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }} |                   key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|                   paths: |                   paths: | ||||||
|                       - ~/repo/packages/contract-wrappers-test/coverage/lcov.info |                       - ~/repo/packages/contract-wrappers-test/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: |             - save_cache: | ||||||
|                   key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} |                   key: coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|                   paths: |                   paths: | ||||||
|                       - ~/repo/packages/order-utils/coverage/lcov.info |                       - ~/repo/packages/order-utils/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-tracing-utils-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/packages/sol-tracing-utils/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: |             - save_cache: | ||||||
|                   key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} |                   key: coverage-web3-wrapper-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|                   paths: |                   paths: | ||||||
|                       - ~/repo/packages/web3-wrapper/coverage/lcov.info |                       - ~/repo/packages/web3-wrapper/coverage/lcov.info | ||||||
|     test-python: |  | ||||||
|         working_directory: ~/repo |  | ||||||
|         docker: |  | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |  | ||||||
|             - image: 0xorg/ganache-cli:6.0.0 |  | ||||||
|               environment: |  | ||||||
|                   VERSION: '6.0.0' |  | ||||||
|             - image: 0xorg/mesh:0xV3 |  | ||||||
|               environment: |  | ||||||
|                   ETHEREUM_RPC_URL: 'http://localhost:8545' |  | ||||||
|                   ETHEREUM_CHAIN_ID: '1337' |  | ||||||
|                   VERBOSITY: 5 |  | ||||||
|                   BLOCK_POLLING_INTERVAL: '50ms' |  | ||||||
|                   ETHEREUM_RPC_MAX_REQUESTS_PER_24_HR_UTC: '1778000' |  | ||||||
|               command: | |  | ||||||
|                   sh -c "waitForGanache () { until printf 'POST /\r\nContent-Length: 26\r\n\r\n{\"method\":\"net_listening\"}' | nc localhost 8545 | grep true; do continue; done }; waitForGanache && ./mesh" |  | ||||||
|             - image: 0xorg/launch-kit-backend:v3 |  | ||||||
|               environment: |  | ||||||
|                   RPC_URL: 'http://localhost:8545' |  | ||||||
|                   CHAIN_ID: 1337 |  | ||||||
|                   WHITELIST_ALL_TOKENS: True |  | ||||||
|                   FEE_RECIPIENT: '0x0000000000000000000000000000000000000001' |  | ||||||
|                   MAKER_FEE_UNIT_AMOUNT: 0 |  | ||||||
|                   TAKER_FEE_UNIT_AMOUNT: 0 |  | ||||||
|                   MESH_ENDPOINT: 'ws://localhost:60557' |  | ||||||
|               command: | |  | ||||||
|                   sh -c "waitForMesh () { sleep 30; }; waitForMesh && node_modules/.bin/forever ts/lib/index.js" |  | ||||||
|         steps: |  | ||||||
|             - checkout |  | ||||||
|             - restore_cache: |  | ||||||
|                   key: installed-py-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - run: |  | ||||||
|                   command: | |  | ||||||
|                       cd python-packages |  | ||||||
|                       python -m ensurepip |  | ||||||
|                       ./pre_install |  | ||||||
|                       ./install |  | ||||||
|             - save_cache: |  | ||||||
|                   key: installed-py-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - '/usr/local/bin' |  | ||||||
|                       - '/usr/local/lib/python3.7/site-packages' |  | ||||||
|             - run: |  | ||||||
|                   command: | |  | ||||||
|                       cd python-packages |  | ||||||
|                       ./parallel coverage run setup.py test |  | ||||||
|                       ./build_docs |  | ||||||
|             - run: |  | ||||||
|                   command: | |  | ||||||
|                       # copy generated wrappers into contract_wrappers/build, |  | ||||||
|                       # JUST so CircleCI will persist them as build artifacts. |  | ||||||
|                       cd python-packages/contract_wrappers/src/zero_ex |  | ||||||
|                       for i in contract_wrappers/[^__]*/; do mkdir -p ../../build/$i; cp $i/__init__.py ../../build/$i; done |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-contract-addresses-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/contract_addresses/.coverage |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-contract-artifacts-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/contract_artifacts/.coverage |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-contract-demo-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/contract_demo/.coverage |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-json-schemas-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/json_schemas/.coverage |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/order_utils/.coverage |  | ||||||
|             - save_cache: |  | ||||||
|                   key: coverage-python-sra-client-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|                   paths: |  | ||||||
|                       - ~/repo/python-packages/sra_client/.coverage |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/contract_addresses/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/contract_artifacts/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/contract_wrappers/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/json_schemas/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/middlewares/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/order_utils/build |  | ||||||
|             - store_artifacts: |  | ||||||
|                   path: ~/repo/python-packages/sra_client/build |  | ||||||
|     test-rest-python: |  | ||||||
|         working_directory: ~/repo |  | ||||||
|         docker: |  | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |  | ||||||
|         steps: |  | ||||||
|             - checkout |  | ||||||
|             - restore_cache: |  | ||||||
|                   key: installed-py-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - run: |  | ||||||
|                   command: | |  | ||||||
|                       cd python-packages/order_utils |  | ||||||
|                       python -m ensurepip |  | ||||||
|                       python -m pip install . |  | ||||||
|             - save_cache: |  | ||||||
|                   key: installed-py-{{ .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: nikolaik/python-nodejs:python3.7-nodejs8 |  | ||||||
|         steps: |  | ||||||
|             - checkout |  | ||||||
|             - restore_cache: |  | ||||||
|                   key: installed-py-{{ .Branch }}-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - run: |  | ||||||
|                   command: | |  | ||||||
|                       python -m ensurepip |  | ||||||
|                       cd python-packages |  | ||||||
|                       ./pre_install |  | ||||||
|                       ./install |  | ||||||
|                       ./lint |  | ||||||
|     static-tests: |     static-tests: | ||||||
|         resource_class: large |         resource_class: large | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
| @@ -338,94 +143,42 @@ jobs: | |||||||
|             - run: yarn prettier:ci |             - run: yarn prettier:ci | ||||||
|             - run: yarn deps_versions:ci |             - run: yarn deps_versions:ci | ||||||
|             - run: yarn diff_md_docs:ci |             - run: yarn diff_md_docs:ci | ||||||
|             - run: cd packages/0x.js && yarn build:umd:prod |  | ||||||
|             - run: yarn bundlewatch |  | ||||||
|     submit-coverage: |     submit-coverage: | ||||||
|         docker: |         docker: | ||||||
|             - image: nikolaik/python-nodejs:python3.7-nodejs8 |             - image: nikolaik/python-nodejs:python3.7-nodejs10 | ||||||
|         working_directory: ~/repo |         working_directory: ~/repo | ||||||
|         steps: |         steps: | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - repo-{{ .Environment.CIRCLE_SHA1 }} |                       - 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-asset-swapper-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-base-contract-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-connect-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }} |                       - coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} |                       - coverage-order-utils-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-sol-compiler-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-sol-tracing-utils-{{ .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: |             - restore_cache: | ||||||
|                   keys: |                   keys: | ||||||
|                       - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} |                       - coverage-contracts-{{ .Environment.CIRCLE_SHA1 }} | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-json-schemas-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-contract-addresses-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-contract-artifacts-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-contract-demo-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-sra-client-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - restore_cache: |  | ||||||
|                   keys: |  | ||||||
|                       - coverage-python-order-utils-{{ .Environment.CIRCLE_SHA1 }} |  | ||||||
|             - run: yarn report_coverage |             - run: yarn report_coverage | ||||||
| workflows: | workflows: | ||||||
|     version: 2 |     version: 2 | ||||||
|     main: |     main: | ||||||
|         jobs: |         jobs: | ||||||
|             - build |             - build | ||||||
|             - test-exchange-ganache: |             # Disabled until we begin actively developing on these packages again. | ||||||
|                   requires: |             # - test-exchange-ganache: | ||||||
|                       - build |             #       requires: | ||||||
|             - test-integrations-ganache: |             #           - build | ||||||
|                   requires: |             # - test-integrations-ganache: | ||||||
|                       - build |             #       requires: | ||||||
|             - test-contracts-staking-ganache: |             #           - build | ||||||
|                   requires: |             # - test-contracts-staking-ganache: | ||||||
|                       - build |             #       requires: | ||||||
|  |             #           - build | ||||||
|  |             # - test-contracts-extra-ganache: | ||||||
|  |             #       requires: | ||||||
|  |             #           - build | ||||||
|             - test-contracts-rest-ganache: |             - test-contracts-rest-ganache: | ||||||
|                   requires: |                   requires: | ||||||
|                       - build |                       - build | ||||||
| @@ -441,18 +194,14 @@ workflows: | |||||||
|             - test-doc-generation: |             - test-doc-generation: | ||||||
|                   requires: |                   requires: | ||||||
|                       - build |                       - build | ||||||
|             - submit-coverage: |             # Disabled until this repo has a coveralls API key | ||||||
|                   requires: |             # - submit-coverage: | ||||||
|                       - test-contracts-rest-ganache |             #       requires: | ||||||
|                       - test-contracts-staking-ganache |             #           # Disabled until we begin actively developing on these packages again. | ||||||
|                       - test-exchange-ganache |             #           # - test-exchange-ganache | ||||||
|                       - test-rest |             #           # - test-integrations-ganache | ||||||
|                       - static-tests |             #           # - test-contracts-staking-ganache | ||||||
|             - test-python: |             #           # - test-contracts-extra-ganache | ||||||
|                   requires: |             #           - test-contracts-rest-ganache | ||||||
|                       - build |             #           - test-rest | ||||||
|             - static-tests-python: |             #           - static-tests | ||||||
|                   requires: |  | ||||||
|                       - build |  | ||||||
|             # skip python tox run for now, as we don't yet have multiple test environments to support. |  | ||||||
|             # - test-rest-python |  | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @@ -2,7 +2,3 @@ | |||||||
|  |  | ||||||
| # Automatically collapse generated files in GitHub. | # Automatically collapse generated files in GitHub. | ||||||
| *.svg linguist-generated=true | *.svg linguist-generated=true | ||||||
| packages/contract-artifacts/artifacts/*json linguist-generated=true |  | ||||||
| packages/abi-gen-wrappers/src/generated-wrappers/*.ts linguist-generated=true |  | ||||||
| packages/contract-wrappers/src/generated-wrappers/*.ts linguist-generated=true |  | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										26
									
								
								.github/autolabeler.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.github/autolabeler.yml
									
									
									
									
										vendored
									
									
								
							| @@ -1,33 +1,7 @@ | |||||||
| python: ['python-packages'] | python: ['python-packages'] | ||||||
| contracts: ['contracts'] | contracts: ['contracts'] | ||||||
| @0x/sol-doc: ['packages/sol-doc'] |  | ||||||
| @0x/sol-resolver: ['packages/sol-resolver'] |  | ||||||
| @0x/contracts-gen: ['packages/contracts-gen'] |  | ||||||
| @0x/sra-spec: ['packages/sra-spec'] |  | ||||||
| @0x/subproviders: ['packages/subproviders'] |  | ||||||
| @0x/contract-addresses: ['packages/contract-addresses'] | @0x/contract-addresses: ['packages/contract-addresses'] | ||||||
| @0x/migrations: ['packages/migrations'] | @0x/migrations: ['packages/migrations'] | ||||||
| @0x/web3-wrapper: ['packages/web3-wrapper'] |  | ||||||
| @0x/sol-compiler: ['packages/sol-compiler'] |  | ||||||
| @0x/types: ['packages/types'] |  | ||||||
| @0x/instant: ['packages/instant'] |  | ||||||
| @0x/abi-gen-templates: ['packages/abi-gen-templates'] |  | ||||||
| @0x/abi-gen: ['packages/abi-gen'] |  | ||||||
| @0x/sol-coverage: ['packages/sol-coverage'] |  | ||||||
| @0x/sol-profiler: ['packages/sol-profiler'] |  | ||||||
| @0x/sol-trace: ['packages/sol-trace'] |  | ||||||
| @0x/sol-tracing-utils: ['packages/sol-tracing-utils'] |  | ||||||
| @0x/utils: ['packages/utils'] |  | ||||||
| @0x/tslint-config: ['packages/tslint-config'] |  | ||||||
| @0x/asset-swapper: ['packages/asset-swapper'] |  | ||||||
| @0x/order-utils: ['packages/order-utils'] | @0x/order-utils: ['packages/order-utils'] | ||||||
| @0x/assert: ['packages/assert'] |  | ||||||
| @0x/base-contract: ['packages/base-contract'] |  | ||||||
| @0x/typescript-typings: ['packages/typescript-typings'] |  | ||||||
| 0x.js: ['packages/0x.js'] |  | ||||||
| @0x/contract-artifacts: ['packages/contract-artifacts'] | @0x/contract-artifacts: ['packages/contract-artifacts'] | ||||||
| @0x/dev-utils: ['packages/dev-utils'] |  | ||||||
| @0x/contract-wrappers: ['packages/contract-wrappers'] | @0x/contract-wrappers: ['packages/contract-wrappers'] | ||||||
| @0x/json-schemas: ['packages/json-schemas'] |  | ||||||
| @0x/ethereum-types: ['ethereum-types'] |  | ||||||
| @0x/connect: ['packages/connect'] |  | ||||||
|   | |||||||
							
								
								
									
										53
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | name: publish | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   workflow_dispatch: | ||||||
|  |       inputs: | ||||||
|  |           ci_status: | ||||||
|  |               description: 'required CI status' | ||||||
|  |               default: 'success' | ||||||
|  |               required: true | ||||||
|  |           prerelease: | ||||||
|  |               description: 'prerelease name' | ||||||
|  |               required: false | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |     publish: | ||||||
|  |         runs-on: ubuntu-latest | ||||||
|  |         steps: | ||||||
|  |             - name: 'check successful status' | ||||||
|  |               run: | | ||||||
|  |                   REF_STATUS=$(curl -s \ | ||||||
|  |                   'https://api.github.com/repos/${{ github.repository }}/commits/${{ github.ref }}/status' \ | ||||||
|  |                   | jq .state) | ||||||
|  |                   [[ "${REF_STATUS}" == '"${{ github.event.inputs.ci_status }}"' ]] || \ | ||||||
|  |                   (echo "::error ::${{ github.ref }} does not have a successful CI status" && false) | ||||||
|  |             - uses: actions/checkout@v2 | ||||||
|  |               with: | ||||||
|  |                 ref: ${{ github.ref }} | ||||||
|  |                 fetch-depth: 0 | ||||||
|  |             - uses: actions/setup-node@v1 | ||||||
|  |               with: | ||||||
|  |                 node-version: 10 | ||||||
|  |             - uses: actions/setup-python@v2 | ||||||
|  |             - name: 'configure git' | ||||||
|  |               run: | | ||||||
|  |                   git config --global user.email "github-actions@github.com" | ||||||
|  |                   git config --global user.name "Github Actions" | ||||||
|  |             - name: 'install dependencies' | ||||||
|  |               run: | | ||||||
|  |                   yarn -D | ||||||
|  |             - name: 'build and publish' | ||||||
|  |               run: | | ||||||
|  |                   echo '//registry.npmjs.org/:_authToken=${NPM_TOKEN}' > .npmrc | ||||||
|  |                   npm run run:publish:gha | ||||||
|  |               env: | ||||||
|  |                   NPM_TOKEN: ${{ secrets.NPM_PUBLISH_TOKEN }} | ||||||
|  |                   GITHUB_TOKEN: ${{ github.token }} | ||||||
|  |                   PUBLISH_PRERELEASE: ${{ github.event.inputs.prerelease }} | ||||||
|  |             - name: 'merge into main branch' | ||||||
|  |               if: github.event.inputs.prerelease == '' # unless it's a prerelease | ||||||
|  |               run: | | ||||||
|  |                   git checkout main && \ | ||||||
|  |                   git merge ${{ github.ref }} && \ | ||||||
|  |                   git push | ||||||
							
								
								
									
										24
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -113,8 +113,8 @@ contracts/dev-utils/generated-artifacts/ | |||||||
| contracts/dev-utils/test/generated-artifacts/ | contracts/dev-utils/test/generated-artifacts/ | ||||||
| contracts/zero-ex/generated-artifacts/ | contracts/zero-ex/generated-artifacts/ | ||||||
| contracts/zero-ex/test/generated-artifacts/ | contracts/zero-ex/test/generated-artifacts/ | ||||||
| packages/sol-tracing-utils/test/fixtures/artifacts/ | contracts/treasury/generated-artifacts/ | ||||||
| python-packages/contract_artifacts/src/zero_ex/contract_artifacts/artifacts/ | contracts/treasury/test/generated-artifacts/ | ||||||
|  |  | ||||||
| # generated truffle contract artifacts/ | # generated truffle contract artifacts/ | ||||||
| contracts/broker/build/ | contracts/broker/build/ | ||||||
| @@ -169,24 +169,8 @@ contracts/dev-utils/generated-wrappers/ | |||||||
| contracts/dev-utils/test/generated-wrappers/ | contracts/dev-utils/test/generated-wrappers/ | ||||||
| contracts/zero-ex/generated-wrappers/ | contracts/zero-ex/generated-wrappers/ | ||||||
| contracts/zero-ex/test/generated-wrappers/ | contracts/zero-ex/test/generated-wrappers/ | ||||||
| python-packages/contract_wrappers/src/zero_ex/contract_wrappers/*/__init__.py | contracts/treasury/generated-wrappers/ | ||||||
|  | contracts/treasury/test/generated-wrappers/ | ||||||
| # solc-bin in sol-compiler |  | ||||||
| packages/sol-compiler/solc_bin/ |  | ||||||
|  |  | ||||||
| # python stuff |  | ||||||
| .eggs |  | ||||||
| .mypy_cache |  | ||||||
| .tox |  | ||||||
| python-packages/*/build |  | ||||||
| python-packages/*/dist |  | ||||||
| __pycache__ |  | ||||||
| python-packages/*/src/*.egg-info |  | ||||||
| python-packages/*/.coverage |  | ||||||
|  |  | ||||||
| # python keeps package-local copies of json schemas and contract addresses |  | ||||||
| python-packages/json_schemas/src/zero_ex/json_schemas/schemas |  | ||||||
| python-packages/contract_addresses/src/zero_ex/contract_addresses/addresses.json |  | ||||||
|  |  | ||||||
| # Doc README copy | # Doc README copy | ||||||
| packages/*/docs/README.md | packages/*/docs/README.md | ||||||
|   | |||||||
| @@ -40,10 +40,6 @@ lib | |||||||
| /contracts/erc20/test/generated-wrappers | /contracts/erc20/test/generated-wrappers | ||||||
| /contracts/erc20/generated-artifacts | /contracts/erc20/generated-artifacts | ||||||
| /contracts/erc20/test/generated-artifacts | /contracts/erc20/test/generated-artifacts | ||||||
| /contracts/erc20-bridge-sampler/generated-wrappers |  | ||||||
| /contracts/erc20-bridge-sampler/test/generated-wrappers |  | ||||||
| /contracts/erc20-bridge-sampler/generated-artifacts |  | ||||||
| /contracts/erc20-bridge-sampler/test/generated-artifacts |  | ||||||
| /contracts/erc721/generated-wrappers | /contracts/erc721/generated-wrappers | ||||||
| /contracts/erc721/test/generated-wrappers | /contracts/erc721/test/generated-wrappers | ||||||
| /contracts/erc721/generated-artifacts | /contracts/erc721/generated-artifacts | ||||||
| @@ -68,6 +64,10 @@ lib | |||||||
| /contracts/zero-ex/test/generated-wrappers | /contracts/zero-ex/test/generated-wrappers | ||||||
| /contracts/zero-ex/generated-artifacts | /contracts/zero-ex/generated-artifacts | ||||||
| /contracts/zero-ex/test/generated-artifacts | /contracts/zero-ex/test/generated-artifacts | ||||||
|  | /contracts/treasury/generated-wrappers | ||||||
|  | /contracts/treasury/test/generated-wrappers | ||||||
|  | /contracts/treasury/generated-artifacts | ||||||
|  | /contracts/treasury/test/generated-artifacts | ||||||
| /contracts/staking/build/ | /contracts/staking/build/ | ||||||
| /contracts/coordinator/build/ | /contracts/coordinator/build/ | ||||||
| /contracts/exchange/build/ | /contracts/exchange/build/ | ||||||
| @@ -80,19 +80,11 @@ lib | |||||||
| /contracts/erc1155/build/ | /contracts/erc1155/build/ | ||||||
| /contracts/extensions/build/ | /contracts/extensions/build/ | ||||||
| /contracts/exchange-forwarder/build/ | /contracts/exchange-forwarder/build/ | ||||||
| /contracts/dev-utils/build/ | /packages/asset-swapper/generated-artifacts | ||||||
| /packages/abi-gen/test-cli/output | /packages/asset-swapper/generated-wrappers | ||||||
| /packages/json-schemas/schemas | /packages/asset-swapper/test/generated-artifacts | ||||||
| /python-packages/json_schemas/src/zero_ex/json_schemas/schemas | /packages/asset-swapper/test/generated-wrappers | ||||||
| /packages/sra-spec/public/ |  | ||||||
| package.json | package.json | ||||||
| scripts/postpublish_utils.js |  | ||||||
| packages/sol-coverage/test/fixtures/artifacts |  | ||||||
| .pytest_cache |  | ||||||
| .mypy_cache |  | ||||||
| .tox |  | ||||||
| packages/abi-gen/test-cli/fixtures/artifacts/AbiGenDummy.json |  | ||||||
| packages/abi-gen/test-cli/fixtures/artifacts/LibDummy.json |  | ||||||
| packages/abi-gen/test-cli/fixtures/artifacts/TestLibDummy.json |  | ||||||
| packages/*/docs | packages/*/docs | ||||||
|  | docs/ | ||||||
| *.sol | *.sol | ||||||
|   | |||||||
| @@ -2,5 +2,6 @@ | |||||||
|     "printWidth": 120, |     "printWidth": 120, | ||||||
|     "tabWidth": 4, |     "tabWidth": 4, | ||||||
|     "singleQuote": true, |     "singleQuote": true, | ||||||
|     "trailingComma": "all" |     "trailingComma": "all", | ||||||
|  |     "bracketSpacing": true | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								.readthedocs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								.readthedocs.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # Read the Docs configuration file | ||||||
|  | # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details | ||||||
|  |  | ||||||
|  | # Required | ||||||
|  | version: 2 | ||||||
|  |  | ||||||
|  | # Build documentation in the docs/ directory with Sphinx | ||||||
|  | sphinx: | ||||||
|  |   configuration: docs/conf.py | ||||||
|  |  | ||||||
|  | # Build documentation with MkDocs | ||||||
|  | #mkdocs: | ||||||
|  | #  configuration: mkdocs.yml | ||||||
|  |  | ||||||
|  | # Optionally build your docs in additional formats such as PDF | ||||||
|  | #formats: | ||||||
|  | #  - pdf | ||||||
|  |  | ||||||
|  | # Optionally set the version of Python and requirements required to build your docs | ||||||
|  | python: | ||||||
|  |   version: 3.7 | ||||||
|  |   install: | ||||||
|  |     - requirements: docs/requirements.txt | ||||||
							
								
								
									
										26
									
								
								CODEOWNERS
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								CODEOWNERS
									
									
									
									
									
								
							| @@ -9,30 +9,10 @@ packages/asset-swapper/  @BMillman19 @fragosti @dave4506 | |||||||
| packages/instant/  @BMillman19 @fragosti @dave4506 | packages/instant/  @BMillman19 @fragosti @dave4506 | ||||||
|  |  | ||||||
| # Dev tools & setup | # Dev tools & setup | ||||||
| .circleci/ @LogvinovLeon | .circleci/ @dorothy-zbornak | ||||||
| packages/abi-gen/ @feuGeneA |  | ||||||
| packages/base-contract/ @xianny |  | ||||||
| packages/connect/ @fragosti  |  | ||||||
| packages/abi-gen-templates/ @feuGeneA @xianny |  | ||||||
| packages/contract-addresses/ @abandeali1 | packages/contract-addresses/ @abandeali1 | ||||||
| packages/contract-artifacts/ @abandeali1 | packages/contract-artifacts/ @abandeali1 | ||||||
| packages/dev-utils/ @LogvinovLeon @fabioberger | packages/order-utils/ @dorothy-zbornak  | ||||||
| packages/devnet/ @albrow |  | ||||||
| packages/ethereum-types/ @LogvinovLeon |  | ||||||
| packages/monorepo-scripts/ @fabioberger |  | ||||||
| packages/order-utils/ @fabioberger @LogvinovLeon  |  | ||||||
| packages/python-contract-wrappers/ @feuGeneA |  | ||||||
| packages/sol-compiler/ @LogvinovLeon |  | ||||||
| packages/sol-coverage/ @LogvinovLeon |  | ||||||
| packages/sol-profiler/ @LogvinovLeon |  | ||||||
| packages/sol-trace/ @LogvinovLeon |  | ||||||
| packages/sol-tracing-utils/ @LogvinovLeon |  | ||||||
| packages/sol-resolver/ @LogvinovLeon |  | ||||||
| packages/subproviders/ @fabioberger @dekz |  | ||||||
| packages/verdaccio/ @albrow |  | ||||||
| packages/web3-wrapper/ @LogvinovLeon @fabioberger |  | ||||||
| python-packages/ @feuGeneA |  | ||||||
| packages/utils/ @hysz |  | ||||||
|  |  | ||||||
| # Protocol/smart contracts | # Protocol/smart contracts | ||||||
| contracts/ @abandeali1 @hysz | contracts/ @abandeali1 @hysz @dorothy-zbornak @mzhu25 | ||||||
|   | |||||||
| @@ -4,9 +4,9 @@ We welcome contributions from anyone on the internet and are grateful for even t | |||||||
|  |  | ||||||
| ### Getting started | ### Getting started | ||||||
|  |  | ||||||
| 1.  Fork `0xproject/0x-monorepo` | 1.  Fork `0xproject/0x-tools` | ||||||
| 2.  Clone your fork | 2.  Clone your fork | ||||||
| 3.  Follow the [installation & build steps](https://github.com/0xProject/0x-monorepo#install-dependencies) in the repo's top-level README. | 3.  Follow the [installation & build steps](https://github.com/0xProject/0x-tools#install-dependencies) in the repo's top-level README. | ||||||
| 4.  Setup the recommended [Development Tooling](#development-tooling). | 4.  Setup the recommended [Development Tooling](#development-tooling). | ||||||
| 5.  Open a PR with the `[WIP]` flag against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure)) | 5.  Open a PR with the `[WIP]` flag against the `development` branch and describe the change you are intending to undertake in the PR description. (see [our branch naming conventions](#branch-structure)) | ||||||
|  |  | ||||||
| @@ -59,11 +59,11 @@ We strongly recommend you use the [VSCode](https://code.visualstudio.com/) text | |||||||
|  |  | ||||||
| #### Linter | #### Linter | ||||||
|  |  | ||||||
| We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code-style consistent. | We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-tools/tree/development/packages/tslint-config) to keep our code-style consistent. | ||||||
|  |  | ||||||
| Use `yarn:lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package. | Use `yarn:lint` to lint the entire monorepo, and `PKG={PACKAGE_NAME} yarn lint` to lint a specific package. | ||||||
|  |  | ||||||
| If you want to change a rule, or add a custom rule, please make these changes to our [tslint-config](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) package. All other packages have it as a dependency. | If you want to change a rule, or add a custom rule, please make these changes to our [tslint-config](https://github.com/0xProject/0x-tools/tree/development/packages/tslint-config) package. All other packages have it as a dependency. | ||||||
|  |  | ||||||
| Integrate it into your text editor: | Integrate it into your text editor: | ||||||
|  |  | ||||||
| @@ -94,12 +94,12 @@ A few of our coding conventions are not yet enforced by the linter/auto-formatte | |||||||
|  |  | ||||||
| ### Fix `submit-coverage` CI failure | ### Fix `submit-coverage` CI failure | ||||||
|  |  | ||||||
| If you simply fork the repo and then create a PR from it, your PR will fail the `submit-coverage` check on CI. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for `0xProject/0x-monorepo`, but when running the check against your fork the token needs to match your repo's name `your-username/0x-monorepo`. | If you simply fork the repo and then create a PR from it, your PR will fail the `submit-coverage` check on CI. This is because the 0x CircleCI configuration sets the `COVERALLS_REPO_TOKEN` environment variable to the token for `0xProject/0x-tools`, but when running the check against your fork the token needs to match your repo's name `your-username/0x-tools`. | ||||||
|  |  | ||||||
| To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following: | To facilitate this check, after creating your fork, but before creating the branch for your PR, do the following: | ||||||
|  |  | ||||||
| 1.  Log in to [coveralls.io](https://coveralls.io/), go to `Add Repos`, and enable your fork. Then go to the settings for that repo, and copy the `Repo Token` identifier. | 1.  Log in to [coveralls.io](https://coveralls.io/), go to `Add Repos`, and enable your fork. Then go to the settings for that repo, and copy the `Repo Token` identifier. | ||||||
| 2.  Log in to [CircleCI](https://circleci.com/login), go to `Add Projects`, click the `Set Up Project` button corresponding to your fork, and then click `Start Building`. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-monorepo, so you can ignore all of the instruction/explanation given on the page with the `Start Building` button.) | 2.  Log in to [CircleCI](https://circleci.com/login), go to `Add Projects`, click the `Set Up Project` button corresponding to your fork, and then click `Start Building`. (Aside from step 3 below, no actual set up is needed, since it will use the `.circleci/config.yml` file in 0x-tools, so you can ignore all of the instruction/explanation given on the page with the `Start Building` button.) | ||||||
| 3.  In CircleCI, configure your project to add an environment variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the `Repo Token` you copied in step 1. | 3.  In CircleCI, configure your project to add an environment variable, with name `COVERALLS_REPO_TOKEN`, and for the value paste in the `Repo Token` you copied in step 1. | ||||||
|  |  | ||||||
| Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper `Repo Token`, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance. | Now, when you push to your branch, CircleCI will automatically run all of the checks in your own instance, and the coverage check will work since it has the proper `Repo Token`, and the PR will magically refer to your own checks rather than running them in the 0x CircleCI instance. | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								LICENSE
									
									
									
									
									
								
							| @@ -1,4 +1,4 @@ | |||||||
| Copyright 2017 ZeroEx Intl. | Copyright 2020 ZeroEx Labs | ||||||
|  |  | ||||||
| Licensed under the Apache License, Version 2.0 (the "License"); | Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
| you may not use this file except in compliance with the License. | you may not use this file except in compliance with the License. | ||||||
|   | |||||||
							
								
								
									
										76
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										76
									
								
								README.md
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume | |||||||
|  |  | ||||||
| [website-url]: https://0x.org | [website-url]: https://0x.org | ||||||
|  |  | ||||||
| [](https://circleci.com/gh/0xProject/0x-monorepo) | [](https://circleci.com/gh/0xProject/protocool) | ||||||
| [](https://coveralls.io/github/0xProject/0x-monorepo?branch=development) | [](https://coveralls.io/github/0xProject/0x-monorepo?branch=development) | ||||||
| [](https://discordapp.com/invite/d3FTX3M) | [](https://discordapp.com/invite/d3FTX3M) | ||||||
| [](https://opensource.org/licenses/Apache-2.0) | [](https://opensource.org/licenses/Apache-2.0) | ||||||
| @@ -17,17 +17,6 @@ This repository is a monorepo including the 0x protocol smart contracts and nume | |||||||
|  |  | ||||||
| Visit our [developer portal](https://0x.org/docs/tools/order-utils) for a comprehensive list of core & community maintained packages. All packages maintained with this monorepo are listed below. | Visit our [developer portal](https://0x.org/docs/tools/order-utils) for a comprehensive list of core & community maintained packages. All packages maintained with this monorepo are listed below. | ||||||
|  |  | ||||||
| ### Python Packages |  | ||||||
|  |  | ||||||
| | Package                                                        | Version                                                                                                             | Description                                                                                       | |  | ||||||
| | -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | |  | ||||||
| | [`0x-contract-addresses`](/python-packages/contract_addresses) | [](https://pypi.org/project/0x-contract-addresses/) | A tiny utility library for getting known deployed contract addresses for a particular network     | |  | ||||||
| | [`0x-contract-artifacts`](/python-packages/contract_artifacts) | [](https://pypi.org/project/0x-contract-artifacts/) | 0x smart contract compilation artifacts                                                           | |  | ||||||
| | [`0x-contract-wrappers`](/python-packages/contract_wrappers)   | [](https://pypi.org/project/0x-contract-wrappers/)   | 0x smart contract wrappers                                                                        | |  | ||||||
| | [`0x-json-schemas`](/python-packages/json_schemas)             | [](https://pypi.org/project/0x-json-schemas/)             | 0x-related JSON schemas                                                                           | |  | ||||||
| | [`0x-order-utils`](/python-packages/order_utils)               | [](https://pypi.org/project/0x-order-utils/)               | A set of utilities for generating, parsing, signing and validating 0x orders                      | |  | ||||||
| | [`0x-sra-client`](/python-packages/sra_client)                 | [](https://pypi.org/project/0x-sra-client/)                 | A Python client for interacting with servers conforming to the Standard Relayer API specification | |  | ||||||
|  |  | ||||||
| ### Solidity Packages | ### Solidity Packages | ||||||
|  |  | ||||||
| These packages are all under development. See [/contracts/README.md](/contracts/README.md) for a list of deployed packages. | These packages are all under development. See [/contracts/README.md](/contracts/README.md) for a list of deployed packages. | ||||||
| @@ -53,50 +42,13 @@ These packages are all under development. See [/contracts/README.md](/contracts/ | |||||||
|  |  | ||||||
| #### 0x-specific packages | #### 0x-specific packages | ||||||
|  |  | ||||||
| | Package                                                  | Version                                                                                                                 | Description                                                                                       | | | Package                                                  | Version                                                                                                                 | Description                                                                                    | | ||||||
| | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | ||||||
| | [`0x.js`](/packages/0x.js)                               | [](https://www.npmjs.com/package/0x.js)                                   | An aggregate package combining many smaller utility packages for interacting with the 0x protocol | | | [`@0x/contract-addresses`](/packages/contract-addresses) | [](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network. | | ||||||
| | [`@0x/contract-addresses`](/packages/contract-addresses) | [](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network.    | | | [`@0x/contract-wrappers`](/packages/contract-wrappers)   | [](https://www.npmjs.com/package/@0x/contract-wrappers)   | JS/TS wrappers for interacting with the 0x smart contracts                                     | | ||||||
| | [`@0x/contract-wrappers`](/packages/contract-wrappers)   | [](https://www.npmjs.com/package/@0x/contract-wrappers)   | JS/TS wrappers for interacting with the 0x smart contracts                                        | | | [`@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-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/migrations`](/packages/migrations)                 | [](https://www.npmjs.com/package/@0x/migrations)                 | Migration tool for deploying 0x smart contracts on private testnets                            | | ||||||
| | [`@0x/json-schemas`](/packages/json-schemas)             | [](https://www.npmjs.com/package/@0x/json-schemas)             | 0x-related JSON schemas                                                                           |  | | | [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts                                                        |  | | ||||||
| | [`@0x/migrations`](/packages/migrations)                 | [](https://www.npmjs.com/package/@0x/migrations)                 | Migration tool for deploying 0x smart contracts on private testnets                               | |  | ||||||
| | [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts                                                           |  | |  | ||||||
| | [`@0x/sra-spec`](/packages/sra-spec)                     | [](https://www.npmjs.com/package/@0x/sra-spec)                     | OpenAPI specification for the Standard Relayer API                                                | |  | ||||||
| | [`@0x/connect`](/packages/connect)                       | [](https://www.npmjs.com/package/@0x/connect)                       | An HTTP/WS client for interacting with the Standard Relayer API                                   | |  | ||||||
| | [`@0x/asset-swapper`](/packages/asset-swapper)           | [](https://www.npmjs.com/package/@0x/asset-swapper)           | Convenience package for discovering and performing swaps for any ERC20 Assets                     | |  | ||||||
|  |  | ||||||
| #### Ethereum tooling |  | ||||||
|  |  | ||||||
| | Package                                      | Version                                                                                                     | Description                                                                                                                                                                             | |  | ||||||
| | -------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |  | ||||||
| | [`@0x/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0x/web3-wrapper) | An Ethereum JSON RPC client                                                                                                                                                             | |  | ||||||
| | [`@0x/sol-compiler`](/packages/sol-compiler) | [](https://www.npmjs.com/package/@0x/sol-compiler) | A wrapper around solc-js that adds smart re-compilation, ability to compile an entire project, Solidity version specific compilation, standard input description support and much more. | |  | ||||||
| | [`@0x/sol-coverage`](/packages/sol-coverage) | [](https://www.npmjs.com/package/@0x/sol-coverage) | A solidity test coverage tool                                                                                                                                                           | |  | ||||||
| | [`@0x/sol-profiler`](/packages/sol-profiler) | [](https://www.npmjs.com/package/@0x/sol-profiler) | A solidity gas cost profiler                                                                                                                                                            | |  | ||||||
| | [`@0x/sol-trace`](/packages/sol-trace)       | [](https://www.npmjs.com/package/@0x/sol-trace)       | A solidity stack trace tool                                                                                                                                                             | |  | ||||||
| | [`@0x/sol-resolver`](/packages/sol-resolver) | [](https://www.npmjs.com/package/@0x/sol-resolver) | Import resolver for smart contracts dependencies                                                                                                                                        | |  | ||||||
| | [`@0x/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0x/subproviders) | Web3 provider middlewares (e.g. LedgerSubprovider)                                                                                                                                      | |  | ||||||
| | [`@0x/sol-doc`](/packages/sol-doc)           | [](https://www.npmjs.com/package/@0x/sol-doc)           | Solidity documentation generator                                                                                                                                                        | |  | ||||||
|  |  | ||||||
| #### Utilities |  | ||||||
|  |  | ||||||
| | Package                                                  | Version                                                                                                                 | Description                                                     | |  | ||||||
| | -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | |  | ||||||
| | [`@0x/abi-gen`](/packages/abi-gen)                       | [](https://www.npmjs.com/package/@0x/abi-gen)                       | Tool to generate TS wrappers from smart contract ABIs           | |  | ||||||
| | [`@0x/tslint-config`](/packages/tslint-config)           | [](https://www.npmjs.com/package/@0x/tslint-config)           | Custom TSLint rules used by the 0x core team                    | |  | ||||||
| | [`@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/assert`](/packages/assert)                         | [](https://www.npmjs.com/package/@0x/assert)                         | Type and schema assertions used by our packages                 | |  | ||||||
| | [`@0x/base-contract`](/packages/base-contract)           | [](https://www.npmjs.com/package/@0x/base-contract)           | BaseContract used by auto-generated `abi-gen` wrapper contracts | |  | ||||||
| | [`@0x/dev-utils`](/packages/dev-utils)                   | [](https://www.npmjs.com/package/@0x/dev-utils)                   | Dev utils to be shared across 0x packages                       | |  | ||||||
|  |  | ||||||
| #### Private Packages |  | ||||||
|  |  | ||||||
| | Package                            | Description                                                                      | |  | ||||||
| | ---------------------------------- | -------------------------------------------------------------------------------- | |  | ||||||
| | [`@0x/instant`](/packages/instant) | A free and flexible way to offer simple crypto purchasing in any app or website. | |  | ||||||
|  |  | ||||||
| ## Usage | ## Usage | ||||||
|  |  | ||||||
| @@ -129,8 +81,6 @@ Then install dependencies | |||||||
| yarn install | yarn install | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| You will also need to have Python 3 installed, in order to build and run the tests of `abi-gen`'s command-line interface, which is integrated with the yarn build, yarn test, and yarn lint commands described below. More specifically, your local pip should resolve to the Python 3 version of pip, not a Python 2.x version. |  | ||||||
|  |  | ||||||
| ### Build | ### Build | ||||||
|  |  | ||||||
| To build all packages: | To build all packages: | ||||||
| @@ -142,7 +92,7 @@ yarn build | |||||||
| To build a specific package: | To build a specific package: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| PKG=@0x/web3-wrapper yarn build | PKG=@0x/contract-wrappers yarn build | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| To build all contracts packages: | To build all contracts packages: | ||||||
| @@ -165,7 +115,7 @@ To watch a specific package and all it's dependent packages: | |||||||
| PKG=[NPM_PACKAGE_NAME] yarn watch | PKG=[NPM_PACKAGE_NAME] yarn watch | ||||||
|  |  | ||||||
| e.g | e.g | ||||||
| PKG=@0x/web3-wrapper yarn watch | PKG=@0x/contract-wrappers yarn watch | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Clean | ### Clean | ||||||
| @@ -193,7 +143,7 @@ yarn rebuild | |||||||
| To re-build (clean & build) a specific package & it's deps: | To re-build (clean & build) a specific package & it's deps: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| PKG=0x.js yarn rebuild | PKG=@0x/contract-wrappers yarn rebuild | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Lint | ### Lint | ||||||
| @@ -207,7 +157,7 @@ yarn lint | |||||||
| Lint a specific package: | Lint a specific package: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| PKG=0x.js yarn lint | PKG=@0x/contract-wrappers yarn lint | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| ### Run Tests | ### Run Tests | ||||||
| @@ -221,7 +171,7 @@ yarn test | |||||||
| Run a specific package's test: | Run a specific package's test: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| PKG=@0x/web3-wrapper yarn test | PKG=@0x/contract-wrappers yarn test | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Run all contracts packages tests: | Run all contracts packages tests: | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ | |||||||
|         "quotes": ["error", "double"], |         "quotes": ["error", "double"], | ||||||
|         "separate-by-one-line-in-contract": "error", |         "separate-by-one-line-in-contract": "error", | ||||||
|         "space-after-comma": "error", |         "space-after-comma": "error", | ||||||
|         "statement-indent": "error" |         "statement-indent": "error", | ||||||
|  |         "no-empty-blocks": false | ||||||
|     } |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,228 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "3.7.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "3.7.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "3.7.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "3.7.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "3.7.5", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "3.7.4", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "3.7.3", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "3.7.2", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "3.7.1", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "version": "3.7.0", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Fix Bancor support of ETH", | ||||||
|  |                 "pr": 88 | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "timestamp": 1608105788 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "3.6.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "3.6.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "3.6.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "3.6.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "3.6.5", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "3.6.4", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "3.6.3", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "3.6.2", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "3.6.1", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "version": "3.6.0", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Add `SwerveBridge` and `SnowSwapBridge` (duplicate of `CurveBridge`)", | ||||||
|  |                 "pr": 2707 | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "timestamp": 1603833198 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "version": "3.5.0", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Update `CurveBridge` to support more varied curves", | ||||||
|  |                 "pr": 2633 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Export DexForwarderBridgeContract", | ||||||
|  |                 "pr": 2656 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Add BancorBridge and IBancorNetwork, ", | ||||||
|  |                 "pr": 2650 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Added `MStableBridge`", | ||||||
|  |                 "pr": 2662 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Added `MooniswapBridge`", | ||||||
|  |                 "pr": 2675 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Reworked `KyberBridge`", | ||||||
|  |                 "pr": 2683 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Added `CreamBridge`", | ||||||
|  |                 "pr": 2715 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Added `ShellBridge`", | ||||||
|  |                 "pr": 2722 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Added `DODOBridge`", | ||||||
|  |                 "pr": 2701 | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "timestamp": 1603265572 | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "version": "3.4.0", |         "version": "3.4.0", | ||||||
|         "changes": [ |         "changes": [ | ||||||
|   | |||||||
| @@ -5,6 +5,98 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v3.7.9 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.8 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.7 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.6 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.5 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.4 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.3 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.2 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.1 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.7.0 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Fix Bancor support of ETH (#88) | ||||||
|  |  | ||||||
|  | ## v3.6.9 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.8 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.7 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.6 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.5 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.4 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.3 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.2 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.1 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.6.0 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Add `SwerveBridge` and `SnowSwapBridge` (duplicate of `CurveBridge`) (#2707) | ||||||
|  |  | ||||||
|  | ## v3.5.0 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Update `CurveBridge` to support more varied curves (#2633) | ||||||
|  |     * Export DexForwarderBridgeContract (#2656) | ||||||
|  |     * Add BancorBridge and IBancorNetwork,  (#2650) | ||||||
|  |     * Added `MStableBridge` (#2662) | ||||||
|  |     * Added `MooniswapBridge` (#2675) | ||||||
|  |     * Reworked `KyberBridge` (#2683) | ||||||
|  |     * Added `CreamBridge` (#2715) | ||||||
|  |     * Added `ShellBridge` (#2722) | ||||||
|  |     * Added `DODOBridge` (#2701) | ||||||
|  |  | ||||||
| ## v3.4.0 - _July 15, 2020_ | ## v3.4.0 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Fix instability with DFB. (#2616) |     * Fix instability with DFB. (#2616) | ||||||
|   | |||||||
							
								
								
									
										144
									
								
								contracts/asset-proxy/contracts/src/bridges/BancorBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								contracts/asset-proxy/contracts/src/bridges/BancorBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,144 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IEtherToken.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/IBancorNetwork.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract BancorBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     struct TransferState { | ||||||
|  |         address bancorNetworkAddress; | ||||||
|  |         address[] path; | ||||||
|  |         IEtherToken weth; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Bancor ETH pseudo-address. | ||||||
|  |     address constant public BANCOR_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; | ||||||
|  |  | ||||||
|  |     // solhint-disable no-empty-blocks | ||||||
|  |     /// @dev Payable fallback to receive ETH from Bancor/WETH. | ||||||
|  |     function () | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |     { | ||||||
|  |         // Poor man's receive in 0.5.9 | ||||||
|  |         require(msg.data.length == 0); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data, then transfers the bought | ||||||
|  |     ///      tokens to `to`. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded conversion path addresses and Bancor network address | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // hold variables to get around stack depth limitations | ||||||
|  |         TransferState memory state; | ||||||
|  |         // Decode the bridge data. | ||||||
|  |         ( | ||||||
|  |             state.path, | ||||||
|  |             state.bancorNetworkAddress | ||||||
|  |         // solhint-disable indent | ||||||
|  |         ) = abi.decode(bridgeData, (address[], address)); | ||||||
|  |         // solhint-enable indent | ||||||
|  |         state.weth = IEtherToken(_getWethAddress()); | ||||||
|  |  | ||||||
|  |         require(state.path.length >= 2, "BancorBridge/PATH_LENGTH_MUST_BE_GREATER_THAN_TWO"); | ||||||
|  |  | ||||||
|  |         // Grant an allowance to the Bancor Network to spend `fromTokenAddress` token. | ||||||
|  |         uint256 fromTokenBalance; | ||||||
|  |         uint256 payableAmount = 0; | ||||||
|  |         // If it's ETH in the path then withdraw from WETH | ||||||
|  |         // The Bancor path will have ETH as the 0xeee address | ||||||
|  |         // Bancor expects to be paid in ETH not WETH | ||||||
|  |         if (state.path[0] == BANCOR_ETH_ADDRESS) { | ||||||
|  |             fromTokenBalance = state.weth.balanceOf(address(this)); | ||||||
|  |             state.weth.withdraw(fromTokenBalance); | ||||||
|  |             payableAmount = fromTokenBalance; | ||||||
|  |         } else { | ||||||
|  |             fromTokenBalance = IERC20Token(state.path[0]).balanceOf(address(this)); | ||||||
|  |             LibERC20Token.approveIfBelow(state.path[0], state.bancorNetworkAddress, fromTokenBalance); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Convert the tokens | ||||||
|  |         uint256 boughtAmount = IBancorNetwork(state.bancorNetworkAddress).convertByPath.value(payableAmount)( | ||||||
|  |             state.path, // path originating with source token and terminating in destination token | ||||||
|  |             fromTokenBalance, // amount of source token to trade | ||||||
|  |             amount, // minimum amount of destination token expected to receive | ||||||
|  |             state.path[state.path.length-1] == BANCOR_ETH_ADDRESS ? address(this) : to, // beneficiary | ||||||
|  |             address(0), // affiliateAccount; no fee paid | ||||||
|  |             0 // affiliateFee; no fee paid | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         if (state.path[state.path.length-1] == BANCOR_ETH_ADDRESS) { | ||||||
|  |             state.weth.deposit.value(boughtAmount)(); | ||||||
|  |             state.weth.transfer(to, boughtAmount); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             state.path[0] == BANCOR_ETH_ADDRESS ? address(state.weth) : state.path[0], | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
							
								
								
									
										103
									
								
								contracts/asset-proxy/contracts/src/bridges/CreamBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								contracts/asset-proxy/contracts/src/bridges/CreamBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/IBalancerPool.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract CreamBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data, then transfers the bought | ||||||
|  |     ///      tokens to `to`. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded addresses of the "from" token and Balancer pool. | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // Decode the bridge data. | ||||||
|  |         (address fromTokenAddress, address poolAddress) = abi.decode( | ||||||
|  |             bridgeData, | ||||||
|  |             (address, address) | ||||||
|  |         ); | ||||||
|  |         require(toTokenAddress != fromTokenAddress, "CreamBridge/INVALID_PAIR"); | ||||||
|  |  | ||||||
|  |         uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|  |         LibERC20Token.approveIfBelow(fromTokenAddress, poolAddress, fromTokenBalance); | ||||||
|  |  | ||||||
|  |         // Sell all of this contract's `fromTokenAddress` token balance. | ||||||
|  |         (uint256 boughtAmount,) = IBalancerPool(poolAddress).swapExactAmountIn( | ||||||
|  |             fromTokenAddress, // tokenIn | ||||||
|  |             fromTokenBalance, // tokenAmountIn | ||||||
|  |             toTokenAddress,   // tokenOut | ||||||
|  |             amount,           // minAmountOut | ||||||
|  |             uint256(-1)       // maxPrice | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         // Transfer the converted `toToken`s to `to`. | ||||||
|  |         LibERC20Token.transfer(toTokenAddress, to, boughtAmount); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										136
									
								
								contracts/asset-proxy/contracts/src/bridges/CryptoComBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								contracts/asset-proxy/contracts/src/bridges/CryptoComBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IEtherToken.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/LibAddressArray.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IUniswapV2Router01.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // solhint-disable space-after-comma | ||||||
|  | // solhint-disable not-rely-on-time | ||||||
|  | contract CryptoComBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     struct TransferState { | ||||||
|  |         address[] path; | ||||||
|  |         address router; | ||||||
|  |         uint256 fromTokenBalance; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded path of token addresses. Last element must be toTokenAddress | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // hold variables to get around stack depth limitations | ||||||
|  |         TransferState memory state; | ||||||
|  |  | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|  |         // solhint-disable indent | ||||||
|  |         (state.path, state.router) = abi.decode(bridgeData, (address[], address)); | ||||||
|  |         // solhint-enable indent | ||||||
|  |  | ||||||
|  |         require(state.path.length >= 2, "CryptoComBridge/PATH_LENGTH_MUST_BE_AT_LEAST_TWO"); | ||||||
|  |         require(state.path[state.path.length - 1] == toTokenAddress, "CryptoComBridge/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"); | ||||||
|  |  | ||||||
|  |         // Just transfer the tokens if they're the same. | ||||||
|  |         if (state.path[0] == toTokenAddress) { | ||||||
|  |             LibERC20Token.transfer(state.path[0], to, amount); | ||||||
|  |             return BRIDGE_SUCCESS; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Get our balance of `fromTokenAddress` token. | ||||||
|  |         state.fromTokenBalance = IERC20Token(state.path[0]).balanceOf(address(this)); | ||||||
|  |  | ||||||
|  |         // Grant the SushiSwap router an allowance. | ||||||
|  |         LibERC20Token.approveIfBelow( | ||||||
|  |             state.path[0], | ||||||
|  |             state.router, | ||||||
|  |             state.fromTokenBalance | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         // Buy as much `toTokenAddress` token with `fromTokenAddress` token | ||||||
|  |         // and transfer it to `to`. | ||||||
|  |         IUniswapV2Router01 router = IUniswapV2Router01(state.router); | ||||||
|  |         uint[] memory amounts = router.swapExactTokensForTokens( | ||||||
|  |              // Sell all tokens we hold. | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |              // Minimum buy amount. | ||||||
|  |             amount, | ||||||
|  |             // Convert `fromTokenAddress` to `toTokenAddress`. | ||||||
|  |             state.path, | ||||||
|  |             // Recipient is `to`. | ||||||
|  |             to, | ||||||
|  |             // Expires after this block. | ||||||
|  |             block.timestamp | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             // input token | ||||||
|  |             state.path[0], | ||||||
|  |             // output token | ||||||
|  |             toTokenAddress, | ||||||
|  |             // input token amount | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |             // output token amount | ||||||
|  |             amounts[amounts.length - 1], | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -26,7 +26,6 @@ import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | |||||||
| import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
| import "../interfaces/IERC20Bridge.sol"; | import "../interfaces/IERC20Bridge.sol"; | ||||||
| import "../interfaces/ICurve.sol"; | import "../interfaces/ICurve.sol"; | ||||||
| import "./MixinGasToken.sol"; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| // solhint-disable not-rely-on-time | // solhint-disable not-rely-on-time | ||||||
| @@ -34,14 +33,14 @@ import "./MixinGasToken.sol"; | |||||||
| contract CurveBridge is | contract CurveBridge is | ||||||
|     IERC20Bridge, |     IERC20Bridge, | ||||||
|     IWallet, |     IWallet, | ||||||
|     DeploymentConstants, |     DeploymentConstants | ||||||
|     MixinGasToken |  | ||||||
| { | { | ||||||
|     struct CurveBridgeData { |     struct CurveBridgeData { | ||||||
|         address curveAddress; |         address curveAddress; | ||||||
|  |         bytes4 exchangeFunctionSelector; | ||||||
|  |         address fromTokenAddress; | ||||||
|         int128 fromCoinIdx; |         int128 fromCoinIdx; | ||||||
|         int128 toCoinIdx; |         int128 toCoinIdx; | ||||||
|         int128 version; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// @dev Callback for `ICurve`. Tries to buy `amount` of |     /// @dev Callback for `ICurve`. Tries to buy `amount` of | ||||||
| @@ -62,39 +61,31 @@ contract CurveBridge is | |||||||
|         bytes calldata bridgeData |         bytes calldata bridgeData | ||||||
|     ) |     ) | ||||||
|         external |         external | ||||||
|         freesGasTokensFromCollector |  | ||||||
|         returns (bytes4 success) |         returns (bytes4 success) | ||||||
|     { |     { | ||||||
|         // Decode the bridge data to get the Curve metadata. |         // Decode the bridge data to get the Curve metadata. | ||||||
|         CurveBridgeData memory data = abi.decode(bridgeData, (CurveBridgeData)); |         CurveBridgeData memory data = abi.decode(bridgeData, (CurveBridgeData)); | ||||||
|  |  | ||||||
|         address fromTokenAddress = ICurve(data.curveAddress).underlying_coins(data.fromCoinIdx); |         require(toTokenAddress != data.fromTokenAddress, "CurveBridge/INVALID_PAIR"); | ||||||
|         require(toTokenAddress != fromTokenAddress, "CurveBridge/INVALID_PAIR"); |         uint256 fromTokenBalance = IERC20Token(data.fromTokenAddress).balanceOf(address(this)); | ||||||
|         uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this)); |  | ||||||
|         // Grant an allowance to the exchange to spend `fromTokenAddress` token. |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|         LibERC20Token.approveIfBelow(fromTokenAddress, data.curveAddress, fromTokenBalance); |         LibERC20Token.approveIfBelow(data.fromTokenAddress, data.curveAddress, fromTokenBalance); | ||||||
|  |  | ||||||
|         // Try to sell all of this contract's `fromTokenAddress` token balance. |         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||||
|         if (data.version == 0) { |         { | ||||||
|             ICurve(data.curveAddress).exchange_underlying( |             (bool didSucceed, bytes memory resultData) = | ||||||
|                 data.fromCoinIdx, |                 data.curveAddress.call(abi.encodeWithSelector( | ||||||
|                 data.toCoinIdx, |                     data.exchangeFunctionSelector, | ||||||
|                 // dx |                     data.fromCoinIdx, | ||||||
|                 fromTokenBalance, |                     data.toCoinIdx, | ||||||
|                 // min dy |                     // dx | ||||||
|                 amount, |                     fromTokenBalance, | ||||||
|                 // expires |                     // min dy | ||||||
|                 block.timestamp + 1 |                     amount | ||||||
|             ); |                 )); | ||||||
|         } else { |             if (!didSucceed) { | ||||||
|             ICurve(data.curveAddress).exchange_underlying( |                 assembly { revert(add(resultData, 32), mload(resultData)) } | ||||||
|                 data.fromCoinIdx, |             } | ||||||
|                 data.toCoinIdx, |  | ||||||
|                 // dx |  | ||||||
|                 fromTokenBalance, |  | ||||||
|                 // min dy |  | ||||||
|                 amount |  | ||||||
|             ); |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this)); |         uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this)); | ||||||
| @@ -102,7 +93,7 @@ contract CurveBridge is | |||||||
|         LibERC20Token.transfer(toTokenAddress, to, toTokenBalance); |         LibERC20Token.transfer(toTokenAddress, to, toTokenBalance); | ||||||
|  |  | ||||||
|         emit ERC20BridgeTransfer( |         emit ERC20BridgeTransfer( | ||||||
|             fromTokenAddress, |             data.fromTokenAddress, | ||||||
|             toTokenAddress, |             toTokenAddress, | ||||||
|             fromTokenBalance, |             fromTokenBalance, | ||||||
|             toTokenBalance, |             toTokenBalance, | ||||||
|   | |||||||
							
								
								
									
										147
									
								
								contracts/asset-proxy/contracts/src/bridges/DODOBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										147
									
								
								contracts/asset-proxy/contracts/src/bridges/DODOBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,147 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | interface IDODOHelper { | ||||||
|  |  | ||||||
|  |     function querySellQuoteToken(address dodo, uint256 amount) external view returns (uint256); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | interface IDODO { | ||||||
|  |  | ||||||
|  |     function sellBaseToken(uint256 amount, uint256 minReceiveQuote, bytes calldata data) external returns (uint256); | ||||||
|  |  | ||||||
|  |     function buyBaseToken(uint256 amount, uint256 maxPayQuote, bytes calldata data) external returns (uint256); | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract DODOBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     struct TransferState { | ||||||
|  |         address fromTokenAddress; | ||||||
|  |         uint256 fromTokenBalance; | ||||||
|  |         address pool; | ||||||
|  |         bool isSellBase; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded path of token addresses. Last element must be toTokenAddress | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         TransferState memory state; | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|  |         (state.fromTokenAddress, state.pool, state.isSellBase) = abi.decode(bridgeData, (address, address, bool)); | ||||||
|  |         require(state.pool != address(0), "DODOBridge/InvalidPool"); | ||||||
|  |         IDODO exchange = IDODO(state.pool); | ||||||
|  |         // Get our balance of `fromTokenAddress` token. | ||||||
|  |         state.fromTokenBalance = IERC20Token(state.fromTokenAddress).balanceOf(address(this)); | ||||||
|  |  | ||||||
|  |         // Grant the pool an allowance. | ||||||
|  |         LibERC20Token.approveIfBelow( | ||||||
|  |             state.fromTokenAddress, | ||||||
|  |             address(exchange), | ||||||
|  |             state.fromTokenBalance | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         uint256 boughtAmount; | ||||||
|  |         if (state.isSellBase) { | ||||||
|  |             boughtAmount = exchange.sellBaseToken( | ||||||
|  |                 // amount to sell | ||||||
|  |                 state.fromTokenBalance, | ||||||
|  |                 // min receive amount | ||||||
|  |                 1, | ||||||
|  |                 new bytes(0) | ||||||
|  |             ); | ||||||
|  |         } else { | ||||||
|  |             // Need to re-calculate the sell quote amount into buyBase | ||||||
|  |             boughtAmount = IDODOHelper(_getDODOHelperAddress()).querySellQuoteToken( | ||||||
|  |                 address(exchange), | ||||||
|  |                 state.fromTokenBalance | ||||||
|  |             ); | ||||||
|  |             exchange.buyBaseToken( | ||||||
|  |                 // amount to buy | ||||||
|  |                 boughtAmount, | ||||||
|  |                 // max pay amount | ||||||
|  |                 state.fromTokenBalance, | ||||||
|  |                 new bytes(0) | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |         // Transfer funds to `to` | ||||||
|  |         IERC20Token(toTokenAddress).transfer(to, boughtAmount); | ||||||
|  |  | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             // input token | ||||||
|  |             state.fromTokenAddress, | ||||||
|  |             // output token | ||||||
|  |             toTokenAddress, | ||||||
|  |             // input token amount | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |             // output token amount | ||||||
|  |             boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,6 +1,6 @@ | |||||||
| /* | /* | ||||||
|  |  | ||||||
|   Copyright 2019 ZeroEx Intl. |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|   Licensed under the Apache License, Version 2.0 (the "License"); |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|   you may not use this file except in compliance with the License. |   you may not use this file except in compliance with the License. | ||||||
| @@ -45,6 +45,7 @@ contract KyberBridge is | |||||||
|         uint256 fromTokenBalance; |         uint256 fromTokenBalance; | ||||||
|         uint256 payableAmount; |         uint256 payableAmount; | ||||||
|         uint256 conversionRate; |         uint256 conversionRate; | ||||||
|  |         bytes hint; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /// @dev Kyber ETH pseudo-address. |     /// @dev Kyber ETH pseudo-address. | ||||||
| @@ -55,11 +56,14 @@ contract KyberBridge is | |||||||
|     uint256 constant private KYBER_RATE_BASE = 10 ** 18; |     uint256 constant private KYBER_RATE_BASE = 10 ** 18; | ||||||
|  |  | ||||||
|     // solhint-disable no-empty-blocks |     // solhint-disable no-empty-blocks | ||||||
|     /// @dev Payable fallback to receive ETH from Kyber. |     /// @dev Payable fallback to receive ETH from Kyber/WETH. | ||||||
|     function () |     function () | ||||||
|         external |         external | ||||||
|         payable |         payable | ||||||
|     {} |     { | ||||||
|  |         // Poor man's receive in 0.5.9 | ||||||
|  |         require(msg.data.length == 0); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     /// @dev Callback for `IKyberBridge`. Tries to buy `amount` of |     /// @dev Callback for `IKyberBridge`. Tries to buy `amount` of | ||||||
|     ///      `toTokenAddress` tokens by selling the entirety of the opposing asset |     ///      `toTokenAddress` tokens by selling the entirety of the opposing asset | ||||||
| @@ -85,47 +89,35 @@ contract KyberBridge is | |||||||
|         state.kyber = IKyberNetworkProxy(_getKyberNetworkProxyAddress()); |         state.kyber = IKyberNetworkProxy(_getKyberNetworkProxyAddress()); | ||||||
|         state.weth = IEtherToken(_getWethAddress()); |         state.weth = IEtherToken(_getWethAddress()); | ||||||
|         // Decode the bridge data to get the `fromTokenAddress`. |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|         (state.fromTokenAddress) = abi.decode(bridgeData, (address)); |         (state.fromTokenAddress, state.hint) = abi.decode(bridgeData, (address, bytes)); | ||||||
|         // Query the balance of "from" tokens. |         // Query the balance of "from" tokens. | ||||||
|         state.fromTokenBalance = IERC20Token(state.fromTokenAddress).balanceOf(address(this)); |         state.fromTokenBalance = IERC20Token(state.fromTokenAddress).balanceOf(address(this)); | ||||||
|         if (state.fromTokenBalance == 0) { |         if (state.fromTokenBalance == 0) { | ||||||
|             // Return failure if no input tokens. |             // Return failure if no input tokens. | ||||||
|             return BRIDGE_FAILED; |             return BRIDGE_FAILED; | ||||||
|         } |         } | ||||||
|         // Compute the conversion rate, expressed in 18 decimals. |  | ||||||
|         // The sequential notation is to get around stack limits. |  | ||||||
|         state.conversionRate = KYBER_RATE_BASE; |  | ||||||
|         state.conversionRate = state.conversionRate.safeMul(amount); |  | ||||||
|         state.conversionRate = state.conversionRate.safeMul( |  | ||||||
|             10 ** uint256(LibERC20Token.decimals(state.fromTokenAddress)) |  | ||||||
|         ); |  | ||||||
|         state.conversionRate = state.conversionRate.safeDiv(state.fromTokenBalance); |  | ||||||
|         state.conversionRate = state.conversionRate.safeDiv( |  | ||||||
|             10 ** uint256(LibERC20Token.decimals(toTokenAddress)) |  | ||||||
|         ); |  | ||||||
|         if (state.fromTokenAddress == toTokenAddress) { |         if (state.fromTokenAddress == toTokenAddress) { | ||||||
|             // Just transfer the tokens if they're the same. |             // Just transfer the tokens if they're the same. | ||||||
|             LibERC20Token.transfer(state.fromTokenAddress, to, state.fromTokenBalance); |             LibERC20Token.transfer(state.fromTokenAddress, to, state.fromTokenBalance); | ||||||
|             return BRIDGE_SUCCESS; |             return BRIDGE_SUCCESS; | ||||||
|         } else if (state.fromTokenAddress != address(state.weth)) { |         } | ||||||
|             // If the input token is not WETH, grant an allowance to the exchange |         if (state.fromTokenAddress == address(state.weth)) { | ||||||
|             // to spend them. |             // From WETH | ||||||
|  |             state.fromTokenAddress = KYBER_ETH_ADDRESS; | ||||||
|  |             state.payableAmount = state.fromTokenBalance; | ||||||
|  |             state.weth.withdraw(state.fromTokenBalance); | ||||||
|  |         } else { | ||||||
|             LibERC20Token.approveIfBelow( |             LibERC20Token.approveIfBelow( | ||||||
|                 state.fromTokenAddress, |                 state.fromTokenAddress, | ||||||
|                 address(state.kyber), |                 address(state.kyber), | ||||||
|                 state.fromTokenBalance |                 state.fromTokenBalance | ||||||
|             ); |             ); | ||||||
|         } else { |  | ||||||
|             // If the input token is WETH, unwrap it and attach it to the call. |  | ||||||
|             state.fromTokenAddress = KYBER_ETH_ADDRESS; |  | ||||||
|             state.payableAmount = state.fromTokenBalance; |  | ||||||
|             state.weth.withdraw(state.fromTokenBalance); |  | ||||||
|         } |         } | ||||||
|         bool isToTokenWeth = toTokenAddress == address(state.weth); |         bool isToTokenWeth = toTokenAddress == address(state.weth); | ||||||
|  |  | ||||||
|         // Try to sell all of this contract's input token balance through |         // Try to sell all of this contract's input token balance through | ||||||
|         // `KyberNetworkProxy.trade()`. |         // `KyberNetworkProxy.trade()`. | ||||||
|         uint256 boughtAmount = state.kyber.trade.value(state.payableAmount)( |         uint256 boughtAmount = state.kyber.tradeWithHint.value(state.payableAmount)( | ||||||
|             // Input token. |             // Input token. | ||||||
|             state.fromTokenAddress, |             state.fromTokenAddress, | ||||||
|             // Sell amount. |             // Sell amount. | ||||||
| @@ -137,11 +129,11 @@ contract KyberBridge is | |||||||
|             isToTokenWeth ? address(uint160(address(this))) : address(uint160(to)), |             isToTokenWeth ? address(uint160(address(this))) : address(uint160(to)), | ||||||
|             // Buy as much as possible. |             // Buy as much as possible. | ||||||
|             uint256(-1), |             uint256(-1), | ||||||
|             // Compute the minimum conversion rate, which is expressed in units with |             // The minimum conversion rate | ||||||
|             // 18 decimal places. |             1, | ||||||
|             state.conversionRate, |  | ||||||
|             // No affiliate address. |             // No affiliate address. | ||||||
|             address(0) |             address(0), | ||||||
|  |             state.hint | ||||||
|         ); |         ); | ||||||
|         // Wrap ETH output and transfer to recipient. |         // Wrap ETH output and transfer to recipient. | ||||||
|         if (isToTokenWeth) { |         if (isToTokenWeth) { | ||||||
| @@ -173,4 +165,5 @@ contract KyberBridge is | |||||||
|     { |     { | ||||||
|         return LEGACY_WALLET_MAGIC_VALUE; |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -0,0 +1,94 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2019 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/IMStable.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract MStableBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     /// @dev Swaps specified tokens against the mStable mUSD contract | ||||||
|  |     /// @param toTokenAddress The token to give to `to` (i.e DAI, USDC, USDT). | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded "from" token address. | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     // solhint-disable no-unused-vars | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|  |         (address fromTokenAddress) = abi.decode(bridgeData, (address)); | ||||||
|  |  | ||||||
|  |         IMStable exchange = IMStable(_getMUsdAddress()); | ||||||
|  |         uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|  |         LibERC20Token.approveIfBelow(fromTokenAddress, address(exchange), fromTokenBalance); | ||||||
|  |  | ||||||
|  |         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||||
|  |         uint256 boughtAmount = exchange.swap( | ||||||
|  |             fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										148
									
								
								contracts/asset-proxy/contracts/src/bridges/MooniswapBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								contracts/asset-proxy/contracts/src/bridges/MooniswapBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IEtherToken.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/IMooniswap.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // solhint-disable space-after-comma | ||||||
|  | // solhint-disable not-rely-on-time | ||||||
|  | contract MooniswapBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     struct TransferState { | ||||||
|  |         IMooniswap pool; | ||||||
|  |         uint256 fromTokenBalance; | ||||||
|  |         IEtherToken weth; | ||||||
|  |         uint256 boughtAmount; | ||||||
|  |         address fromTokenAddress; | ||||||
|  |         address toTokenAddress; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     // solhint-disable no-empty-blocks | ||||||
|  |     /// @dev Payable fallback to receive ETH from uniswap. | ||||||
|  |     function () | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |     {} | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded path of token addresses. Last element must be toTokenAddress | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // State memory object to avoid stack overflows. | ||||||
|  |         TransferState memory state; | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|  |         address fromTokenAddress = abi.decode(bridgeData, (address)); | ||||||
|  |         // Get the weth contract. | ||||||
|  |         state.weth = IEtherToken(_getWethAddress()); | ||||||
|  |         // Get our balance of `fromTokenAddress` token. | ||||||
|  |         state.fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this)); | ||||||
|  |  | ||||||
|  |         state.fromTokenAddress = fromTokenAddress == address(state.weth) ? address(0) : fromTokenAddress; | ||||||
|  |         state.toTokenAddress = toTokenAddress == address(state.weth) ? address(0) : toTokenAddress; | ||||||
|  |         state.pool = IMooniswap( | ||||||
|  |             IMooniswapRegistry(_getMooniswapAddress()).pools( | ||||||
|  |                 state.fromTokenAddress, | ||||||
|  |                 state.toTokenAddress | ||||||
|  |             ) | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         // withdraw WETH to ETH | ||||||
|  |         if (state.fromTokenAddress == address(0)) { | ||||||
|  |             state.weth.withdraw(state.fromTokenBalance); | ||||||
|  |         } else { | ||||||
|  |             // Grant the pool an allowance. | ||||||
|  |             LibERC20Token.approveIfBelow( | ||||||
|  |                 state.fromTokenAddress, | ||||||
|  |                 address(state.pool), | ||||||
|  |                 state.fromTokenBalance | ||||||
|  |             ); | ||||||
|  |         } | ||||||
|  |         uint256 ethValue = state.fromTokenAddress == address(0) ? state.fromTokenBalance : 0; | ||||||
|  |         state.boughtAmount = state.pool.swap.value(ethValue)( | ||||||
|  |             state.fromTokenAddress, | ||||||
|  |             state.toTokenAddress, | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |             amount, | ||||||
|  |             address(0) | ||||||
|  |         ); | ||||||
|  |         // Deposit to WETH | ||||||
|  |         if (state.toTokenAddress == address(0)) { | ||||||
|  |             state.weth.deposit.value(state.boughtAmount)(); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Transfer funds to `to` | ||||||
|  |         LibERC20Token.transfer(toTokenAddress, to, state.boughtAmount); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             // input token | ||||||
|  |             fromTokenAddress, | ||||||
|  |             // output token | ||||||
|  |             toTokenAddress, | ||||||
|  |             // input token amount | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |             // output token amount | ||||||
|  |             state.boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										95
									
								
								contracts/asset-proxy/contracts/src/bridges/ShellBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								contracts/asset-proxy/contracts/src/bridges/ShellBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,95 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2019 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/IShell.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract ShellBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     /// @dev Swaps specified tokens against the Shell contract | ||||||
|  |     /// @param toTokenAddress The token to give to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded "from" token address. | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     // solhint-disable no-unused-vars | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress` and `pool`. | ||||||
|  |         (address fromTokenAddress, address pool) = abi.decode(bridgeData, (address, address)); | ||||||
|  |  | ||||||
|  |         uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|  |         LibERC20Token.approveIfBelow(fromTokenAddress, pool, fromTokenBalance); | ||||||
|  |  | ||||||
|  |         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||||
|  |         uint256 boughtAmount = IShell(pool).originSwap( | ||||||
|  |             fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             amount, // min amount | ||||||
|  |             block.timestamp + 1 | ||||||
|  |         ); | ||||||
|  |         LibERC20Token.transfer(toTokenAddress, to, boughtAmount); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             boughtAmount, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										119
									
								
								contracts/asset-proxy/contracts/src/bridges/SnowSwapBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								contracts/asset-proxy/contracts/src/bridges/SnowSwapBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2019 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/ICurve.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // solhint-disable not-rely-on-time | ||||||
|  | // solhint-disable space-after-comma | ||||||
|  | contract SnowSwapBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     struct SnowSwapBridgeData { | ||||||
|  |         address curveAddress; | ||||||
|  |         bytes4 exchangeFunctionSelector; | ||||||
|  |         address fromTokenAddress; | ||||||
|  |         int128 fromCoinIdx; | ||||||
|  |         int128 toCoinIdx; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `ICurve`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the opposing asset | ||||||
|  |     ///      (DAI, USDC) to the Curve contract, then transfers the bought | ||||||
|  |     ///      tokens to `to`. | ||||||
|  |     /// @param toTokenAddress The token to give to `to` (i.e DAI, USDC, USDT). | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoeded "from" token address. | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // Decode the bridge data to get the SnowSwap metadata. | ||||||
|  |         SnowSwapBridgeData memory data = abi.decode(bridgeData, (SnowSwapBridgeData)); | ||||||
|  |  | ||||||
|  |         require(toTokenAddress != data.fromTokenAddress, "SnowSwapBridge/INVALID_PAIR"); | ||||||
|  |         uint256 fromTokenBalance = IERC20Token(data.fromTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|  |         LibERC20Token.approveIfBelow(data.fromTokenAddress, data.curveAddress, fromTokenBalance); | ||||||
|  |  | ||||||
|  |         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||||
|  |         { | ||||||
|  |             (bool didSucceed, bytes memory resultData) = | ||||||
|  |                 data.curveAddress.call(abi.encodeWithSelector( | ||||||
|  |                     data.exchangeFunctionSelector, | ||||||
|  |                     data.fromCoinIdx, | ||||||
|  |                     data.toCoinIdx, | ||||||
|  |                     // dx | ||||||
|  |                     fromTokenBalance, | ||||||
|  |                     // min dy | ||||||
|  |                     amount | ||||||
|  |                 )); | ||||||
|  |             if (!didSucceed) { | ||||||
|  |                 assembly { revert(add(resultData, 32), mload(resultData)) } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Transfer the converted `toToken`s to `to`. | ||||||
|  |         LibERC20Token.transfer(toTokenAddress, to, toTokenBalance); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             data.fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             toTokenBalance, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										136
									
								
								contracts/asset-proxy/contracts/src/bridges/SushiSwapBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										136
									
								
								contracts/asset-proxy/contracts/src/bridges/SushiSwapBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,136 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IEtherToken.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/LibAddressArray.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IUniswapV2Router01.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // solhint-disable space-after-comma | ||||||
|  | // solhint-disable not-rely-on-time | ||||||
|  | contract SushiSwapBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     struct TransferState { | ||||||
|  |         address[] path; | ||||||
|  |         address router; | ||||||
|  |         uint256 fromTokenBalance; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `IERC20Bridge`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the `fromTokenAddress` | ||||||
|  |     ///      token encoded in the bridge data. | ||||||
|  |     /// @param toTokenAddress The token to buy and transfer to `to`. | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoded path of token addresses. Last element must be toTokenAddress | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // hold variables to get around stack depth limitations | ||||||
|  |         TransferState memory state; | ||||||
|  |  | ||||||
|  |         // Decode the bridge data to get the `fromTokenAddress`. | ||||||
|  |         // solhint-disable indent | ||||||
|  |         (state.path, state.router) = abi.decode(bridgeData, (address[], address)); | ||||||
|  |         // solhint-enable indent | ||||||
|  |  | ||||||
|  |         require(state.path.length >= 2, "SushiSwapBridge/PATH_LENGTH_MUST_BE_AT_LEAST_TWO"); | ||||||
|  |         require(state.path[state.path.length - 1] == toTokenAddress, "SushiSwapBridge/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"); | ||||||
|  |  | ||||||
|  |         // Just transfer the tokens if they're the same. | ||||||
|  |         if (state.path[0] == toTokenAddress) { | ||||||
|  |             LibERC20Token.transfer(state.path[0], to, amount); | ||||||
|  |             return BRIDGE_SUCCESS; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // Get our balance of `fromTokenAddress` token. | ||||||
|  |         state.fromTokenBalance = IERC20Token(state.path[0]).balanceOf(address(this)); | ||||||
|  |  | ||||||
|  |         // Grant the SushiSwap router an allowance. | ||||||
|  |         LibERC20Token.approveIfBelow( | ||||||
|  |             state.path[0], | ||||||
|  |             state.router, | ||||||
|  |             state.fromTokenBalance | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         // Buy as much `toTokenAddress` token with `fromTokenAddress` token | ||||||
|  |         // and transfer it to `to`. | ||||||
|  |         IUniswapV2Router01 router = IUniswapV2Router01(state.router); | ||||||
|  |         uint[] memory amounts = router.swapExactTokensForTokens( | ||||||
|  |              // Sell all tokens we hold. | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |              // Minimum buy amount. | ||||||
|  |             amount, | ||||||
|  |             // Convert `fromTokenAddress` to `toTokenAddress`. | ||||||
|  |             state.path, | ||||||
|  |             // Recipient is `to`. | ||||||
|  |             to, | ||||||
|  |             // Expires after this block. | ||||||
|  |             block.timestamp | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             // input token | ||||||
|  |             state.path[0], | ||||||
|  |             // output token | ||||||
|  |             toTokenAddress, | ||||||
|  |             // input token amount | ||||||
|  |             state.fromTokenBalance, | ||||||
|  |             // output token amount | ||||||
|  |             amounts[amounts.length - 1], | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |  | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										119
									
								
								contracts/asset-proxy/contracts/src/bridges/SwerveBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								contracts/asset-proxy/contracts/src/bridges/SwerveBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | |||||||
|  |  | ||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2019 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-erc20/contracts/src/LibERC20Token.sol"; | ||||||
|  | import "@0x/contracts-exchange-libs/contracts/src/IWallet.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/DeploymentConstants.sol"; | ||||||
|  | import "../interfaces/IERC20Bridge.sol"; | ||||||
|  | import "../interfaces/ICurve.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | // solhint-disable not-rely-on-time | ||||||
|  | // solhint-disable space-after-comma | ||||||
|  | contract SwerveBridge is | ||||||
|  |     IERC20Bridge, | ||||||
|  |     IWallet, | ||||||
|  |     DeploymentConstants | ||||||
|  | { | ||||||
|  |     struct SwerveBridgeData { | ||||||
|  |         address curveAddress; | ||||||
|  |         bytes4 exchangeFunctionSelector; | ||||||
|  |         address fromTokenAddress; | ||||||
|  |         int128 fromCoinIdx; | ||||||
|  |         int128 toCoinIdx; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Callback for `ICurve`. Tries to buy `amount` of | ||||||
|  |     ///      `toTokenAddress` tokens by selling the entirety of the opposing asset | ||||||
|  |     ///      (DAI, USDC) to the Curve contract, then transfers the bought | ||||||
|  |     ///      tokens to `to`. | ||||||
|  |     /// @param toTokenAddress The token to give to `to` (i.e DAI, USDC, USDT). | ||||||
|  |     /// @param from The maker (this contract). | ||||||
|  |     /// @param to The recipient of the bought tokens. | ||||||
|  |     /// @param amount Minimum amount of `toTokenAddress` tokens to buy. | ||||||
|  |     /// @param bridgeData The abi-encoeded "from" token address. | ||||||
|  |     /// @return success The magic bytes if successful. | ||||||
|  |     function bridgeTransferFrom( | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount, | ||||||
|  |         bytes calldata bridgeData | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (bytes4 success) | ||||||
|  |     { | ||||||
|  |         // Decode the bridge data to get the SwerveBridgeData metadata. | ||||||
|  |         SwerveBridgeData memory data = abi.decode(bridgeData, (SwerveBridgeData)); | ||||||
|  |  | ||||||
|  |         require(toTokenAddress != data.fromTokenAddress, "SwerveBridge/INVALID_PAIR"); | ||||||
|  |         uint256 fromTokenBalance = IERC20Token(data.fromTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||||
|  |         LibERC20Token.approveIfBelow(data.fromTokenAddress, data.curveAddress, fromTokenBalance); | ||||||
|  |  | ||||||
|  |         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||||
|  |         { | ||||||
|  |             (bool didSucceed, bytes memory resultData) = | ||||||
|  |                 data.curveAddress.call(abi.encodeWithSelector( | ||||||
|  |                     data.exchangeFunctionSelector, | ||||||
|  |                     data.fromCoinIdx, | ||||||
|  |                     data.toCoinIdx, | ||||||
|  |                     // dx | ||||||
|  |                     fromTokenBalance, | ||||||
|  |                     // min dy | ||||||
|  |                     amount | ||||||
|  |                 )); | ||||||
|  |             if (!didSucceed) { | ||||||
|  |                 assembly { revert(add(resultData, 32), mload(resultData)) } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         uint256 toTokenBalance = IERC20Token(toTokenAddress).balanceOf(address(this)); | ||||||
|  |         // Transfer the converted `toToken`s to `to`. | ||||||
|  |         LibERC20Token.transfer(toTokenAddress, to, toTokenBalance); | ||||||
|  |  | ||||||
|  |         emit ERC20BridgeTransfer( | ||||||
|  |             data.fromTokenAddress, | ||||||
|  |             toTokenAddress, | ||||||
|  |             fromTokenBalance, | ||||||
|  |             toTokenBalance, | ||||||
|  |             from, | ||||||
|  |             to | ||||||
|  |         ); | ||||||
|  |         return BRIDGE_SUCCESS; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev `SignatureType.Wallet` callback, so that this bridge can be the maker | ||||||
|  |     ///      and sign for itself in orders. Always succeeds. | ||||||
|  |     /// @return magicValue Magic success bytes, always. | ||||||
|  |     function isValidSignature( | ||||||
|  |         bytes32, | ||||||
|  |         bytes calldata | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (bytes4 magicValue) | ||||||
|  |     { | ||||||
|  |         return LEGACY_WALLET_MAGIC_VALUE; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,38 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2020 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract IContractRegistry { | ||||||
|  |     function addressOf( | ||||||
|  |         bytes32 contractName | ||||||
|  |     ) external returns(address); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract IBancorNetwork { | ||||||
|  |     function convertByPath( | ||||||
|  |         address[] calldata _path, | ||||||
|  |         uint256 _amount, | ||||||
|  |         uint256 _minReturn, | ||||||
|  |         address _beneficiary, | ||||||
|  |         address _affiliateAccount, | ||||||
|  |         uint256 _affiliateFee | ||||||
|  |     ) external payable returns (uint256); | ||||||
|  | } | ||||||
| @@ -22,22 +22,6 @@ pragma solidity ^0.5.9; | |||||||
| // solhint-disable func-name-mixedcase | // solhint-disable func-name-mixedcase | ||||||
| interface ICurve { | interface ICurve { | ||||||
|  |  | ||||||
|     /// @dev Sell `sellAmount` of `fromToken` token and receive `toToken` token. |  | ||||||
|     ///      This function exists on early versions of Curve (USDC/DAI) |  | ||||||
|     /// @param i The token index being sold. |  | ||||||
|     /// @param j The token index being bought. |  | ||||||
|     /// @param sellAmount The amount of token being bought. |  | ||||||
|     /// @param minBuyAmount The minimum buy amount of the token being bought. |  | ||||||
|     /// @param deadline The time in seconds when this operation should expire. |  | ||||||
|     function exchange_underlying( |  | ||||||
|         int128 i, |  | ||||||
|         int128 j, |  | ||||||
|         uint256 sellAmount, |  | ||||||
|         uint256 minBuyAmount, |  | ||||||
|         uint256 deadline |  | ||||||
|     ) |  | ||||||
|         external; |  | ||||||
|  |  | ||||||
|     /// @dev Sell `sellAmount` of `fromToken` token and receive `toToken` token. |     /// @dev Sell `sellAmount` of `fromToken` token and receive `toToken` token. | ||||||
|     ///      This function exists on later versions of Curve (USDC/DAI/USDT) |     ///      This function exists on later versions of Curve (USDC/DAI/USDT) | ||||||
|     /// @param i The token index being sold. |     /// @param i The token index being sold. | ||||||
|   | |||||||
| @@ -42,5 +42,31 @@ interface IKyberNetworkProxy { | |||||||
|     ) |     ) | ||||||
|         external |         external | ||||||
|         payable |         payable | ||||||
|         returns(uint256 boughtAmount); |         returns (uint256 boughtAmount); | ||||||
|  |  | ||||||
|  |     /// @dev Sells `sellTokenAddress` tokens for `buyTokenAddress` tokens | ||||||
|  |     /// using a hint for the reserve. | ||||||
|  |     /// @param sellTokenAddress Token to sell. | ||||||
|  |     /// @param sellAmount Amount of tokens to sell. | ||||||
|  |     /// @param buyTokenAddress Token to buy. | ||||||
|  |     /// @param recipientAddress Address to send bought tokens to. | ||||||
|  |     /// @param maxBuyTokenAmount A limit on the amount of tokens to buy. | ||||||
|  |     /// @param minConversionRate The minimal conversion rate. If actual rate | ||||||
|  |     ///        is lower, trade is canceled. | ||||||
|  |     /// @param walletId The wallet ID to send part of the fees | ||||||
|  |     /// @param hint The hint for the selective inclusion (or exclusion) of reserves | ||||||
|  |     /// @return boughtAmount Amount of tokens bought. | ||||||
|  |     function tradeWithHint( | ||||||
|  |         address sellTokenAddress, | ||||||
|  |         uint256 sellAmount, | ||||||
|  |         address buyTokenAddress, | ||||||
|  |         address payable recipientAddress, | ||||||
|  |         uint256 maxBuyTokenAmount, | ||||||
|  |         uint256 minConversionRate, | ||||||
|  |         address payable walletId, | ||||||
|  |         bytes calldata hint | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |         returns (uint256 boughtAmount); | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,22 +16,17 @@ | |||||||
| 
 | 
 | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| pragma solidity 0.6.4; | pragma solidity ^0.5.9; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| contract V6Contract { | interface IMStable { | ||||||
| 
 | 
 | ||||||
|     uint256 private _privateNumber; |     function swap( | ||||||
| 
 |         address _input, | ||||||
|     constructor(uint256 privateNumber) public { |         address _output, | ||||||
|         _privateNumber = privateNumber; |         uint256 _quantity, | ||||||
|     } |         address _recipient | ||||||
| 
 |     ) | ||||||
|     fallback() external { |         external | ||||||
|         revert('nope'); |         returns (uint256 output); | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     receive() payable external { |  | ||||||
|         // no-op |  | ||||||
|     } |  | ||||||
| } | } | ||||||
| @@ -19,16 +19,22 @@ | |||||||
| pragma solidity ^0.5.9; | pragma solidity ^0.5.9; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| interface IKyberNetworkProxy { | interface IMooniswapRegistry { | ||||||
| 
 | 
 | ||||||
|     function kyberNetwork() external view returns (address); |     function pools(address token1, address token2) external view returns(address); | ||||||
|     function kyberHintHandler() external view returns (address); | } | ||||||
| 
 | 
 | ||||||
|     function getExpectedRateAfterFee( | 
 | ||||||
|         address src, | interface IMooniswap { | ||||||
|         address dest, | 
 | ||||||
|         uint256 srcQty, |     function swap( | ||||||
|         uint256 platformFeeBps, |         address fromToken, | ||||||
|         bytes calldata hint |         address destToken, | ||||||
|     ) external view returns (uint256 expectedRate); |         uint256 amount, | ||||||
|  |         uint256 minReturn, | ||||||
|  |         address referral | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |         returns(uint256 returnAmount); | ||||||
| } | } | ||||||
| @@ -19,19 +19,16 @@ | |||||||
| pragma solidity ^0.5.9; | pragma solidity ^0.5.9; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| interface IKyberStorage { | interface IShell { | ||||||
| 
 | 
 | ||||||
|     function getReserveId( |     function originSwap( | ||||||
|         address reserve |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 fromAmount, | ||||||
|  |         uint256 minTargetAmount, | ||||||
|  |         uint256 deadline | ||||||
|     ) |     ) | ||||||
|         external |         external | ||||||
|         view |         returns (uint256 toAmount); | ||||||
|         returns (bytes32 reserveId); |  | ||||||
| 
 |  | ||||||
|     function getReserveIdsPerTokenSrc( |  | ||||||
|         address token |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (bytes32[] memory reserveIds); |  | ||||||
| } | } | ||||||
|  | 
 | ||||||
							
								
								
									
										247
									
								
								contracts/asset-proxy/contracts/test/TestBancorBridge.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										247
									
								
								contracts/asset-proxy/contracts/test/TestBancorBridge.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,247 @@ | |||||||
|  | /* | ||||||
|  |  | ||||||
|  |   Copyright 2019 ZeroEx Intl. | ||||||
|  |  | ||||||
|  |   Licensed under the Apache License, Version 2.0 (the "License"); | ||||||
|  |   you may not use this file except in compliance with the License. | ||||||
|  |   You may obtain a copy of the License at | ||||||
|  |  | ||||||
|  |     http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  |  | ||||||
|  |   Unless required by applicable law or agreed to in writing, software | ||||||
|  |   distributed under the License is distributed on an "AS IS" BASIS, | ||||||
|  |   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||||
|  |   See the License for the specific language governing permissions and | ||||||
|  |   limitations under the License. | ||||||
|  |  | ||||||
|  | */ | ||||||
|  |  | ||||||
|  | pragma solidity ^0.5.9; | ||||||
|  | pragma experimental ABIEncoderV2; | ||||||
|  |  | ||||||
|  | import "@0x/contracts-erc20/contracts/src/interfaces/IERC20Token.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/LibSafeMath.sol"; | ||||||
|  | import "@0x/contracts-utils/contracts/src/LibAddressArray.sol"; | ||||||
|  | import "../src/bridges/BancorBridge.sol"; | ||||||
|  | import "../src/interfaces/IBancorNetwork.sol"; | ||||||
|  |  | ||||||
|  |  | ||||||
|  | contract TestEventsRaiser { | ||||||
|  |  | ||||||
|  |     event TokenTransfer( | ||||||
|  |         address token, | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     event TokenApprove( | ||||||
|  |         address spender, | ||||||
|  |         uint256 allowance | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     event ConvertByPathInput( | ||||||
|  |         uint amountIn, | ||||||
|  |         uint amountOutMin, | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address to, | ||||||
|  |         address feeRecipient, | ||||||
|  |         uint256 feeAmount | ||||||
|  |     ); | ||||||
|  |  | ||||||
|  |     function raiseTokenTransfer( | ||||||
|  |         address from, | ||||||
|  |         address to, | ||||||
|  |         uint256 amount | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |     { | ||||||
|  |         emit TokenTransfer( | ||||||
|  |             msg.sender, | ||||||
|  |             from, | ||||||
|  |             to, | ||||||
|  |             amount | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function raiseTokenApprove(address spender, uint256 allowance) external { | ||||||
|  |         emit TokenApprove(spender, allowance); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function raiseConvertByPathInput( | ||||||
|  |         uint amountIn, | ||||||
|  |         uint amountOutMin, | ||||||
|  |         address toTokenAddress, | ||||||
|  |         address to, | ||||||
|  |         address feeRecipient, | ||||||
|  |         uint256 feeAmount | ||||||
|  |     ) external | ||||||
|  |     { | ||||||
|  |         emit ConvertByPathInput( | ||||||
|  |             amountIn, | ||||||
|  |             amountOutMin, | ||||||
|  |             toTokenAddress, | ||||||
|  |             to, | ||||||
|  |             feeRecipient, | ||||||
|  |             feeAmount | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /// @dev A minimalist ERC20 token. | ||||||
|  | contract TestToken { | ||||||
|  |  | ||||||
|  |     using LibSafeMath for uint256; | ||||||
|  |  | ||||||
|  |     mapping (address => uint256) public balances; | ||||||
|  |     string private _nextRevertReason; | ||||||
|  |  | ||||||
|  |     /// @dev Set the balance for `owner`. | ||||||
|  |     function setBalance(address owner, uint256 balance) | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |     { | ||||||
|  |         balances[owner] = balance; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Just emits a TokenTransfer event on the caller | ||||||
|  |     function transfer(address to, uint256 amount) | ||||||
|  |         external | ||||||
|  |         returns (bool) | ||||||
|  |     { | ||||||
|  |         TestEventsRaiser(msg.sender).raiseTokenTransfer(msg.sender, to, amount); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Just emits a TokenApprove event on the caller | ||||||
|  |     function approve(address spender, uint256 allowance) | ||||||
|  |         external | ||||||
|  |         returns (bool) | ||||||
|  |     { | ||||||
|  |         TestEventsRaiser(msg.sender).raiseTokenApprove(spender, allowance); | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function allowance(address, address) external view returns (uint256) { | ||||||
|  |         return 0; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Retrieve the balance for `owner`. | ||||||
|  |     function balanceOf(address owner) | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (uint256) | ||||||
|  |     { | ||||||
|  |         return balances[owner]; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /// @dev Mock the BancorNetwork contract | ||||||
|  | contract TestBancorNetwork is | ||||||
|  |     IBancorNetwork | ||||||
|  | { | ||||||
|  |     string private _nextRevertReason; | ||||||
|  |  | ||||||
|  |     /// @dev Set the revert reason for `swapExactTokensForTokens`. | ||||||
|  |     function setRevertReason(string calldata reason) | ||||||
|  |         external | ||||||
|  |     { | ||||||
|  |         _nextRevertReason = reason; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function convertByPath( | ||||||
|  |         address[] calldata _path, | ||||||
|  |         uint256 _amount, | ||||||
|  |         uint256 _minReturn, | ||||||
|  |         address _beneficiary, | ||||||
|  |         address _affiliateAccount, | ||||||
|  |         uint256 _affiliateFee | ||||||
|  |     ) external payable returns (uint256) | ||||||
|  |     { | ||||||
|  |         _revertIfReasonExists(); | ||||||
|  |  | ||||||
|  |         TestEventsRaiser(msg.sender).raiseConvertByPathInput( | ||||||
|  |             // tokens sold | ||||||
|  |             _amount, | ||||||
|  |             // tokens bought | ||||||
|  |             _minReturn, | ||||||
|  |             // output token | ||||||
|  |             _path[_path.length - 1], | ||||||
|  |             // recipient | ||||||
|  |             _beneficiary, | ||||||
|  |             // fee recipient | ||||||
|  |             _affiliateAccount, | ||||||
|  |             // fee amount | ||||||
|  |             _affiliateFee | ||||||
|  |         ); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function _revertIfReasonExists() | ||||||
|  |         private | ||||||
|  |         view | ||||||
|  |     { | ||||||
|  |         if (bytes(_nextRevertReason).length != 0) { | ||||||
|  |             revert(_nextRevertReason); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /// @dev BancorBridge overridden to mock tokens and BancorNetwork | ||||||
|  | contract TestBancorBridge is | ||||||
|  |     BancorBridge, | ||||||
|  |     TestEventsRaiser | ||||||
|  | { | ||||||
|  |  | ||||||
|  |     // Token address to TestToken instance. | ||||||
|  |     mapping (address => TestToken) private _testTokens; | ||||||
|  |     // TestRouter instance. | ||||||
|  |     TestBancorNetwork private _testNetwork; | ||||||
|  |  | ||||||
|  |     constructor() public { | ||||||
|  |         _testNetwork = new TestBancorNetwork(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function setNetworkRevertReason(string calldata revertReason) | ||||||
|  |         external | ||||||
|  |     { | ||||||
|  |         _testNetwork.setRevertReason(revertReason); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Sets the balance of this contract for an existing token. | ||||||
|  |     function setTokenBalance(address tokenAddress, uint256 balance) | ||||||
|  |         external | ||||||
|  |     { | ||||||
|  |         TestToken token = _testTokens[tokenAddress]; | ||||||
|  |         token.setBalance(address(this), balance); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /// @dev Create a new token | ||||||
|  |     /// @param tokenAddress The token address. If zero, one will be created. | ||||||
|  |     function createToken( | ||||||
|  |         address tokenAddress | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         returns (TestToken token) | ||||||
|  |     { | ||||||
|  |         token = TestToken(tokenAddress); | ||||||
|  |         if (tokenAddress == address(0)) { | ||||||
|  |             token = new TestToken(); | ||||||
|  |         } | ||||||
|  |         _testTokens[address(token)] = token; | ||||||
|  |  | ||||||
|  |         return token; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     function getNetworkAddress() | ||||||
|  |         external | ||||||
|  |         view | ||||||
|  |         returns (address) | ||||||
|  |     { | ||||||
|  |         return address(_testNetwork); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  | } | ||||||
| @@ -201,6 +201,33 @@ contract TestKyberBridge is | |||||||
|         return _nextFillAmount; |         return _nextFillAmount; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     function tradeWithHint( | ||||||
|  |         address sellTokenAddress, | ||||||
|  |         uint256 sellAmount, | ||||||
|  |         address buyTokenAddress, | ||||||
|  |         address payable recipientAddress, | ||||||
|  |         uint256 maxBuyTokenAmount, | ||||||
|  |         uint256 minConversionRate, | ||||||
|  |         address payable walletId, | ||||||
|  |         bytes calldata hint | ||||||
|  |     ) | ||||||
|  |         external | ||||||
|  |         payable | ||||||
|  |         returns (uint256 boughtAmount) | ||||||
|  |     { | ||||||
|  |         emit KyberBridgeTrade( | ||||||
|  |             msg.value, | ||||||
|  |             sellTokenAddress, | ||||||
|  |             sellAmount, | ||||||
|  |             buyTokenAddress, | ||||||
|  |             recipientAddress, | ||||||
|  |             maxBuyTokenAmount, | ||||||
|  |             minConversionRate, | ||||||
|  |             walletId | ||||||
|  |         ); | ||||||
|  |         return _nextFillAmount; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     function createToken(uint8 decimals) |     function createToken(uint8 decimals) | ||||||
|         external |         external | ||||||
|         returns (address tokenAddress) |         returns (address tokenAddress) | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-asset-proxy", |     "name": "@0x/contracts-asset-proxy", | ||||||
|     "version": "3.4.0", |     "version": "3.7.9", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -38,31 +38,31 @@ | |||||||
|         "docs:json": "typedoc --excludePrivate --excludeExternals --excludeProtected --ignoreCompilerErrors --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" |         "docs:json": "typedoc --excludePrivate --excludeExternals --excludeProtected --ignoreCompilerErrors --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" | ||||||
|     }, |     }, | ||||||
|     "config": { |     "config": { | ||||||
|         "abis": "./test/generated-artifacts/@(BalancerBridge|ChaiBridge|CurveBridge|DexForwarderBridge|DydxBridge|ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IBalancerPool|IChai|ICurve|IDydx|IDydxBridge|IERC20Bridge|IEth2Dai|IGasToken|IKyberNetworkProxy|IUniswapExchange|IUniswapExchangeFactory|IUniswapV2Router01|KyberBridge|MixinAssetProxyDispatcher|MixinAuthorizable|MixinGasToken|MultiAssetProxy|Ownable|StaticCallProxy|TestChaiBridge|TestDexForwarderBridge|TestDydxBridge|TestERC20Bridge|TestEth2DaiBridge|TestKyberBridge|TestStaticCallTarget|TestUniswapBridge|TestUniswapV2Bridge|UniswapBridge|UniswapV2Bridge).json", |         "abis": "./test/generated-artifacts/@(BalancerBridge|BancorBridge|ChaiBridge|CreamBridge|CryptoComBridge|CurveBridge|DODOBridge|DexForwarderBridge|DydxBridge|ERC1155Proxy|ERC20BridgeProxy|ERC20Proxy|ERC721Proxy|Eth2DaiBridge|IAssetData|IAssetProxy|IAssetProxyDispatcher|IAuthorizable|IBalancerPool|IBancorNetwork|IChai|ICurve|IDydx|IDydxBridge|IERC20Bridge|IEth2Dai|IGasToken|IKyberNetworkProxy|IMStable|IMooniswap|IShell|IUniswapExchange|IUniswapExchangeFactory|IUniswapV2Router01|KyberBridge|MStableBridge|MixinAssetProxyDispatcher|MixinAuthorizable|MixinGasToken|MooniswapBridge|MultiAssetProxy|Ownable|ShellBridge|SnowSwapBridge|StaticCallProxy|SushiSwapBridge|SwerveBridge|TestBancorBridge|TestChaiBridge|TestDexForwarderBridge|TestDydxBridge|TestERC20Bridge|TestEth2DaiBridge|TestKyberBridge|TestStaticCallTarget|TestUniswapBridge|TestUniswapV2Bridge|UniswapBridge|UniswapV2Bridge).json", | ||||||
|         "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." |         "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." | ||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contract-wrappers": "^13.8.0", |         "@0x/contract-wrappers": "^13.15.0", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
| @@ -75,21 +75,21 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/contracts-erc1155": "^2.1.7", |         "@0x/contracts-erc1155": "^2.1.27", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-erc721": "^3.1.7", |         "@0x/contracts-erc721": "^3.1.27", | ||||||
|         "@0x/contracts-exchange-libs": "^4.3.7", |         "@0x/contracts-exchange-libs": "^4.3.27", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "ethereum-types": "^3.4.0", | ||||||
|         "lodash": "^4.17.11" |         "lodash": "^4.17.11" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|   | |||||||
| @@ -6,9 +6,13 @@ | |||||||
| import { ContractArtifact } from 'ethereum-types'; | import { ContractArtifact } from 'ethereum-types'; | ||||||
|  |  | ||||||
| import * as BalancerBridge from '../generated-artifacts/BalancerBridge.json'; | import * as BalancerBridge from '../generated-artifacts/BalancerBridge.json'; | ||||||
|  | import * as BancorBridge from '../generated-artifacts/BancorBridge.json'; | ||||||
| import * as ChaiBridge from '../generated-artifacts/ChaiBridge.json'; | import * as ChaiBridge from '../generated-artifacts/ChaiBridge.json'; | ||||||
|  | import * as CreamBridge from '../generated-artifacts/CreamBridge.json'; | ||||||
|  | import * as CryptoComBridge from '../generated-artifacts/CryptoComBridge.json'; | ||||||
| import * as CurveBridge from '../generated-artifacts/CurveBridge.json'; | import * as CurveBridge from '../generated-artifacts/CurveBridge.json'; | ||||||
| import * as DexForwarderBridge from '../generated-artifacts/DexForwarderBridge.json'; | import * as DexForwarderBridge from '../generated-artifacts/DexForwarderBridge.json'; | ||||||
|  | import * as DODOBridge from '../generated-artifacts/DODOBridge.json'; | ||||||
| import * as DydxBridge from '../generated-artifacts/DydxBridge.json'; | import * as DydxBridge from '../generated-artifacts/DydxBridge.json'; | ||||||
| import * as ERC1155Proxy from '../generated-artifacts/ERC1155Proxy.json'; | import * as ERC1155Proxy from '../generated-artifacts/ERC1155Proxy.json'; | ||||||
| import * as ERC20BridgeProxy from '../generated-artifacts/ERC20BridgeProxy.json'; | import * as ERC20BridgeProxy from '../generated-artifacts/ERC20BridgeProxy.json'; | ||||||
| @@ -20,6 +24,7 @@ import * as IAssetProxy from '../generated-artifacts/IAssetProxy.json'; | |||||||
| import * as IAssetProxyDispatcher from '../generated-artifacts/IAssetProxyDispatcher.json'; | import * as IAssetProxyDispatcher from '../generated-artifacts/IAssetProxyDispatcher.json'; | ||||||
| import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json'; | import * as IAuthorizable from '../generated-artifacts/IAuthorizable.json'; | ||||||
| import * as IBalancerPool from '../generated-artifacts/IBalancerPool.json'; | import * as IBalancerPool from '../generated-artifacts/IBalancerPool.json'; | ||||||
|  | import * as IBancorNetwork from '../generated-artifacts/IBancorNetwork.json'; | ||||||
| import * as IChai from '../generated-artifacts/IChai.json'; | import * as IChai from '../generated-artifacts/IChai.json'; | ||||||
| import * as ICurve from '../generated-artifacts/ICurve.json'; | import * as ICurve from '../generated-artifacts/ICurve.json'; | ||||||
| import * as IDydx from '../generated-artifacts/IDydx.json'; | import * as IDydx from '../generated-artifacts/IDydx.json'; | ||||||
| @@ -28,6 +33,9 @@ import * as IERC20Bridge from '../generated-artifacts/IERC20Bridge.json'; | |||||||
| import * as IEth2Dai from '../generated-artifacts/IEth2Dai.json'; | import * as IEth2Dai from '../generated-artifacts/IEth2Dai.json'; | ||||||
| import * as IGasToken from '../generated-artifacts/IGasToken.json'; | import * as IGasToken from '../generated-artifacts/IGasToken.json'; | ||||||
| import * as IKyberNetworkProxy from '../generated-artifacts/IKyberNetworkProxy.json'; | import * as IKyberNetworkProxy from '../generated-artifacts/IKyberNetworkProxy.json'; | ||||||
|  | import * as IMooniswap from '../generated-artifacts/IMooniswap.json'; | ||||||
|  | import * as IMStable from '../generated-artifacts/IMStable.json'; | ||||||
|  | import * as IShell from '../generated-artifacts/IShell.json'; | ||||||
| import * as IUniswapExchange from '../generated-artifacts/IUniswapExchange.json'; | import * as IUniswapExchange from '../generated-artifacts/IUniswapExchange.json'; | ||||||
| import * as IUniswapExchangeFactory from '../generated-artifacts/IUniswapExchangeFactory.json'; | import * as IUniswapExchangeFactory from '../generated-artifacts/IUniswapExchangeFactory.json'; | ||||||
| import * as IUniswapV2Router01 from '../generated-artifacts/IUniswapV2Router01.json'; | import * as IUniswapV2Router01 from '../generated-artifacts/IUniswapV2Router01.json'; | ||||||
| @@ -35,9 +43,16 @@ import * as KyberBridge from '../generated-artifacts/KyberBridge.json'; | |||||||
| import * as MixinAssetProxyDispatcher from '../generated-artifacts/MixinAssetProxyDispatcher.json'; | import * as MixinAssetProxyDispatcher from '../generated-artifacts/MixinAssetProxyDispatcher.json'; | ||||||
| import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; | import * as MixinAuthorizable from '../generated-artifacts/MixinAuthorizable.json'; | ||||||
| import * as MixinGasToken from '../generated-artifacts/MixinGasToken.json'; | import * as MixinGasToken from '../generated-artifacts/MixinGasToken.json'; | ||||||
|  | import * as MooniswapBridge from '../generated-artifacts/MooniswapBridge.json'; | ||||||
|  | import * as MStableBridge from '../generated-artifacts/MStableBridge.json'; | ||||||
| import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json'; | import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.json'; | ||||||
| import * as Ownable from '../generated-artifacts/Ownable.json'; | import * as Ownable from '../generated-artifacts/Ownable.json'; | ||||||
|  | import * as ShellBridge from '../generated-artifacts/ShellBridge.json'; | ||||||
|  | import * as SnowSwapBridge from '../generated-artifacts/SnowSwapBridge.json'; | ||||||
| import * as StaticCallProxy from '../generated-artifacts/StaticCallProxy.json'; | import * as StaticCallProxy from '../generated-artifacts/StaticCallProxy.json'; | ||||||
|  | import * as SushiSwapBridge from '../generated-artifacts/SushiSwapBridge.json'; | ||||||
|  | import * as SwerveBridge from '../generated-artifacts/SwerveBridge.json'; | ||||||
|  | import * as TestBancorBridge from '../generated-artifacts/TestBancorBridge.json'; | ||||||
| import * as TestChaiBridge from '../generated-artifacts/TestChaiBridge.json'; | import * as TestChaiBridge from '../generated-artifacts/TestChaiBridge.json'; | ||||||
| import * as TestDexForwarderBridge from '../generated-artifacts/TestDexForwarderBridge.json'; | import * as TestDexForwarderBridge from '../generated-artifacts/TestDexForwarderBridge.json'; | ||||||
| import * as TestDydxBridge from '../generated-artifacts/TestDydxBridge.json'; | import * as TestDydxBridge from '../generated-artifacts/TestDydxBridge.json'; | ||||||
| @@ -60,13 +75,23 @@ export const artifacts = { | |||||||
|     MultiAssetProxy: MultiAssetProxy as ContractArtifact, |     MultiAssetProxy: MultiAssetProxy as ContractArtifact, | ||||||
|     StaticCallProxy: StaticCallProxy as ContractArtifact, |     StaticCallProxy: StaticCallProxy as ContractArtifact, | ||||||
|     BalancerBridge: BalancerBridge as ContractArtifact, |     BalancerBridge: BalancerBridge as ContractArtifact, | ||||||
|  |     BancorBridge: BancorBridge as ContractArtifact, | ||||||
|     ChaiBridge: ChaiBridge as ContractArtifact, |     ChaiBridge: ChaiBridge as ContractArtifact, | ||||||
|  |     CreamBridge: CreamBridge as ContractArtifact, | ||||||
|  |     CryptoComBridge: CryptoComBridge as ContractArtifact, | ||||||
|     CurveBridge: CurveBridge as ContractArtifact, |     CurveBridge: CurveBridge as ContractArtifact, | ||||||
|  |     DODOBridge: DODOBridge as ContractArtifact, | ||||||
|     DexForwarderBridge: DexForwarderBridge as ContractArtifact, |     DexForwarderBridge: DexForwarderBridge as ContractArtifact, | ||||||
|     DydxBridge: DydxBridge as ContractArtifact, |     DydxBridge: DydxBridge as ContractArtifact, | ||||||
|     Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, |     Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, | ||||||
|     KyberBridge: KyberBridge as ContractArtifact, |     KyberBridge: KyberBridge as ContractArtifact, | ||||||
|  |     MStableBridge: MStableBridge as ContractArtifact, | ||||||
|     MixinGasToken: MixinGasToken as ContractArtifact, |     MixinGasToken: MixinGasToken as ContractArtifact, | ||||||
|  |     MooniswapBridge: MooniswapBridge as ContractArtifact, | ||||||
|  |     ShellBridge: ShellBridge as ContractArtifact, | ||||||
|  |     SnowSwapBridge: SnowSwapBridge as ContractArtifact, | ||||||
|  |     SushiSwapBridge: SushiSwapBridge as ContractArtifact, | ||||||
|  |     SwerveBridge: SwerveBridge as ContractArtifact, | ||||||
|     UniswapBridge: UniswapBridge as ContractArtifact, |     UniswapBridge: UniswapBridge as ContractArtifact, | ||||||
|     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, |     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, | ||||||
|     IAssetData: IAssetData as ContractArtifact, |     IAssetData: IAssetData as ContractArtifact, | ||||||
| @@ -74,6 +99,7 @@ export const artifacts = { | |||||||
|     IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, |     IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, | ||||||
|     IAuthorizable: IAuthorizable as ContractArtifact, |     IAuthorizable: IAuthorizable as ContractArtifact, | ||||||
|     IBalancerPool: IBalancerPool as ContractArtifact, |     IBalancerPool: IBalancerPool as ContractArtifact, | ||||||
|  |     IBancorNetwork: IBancorNetwork as ContractArtifact, | ||||||
|     IChai: IChai as ContractArtifact, |     IChai: IChai as ContractArtifact, | ||||||
|     ICurve: ICurve as ContractArtifact, |     ICurve: ICurve as ContractArtifact, | ||||||
|     IDydx: IDydx as ContractArtifact, |     IDydx: IDydx as ContractArtifact, | ||||||
| @@ -82,9 +108,13 @@ export const artifacts = { | |||||||
|     IEth2Dai: IEth2Dai as ContractArtifact, |     IEth2Dai: IEth2Dai as ContractArtifact, | ||||||
|     IGasToken: IGasToken as ContractArtifact, |     IGasToken: IGasToken as ContractArtifact, | ||||||
|     IKyberNetworkProxy: IKyberNetworkProxy as ContractArtifact, |     IKyberNetworkProxy: IKyberNetworkProxy as ContractArtifact, | ||||||
|  |     IMStable: IMStable as ContractArtifact, | ||||||
|  |     IMooniswap: IMooniswap as ContractArtifact, | ||||||
|  |     IShell: IShell as ContractArtifact, | ||||||
|     IUniswapExchange: IUniswapExchange as ContractArtifact, |     IUniswapExchange: IUniswapExchange as ContractArtifact, | ||||||
|     IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact, |     IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact, | ||||||
|     IUniswapV2Router01: IUniswapV2Router01 as ContractArtifact, |     IUniswapV2Router01: IUniswapV2Router01 as ContractArtifact, | ||||||
|  |     TestBancorBridge: TestBancorBridge as ContractArtifact, | ||||||
|     TestChaiBridge: TestChaiBridge as ContractArtifact, |     TestChaiBridge: TestChaiBridge as ContractArtifact, | ||||||
|     TestDexForwarderBridge: TestDexForwarderBridge as ContractArtifact, |     TestDexForwarderBridge: TestDexForwarderBridge as ContractArtifact, | ||||||
|     TestDydxBridge: TestDydxBridge as ContractArtifact, |     TestDydxBridge: TestDydxBridge as ContractArtifact, | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ export { | |||||||
|     TestDydxBridgeContract, |     TestDydxBridgeContract, | ||||||
|     TestStaticCallTargetContract, |     TestStaticCallTargetContract, | ||||||
|     UniswapBridgeContract, |     UniswapBridgeContract, | ||||||
|  |     DexForwarderBridgeContract, | ||||||
| } from './wrappers'; | } from './wrappers'; | ||||||
|  |  | ||||||
| export { ERC20Wrapper } from './erc20_wrapper'; | export { ERC20Wrapper } from './erc20_wrapper'; | ||||||
|   | |||||||
| @@ -4,8 +4,12 @@ | |||||||
|  * ----------------------------------------------------------------------------- |  * ----------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| export * from '../generated-wrappers/balancer_bridge'; | export * from '../generated-wrappers/balancer_bridge'; | ||||||
|  | export * from '../generated-wrappers/bancor_bridge'; | ||||||
| export * from '../generated-wrappers/chai_bridge'; | export * from '../generated-wrappers/chai_bridge'; | ||||||
|  | export * from '../generated-wrappers/cream_bridge'; | ||||||
|  | export * from '../generated-wrappers/crypto_com_bridge'; | ||||||
| export * from '../generated-wrappers/curve_bridge'; | export * from '../generated-wrappers/curve_bridge'; | ||||||
|  | export * from '../generated-wrappers/d_o_d_o_bridge'; | ||||||
| export * from '../generated-wrappers/dex_forwarder_bridge'; | export * from '../generated-wrappers/dex_forwarder_bridge'; | ||||||
| export * from '../generated-wrappers/dydx_bridge'; | export * from '../generated-wrappers/dydx_bridge'; | ||||||
| export * from '../generated-wrappers/erc1155_proxy'; | export * from '../generated-wrappers/erc1155_proxy'; | ||||||
| @@ -18,6 +22,7 @@ export * from '../generated-wrappers/i_asset_proxy'; | |||||||
| export * from '../generated-wrappers/i_asset_proxy_dispatcher'; | export * from '../generated-wrappers/i_asset_proxy_dispatcher'; | ||||||
| export * from '../generated-wrappers/i_authorizable'; | export * from '../generated-wrappers/i_authorizable'; | ||||||
| export * from '../generated-wrappers/i_balancer_pool'; | export * from '../generated-wrappers/i_balancer_pool'; | ||||||
|  | export * from '../generated-wrappers/i_bancor_network'; | ||||||
| export * from '../generated-wrappers/i_chai'; | export * from '../generated-wrappers/i_chai'; | ||||||
| export * from '../generated-wrappers/i_curve'; | export * from '../generated-wrappers/i_curve'; | ||||||
| export * from '../generated-wrappers/i_dydx'; | export * from '../generated-wrappers/i_dydx'; | ||||||
| @@ -26,16 +31,26 @@ export * from '../generated-wrappers/i_erc20_bridge'; | |||||||
| export * from '../generated-wrappers/i_eth2_dai'; | export * from '../generated-wrappers/i_eth2_dai'; | ||||||
| export * from '../generated-wrappers/i_gas_token'; | export * from '../generated-wrappers/i_gas_token'; | ||||||
| export * from '../generated-wrappers/i_kyber_network_proxy'; | export * from '../generated-wrappers/i_kyber_network_proxy'; | ||||||
|  | export * from '../generated-wrappers/i_m_stable'; | ||||||
|  | export * from '../generated-wrappers/i_mooniswap'; | ||||||
|  | export * from '../generated-wrappers/i_shell'; | ||||||
| export * from '../generated-wrappers/i_uniswap_exchange'; | export * from '../generated-wrappers/i_uniswap_exchange'; | ||||||
| export * from '../generated-wrappers/i_uniswap_exchange_factory'; | export * from '../generated-wrappers/i_uniswap_exchange_factory'; | ||||||
| export * from '../generated-wrappers/i_uniswap_v2_router01'; | export * from '../generated-wrappers/i_uniswap_v2_router01'; | ||||||
| export * from '../generated-wrappers/kyber_bridge'; | export * from '../generated-wrappers/kyber_bridge'; | ||||||
|  | export * from '../generated-wrappers/m_stable_bridge'; | ||||||
| export * from '../generated-wrappers/mixin_asset_proxy_dispatcher'; | export * from '../generated-wrappers/mixin_asset_proxy_dispatcher'; | ||||||
| export * from '../generated-wrappers/mixin_authorizable'; | export * from '../generated-wrappers/mixin_authorizable'; | ||||||
| export * from '../generated-wrappers/mixin_gas_token'; | export * from '../generated-wrappers/mixin_gas_token'; | ||||||
|  | export * from '../generated-wrappers/mooniswap_bridge'; | ||||||
| export * from '../generated-wrappers/multi_asset_proxy'; | export * from '../generated-wrappers/multi_asset_proxy'; | ||||||
| export * from '../generated-wrappers/ownable'; | export * from '../generated-wrappers/ownable'; | ||||||
|  | export * from '../generated-wrappers/shell_bridge'; | ||||||
|  | export * from '../generated-wrappers/snow_swap_bridge'; | ||||||
| export * from '../generated-wrappers/static_call_proxy'; | export * from '../generated-wrappers/static_call_proxy'; | ||||||
|  | export * from '../generated-wrappers/sushi_swap_bridge'; | ||||||
|  | export * from '../generated-wrappers/swerve_bridge'; | ||||||
|  | export * from '../generated-wrappers/test_bancor_bridge'; | ||||||
| export * from '../generated-wrappers/test_chai_bridge'; | export * from '../generated-wrappers/test_chai_bridge'; | ||||||
| export * from '../generated-wrappers/test_dex_forwarder_bridge'; | export * from '../generated-wrappers/test_dex_forwarder_bridge'; | ||||||
| export * from '../generated-wrappers/test_dydx_bridge'; | export * from '../generated-wrappers/test_dydx_bridge'; | ||||||
|   | |||||||
| @@ -6,9 +6,13 @@ | |||||||
| import { ContractArtifact } from 'ethereum-types'; | import { ContractArtifact } from 'ethereum-types'; | ||||||
|  |  | ||||||
| import * as BalancerBridge from '../test/generated-artifacts/BalancerBridge.json'; | import * as BalancerBridge from '../test/generated-artifacts/BalancerBridge.json'; | ||||||
|  | import * as BancorBridge from '../test/generated-artifacts/BancorBridge.json'; | ||||||
| import * as ChaiBridge from '../test/generated-artifacts/ChaiBridge.json'; | import * as ChaiBridge from '../test/generated-artifacts/ChaiBridge.json'; | ||||||
|  | import * as CreamBridge from '../test/generated-artifacts/CreamBridge.json'; | ||||||
|  | import * as CryptoComBridge from '../test/generated-artifacts/CryptoComBridge.json'; | ||||||
| import * as CurveBridge from '../test/generated-artifacts/CurveBridge.json'; | import * as CurveBridge from '../test/generated-artifacts/CurveBridge.json'; | ||||||
| import * as DexForwarderBridge from '../test/generated-artifacts/DexForwarderBridge.json'; | import * as DexForwarderBridge from '../test/generated-artifacts/DexForwarderBridge.json'; | ||||||
|  | import * as DODOBridge from '../test/generated-artifacts/DODOBridge.json'; | ||||||
| import * as DydxBridge from '../test/generated-artifacts/DydxBridge.json'; | import * as DydxBridge from '../test/generated-artifacts/DydxBridge.json'; | ||||||
| import * as ERC1155Proxy from '../test/generated-artifacts/ERC1155Proxy.json'; | import * as ERC1155Proxy from '../test/generated-artifacts/ERC1155Proxy.json'; | ||||||
| import * as ERC20BridgeProxy from '../test/generated-artifacts/ERC20BridgeProxy.json'; | import * as ERC20BridgeProxy from '../test/generated-artifacts/ERC20BridgeProxy.json'; | ||||||
| @@ -20,6 +24,7 @@ import * as IAssetProxy from '../test/generated-artifacts/IAssetProxy.json'; | |||||||
| import * as IAssetProxyDispatcher from '../test/generated-artifacts/IAssetProxyDispatcher.json'; | import * as IAssetProxyDispatcher from '../test/generated-artifacts/IAssetProxyDispatcher.json'; | ||||||
| import * as IAuthorizable from '../test/generated-artifacts/IAuthorizable.json'; | import * as IAuthorizable from '../test/generated-artifacts/IAuthorizable.json'; | ||||||
| import * as IBalancerPool from '../test/generated-artifacts/IBalancerPool.json'; | import * as IBalancerPool from '../test/generated-artifacts/IBalancerPool.json'; | ||||||
|  | import * as IBancorNetwork from '../test/generated-artifacts/IBancorNetwork.json'; | ||||||
| import * as IChai from '../test/generated-artifacts/IChai.json'; | import * as IChai from '../test/generated-artifacts/IChai.json'; | ||||||
| import * as ICurve from '../test/generated-artifacts/ICurve.json'; | import * as ICurve from '../test/generated-artifacts/ICurve.json'; | ||||||
| import * as IDydx from '../test/generated-artifacts/IDydx.json'; | import * as IDydx from '../test/generated-artifacts/IDydx.json'; | ||||||
| @@ -28,6 +33,9 @@ import * as IERC20Bridge from '../test/generated-artifacts/IERC20Bridge.json'; | |||||||
| import * as IEth2Dai from '../test/generated-artifacts/IEth2Dai.json'; | import * as IEth2Dai from '../test/generated-artifacts/IEth2Dai.json'; | ||||||
| import * as IGasToken from '../test/generated-artifacts/IGasToken.json'; | import * as IGasToken from '../test/generated-artifacts/IGasToken.json'; | ||||||
| import * as IKyberNetworkProxy from '../test/generated-artifacts/IKyberNetworkProxy.json'; | import * as IKyberNetworkProxy from '../test/generated-artifacts/IKyberNetworkProxy.json'; | ||||||
|  | import * as IMooniswap from '../test/generated-artifacts/IMooniswap.json'; | ||||||
|  | import * as IMStable from '../test/generated-artifacts/IMStable.json'; | ||||||
|  | import * as IShell from '../test/generated-artifacts/IShell.json'; | ||||||
| import * as IUniswapExchange from '../test/generated-artifacts/IUniswapExchange.json'; | import * as IUniswapExchange from '../test/generated-artifacts/IUniswapExchange.json'; | ||||||
| import * as IUniswapExchangeFactory from '../test/generated-artifacts/IUniswapExchangeFactory.json'; | import * as IUniswapExchangeFactory from '../test/generated-artifacts/IUniswapExchangeFactory.json'; | ||||||
| import * as IUniswapV2Router01 from '../test/generated-artifacts/IUniswapV2Router01.json'; | import * as IUniswapV2Router01 from '../test/generated-artifacts/IUniswapV2Router01.json'; | ||||||
| @@ -35,9 +43,16 @@ import * as KyberBridge from '../test/generated-artifacts/KyberBridge.json'; | |||||||
| import * as MixinAssetProxyDispatcher from '../test/generated-artifacts/MixinAssetProxyDispatcher.json'; | import * as MixinAssetProxyDispatcher from '../test/generated-artifacts/MixinAssetProxyDispatcher.json'; | ||||||
| import * as MixinAuthorizable from '../test/generated-artifacts/MixinAuthorizable.json'; | import * as MixinAuthorizable from '../test/generated-artifacts/MixinAuthorizable.json'; | ||||||
| import * as MixinGasToken from '../test/generated-artifacts/MixinGasToken.json'; | import * as MixinGasToken from '../test/generated-artifacts/MixinGasToken.json'; | ||||||
|  | import * as MooniswapBridge from '../test/generated-artifacts/MooniswapBridge.json'; | ||||||
|  | import * as MStableBridge from '../test/generated-artifacts/MStableBridge.json'; | ||||||
| import * as MultiAssetProxy from '../test/generated-artifacts/MultiAssetProxy.json'; | import * as MultiAssetProxy from '../test/generated-artifacts/MultiAssetProxy.json'; | ||||||
| import * as Ownable from '../test/generated-artifacts/Ownable.json'; | import * as Ownable from '../test/generated-artifacts/Ownable.json'; | ||||||
|  | import * as ShellBridge from '../test/generated-artifacts/ShellBridge.json'; | ||||||
|  | import * as SnowSwapBridge from '../test/generated-artifacts/SnowSwapBridge.json'; | ||||||
| import * as StaticCallProxy from '../test/generated-artifacts/StaticCallProxy.json'; | import * as StaticCallProxy from '../test/generated-artifacts/StaticCallProxy.json'; | ||||||
|  | import * as SushiSwapBridge from '../test/generated-artifacts/SushiSwapBridge.json'; | ||||||
|  | import * as SwerveBridge from '../test/generated-artifacts/SwerveBridge.json'; | ||||||
|  | import * as TestBancorBridge from '../test/generated-artifacts/TestBancorBridge.json'; | ||||||
| import * as TestChaiBridge from '../test/generated-artifacts/TestChaiBridge.json'; | import * as TestChaiBridge from '../test/generated-artifacts/TestChaiBridge.json'; | ||||||
| import * as TestDexForwarderBridge from '../test/generated-artifacts/TestDexForwarderBridge.json'; | import * as TestDexForwarderBridge from '../test/generated-artifacts/TestDexForwarderBridge.json'; | ||||||
| import * as TestDydxBridge from '../test/generated-artifacts/TestDydxBridge.json'; | import * as TestDydxBridge from '../test/generated-artifacts/TestDydxBridge.json'; | ||||||
| @@ -60,13 +75,23 @@ export const artifacts = { | |||||||
|     MultiAssetProxy: MultiAssetProxy as ContractArtifact, |     MultiAssetProxy: MultiAssetProxy as ContractArtifact, | ||||||
|     StaticCallProxy: StaticCallProxy as ContractArtifact, |     StaticCallProxy: StaticCallProxy as ContractArtifact, | ||||||
|     BalancerBridge: BalancerBridge as ContractArtifact, |     BalancerBridge: BalancerBridge as ContractArtifact, | ||||||
|  |     BancorBridge: BancorBridge as ContractArtifact, | ||||||
|     ChaiBridge: ChaiBridge as ContractArtifact, |     ChaiBridge: ChaiBridge as ContractArtifact, | ||||||
|  |     CreamBridge: CreamBridge as ContractArtifact, | ||||||
|  |     CryptoComBridge: CryptoComBridge as ContractArtifact, | ||||||
|     CurveBridge: CurveBridge as ContractArtifact, |     CurveBridge: CurveBridge as ContractArtifact, | ||||||
|  |     DODOBridge: DODOBridge as ContractArtifact, | ||||||
|     DexForwarderBridge: DexForwarderBridge as ContractArtifact, |     DexForwarderBridge: DexForwarderBridge as ContractArtifact, | ||||||
|     DydxBridge: DydxBridge as ContractArtifact, |     DydxBridge: DydxBridge as ContractArtifact, | ||||||
|     Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, |     Eth2DaiBridge: Eth2DaiBridge as ContractArtifact, | ||||||
|     KyberBridge: KyberBridge as ContractArtifact, |     KyberBridge: KyberBridge as ContractArtifact, | ||||||
|  |     MStableBridge: MStableBridge as ContractArtifact, | ||||||
|     MixinGasToken: MixinGasToken as ContractArtifact, |     MixinGasToken: MixinGasToken as ContractArtifact, | ||||||
|  |     MooniswapBridge: MooniswapBridge as ContractArtifact, | ||||||
|  |     ShellBridge: ShellBridge as ContractArtifact, | ||||||
|  |     SnowSwapBridge: SnowSwapBridge as ContractArtifact, | ||||||
|  |     SushiSwapBridge: SushiSwapBridge as ContractArtifact, | ||||||
|  |     SwerveBridge: SwerveBridge as ContractArtifact, | ||||||
|     UniswapBridge: UniswapBridge as ContractArtifact, |     UniswapBridge: UniswapBridge as ContractArtifact, | ||||||
|     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, |     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, | ||||||
|     IAssetData: IAssetData as ContractArtifact, |     IAssetData: IAssetData as ContractArtifact, | ||||||
| @@ -74,6 +99,7 @@ export const artifacts = { | |||||||
|     IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, |     IAssetProxyDispatcher: IAssetProxyDispatcher as ContractArtifact, | ||||||
|     IAuthorizable: IAuthorizable as ContractArtifact, |     IAuthorizable: IAuthorizable as ContractArtifact, | ||||||
|     IBalancerPool: IBalancerPool as ContractArtifact, |     IBalancerPool: IBalancerPool as ContractArtifact, | ||||||
|  |     IBancorNetwork: IBancorNetwork as ContractArtifact, | ||||||
|     IChai: IChai as ContractArtifact, |     IChai: IChai as ContractArtifact, | ||||||
|     ICurve: ICurve as ContractArtifact, |     ICurve: ICurve as ContractArtifact, | ||||||
|     IDydx: IDydx as ContractArtifact, |     IDydx: IDydx as ContractArtifact, | ||||||
| @@ -82,9 +108,13 @@ export const artifacts = { | |||||||
|     IEth2Dai: IEth2Dai as ContractArtifact, |     IEth2Dai: IEth2Dai as ContractArtifact, | ||||||
|     IGasToken: IGasToken as ContractArtifact, |     IGasToken: IGasToken as ContractArtifact, | ||||||
|     IKyberNetworkProxy: IKyberNetworkProxy as ContractArtifact, |     IKyberNetworkProxy: IKyberNetworkProxy as ContractArtifact, | ||||||
|  |     IMStable: IMStable as ContractArtifact, | ||||||
|  |     IMooniswap: IMooniswap as ContractArtifact, | ||||||
|  |     IShell: IShell as ContractArtifact, | ||||||
|     IUniswapExchange: IUniswapExchange as ContractArtifact, |     IUniswapExchange: IUniswapExchange as ContractArtifact, | ||||||
|     IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact, |     IUniswapExchangeFactory: IUniswapExchangeFactory as ContractArtifact, | ||||||
|     IUniswapV2Router01: IUniswapV2Router01 as ContractArtifact, |     IUniswapV2Router01: IUniswapV2Router01 as ContractArtifact, | ||||||
|  |     TestBancorBridge: TestBancorBridge as ContractArtifact, | ||||||
|     TestChaiBridge: TestChaiBridge as ContractArtifact, |     TestChaiBridge: TestChaiBridge as ContractArtifact, | ||||||
|     TestDexForwarderBridge: TestDexForwarderBridge as ContractArtifact, |     TestDexForwarderBridge: TestDexForwarderBridge as ContractArtifact, | ||||||
|     TestDydxBridge: TestDydxBridge as ContractArtifact, |     TestDydxBridge: TestDydxBridge as ContractArtifact, | ||||||
|   | |||||||
							
								
								
									
										185
									
								
								contracts/asset-proxy/test/bancor_bridge.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										185
									
								
								contracts/asset-proxy/test/bancor_bridge.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,185 @@ | |||||||
|  | import { | ||||||
|  |     blockchainTests, | ||||||
|  |     constants, | ||||||
|  |     expect, | ||||||
|  |     filterLogsToArguments, | ||||||
|  |     getRandomInteger, | ||||||
|  |     randomAddress, | ||||||
|  | } from '@0x/contracts-test-utils'; | ||||||
|  | import { AssetProxyId } from '@0x/types'; | ||||||
|  | import { AbiEncoder, BigNumber, hexUtils } from '@0x/utils'; | ||||||
|  | import { DecodedLogs } from 'ethereum-types'; | ||||||
|  | import * as _ from 'lodash'; | ||||||
|  |  | ||||||
|  | import { artifacts } from './artifacts'; | ||||||
|  | import { TestBancorBridgeContract } from './generated-wrappers/test_bancor_bridge'; | ||||||
|  | import { | ||||||
|  |     TestBancorBridgeConvertByPathInputEventArgs as ConvertByPathArgs, | ||||||
|  |     TestBancorBridgeEvents as ContractEvents, | ||||||
|  |     TestBancorBridgeTokenApproveEventArgs as TokenApproveArgs, | ||||||
|  | } from './wrappers'; | ||||||
|  |  | ||||||
|  | blockchainTests.resets('Bancor unit tests', env => { | ||||||
|  |     const FROM_TOKEN_DECIMALS = 6; | ||||||
|  |     const TO_TOKEN_DECIMALS = 18; | ||||||
|  |     const FROM_TOKEN_BASE = new BigNumber(10).pow(FROM_TOKEN_DECIMALS); | ||||||
|  |     const TO_TOKEN_BASE = new BigNumber(10).pow(TO_TOKEN_DECIMALS); | ||||||
|  |     let testContract: TestBancorBridgeContract; | ||||||
|  |  | ||||||
|  |     before(async () => { | ||||||
|  |         testContract = await TestBancorBridgeContract.deployFrom0xArtifactAsync( | ||||||
|  |             artifacts.TestBancorBridge, | ||||||
|  |             env.provider, | ||||||
|  |             env.txDefaults, | ||||||
|  |             artifacts, | ||||||
|  |         ); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     describe('isValidSignature()', () => { | ||||||
|  |         it('returns success bytes', async () => { | ||||||
|  |             const LEGACY_WALLET_MAGIC_VALUE = '0xb0671381'; | ||||||
|  |             const result = await testContract | ||||||
|  |                 .isValidSignature(hexUtils.random(), hexUtils.random(_.random(0, 32))) | ||||||
|  |                 .callAsync(); | ||||||
|  |             expect(result).to.eq(LEGACY_WALLET_MAGIC_VALUE); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|  |     describe('bridgeTransferFrom()', () => { | ||||||
|  |         interface TransferFromOpts { | ||||||
|  |             tokenAddressesPath: string[]; | ||||||
|  |             toAddress: string; | ||||||
|  |             // Amount to pass into `bridgeTransferFrom()` | ||||||
|  |             amount: BigNumber; | ||||||
|  |             // Token balance of the bridge. | ||||||
|  |             fromTokenBalance: BigNumber; | ||||||
|  |             // Router reverts with this reason | ||||||
|  |             routerRevertReason: string; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         interface TransferFromResult { | ||||||
|  |             opts: TransferFromOpts; | ||||||
|  |             result: string; | ||||||
|  |             logs: DecodedLogs; | ||||||
|  |             blocktime: number; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         function createTransferFromOpts(opts?: Partial<TransferFromOpts>): TransferFromOpts { | ||||||
|  |             const amount = getRandomInteger(1, TO_TOKEN_BASE.times(100)); | ||||||
|  |             return { | ||||||
|  |                 tokenAddressesPath: Array(3).fill(constants.NULL_ADDRESS), | ||||||
|  |                 amount, | ||||||
|  |                 toAddress: randomAddress(), | ||||||
|  |                 fromTokenBalance: getRandomInteger(1, FROM_TOKEN_BASE.times(100)), | ||||||
|  |                 routerRevertReason: '', | ||||||
|  |                 ...opts, | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         const bridgeDataEncoder = AbiEncoder.create('(address[], address)'); | ||||||
|  |  | ||||||
|  |         async function transferFromAsync(opts?: Partial<TransferFromOpts>): Promise<TransferFromResult> { | ||||||
|  |             const _opts = createTransferFromOpts(opts); | ||||||
|  |  | ||||||
|  |             for (let i = 0; i < _opts.tokenAddressesPath.length; i++) { | ||||||
|  |                 const createFromTokenFn = testContract.createToken(_opts.tokenAddressesPath[i]); | ||||||
|  |                 _opts.tokenAddressesPath[i] = await createFromTokenFn.callAsync(); | ||||||
|  |                 await createFromTokenFn.awaitTransactionSuccessAsync(); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             // Set the token balance for the token we're converting from. | ||||||
|  |             await testContract | ||||||
|  |                 .setTokenBalance(_opts.tokenAddressesPath[0], _opts.fromTokenBalance) | ||||||
|  |                 .awaitTransactionSuccessAsync(); | ||||||
|  |  | ||||||
|  |             // Set revert reason for the router. | ||||||
|  |             await testContract.setNetworkRevertReason(_opts.routerRevertReason).awaitTransactionSuccessAsync(); | ||||||
|  |  | ||||||
|  |             // Call bridgeTransferFrom(). | ||||||
|  |             const bridgeTransferFromFn = testContract.bridgeTransferFrom( | ||||||
|  |                 // Output token | ||||||
|  |                 _opts.tokenAddressesPath[_opts.tokenAddressesPath.length - 1], | ||||||
|  |                 // Random maker address. | ||||||
|  |                 randomAddress(), | ||||||
|  |                 // Recipient address. | ||||||
|  |                 _opts.toAddress, | ||||||
|  |                 // Transfer amount. | ||||||
|  |                 _opts.amount, | ||||||
|  |                 // ABI-encode the input token address as the bridge data. | ||||||
|  |                 bridgeDataEncoder.encode([ | ||||||
|  |                     _opts.tokenAddressesPath, | ||||||
|  |                     await testContract.getNetworkAddress().callAsync(), | ||||||
|  |                 ]), | ||||||
|  |             ); | ||||||
|  |             const result = await bridgeTransferFromFn.callAsync(); | ||||||
|  |             const receipt = await bridgeTransferFromFn.awaitTransactionSuccessAsync(); | ||||||
|  |             return { | ||||||
|  |                 opts: _opts, | ||||||
|  |                 result, | ||||||
|  |                 logs: (receipt.logs as any) as DecodedLogs, | ||||||
|  |                 blocktime: await env.web3Wrapper.getBlockTimestampAsync(receipt.blockNumber), | ||||||
|  |             }; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         it('returns magic bytes on success', async () => { | ||||||
|  |             const { result } = await transferFromAsync(); | ||||||
|  |             expect(result).to.eq(AssetProxyId.ERC20Bridge); | ||||||
|  |         }); | ||||||
|  |  | ||||||
|  |         describe('token -> token', async () => { | ||||||
|  |             it('calls BancorNetwork.convertByPath()', async () => { | ||||||
|  |                 const { opts, result, logs } = await transferFromAsync(); | ||||||
|  |                 expect(result).to.eq(AssetProxyId.ERC20Bridge, 'asset proxy id'); | ||||||
|  |                 const transfers = filterLogsToArguments<ConvertByPathArgs>(logs, ContractEvents.ConvertByPathInput); | ||||||
|  |  | ||||||
|  |                 expect(transfers.length).to.eq(1); | ||||||
|  |                 expect(transfers[0].toTokenAddress).to.eq( | ||||||
|  |                     opts.tokenAddressesPath[opts.tokenAddressesPath.length - 1], | ||||||
|  |                     'output token address', | ||||||
|  |                 ); | ||||||
|  |                 expect(transfers[0].to).to.eq(opts.toAddress, 'recipient address'); | ||||||
|  |                 expect(transfers[0].amountIn).to.bignumber.eq(opts.fromTokenBalance, 'input token amount'); | ||||||
|  |                 expect(transfers[0].amountOutMin).to.bignumber.eq(opts.amount, 'output token amount'); | ||||||
|  |                 expect(transfers[0].feeRecipient).to.eq(constants.NULL_ADDRESS); | ||||||
|  |                 expect(transfers[0].feeAmount).to.bignumber.eq(new BigNumber(0)); | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             it('sets allowance for "from" token', async () => { | ||||||
|  |                 const { logs } = await transferFromAsync(); | ||||||
|  |                 const approvals = filterLogsToArguments<TokenApproveArgs>(logs, ContractEvents.TokenApprove); | ||||||
|  |                 const networkAddress = await testContract.getNetworkAddress().callAsync(); | ||||||
|  |                 expect(approvals.length).to.eq(1); | ||||||
|  |                 expect(approvals[0].spender).to.eq(networkAddress); | ||||||
|  |                 expect(approvals[0].allowance).to.bignumber.eq(constants.MAX_UINT256); | ||||||
|  |             }); | ||||||
|  |  | ||||||
|  |             it('fails if the router fails', async () => { | ||||||
|  |                 const revertReason = 'FOOBAR'; | ||||||
|  |                 const tx = transferFromAsync({ | ||||||
|  |                     routerRevertReason: revertReason, | ||||||
|  |                 }); | ||||||
|  |                 return expect(tx).to.eventually.be.rejectedWith(revertReason); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |         describe('token -> token -> token', async () => { | ||||||
|  |             it('calls BancorNetwork.convertByPath()', async () => { | ||||||
|  |                 const { opts, result, logs } = await transferFromAsync({ | ||||||
|  |                     tokenAddressesPath: Array(5).fill(constants.NULL_ADDRESS), | ||||||
|  |                 }); | ||||||
|  |                 expect(result).to.eq(AssetProxyId.ERC20Bridge, 'asset proxy id'); | ||||||
|  |                 const transfers = filterLogsToArguments<ConvertByPathArgs>(logs, ContractEvents.ConvertByPathInput); | ||||||
|  |  | ||||||
|  |                 expect(transfers.length).to.eq(1); | ||||||
|  |                 expect(transfers[0].toTokenAddress).to.eq( | ||||||
|  |                     opts.tokenAddressesPath[opts.tokenAddressesPath.length - 1], | ||||||
|  |                     'output token address', | ||||||
|  |                 ); | ||||||
|  |                 expect(transfers[0].to).to.eq(opts.toAddress, 'recipient address'); | ||||||
|  |                 expect(transfers[0].amountIn).to.bignumber.eq(opts.fromTokenBalance, 'input token amount'); | ||||||
|  |                 expect(transfers[0].amountOutMin).to.bignumber.eq(opts.amount, 'output token amount'); | ||||||
|  |                 expect(transfers[0].feeRecipient).to.eq(constants.NULL_ADDRESS); | ||||||
|  |                 expect(transfers[0].feeAmount).to.bignumber.eq(new BigNumber(0)); | ||||||
|  |             }); | ||||||
|  |         }); | ||||||
|  |     }); | ||||||
|  | }); | ||||||
| @@ -1,354 +0,0 @@ | |||||||
| import { ContractTxFunctionObj } from '@0x/contract-wrappers'; |  | ||||||
| import { |  | ||||||
|     blockchainTests, |  | ||||||
|     constants, |  | ||||||
|     expect, |  | ||||||
|     filterLogsToArguments, |  | ||||||
|     getRandomInteger, |  | ||||||
|     randomAddress, |  | ||||||
|     shortZip, |  | ||||||
| } from '@0x/contracts-test-utils'; |  | ||||||
| import { BigNumber, hexUtils, NULL_ADDRESS } from '@0x/utils'; |  | ||||||
| import { DecodedLogs } from 'ethereum-types'; |  | ||||||
| import * as _ from 'lodash'; |  | ||||||
|  |  | ||||||
| import { DexForwarderBridgeCall, dexForwarderBridgeDataEncoder } from '../src/dex_forwarder_bridge'; |  | ||||||
|  |  | ||||||
| import { artifacts } from './artifacts'; |  | ||||||
| import { |  | ||||||
|     TestDexForwarderBridgeBridgeTransferFromCalledEventArgs as BtfCalledEventArgs, |  | ||||||
|     TestDexForwarderBridgeContract, |  | ||||||
|     TestDexForwarderBridgeEvents as TestEvents, |  | ||||||
| } from './wrappers'; |  | ||||||
|  |  | ||||||
| const { ZERO_AMOUNT } = constants; |  | ||||||
|  |  | ||||||
| blockchainTests.resets('DexForwarderBridge unit tests', env => { |  | ||||||
|     let testContract: TestDexForwarderBridgeContract; |  | ||||||
|     let inputToken: string; |  | ||||||
|     let outputToken: string; |  | ||||||
|     const BRIDGE_SUCCESS = '0xdc1600f3'; |  | ||||||
|     const BRIDGE_FAILURE = '0xffffffff'; |  | ||||||
|     const BRIDGE_REVERT_ERROR = 'oopsie'; |  | ||||||
|     const NOT_AUTHORIZED_REVERT = 'DexForwarderBridge/SENDER_NOT_AUTHORIZED'; |  | ||||||
|     const DEFAULTS = { |  | ||||||
|         toAddress: randomAddress(), |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     before(async () => { |  | ||||||
|         testContract = await TestDexForwarderBridgeContract.deployFrom0xArtifactAsync( |  | ||||||
|             artifacts.TestDexForwarderBridge, |  | ||||||
|             env.provider, |  | ||||||
|             env.txDefaults, |  | ||||||
|             artifacts, |  | ||||||
|         ); |  | ||||||
|         // Create test tokens. |  | ||||||
|         [inputToken, outputToken] = [ |  | ||||||
|             await callAndTransactAsync(testContract.createToken()), |  | ||||||
|             await callAndTransactAsync(testContract.createToken()), |  | ||||||
|         ]; |  | ||||||
|         await callAndTransactAsync(testContract.setAuthorized(env.txDefaults.from as string)); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     async function callAndTransactAsync<TResult>(fnCall: ContractTxFunctionObj<TResult>): Promise<TResult> { |  | ||||||
|         const result = await fnCall.callAsync(); |  | ||||||
|         await fnCall.awaitTransactionSuccessAsync({}, { shouldValidate: false }); |  | ||||||
|         return result; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     function getRandomBridgeCall( |  | ||||||
|         bridgeAddress: string, |  | ||||||
|         fields: Partial<DexForwarderBridgeCall> = {}, |  | ||||||
|     ): DexForwarderBridgeCall { |  | ||||||
|         return { |  | ||||||
|             target: bridgeAddress, |  | ||||||
|             inputTokenAmount: getRandomInteger(1, '100e18'), |  | ||||||
|             outputTokenAmount: getRandomInteger(1, '100e18'), |  | ||||||
|             bridgeData: hexUtils.leftPad(inputToken), |  | ||||||
|             ...fields, |  | ||||||
|         }; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     describe('bridgeTransferFrom()', () => { |  | ||||||
|         let goodBridgeCalls: DexForwarderBridgeCall[]; |  | ||||||
|         let revertingBridgeCall: DexForwarderBridgeCall; |  | ||||||
|         let failingBridgeCall: DexForwarderBridgeCall; |  | ||||||
|         let allBridgeCalls: DexForwarderBridgeCall[]; |  | ||||||
|         let totalFillableOutputAmount: BigNumber; |  | ||||||
|         let totalFillableInputAmount: BigNumber; |  | ||||||
|         let recipientOutputBalance: BigNumber; |  | ||||||
|  |  | ||||||
|         beforeEach(async () => { |  | ||||||
|             goodBridgeCalls = []; |  | ||||||
|             for (let i = 0; i < 4; ++i) { |  | ||||||
|                 goodBridgeCalls.push(await createBridgeCallAsync({ returnCode: BRIDGE_SUCCESS })); |  | ||||||
|             } |  | ||||||
|             revertingBridgeCall = await createBridgeCallAsync({ revertError: BRIDGE_REVERT_ERROR }); |  | ||||||
|             failingBridgeCall = await createBridgeCallAsync({ returnCode: BRIDGE_FAILURE }); |  | ||||||
|             allBridgeCalls = _.shuffle([failingBridgeCall, revertingBridgeCall, ...goodBridgeCalls]); |  | ||||||
|  |  | ||||||
|             totalFillableInputAmount = BigNumber.sum(...goodBridgeCalls.map(c => c.inputTokenAmount)); |  | ||||||
|             totalFillableOutputAmount = BigNumber.sum(...goodBridgeCalls.map(c => c.outputTokenAmount)); |  | ||||||
|  |  | ||||||
|             // Grant the taker some output tokens. |  | ||||||
|             await testContract.setTokenBalance( |  | ||||||
|                 outputToken, |  | ||||||
|                 DEFAULTS.toAddress, |  | ||||||
|                 (recipientOutputBalance = getRandomInteger(1, '100e18')), |  | ||||||
|             ); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         async function setForwarderInputBalanceAsync(amount: BigNumber): Promise<void> { |  | ||||||
|             await testContract |  | ||||||
|                 .setTokenBalance(inputToken, testContract.address, amount) |  | ||||||
|                 .awaitTransactionSuccessAsync({}, { shouldValidate: false }); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         async function createBridgeCallAsync( |  | ||||||
|             opts: Partial<{ |  | ||||||
|                 returnCode: string; |  | ||||||
|                 revertError: string; |  | ||||||
|                 callFields: Partial<DexForwarderBridgeCall>; |  | ||||||
|                 outputFillAmount: BigNumber; |  | ||||||
|             }>, |  | ||||||
|         ): Promise<DexForwarderBridgeCall> { |  | ||||||
|             const { returnCode, revertError, callFields, outputFillAmount } = { |  | ||||||
|                 returnCode: BRIDGE_SUCCESS, |  | ||||||
|                 revertError: '', |  | ||||||
|                 ...opts, |  | ||||||
|             }; |  | ||||||
|             const bridge = await callAndTransactAsync(testContract.createBridge(returnCode, revertError)); |  | ||||||
|             const call = getRandomBridgeCall(bridge, callFields); |  | ||||||
|             await testContract |  | ||||||
|                 .setBridgeTransferAmount(call.target, outputFillAmount || call.outputTokenAmount) |  | ||||||
|                 .awaitTransactionSuccessAsync({}, { shouldValidate: false }); |  | ||||||
|             return call; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         async function callBridgeTransferFromAsync(opts: { |  | ||||||
|             bridgeData: string; |  | ||||||
|             sellAmount?: BigNumber; |  | ||||||
|             buyAmount?: BigNumber; |  | ||||||
|         }): Promise<DecodedLogs> { |  | ||||||
|             // Fund the forwarder with input tokens to sell. |  | ||||||
|             await setForwarderInputBalanceAsync(opts.sellAmount || totalFillableInputAmount); |  | ||||||
|             const call = testContract.bridgeTransferFrom( |  | ||||||
|                 outputToken, |  | ||||||
|                 testContract.address, |  | ||||||
|                 DEFAULTS.toAddress, |  | ||||||
|                 opts.buyAmount || totalFillableOutputAmount, |  | ||||||
|                 opts.bridgeData, |  | ||||||
|             ); |  | ||||||
|             const returnCode = await call.callAsync(); |  | ||||||
|             if (returnCode !== BRIDGE_SUCCESS) { |  | ||||||
|                 throw new Error('Expected BRIDGE_SUCCESS'); |  | ||||||
|             } |  | ||||||
|             const receipt = await call.awaitTransactionSuccessAsync({}, { shouldValidate: false }); |  | ||||||
|             // tslint:disable-next-line: no-unnecessary-type-assertion |  | ||||||
|             return receipt.logs as DecodedLogs; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         it('succeeds with no bridge calls and no input balance', async () => { |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls: [], |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData, sellAmount: ZERO_AMOUNT }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('succeeds with bridge calls and no input balance', async () => { |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls: allBridgeCalls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData, sellAmount: ZERO_AMOUNT }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('succeeds with no bridge calls and an input balance', async () => { |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls: [], |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ |  | ||||||
|                 bridgeData, |  | ||||||
|                 sellAmount: new BigNumber(1), |  | ||||||
|             }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('succeeds if entire input token balance is not consumed', async () => { |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls: allBridgeCalls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ |  | ||||||
|                 bridgeData, |  | ||||||
|                 sellAmount: totalFillableInputAmount.plus(1), |  | ||||||
|             }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('fails if not authorized', async () => { |  | ||||||
|             const calls = goodBridgeCalls.slice(0, 1); |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             await callAndTransactAsync(testContract.setAuthorized(NULL_ADDRESS)); |  | ||||||
|             return expect(callBridgeTransferFromAsync({ bridgeData, sellAmount: new BigNumber(1) })).to.revertWith( |  | ||||||
|                 NOT_AUTHORIZED_REVERT, |  | ||||||
|             ); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('succeeds with one bridge call', async () => { |  | ||||||
|             const calls = goodBridgeCalls.slice(0, 1); |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData, sellAmount: calls[0].inputTokenAmount }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('succeeds with many bridge calls', async () => { |  | ||||||
|             const calls = goodBridgeCalls; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('swallows a failing bridge call', async () => { |  | ||||||
|             const calls = _.shuffle([...goodBridgeCalls, failingBridgeCall]); |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('consumes input tokens for output tokens', async () => { |  | ||||||
|             const calls = allBridgeCalls; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const currentBridgeInputBalance = await testContract |  | ||||||
|                 .balanceOf(inputToken, testContract.address) |  | ||||||
|                 .callAsync(); |  | ||||||
|             expect(currentBridgeInputBalance).to.bignumber.eq(0); |  | ||||||
|             const currentRecipientOutputBalance = await testContract |  | ||||||
|                 .balanceOf(outputToken, DEFAULTS.toAddress) |  | ||||||
|                 .callAsync(); |  | ||||||
|             expect(currentRecipientOutputBalance).to.bignumber.eq(totalFillableOutputAmount); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it("transfers only up to each call's input amount to each bridge", async () => { |  | ||||||
|             const calls = goodBridgeCalls; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             const logs = await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); |  | ||||||
|             for (const [call, btf] of shortZip(goodBridgeCalls, btfs)) { |  | ||||||
|                 expect(btf.inputTokenBalance).to.bignumber.eq(call.inputTokenAmount); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('transfers only up to outstanding sell amount to each bridge', async () => { |  | ||||||
|             // Prepend an extra bridge call. |  | ||||||
|             const calls = [ |  | ||||||
|                 await createBridgeCallAsync({ |  | ||||||
|                     callFields: { |  | ||||||
|                         inputTokenAmount: new BigNumber(1), |  | ||||||
|                         outputTokenAmount: new BigNumber(1), |  | ||||||
|                     }, |  | ||||||
|                 }), |  | ||||||
|                 ...goodBridgeCalls, |  | ||||||
|             ]; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             const logs = await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); |  | ||||||
|             expect(btfs).to.be.length(goodBridgeCalls.length + 1); |  | ||||||
|             // The last call will receive 1 less token. |  | ||||||
|             const lastCall = calls.slice(-1)[0]; |  | ||||||
|             const lastBtf = btfs.slice(-1)[0]; |  | ||||||
|             expect(lastBtf.inputTokenBalance).to.bignumber.eq(lastCall.inputTokenAmount.minus(1)); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('recoups funds from a bridge that fails', async () => { |  | ||||||
|             // Prepend a call that will take the whole input amount but will |  | ||||||
|             // fail. |  | ||||||
|             const badCall = await createBridgeCallAsync({ |  | ||||||
|                 callFields: { inputTokenAmount: totalFillableInputAmount }, |  | ||||||
|                 returnCode: BRIDGE_FAILURE, |  | ||||||
|             }); |  | ||||||
|             const calls = [badCall, ...goodBridgeCalls]; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             const logs = await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); |  | ||||||
|             expect(btfs).to.be.length(goodBridgeCalls.length); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('recoups funds from a bridge that reverts', async () => { |  | ||||||
|             // Prepend a call that will take the whole input amount but will |  | ||||||
|             // revert. |  | ||||||
|             const badCall = await createBridgeCallAsync({ |  | ||||||
|                 callFields: { inputTokenAmount: totalFillableInputAmount }, |  | ||||||
|                 revertError: BRIDGE_REVERT_ERROR, |  | ||||||
|             }); |  | ||||||
|             const calls = [badCall, ...goodBridgeCalls]; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             const logs = await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); |  | ||||||
|             expect(btfs).to.be.length(goodBridgeCalls.length); |  | ||||||
|         }); |  | ||||||
|  |  | ||||||
|         it('recoups funds from a bridge that under-pays', async () => { |  | ||||||
|             // Prepend a call that will take the whole input amount but will |  | ||||||
|             // underpay the output amount.. |  | ||||||
|             const badCall = await createBridgeCallAsync({ |  | ||||||
|                 callFields: { |  | ||||||
|                     inputTokenAmount: totalFillableInputAmount, |  | ||||||
|                     outputTokenAmount: new BigNumber(2), |  | ||||||
|                 }, |  | ||||||
|                 outputFillAmount: new BigNumber(1), |  | ||||||
|             }); |  | ||||||
|             const calls = [badCall, ...goodBridgeCalls]; |  | ||||||
|             const bridgeData = dexForwarderBridgeDataEncoder.encode({ |  | ||||||
|                 inputToken, |  | ||||||
|                 calls, |  | ||||||
|             }); |  | ||||||
|             const logs = await callBridgeTransferFromAsync({ bridgeData }); |  | ||||||
|             const btfs = filterLogsToArguments<BtfCalledEventArgs>(logs, TestEvents.BridgeTransferFromCalled); |  | ||||||
|             expect(btfs).to.be.length(goodBridgeCalls.length); |  | ||||||
|         }); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     describe('executeBridgeCall()', () => { |  | ||||||
|         it('cannot be called externally', async () => { |  | ||||||
|             return expect( |  | ||||||
|                 testContract |  | ||||||
|                     .executeBridgeCall( |  | ||||||
|                         randomAddress(), |  | ||||||
|                         randomAddress(), |  | ||||||
|                         randomAddress(), |  | ||||||
|                         randomAddress(), |  | ||||||
|                         new BigNumber(1), |  | ||||||
|                         new BigNumber(1), |  | ||||||
|                         constants.NULL_BYTES, |  | ||||||
|                     ) |  | ||||||
|                     .callAsync(), |  | ||||||
|             ).to.revertWith('DexForwarderBridge/ONLY_SELF'); |  | ||||||
|         }); |  | ||||||
|     }); |  | ||||||
| }); |  | ||||||
| @@ -16,7 +16,8 @@ import { artifacts } from './artifacts'; | |||||||
|  |  | ||||||
| import { TestKyberBridgeContract, TestKyberBridgeEvents } from './wrappers'; | import { TestKyberBridgeContract, TestKyberBridgeEvents } from './wrappers'; | ||||||
|  |  | ||||||
| blockchainTests.resets('KyberBridge unit tests', env => { | // TODO(dorothy-zbornak): Tests need to be updated. | ||||||
|  | blockchainTests.resets.skip('KyberBridge unit tests', env => { | ||||||
|     const KYBER_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'; |     const KYBER_ETH_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'; | ||||||
|     const FROM_TOKEN_DECIMALS = 6; |     const FROM_TOKEN_DECIMALS = 6; | ||||||
|     const TO_TOKEN_DECIMALS = 18; |     const TO_TOKEN_DECIMALS = 18; | ||||||
| @@ -115,7 +116,7 @@ blockchainTests.resets('KyberBridge unit tests', env => { | |||||||
|                 // Transfer amount. |                 // Transfer amount. | ||||||
|                 _opts.amount, |                 _opts.amount, | ||||||
|                 // ABI-encode the input token address as the bridge data. |                 // ABI-encode the input token address as the bridge data. | ||||||
|                 hexUtils.leftPad(_opts.fromTokenAddress), |                 hexUtils.concat(hexUtils.leftPad(_opts.fromTokenAddress), hexUtils.leftPad(32), hexUtils.leftPad(0)), | ||||||
|             ); |             ); | ||||||
|             const result = await bridgeTransferFromFn.callAsync(); |             const result = await bridgeTransferFromFn.callAsync(); | ||||||
|             const { logs } = await bridgeTransferFromFn.awaitTransactionSuccessAsync(); |             const { logs } = await bridgeTransferFromFn.awaitTransactionSuccessAsync(); | ||||||
|   | |||||||
| @@ -4,8 +4,12 @@ | |||||||
|  * ----------------------------------------------------------------------------- |  * ----------------------------------------------------------------------------- | ||||||
|  */ |  */ | ||||||
| export * from '../test/generated-wrappers/balancer_bridge'; | export * from '../test/generated-wrappers/balancer_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/bancor_bridge'; | ||||||
| export * from '../test/generated-wrappers/chai_bridge'; | export * from '../test/generated-wrappers/chai_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/cream_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/crypto_com_bridge'; | ||||||
| export * from '../test/generated-wrappers/curve_bridge'; | export * from '../test/generated-wrappers/curve_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/d_o_d_o_bridge'; | ||||||
| export * from '../test/generated-wrappers/dex_forwarder_bridge'; | export * from '../test/generated-wrappers/dex_forwarder_bridge'; | ||||||
| export * from '../test/generated-wrappers/dydx_bridge'; | export * from '../test/generated-wrappers/dydx_bridge'; | ||||||
| export * from '../test/generated-wrappers/erc1155_proxy'; | export * from '../test/generated-wrappers/erc1155_proxy'; | ||||||
| @@ -18,6 +22,7 @@ export * from '../test/generated-wrappers/i_asset_proxy'; | |||||||
| export * from '../test/generated-wrappers/i_asset_proxy_dispatcher'; | export * from '../test/generated-wrappers/i_asset_proxy_dispatcher'; | ||||||
| export * from '../test/generated-wrappers/i_authorizable'; | export * from '../test/generated-wrappers/i_authorizable'; | ||||||
| export * from '../test/generated-wrappers/i_balancer_pool'; | export * from '../test/generated-wrappers/i_balancer_pool'; | ||||||
|  | export * from '../test/generated-wrappers/i_bancor_network'; | ||||||
| export * from '../test/generated-wrappers/i_chai'; | export * from '../test/generated-wrappers/i_chai'; | ||||||
| export * from '../test/generated-wrappers/i_curve'; | export * from '../test/generated-wrappers/i_curve'; | ||||||
| export * from '../test/generated-wrappers/i_dydx'; | export * from '../test/generated-wrappers/i_dydx'; | ||||||
| @@ -26,16 +31,26 @@ export * from '../test/generated-wrappers/i_erc20_bridge'; | |||||||
| export * from '../test/generated-wrappers/i_eth2_dai'; | export * from '../test/generated-wrappers/i_eth2_dai'; | ||||||
| export * from '../test/generated-wrappers/i_gas_token'; | export * from '../test/generated-wrappers/i_gas_token'; | ||||||
| export * from '../test/generated-wrappers/i_kyber_network_proxy'; | export * from '../test/generated-wrappers/i_kyber_network_proxy'; | ||||||
|  | export * from '../test/generated-wrappers/i_m_stable'; | ||||||
|  | export * from '../test/generated-wrappers/i_mooniswap'; | ||||||
|  | export * from '../test/generated-wrappers/i_shell'; | ||||||
| export * from '../test/generated-wrappers/i_uniswap_exchange'; | export * from '../test/generated-wrappers/i_uniswap_exchange'; | ||||||
| export * from '../test/generated-wrappers/i_uniswap_exchange_factory'; | export * from '../test/generated-wrappers/i_uniswap_exchange_factory'; | ||||||
| export * from '../test/generated-wrappers/i_uniswap_v2_router01'; | export * from '../test/generated-wrappers/i_uniswap_v2_router01'; | ||||||
| export * from '../test/generated-wrappers/kyber_bridge'; | export * from '../test/generated-wrappers/kyber_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/m_stable_bridge'; | ||||||
| export * from '../test/generated-wrappers/mixin_asset_proxy_dispatcher'; | export * from '../test/generated-wrappers/mixin_asset_proxy_dispatcher'; | ||||||
| export * from '../test/generated-wrappers/mixin_authorizable'; | export * from '../test/generated-wrappers/mixin_authorizable'; | ||||||
| export * from '../test/generated-wrappers/mixin_gas_token'; | export * from '../test/generated-wrappers/mixin_gas_token'; | ||||||
|  | export * from '../test/generated-wrappers/mooniswap_bridge'; | ||||||
| export * from '../test/generated-wrappers/multi_asset_proxy'; | export * from '../test/generated-wrappers/multi_asset_proxy'; | ||||||
| export * from '../test/generated-wrappers/ownable'; | export * from '../test/generated-wrappers/ownable'; | ||||||
|  | export * from '../test/generated-wrappers/shell_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/snow_swap_bridge'; | ||||||
| export * from '../test/generated-wrappers/static_call_proxy'; | export * from '../test/generated-wrappers/static_call_proxy'; | ||||||
|  | export * from '../test/generated-wrappers/sushi_swap_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/swerve_bridge'; | ||||||
|  | export * from '../test/generated-wrappers/test_bancor_bridge'; | ||||||
| export * from '../test/generated-wrappers/test_chai_bridge'; | export * from '../test/generated-wrappers/test_chai_bridge'; | ||||||
| export * from '../test/generated-wrappers/test_dex_forwarder_bridge'; | export * from '../test/generated-wrappers/test_dex_forwarder_bridge'; | ||||||
| export * from '../test/generated-wrappers/test_dydx_bridge'; | export * from '../test/generated-wrappers/test_dydx_bridge'; | ||||||
|   | |||||||
| @@ -4,8 +4,12 @@ | |||||||
|     "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], |     "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], | ||||||
|     "files": [ |     "files": [ | ||||||
|         "generated-artifacts/BalancerBridge.json", |         "generated-artifacts/BalancerBridge.json", | ||||||
|  |         "generated-artifacts/BancorBridge.json", | ||||||
|         "generated-artifacts/ChaiBridge.json", |         "generated-artifacts/ChaiBridge.json", | ||||||
|  |         "generated-artifacts/CreamBridge.json", | ||||||
|  |         "generated-artifacts/CryptoComBridge.json", | ||||||
|         "generated-artifacts/CurveBridge.json", |         "generated-artifacts/CurveBridge.json", | ||||||
|  |         "generated-artifacts/DODOBridge.json", | ||||||
|         "generated-artifacts/DexForwarderBridge.json", |         "generated-artifacts/DexForwarderBridge.json", | ||||||
|         "generated-artifacts/DydxBridge.json", |         "generated-artifacts/DydxBridge.json", | ||||||
|         "generated-artifacts/ERC1155Proxy.json", |         "generated-artifacts/ERC1155Proxy.json", | ||||||
| @@ -18,6 +22,7 @@ | |||||||
|         "generated-artifacts/IAssetProxyDispatcher.json", |         "generated-artifacts/IAssetProxyDispatcher.json", | ||||||
|         "generated-artifacts/IAuthorizable.json", |         "generated-artifacts/IAuthorizable.json", | ||||||
|         "generated-artifacts/IBalancerPool.json", |         "generated-artifacts/IBalancerPool.json", | ||||||
|  |         "generated-artifacts/IBancorNetwork.json", | ||||||
|         "generated-artifacts/IChai.json", |         "generated-artifacts/IChai.json", | ||||||
|         "generated-artifacts/ICurve.json", |         "generated-artifacts/ICurve.json", | ||||||
|         "generated-artifacts/IDydx.json", |         "generated-artifacts/IDydx.json", | ||||||
| @@ -26,16 +31,26 @@ | |||||||
|         "generated-artifacts/IEth2Dai.json", |         "generated-artifacts/IEth2Dai.json", | ||||||
|         "generated-artifacts/IGasToken.json", |         "generated-artifacts/IGasToken.json", | ||||||
|         "generated-artifacts/IKyberNetworkProxy.json", |         "generated-artifacts/IKyberNetworkProxy.json", | ||||||
|  |         "generated-artifacts/IMStable.json", | ||||||
|  |         "generated-artifacts/IMooniswap.json", | ||||||
|  |         "generated-artifacts/IShell.json", | ||||||
|         "generated-artifacts/IUniswapExchange.json", |         "generated-artifacts/IUniswapExchange.json", | ||||||
|         "generated-artifacts/IUniswapExchangeFactory.json", |         "generated-artifacts/IUniswapExchangeFactory.json", | ||||||
|         "generated-artifacts/IUniswapV2Router01.json", |         "generated-artifacts/IUniswapV2Router01.json", | ||||||
|         "generated-artifacts/KyberBridge.json", |         "generated-artifacts/KyberBridge.json", | ||||||
|  |         "generated-artifacts/MStableBridge.json", | ||||||
|         "generated-artifacts/MixinAssetProxyDispatcher.json", |         "generated-artifacts/MixinAssetProxyDispatcher.json", | ||||||
|         "generated-artifacts/MixinAuthorizable.json", |         "generated-artifacts/MixinAuthorizable.json", | ||||||
|         "generated-artifacts/MixinGasToken.json", |         "generated-artifacts/MixinGasToken.json", | ||||||
|  |         "generated-artifacts/MooniswapBridge.json", | ||||||
|         "generated-artifacts/MultiAssetProxy.json", |         "generated-artifacts/MultiAssetProxy.json", | ||||||
|         "generated-artifacts/Ownable.json", |         "generated-artifacts/Ownable.json", | ||||||
|  |         "generated-artifacts/ShellBridge.json", | ||||||
|  |         "generated-artifacts/SnowSwapBridge.json", | ||||||
|         "generated-artifacts/StaticCallProxy.json", |         "generated-artifacts/StaticCallProxy.json", | ||||||
|  |         "generated-artifacts/SushiSwapBridge.json", | ||||||
|  |         "generated-artifacts/SwerveBridge.json", | ||||||
|  |         "generated-artifacts/TestBancorBridge.json", | ||||||
|         "generated-artifacts/TestChaiBridge.json", |         "generated-artifacts/TestChaiBridge.json", | ||||||
|         "generated-artifacts/TestDexForwarderBridge.json", |         "generated-artifacts/TestDexForwarderBridge.json", | ||||||
|         "generated-artifacts/TestDydxBridge.json", |         "generated-artifacts/TestDydxBridge.json", | ||||||
| @@ -48,8 +63,12 @@ | |||||||
|         "generated-artifacts/UniswapBridge.json", |         "generated-artifacts/UniswapBridge.json", | ||||||
|         "generated-artifacts/UniswapV2Bridge.json", |         "generated-artifacts/UniswapV2Bridge.json", | ||||||
|         "test/generated-artifacts/BalancerBridge.json", |         "test/generated-artifacts/BalancerBridge.json", | ||||||
|  |         "test/generated-artifacts/BancorBridge.json", | ||||||
|         "test/generated-artifacts/ChaiBridge.json", |         "test/generated-artifacts/ChaiBridge.json", | ||||||
|  |         "test/generated-artifacts/CreamBridge.json", | ||||||
|  |         "test/generated-artifacts/CryptoComBridge.json", | ||||||
|         "test/generated-artifacts/CurveBridge.json", |         "test/generated-artifacts/CurveBridge.json", | ||||||
|  |         "test/generated-artifacts/DODOBridge.json", | ||||||
|         "test/generated-artifacts/DexForwarderBridge.json", |         "test/generated-artifacts/DexForwarderBridge.json", | ||||||
|         "test/generated-artifacts/DydxBridge.json", |         "test/generated-artifacts/DydxBridge.json", | ||||||
|         "test/generated-artifacts/ERC1155Proxy.json", |         "test/generated-artifacts/ERC1155Proxy.json", | ||||||
| @@ -62,6 +81,7 @@ | |||||||
|         "test/generated-artifacts/IAssetProxyDispatcher.json", |         "test/generated-artifacts/IAssetProxyDispatcher.json", | ||||||
|         "test/generated-artifacts/IAuthorizable.json", |         "test/generated-artifacts/IAuthorizable.json", | ||||||
|         "test/generated-artifacts/IBalancerPool.json", |         "test/generated-artifacts/IBalancerPool.json", | ||||||
|  |         "test/generated-artifacts/IBancorNetwork.json", | ||||||
|         "test/generated-artifacts/IChai.json", |         "test/generated-artifacts/IChai.json", | ||||||
|         "test/generated-artifacts/ICurve.json", |         "test/generated-artifacts/ICurve.json", | ||||||
|         "test/generated-artifacts/IDydx.json", |         "test/generated-artifacts/IDydx.json", | ||||||
| @@ -70,16 +90,26 @@ | |||||||
|         "test/generated-artifacts/IEth2Dai.json", |         "test/generated-artifacts/IEth2Dai.json", | ||||||
|         "test/generated-artifacts/IGasToken.json", |         "test/generated-artifacts/IGasToken.json", | ||||||
|         "test/generated-artifacts/IKyberNetworkProxy.json", |         "test/generated-artifacts/IKyberNetworkProxy.json", | ||||||
|  |         "test/generated-artifacts/IMStable.json", | ||||||
|  |         "test/generated-artifacts/IMooniswap.json", | ||||||
|  |         "test/generated-artifacts/IShell.json", | ||||||
|         "test/generated-artifacts/IUniswapExchange.json", |         "test/generated-artifacts/IUniswapExchange.json", | ||||||
|         "test/generated-artifacts/IUniswapExchangeFactory.json", |         "test/generated-artifacts/IUniswapExchangeFactory.json", | ||||||
|         "test/generated-artifacts/IUniswapV2Router01.json", |         "test/generated-artifacts/IUniswapV2Router01.json", | ||||||
|         "test/generated-artifacts/KyberBridge.json", |         "test/generated-artifacts/KyberBridge.json", | ||||||
|  |         "test/generated-artifacts/MStableBridge.json", | ||||||
|         "test/generated-artifacts/MixinAssetProxyDispatcher.json", |         "test/generated-artifacts/MixinAssetProxyDispatcher.json", | ||||||
|         "test/generated-artifacts/MixinAuthorizable.json", |         "test/generated-artifacts/MixinAuthorizable.json", | ||||||
|         "test/generated-artifacts/MixinGasToken.json", |         "test/generated-artifacts/MixinGasToken.json", | ||||||
|  |         "test/generated-artifacts/MooniswapBridge.json", | ||||||
|         "test/generated-artifacts/MultiAssetProxy.json", |         "test/generated-artifacts/MultiAssetProxy.json", | ||||||
|         "test/generated-artifacts/Ownable.json", |         "test/generated-artifacts/Ownable.json", | ||||||
|  |         "test/generated-artifacts/ShellBridge.json", | ||||||
|  |         "test/generated-artifacts/SnowSwapBridge.json", | ||||||
|         "test/generated-artifacts/StaticCallProxy.json", |         "test/generated-artifacts/StaticCallProxy.json", | ||||||
|  |         "test/generated-artifacts/SushiSwapBridge.json", | ||||||
|  |         "test/generated-artifacts/SwerveBridge.json", | ||||||
|  |         "test/generated-artifacts/TestBancorBridge.json", | ||||||
|         "test/generated-artifacts/TestChaiBridge.json", |         "test/generated-artifacts/TestChaiBridge.json", | ||||||
|         "test/generated-artifacts/TestDexForwarderBridge.json", |         "test/generated-artifacts/TestDexForwarderBridge.json", | ||||||
|         "test/generated-artifacts/TestDydxBridge.json", |         "test/generated-artifacts/TestDydxBridge.json", | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "1.1.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "1.1.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "1.1.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "1.1.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "1.1.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "1.1.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "1.1.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "1.1.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "1.1.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "1.1.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "1.1.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "1.1.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "1.1.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "1.1.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "1.1.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "1.1.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "1.1.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "1.1.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "1.1.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "1.1.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "1.1.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "1.1.6", |         "version": "1.1.6", | ||||||
|   | |||||||
| @@ -5,6 +5,90 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v1.1.27 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.26 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.25 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.24 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.23 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.22 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.21 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.20 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.19 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.18 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.17 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.16 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.15 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.14 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.13 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.11 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.10 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.9 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.8 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.1.7 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v1.1.6 - _July 15, 2020_ | ## v1.1.6 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-broker", |     "name": "@0x/contracts-broker", | ||||||
|     "version": "1.1.6", |     "version": "1.1.27", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -43,31 +43,31 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |         "@0x/contracts-asset-proxy": "^3.7.9", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-erc721": "^3.1.7", |         "@0x/contracts-erc721": "^3.1.27", | ||||||
|         "@0x/contracts-exchange": "^3.2.7", |         "@0x/contracts-exchange": "^3.2.28", | ||||||
|         "@0x/contracts-exchange-libs": "^4.3.7", |         "@0x/contracts-exchange-libs": "^4.3.27", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
| @@ -80,15 +80,15 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "ethereum-types": "^3.2.0" |         "ethereum-types": "^3.4.0" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "3.1.28", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "3.1.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "3.1.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "3.1.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "3.1.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "3.1.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "3.1.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "3.1.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "3.1.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "3.1.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "3.1.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "3.1.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "3.1.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "3.1.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "3.1.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "3.1.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "3.1.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "3.1.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "3.1.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "3.1.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "3.1.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "3.1.7", |         "version": "3.1.7", | ||||||
|   | |||||||
| @@ -5,6 +5,90 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v3.1.28 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.27 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.26 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.25 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.24 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.23 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.22 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.21 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.20 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.19 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v3.1.7 - _July 15, 2020_ | ## v3.1.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-coordinator", |     "name": "@0x/contracts-coordinator", | ||||||
|     "version": "3.1.7", |     "version": "3.1.28", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,30 +44,28 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |         "@0x/contracts-asset-proxy": "^3.7.9", | ||||||
|         "@0x/contracts-dev-utils": "^1.3.5", |         "@0x/contracts-dev-utils": "^1.3.26", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-exchange": "^3.2.7", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@0x/tslint-config": "^4.1.0", |  | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |  | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
| @@ -80,19 +78,21 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/assert": "^3.0.9", |         "@0x/assert": "^3.0.21", | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/contract-addresses": "^4.11.0", |         "@0x/contract-addresses": "^6.0.0", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-exchange": "^3.2.28", | ||||||
|         "@0x/json-schemas": "^5.1.0", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/json-schemas": "^5.4.1", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/types": "^3.3.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|  |         "@0x/utils": "^6.2.0", | ||||||
|  |         "ethereum-types": "^3.4.0", | ||||||
|         "http-status-codes": "^1.3.2" |         "http-status-codes": "^1.3.2" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "1.3.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "1.3.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "1.3.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "1.3.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "1.3.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "1.3.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "1.3.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "1.3.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "1.3.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "1.3.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "1.3.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "1.3.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "1.3.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "1.3.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "1.3.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "1.3.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "1.3.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "1.3.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "1.3.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "1.3.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "1.3.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "1.3.5", |         "version": "1.3.5", | ||||||
|   | |||||||
| @@ -5,6 +5,90 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v1.3.26 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.25 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.24 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.23 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.22 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.21 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.20 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.19 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.18 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.17 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.16 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.15 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.14 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.13 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.12 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.11 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.10 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.9 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.8 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.7 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v1.3.6 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v1.3.5 - _July 15, 2020_ | ## v1.3.5 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-dev-utils", |     "name": "@0x/contracts-dev-utils", | ||||||
|     "version": "1.3.5", |     "version": "1.3.26", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -33,38 +33,38 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/dev-utils/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/assert": "^3.0.9", |         "@0x/assert": "^3.0.21", | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |         "@0x/contracts-asset-proxy": "^3.7.9", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@types/node": "*", |         "ethereum-types": "^3.4.0", | ||||||
|         "ethereum-types": "^3.2.0", |  | ||||||
|         "ethers": "~4.0.4", |         "ethers": "~4.0.4", | ||||||
|         "npm-run-all": "^4.1.2", |         "npm-run-all": "^4.1.2", | ||||||
|         "shx": "^0.2.2", |         "shx": "^0.2.2", | ||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3" |         "@0x/base-contract": "^6.2.18", | ||||||
|  |         "@types/node": "12.12.54" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -1,4 +1,184 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "2.1.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "2.1.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "2.1.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "2.1.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "2.1.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "2.1.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "2.1.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "2.1.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "2.1.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "2.1.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "2.1.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "2.1.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "2.1.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "2.1.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "2.1.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "2.1.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "2.1.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "2.1.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "2.1.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "2.1.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "2.1.7", |         "version": "2.1.7", | ||||||
|   | |||||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v2.1.27 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.26 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.25 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.24 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.23 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.22 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.21 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.20 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.19 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v2.1.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v2.1.7 - _July 15, 2020_ | ## v2.1.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-erc1155", |     "name": "@0x/contracts-erc1155", | ||||||
|     "version": "2.1.7", |     "version": "2.1.27", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,31 +44,31 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
|         "dirty-chai": "^2.0.1", |         "dirty-chai": "^2.0.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "ethereum-types": "^3.4.0", | ||||||
|         "make-promises-safe": "^1.1.0", |         "make-promises-safe": "^1.1.0", | ||||||
|         "mocha": "^6.2.0", |         "mocha": "^6.2.0", | ||||||
|         "npm-run-all": "^4.1.2", |         "npm-run-all": "^4.1.2", | ||||||
| @@ -76,14 +76,14 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "lodash": "^4.17.11" |         "lodash": "^4.17.11" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|   | |||||||
| @@ -1,201 +0,0 @@ | |||||||
| [ |  | ||||||
|     { |  | ||||||
|         "version": "1.7.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Pass in `DevUtils` address to required functions", |  | ||||||
|                 "pr": 2629 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Use new Kyber Katalyst functions", |  | ||||||
|                 "pr": 2629 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1594788383 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.6.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Pass in `DevUtils` address as a constructor parameter", |  | ||||||
|                 "pr": 2531 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Sample `Curve` for buy amounts", |  | ||||||
|                 "pr": 2551 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Added `sampleBuysFromKyberNetwork`", |  | ||||||
|                 "pr": 2551 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Use `searchBestRate` in Kyber samples. Return 0 when Uniswap/Eth2Dai reserve", |  | ||||||
|                 "pr": 2575 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Add UniswapV2", |  | ||||||
|                 "pr": 2595 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Sample from MultiBridge", |  | ||||||
|                 "pr": 2593 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1592969527 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "timestamp": 1583220306, |  | ||||||
|         "version": "1.5.1", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.5.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Add generic liquidity provider sampling", |  | ||||||
|                 "pr": 2487 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Use liquidity provider registry in sampler", |  | ||||||
|                 "pr": 2499 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1582837861 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "timestamp": 1582677073, |  | ||||||
|         "version": "1.4.2", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "timestamp": 1582623685, |  | ||||||
|         "version": "1.4.1", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.4.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Added Curve contract sampling", |  | ||||||
|                 "pr": 2483 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1581748629 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.3.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Catch reverts to `DevUtils` calls", |  | ||||||
|                 "pr": 2476 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Remove wrapper functions and introduce `batchCall()`", |  | ||||||
|                 "pr": 2477 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1581204851 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "timestamp": 1580988106, |  | ||||||
|         "version": "1.2.1", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.2.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Make source IDs static on all networks, not inherited from `DeploymentConstants`.", |  | ||||||
|                 "pr": 2459 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1580811564 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.1.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Add batch functions to query quotes", |  | ||||||
|                 "pr": 2427 |  | ||||||
|             }, |  | ||||||
|             { |  | ||||||
|                 "note": "Early exit if a DEX sample fails", |  | ||||||
|                 "pr": 2427 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1579682890 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.0.3", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Add gas limits to external quote calls.", |  | ||||||
|                 "pr": 2405 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1578272714 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.0.2", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Do not query empty/unsigned orders. Swallow revets on DEX quotes.", |  | ||||||
|                 "pr": 2395 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1576540892 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "timestamp": 1575931811, |  | ||||||
|         "version": "1.0.1", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.0.0", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Created package.", |  | ||||||
|                 "pr": 2344 |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1575296764 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.0.0-beta.2", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Dependencies updated" |  | ||||||
|             } |  | ||||||
|         ], |  | ||||||
|         "timestamp": 1575290197 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|         "version": "1.0.0-beta.1", |  | ||||||
|         "changes": [ |  | ||||||
|             { |  | ||||||
|                 "note": "Created package.", |  | ||||||
|                 "pr": 2344 |  | ||||||
|             } |  | ||||||
|         ] |  | ||||||
|     } |  | ||||||
| ] |  | ||||||
| @@ -1,83 +0,0 @@ | |||||||
| <!-- |  | ||||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. |  | ||||||
| Edit the package's CHANGELOG.json file only. |  | ||||||
| --> |  | ||||||
|  |  | ||||||
| CHANGELOG |  | ||||||
|  |  | ||||||
| ## v1.7.0 - _July 15, 2020_ |  | ||||||
|  |  | ||||||
|     * Pass in `DevUtils` address to required functions (#2629) |  | ||||||
|     * Use new Kyber Katalyst functions (#2629) |  | ||||||
|  |  | ||||||
| ## v1.6.0 - _June 24, 2020_ |  | ||||||
|  |  | ||||||
|     * Pass in `DevUtils` address as a constructor parameter (#2531) |  | ||||||
|     * Sample `Curve` for buy amounts (#2551) |  | ||||||
|     * Added `sampleBuysFromKyberNetwork` (#2551) |  | ||||||
|     * Use `searchBestRate` in Kyber samples. Return 0 when Uniswap/Eth2Dai reserve (#2575) |  | ||||||
|     * Add UniswapV2 (#2595) |  | ||||||
|     * Sample from MultiBridge (#2593) |  | ||||||
|  |  | ||||||
| ## v1.5.1 - _March 3, 2020_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.5.0 - _February 27, 2020_ |  | ||||||
|  |  | ||||||
|     * Add generic liquidity provider sampling (#2487) |  | ||||||
|     * Use liquidity provider registry in sampler (#2499) |  | ||||||
|  |  | ||||||
| ## v1.4.2 - _February 26, 2020_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.4.1 - _February 25, 2020_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.4.0 - _February 15, 2020_ |  | ||||||
|  |  | ||||||
|     * Added Curve contract sampling (#2483) |  | ||||||
|  |  | ||||||
| ## v1.3.0 - _February 8, 2020_ |  | ||||||
|  |  | ||||||
|     * Catch reverts to `DevUtils` calls (#2476) |  | ||||||
|     * Remove wrapper functions and introduce `batchCall()` (#2477) |  | ||||||
|  |  | ||||||
| ## v1.2.1 - _February 6, 2020_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.2.0 - _February 4, 2020_ |  | ||||||
|  |  | ||||||
|     * Make source IDs static on all networks, not inherited from `DeploymentConstants`. (#2459) |  | ||||||
|  |  | ||||||
| ## v1.1.0 - _January 22, 2020_ |  | ||||||
|  |  | ||||||
|     * Add batch functions to query quotes (#2427) |  | ||||||
|     * Early exit if a DEX sample fails (#2427) |  | ||||||
|  |  | ||||||
| ## v1.0.3 - _January 6, 2020_ |  | ||||||
|  |  | ||||||
|     * Add gas limits to external quote calls. (#2405) |  | ||||||
|  |  | ||||||
| ## v1.0.2 - _December 17, 2019_ |  | ||||||
|  |  | ||||||
|     * Do not query empty/unsigned orders. Swallow revets on DEX quotes. (#2395) |  | ||||||
|  |  | ||||||
| ## v1.0.1 - _December 9, 2019_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.0.0 - _December 2, 2019_ |  | ||||||
|  |  | ||||||
|     * Created package. (#2344) |  | ||||||
|  |  | ||||||
| ## v1.0.0-beta.2 - _December 2, 2019_ |  | ||||||
|  |  | ||||||
|     * Dependencies updated |  | ||||||
|  |  | ||||||
| ## v1.0.0-beta.1 - _Invalid date_ |  | ||||||
|  |  | ||||||
|     * Created package. (#2344) |  | ||||||
| @@ -1,44 +0,0 @@ | |||||||
| pragma solidity ^0.5.9; |  | ||||||
| pragma experimental ABIEncoderV2; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| contract DummyLiquidityProviderRegistry |  | ||||||
| { |  | ||||||
|     address private constant NULL_ADDRESS = address(0x0); |  | ||||||
|  |  | ||||||
|     mapping (address => mapping (address => address)) internal _gAddressBook; |  | ||||||
|  |  | ||||||
|     /// @dev Sets address of pool for a market given market (xAsset, yAsset). |  | ||||||
|     /// @param xToken First asset managed by pool. |  | ||||||
|     /// @param yToken Second asset managed by pool. |  | ||||||
|     /// @param poolAddress Address of pool. |  | ||||||
|     function setLiquidityProviderForMarket( |  | ||||||
|         address xToken, |  | ||||||
|         address yToken, |  | ||||||
|         address poolAddress |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|     { |  | ||||||
|         _gAddressBook[xToken][yToken] = poolAddress; |  | ||||||
|         _gAddressBook[yToken][xToken] = poolAddress; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// @dev Returns the address of pool for a market given market (xAsset, yAsset), or reverts if pool does not exist. |  | ||||||
|     /// @param xToken First asset managed by pool. |  | ||||||
|     /// @param yToken Second asset managed by pool. |  | ||||||
|     /// @return Address of pool. |  | ||||||
|     function getLiquidityProviderForMarket( |  | ||||||
|         address xToken, |  | ||||||
|         address yToken |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (address poolAddress) |  | ||||||
|     { |  | ||||||
|         poolAddress = _gAddressBook[xToken][yToken]; |  | ||||||
|         require( |  | ||||||
|             poolAddress != NULL_ADDRESS, |  | ||||||
|             "Registry/MARKET_PAIR_NOT_SET" |  | ||||||
|         ); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,45 +0,0 @@ | |||||||
| /* |  | ||||||
|  |  | ||||||
|   Copyright 2019 ZeroEx Intl. |  | ||||||
|  |  | ||||||
|   Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|   you may not use this file except in compliance with the License. |  | ||||||
|   You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|   Unless required by applicable law or agreed to in writing, software |  | ||||||
|   distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|   See the License for the specific language governing permissions and |  | ||||||
|   limitations under the License. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| pragma solidity ^0.5.9; |  | ||||||
| pragma experimental ABIEncoderV2; |  | ||||||
|  |  | ||||||
| import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol"; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| interface IDevUtils { |  | ||||||
|  |  | ||||||
|     /// @dev Fetches all order-relevant information needed to validate if the supplied order is fillable. |  | ||||||
|     /// @param order The order structure. |  | ||||||
|     /// @param signature Signature provided by maker that proves the order's authenticity. |  | ||||||
|     /// `0x01` can always be provided if the signature does not need to be validated. |  | ||||||
|     /// @return The orderInfo (hash, status, and `takerAssetAmount` already filled for the given order), |  | ||||||
|     /// fillableTakerAssetAmount (amount of the order's `takerAssetAmount` that is fillable given all on-chain state), |  | ||||||
|     /// and isValidSignature (validity of the provided signature). |  | ||||||
|     /// NOTE: If the `takerAssetData` encodes data for multiple assets, `fillableTakerAssetAmount` will represent a "scaled" |  | ||||||
|     /// amount, meaning it must be multiplied by all the individual asset amounts within the `takerAssetData` to get the final |  | ||||||
|     /// amount of each asset that can be filled. |  | ||||||
|     function getOrderRelevantState(LibOrder.Order calldata order, bytes calldata signature) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns ( |  | ||||||
|             LibOrder.OrderInfo memory orderInfo, |  | ||||||
|             uint256 fillableTakerAssetAmount, |  | ||||||
|             bool isValidSignature |  | ||||||
|         ); |  | ||||||
| } |  | ||||||
| @@ -1,293 +0,0 @@ | |||||||
| /* |  | ||||||
|  |  | ||||||
|   Copyright 2019 ZeroEx Intl. |  | ||||||
|  |  | ||||||
|   Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|   you may not use this file except in compliance with the License. |  | ||||||
|   You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|   Unless required by applicable law or agreed to in writing, software |  | ||||||
|   distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|   See the License for the specific language governing permissions and |  | ||||||
|   limitations under the License. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| pragma solidity ^0.5.9; |  | ||||||
| pragma experimental ABIEncoderV2; |  | ||||||
|  |  | ||||||
| import "@0x/contracts-exchange-libs/contracts/src/LibOrder.sol"; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| interface IERC20BridgeSampler { |  | ||||||
|  |  | ||||||
|     struct FakeBuyOptions { |  | ||||||
|         uint256 targetSlippageBps; |  | ||||||
|         uint256 maxIterations; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     /// @dev Call multiple public functions on this contract in a single transaction. |  | ||||||
|     /// @param callDatas ABI-encoded call data for each function call. |  | ||||||
|     /// @return callResults ABI-encoded results data for each call. |  | ||||||
|     function batchCall(bytes[] calldata callDatas) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (bytes[] memory callResults); |  | ||||||
|  |  | ||||||
|     /// @dev Queries the fillable taker asset amounts of native orders. |  | ||||||
|     /// @param orders Native orders to query. |  | ||||||
|     /// @param orderSignatures Signatures for each respective order in `orders`. |  | ||||||
|     /// @param devUtilsAddress Address to the DevUtils contract. |  | ||||||
|     /// @return orderFillableTakerAssetAmounts How much taker asset can be filled |  | ||||||
|     ///         by each order in `orders`. |  | ||||||
|     function getOrderFillableTakerAssetAmounts( |  | ||||||
|         LibOrder.Order[] calldata orders, |  | ||||||
|         bytes[] calldata orderSignatures, |  | ||||||
|         address devUtilsAddress |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory orderFillableTakerAssetAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Queries the fillable maker asset amounts of native orders. |  | ||||||
|     /// @param orders Native orders to query. |  | ||||||
|     /// @param orderSignatures Signatures for each respective order in `orders`. |  | ||||||
|     /// @param devUtilsAddress Address to the DevUtils contract. |  | ||||||
|     /// @return orderFillableMakerAssetAmounts How much maker asset can be filled |  | ||||||
|     ///         by each order in `orders`. |  | ||||||
|     function getOrderFillableMakerAssetAmounts( |  | ||||||
|         LibOrder.Order[] calldata orders, |  | ||||||
|         bytes[] calldata orderSignatures, |  | ||||||
|         address devUtilsAddress |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory orderFillableMakerAssetAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from Kyber. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromKyberNetwork( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from Kyber. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @param opts `FakeBuyOptions` specifying target slippage and max iterations. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromKyberNetwork( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata makerTokenAmounts, |  | ||||||
|         FakeBuyOptions calldata opts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from Eth2Dai/Oasis. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromEth2Dai( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from Uniswap. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromUniswap( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from Uniswap. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromUniswap( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata makerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from Eth2Dai/Oasis. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromEth2Dai( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata makerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from Curve. |  | ||||||
|     /// @param curveAddress Address of the Curve contract. |  | ||||||
|     /// @param fromTokenIdx Index of the taker token (what to sell). |  | ||||||
|     /// @param toTokenIdx Index of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromCurve( |  | ||||||
|         address curveAddress, |  | ||||||
|         int128 fromTokenIdx, |  | ||||||
|         int128 toTokenIdx, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from Curve. |  | ||||||
|     /// @param curveAddress Address of the Curve contract. |  | ||||||
|     /// @param fromTokenIdx Index of the taker token (what to sell). |  | ||||||
|     /// @param toTokenIdx Index of the maker token (what to buy). |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromCurve( |  | ||||||
|         address curveAddress, |  | ||||||
|         int128 fromTokenIdx, |  | ||||||
|         int128 toTokenIdx, |  | ||||||
|         uint256[] calldata makerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from an arbitrary on-chain liquidity provider. |  | ||||||
|     /// @param registryAddress Address of the liquidity provider registry contract. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromLiquidityProviderRegistry( |  | ||||||
|         address registryAddress, |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from MultiBridge. |  | ||||||
|     /// @param multibridge Address of the MultiBridge contract. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param intermediateToken The address of the intermediate token to |  | ||||||
|     ///        use in an indirect route. |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromMultiBridge( |  | ||||||
|         address multibridge, |  | ||||||
|         address takerToken, |  | ||||||
|         address intermediateToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from an arbitrary on-chain liquidity provider. |  | ||||||
|     /// @param registryAddress Address of the liquidity provider registry contract. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @param opts `FakeBuyOptions` specifying target slippage and max iterations. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromLiquidityProviderRegistry( |  | ||||||
|         address registryAddress, |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256[] calldata makerTokenAmounts, |  | ||||||
|         FakeBuyOptions calldata opts |  | ||||||
|  |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Returns the address of a liquidity provider for the given market |  | ||||||
|     ///      (takerToken, makerToken), from a registry of liquidity providers. |  | ||||||
|     ///      Returns address(0) if no such provider exists in the registry. |  | ||||||
|     /// @param takerToken Taker asset managed by liquidity provider. |  | ||||||
|     /// @param makerToken Maker asset managed by liquidity provider. |  | ||||||
|     /// @return providerAddress Address of the liquidity provider. |  | ||||||
|     function getLiquidityProviderFromRegistry( |  | ||||||
|         address registryAddress, |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (address providerAddress); |  | ||||||
|  |  | ||||||
|     /// @dev Sample sell quotes from UniswapV2. |  | ||||||
|     /// @param path Token route. |  | ||||||
|     /// @param takerTokenAmounts Taker token sell amount for each sample. |  | ||||||
|     /// @return makerTokenAmounts Maker amounts bought at each taker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleSellsFromUniswapV2( |  | ||||||
|         address[] calldata path, |  | ||||||
|         uint256[] calldata takerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory makerTokenAmounts); |  | ||||||
|  |  | ||||||
|     /// @dev Sample buy quotes from UniswapV2. |  | ||||||
|     /// @param path Token route. |  | ||||||
|     /// @param makerTokenAmounts Maker token buy amount for each sample. |  | ||||||
|     /// @return takerTokenAmounts Taker amounts sold at each maker token |  | ||||||
|     ///         amount. |  | ||||||
|     function sampleBuysFromUniswapV2( |  | ||||||
|         address[] calldata path, |  | ||||||
|         uint256[] calldata makerTokenAmounts |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256[] memory takerTokenAmounts); |  | ||||||
| } |  | ||||||
| @@ -1,70 +0,0 @@ | |||||||
| /* |  | ||||||
|  |  | ||||||
|   Copyright 2019 ZeroEx Intl. |  | ||||||
|  |  | ||||||
|   Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|   you may not use this file except in compliance with the License. |  | ||||||
|   You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|   Unless required by applicable law or agreed to in writing, software |  | ||||||
|   distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|   See the License for the specific language governing permissions and |  | ||||||
|   limitations under the License. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| pragma solidity ^0.5.9; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| interface ILiquidityProvider { |  | ||||||
|  |  | ||||||
|     /// @dev Transfers `amount` of the ERC20 `tokenAddress` from `from` to `to`. |  | ||||||
|     /// @param tokenAddress The address of the ERC20 token to transfer. |  | ||||||
|     /// @param from Address to transfer asset from. |  | ||||||
|     /// @param to Address to transfer asset to. |  | ||||||
|     /// @param amount Amount of asset to transfer. |  | ||||||
|     /// @param bridgeData Arbitrary asset data needed by the bridge contract. |  | ||||||
|     /// @return success The magic bytes `0xdc1600f3` if successful. |  | ||||||
|     function bridgeTransferFrom( |  | ||||||
|         address tokenAddress, |  | ||||||
|         address from, |  | ||||||
|         address to, |  | ||||||
|         uint256 amount, |  | ||||||
|         bytes calldata bridgeData |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         returns (bytes4 success); |  | ||||||
|  |  | ||||||
|     /// @dev Quotes the amount of `makerToken` that would be obtained by |  | ||||||
|     ///      selling `sellAmount` of `takerToken`. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param sellAmount Amount of `takerToken` to sell. |  | ||||||
|     /// @return makerTokenAmount Amount of `makerToken` that would be obtained. |  | ||||||
|     function getSellQuote( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256 sellAmount |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256 makerTokenAmount); |  | ||||||
|  |  | ||||||
|     /// @dev Quotes the amount of `takerToken` that would need to be sold in |  | ||||||
|     ///      order to obtain `buyAmount` of `makerToken`. |  | ||||||
|     /// @param takerToken Address of the taker token (what to sell). |  | ||||||
|     /// @param makerToken Address of the maker token (what to buy). |  | ||||||
|     /// @param buyAmount Amount of `makerToken` to buy. |  | ||||||
|     /// @return takerTokenAmount Amount of `takerToken` that would need to be sold. |  | ||||||
|     function getBuyQuote( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken, |  | ||||||
|         uint256 buyAmount |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (uint256 takerTokenAmount); |  | ||||||
| } |  | ||||||
| @@ -1,36 +0,0 @@ | |||||||
| /* |  | ||||||
|  |  | ||||||
|   Copyright 2019 ZeroEx Intl. |  | ||||||
|  |  | ||||||
|   Licensed under the Apache License, Version 2.0 (the "License"); |  | ||||||
|   you may not use this file except in compliance with the License. |  | ||||||
|   You may obtain a copy of the License at |  | ||||||
|  |  | ||||||
|     http://www.apache.org/licenses/LICENSE-2.0 |  | ||||||
|  |  | ||||||
|   Unless required by applicable law or agreed to in writing, software |  | ||||||
|   distributed under the License is distributed on an "AS IS" BASIS, |  | ||||||
|   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |  | ||||||
|   See the License for the specific language governing permissions and |  | ||||||
|   limitations under the License. |  | ||||||
|  |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| pragma solidity ^0.5.9; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| interface ILiquidityProviderRegistry { |  | ||||||
|  |  | ||||||
|     /// @dev Returns the address of a liquidity provider for the given market |  | ||||||
|     ///      (takerToken, makerToken), reverting if the pool does not exist. |  | ||||||
|     /// @param takerToken Taker asset managed by liquidity provider. |  | ||||||
|     /// @param makerToken Maker asset managed by liquidity provider. |  | ||||||
|     /// @return Address of the liquidity provider. |  | ||||||
|     function getLiquidityProviderForMarket( |  | ||||||
|         address takerToken, |  | ||||||
|         address makerToken |  | ||||||
|     ) |  | ||||||
|         external |  | ||||||
|         view |  | ||||||
|         returns (address providerAddress); |  | ||||||
| } |  | ||||||
| @@ -1,93 +0,0 @@ | |||||||
| { |  | ||||||
|     "name": "@0x/contracts-erc20-bridge-sampler", |  | ||||||
|     "version": "1.7.0", |  | ||||||
|     "engines": { |  | ||||||
|         "node": ">=6.12" |  | ||||||
|     }, |  | ||||||
|     "description": "Sampler contracts for the 0x asset-swapper", |  | ||||||
|     "main": "lib/src/index.js", |  | ||||||
|     "directories": { |  | ||||||
|         "test": "test" |  | ||||||
|     }, |  | ||||||
|     "scripts": { |  | ||||||
|         "build": "yarn pre_build && tsc -b", |  | ||||||
|         "build:ci": "yarn build", |  | ||||||
|         "pre_build": "run-s compile contracts:gen generate_contract_wrappers contracts:copy", |  | ||||||
|         "test": "yarn run_mocha", |  | ||||||
|         "rebuild_and_test": "run-s build test", |  | ||||||
|         "test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov", |  | ||||||
|         "test:profiler": "SOLIDITY_PROFILER=true run-s build run_mocha profiler:report:html", |  | ||||||
|         "test:trace": "SOLIDITY_REVERT_TRACE=true run-s build run_mocha", |  | ||||||
|         "run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit", |  | ||||||
|         "compile": "sol-compiler", |  | ||||||
|         "watch": "sol-compiler -w", |  | ||||||
|         "clean": "shx rm -rf lib test/generated-artifacts test/generated-wrappers generated-artifacts generated-wrappers", |  | ||||||
|         "generate_contract_wrappers": "abi-gen --debug --abis  ${npm_package_config_abis} --output test/generated-wrappers --backend ethers", |  | ||||||
|         "lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./test/generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude ./test/generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts", |  | ||||||
|         "fix": "tslint --fix --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude ./test/generated-wrappers/**/* --exclude ./test/generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts", |  | ||||||
|         "coverage:report:text": "istanbul report text", |  | ||||||
|         "coverage:report:html": "istanbul report html && open coverage/index.html", |  | ||||||
|         "profiler:report:html": "istanbul report html && open coverage/index.html", |  | ||||||
|         "coverage:report:lcov": "istanbul report lcov", |  | ||||||
|         "test:circleci": "yarn test", |  | ||||||
|         "contracts:gen": "contracts-gen generate", |  | ||||||
|         "contracts:copy": "contracts-gen copy", |  | ||||||
|         "lint-contracts": "solhint -c ../.solhint.json contracts/**/**/**/**/*.sol", |  | ||||||
|         "compile:truffle": "truffle compile" |  | ||||||
|     }, |  | ||||||
|     "config": { |  | ||||||
|         "publicInterfaceContracts": "ERC20BridgeSampler,IERC20BridgeSampler,ILiquidityProvider,ILiquidityProviderRegistry,DummyLiquidityProviderRegistry,DummyLiquidityProvider", |  | ||||||
|         "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.", |  | ||||||
|         "abis": "./test/generated-artifacts/@(DummyLiquidityProvider|DummyLiquidityProviderRegistry|ERC20BridgeSampler|ICurve|IDevUtils|IERC20BridgeSampler|IEth2Dai|IKyberHintHandler|IKyberNetwork|IKyberNetworkProxy|IKyberStorage|ILiquidityProvider|ILiquidityProviderRegistry|IMultiBridge|IUniswapExchangeQuotes|IUniswapV2Router01|TestERC20BridgeSampler).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/contracts/protocol/README.md", |  | ||||||
|     "devDependencies": { |  | ||||||
|         "@0x/abi-gen": "^5.3.1", |  | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |  | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |  | ||||||
|         "@0x/contracts-exchange": "^3.2.7", |  | ||||||
|         "@0x/contracts-exchange-libs": "^4.3.7", |  | ||||||
|         "@0x/contracts-gen": "^2.0.10", |  | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |  | ||||||
|         "@0x/contracts-utils": "^4.5.1", |  | ||||||
|         "@0x/dev-utils": "^3.3.0", |  | ||||||
|         "@0x/sol-compiler": "^4.1.1", |  | ||||||
|         "@0x/tslint-config": "^4.1.0", |  | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |  | ||||||
|         "@types/lodash": "4.14.104", |  | ||||||
|         "@types/mocha": "^5.2.7", |  | ||||||
|         "@types/node": "*", |  | ||||||
|         "chai": "^4.0.1", |  | ||||||
|         "chai-as-promised": "^7.1.0", |  | ||||||
|         "chai-bignumber": "^3.0.0", |  | ||||||
|         "dirty-chai": "^2.0.1", |  | ||||||
|         "make-promises-safe": "^1.1.0", |  | ||||||
|         "mocha": "^6.2.0", |  | ||||||
|         "npm-run-all": "^4.1.2", |  | ||||||
|         "shx": "^0.2.2", |  | ||||||
|         "solhint": "^1.4.1", |  | ||||||
|         "truffle": "^5.0.32", |  | ||||||
|         "tslint": "5.11.0", |  | ||||||
|         "typescript": "3.0.1" |  | ||||||
|     }, |  | ||||||
|     "dependencies": { |  | ||||||
|         "@0x/base-contract": "^6.2.3", |  | ||||||
|         "@0x/types": "^3.2.0", |  | ||||||
|         "@0x/typescript-typings": "^5.1.1", |  | ||||||
|         "@0x/utils": "^5.5.1", |  | ||||||
|         "ethereum-types": "^3.2.0", |  | ||||||
|         "lodash": "^4.17.11" |  | ||||||
|     }, |  | ||||||
|     "publishConfig": { |  | ||||||
|         "access": "public" |  | ||||||
|     }, |  | ||||||
|     "gitHead": "4f91bfd907996b2f4dd383778b50c479c2602b56" |  | ||||||
| } |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| /* |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  * Warning: This file is auto-generated by contracts-gen. Don't edit manually. |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  */ |  | ||||||
| import { ContractArtifact } from 'ethereum-types'; |  | ||||||
|  |  | ||||||
| import * as DummyLiquidityProvider from '../generated-artifacts/DummyLiquidityProvider.json'; |  | ||||||
| import * as DummyLiquidityProviderRegistry from '../generated-artifacts/DummyLiquidityProviderRegistry.json'; |  | ||||||
| import * as ERC20BridgeSampler from '../generated-artifacts/ERC20BridgeSampler.json'; |  | ||||||
| import * as IERC20BridgeSampler from '../generated-artifacts/IERC20BridgeSampler.json'; |  | ||||||
| import * as ILiquidityProvider from '../generated-artifacts/ILiquidityProvider.json'; |  | ||||||
| import * as ILiquidityProviderRegistry from '../generated-artifacts/ILiquidityProviderRegistry.json'; |  | ||||||
| export const artifacts = { |  | ||||||
|     ERC20BridgeSampler: ERC20BridgeSampler as ContractArtifact, |  | ||||||
|     IERC20BridgeSampler: IERC20BridgeSampler as ContractArtifact, |  | ||||||
|     ILiquidityProvider: ILiquidityProvider as ContractArtifact, |  | ||||||
|     ILiquidityProviderRegistry: ILiquidityProviderRegistry as ContractArtifact, |  | ||||||
|     DummyLiquidityProviderRegistry: DummyLiquidityProviderRegistry as ContractArtifact, |  | ||||||
|     DummyLiquidityProvider: DummyLiquidityProvider as ContractArtifact, |  | ||||||
| }; |  | ||||||
| @@ -1,2 +0,0 @@ | |||||||
| export * from './wrappers'; |  | ||||||
| export * from './artifacts'; |  | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| /* |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  * Warning: This file is auto-generated by contracts-gen. Don't edit manually. |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  */ |  | ||||||
| export * from '../generated-wrappers/dummy_liquidity_provider'; |  | ||||||
| export * from '../generated-wrappers/dummy_liquidity_provider_registry'; |  | ||||||
| export * from '../generated-wrappers/erc20_bridge_sampler'; |  | ||||||
| export * from '../generated-wrappers/i_erc20_bridge_sampler'; |  | ||||||
| export * from '../generated-wrappers/i_liquidity_provider'; |  | ||||||
| export * from '../generated-wrappers/i_liquidity_provider_registry'; |  | ||||||
| @@ -1,43 +0,0 @@ | |||||||
| /* |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  * Warning: This file is auto-generated by contracts-gen. Don't edit manually. |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  */ |  | ||||||
| import { ContractArtifact } from 'ethereum-types'; |  | ||||||
|  |  | ||||||
| import * as DummyLiquidityProvider from '../test/generated-artifacts/DummyLiquidityProvider.json'; |  | ||||||
| import * as DummyLiquidityProviderRegistry from '../test/generated-artifacts/DummyLiquidityProviderRegistry.json'; |  | ||||||
| import * as ERC20BridgeSampler from '../test/generated-artifacts/ERC20BridgeSampler.json'; |  | ||||||
| import * as ICurve from '../test/generated-artifacts/ICurve.json'; |  | ||||||
| import * as IDevUtils from '../test/generated-artifacts/IDevUtils.json'; |  | ||||||
| import * as IERC20BridgeSampler from '../test/generated-artifacts/IERC20BridgeSampler.json'; |  | ||||||
| import * as IEth2Dai from '../test/generated-artifacts/IEth2Dai.json'; |  | ||||||
| import * as IKyberHintHandler from '../test/generated-artifacts/IKyberHintHandler.json'; |  | ||||||
| import * as IKyberNetwork from '../test/generated-artifacts/IKyberNetwork.json'; |  | ||||||
| import * as IKyberNetworkProxy from '../test/generated-artifacts/IKyberNetworkProxy.json'; |  | ||||||
| import * as IKyberStorage from '../test/generated-artifacts/IKyberStorage.json'; |  | ||||||
| import * as ILiquidityProvider from '../test/generated-artifacts/ILiquidityProvider.json'; |  | ||||||
| import * as ILiquidityProviderRegistry from '../test/generated-artifacts/ILiquidityProviderRegistry.json'; |  | ||||||
| import * as IMultiBridge from '../test/generated-artifacts/IMultiBridge.json'; |  | ||||||
| import * as IUniswapExchangeQuotes from '../test/generated-artifacts/IUniswapExchangeQuotes.json'; |  | ||||||
| import * as IUniswapV2Router01 from '../test/generated-artifacts/IUniswapV2Router01.json'; |  | ||||||
| import * as TestERC20BridgeSampler from '../test/generated-artifacts/TestERC20BridgeSampler.json'; |  | ||||||
| export const artifacts = { |  | ||||||
|     DummyLiquidityProvider: DummyLiquidityProvider as ContractArtifact, |  | ||||||
|     DummyLiquidityProviderRegistry: DummyLiquidityProviderRegistry as ContractArtifact, |  | ||||||
|     ERC20BridgeSampler: ERC20BridgeSampler as ContractArtifact, |  | ||||||
|     ICurve: ICurve as ContractArtifact, |  | ||||||
|     IDevUtils: IDevUtils as ContractArtifact, |  | ||||||
|     IERC20BridgeSampler: IERC20BridgeSampler as ContractArtifact, |  | ||||||
|     IEth2Dai: IEth2Dai as ContractArtifact, |  | ||||||
|     IKyberHintHandler: IKyberHintHandler as ContractArtifact, |  | ||||||
|     IKyberNetwork: IKyberNetwork as ContractArtifact, |  | ||||||
|     IKyberNetworkProxy: IKyberNetworkProxy as ContractArtifact, |  | ||||||
|     IKyberStorage: IKyberStorage as ContractArtifact, |  | ||||||
|     ILiquidityProvider: ILiquidityProvider as ContractArtifact, |  | ||||||
|     ILiquidityProviderRegistry: ILiquidityProviderRegistry as ContractArtifact, |  | ||||||
|     IMultiBridge: IMultiBridge as ContractArtifact, |  | ||||||
|     IUniswapExchangeQuotes: IUniswapExchangeQuotes as ContractArtifact, |  | ||||||
|     IUniswapV2Router01: IUniswapV2Router01 as ContractArtifact, |  | ||||||
|     TestERC20BridgeSampler: TestERC20BridgeSampler as ContractArtifact, |  | ||||||
| }; |  | ||||||
| @@ -1,22 +0,0 @@ | |||||||
| /* |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  * Warning: This file is auto-generated by contracts-gen. Don't edit manually. |  | ||||||
|  * ----------------------------------------------------------------------------- |  | ||||||
|  */ |  | ||||||
| export * from '../test/generated-wrappers/dummy_liquidity_provider'; |  | ||||||
| export * from '../test/generated-wrappers/dummy_liquidity_provider_registry'; |  | ||||||
| export * from '../test/generated-wrappers/erc20_bridge_sampler'; |  | ||||||
| export * from '../test/generated-wrappers/i_curve'; |  | ||||||
| export * from '../test/generated-wrappers/i_dev_utils'; |  | ||||||
| export * from '../test/generated-wrappers/i_erc20_bridge_sampler'; |  | ||||||
| export * from '../test/generated-wrappers/i_eth2_dai'; |  | ||||||
| export * from '../test/generated-wrappers/i_kyber_hint_handler'; |  | ||||||
| export * from '../test/generated-wrappers/i_kyber_network'; |  | ||||||
| export * from '../test/generated-wrappers/i_kyber_network_proxy'; |  | ||||||
| export * from '../test/generated-wrappers/i_kyber_storage'; |  | ||||||
| export * from '../test/generated-wrappers/i_liquidity_provider'; |  | ||||||
| export * from '../test/generated-wrappers/i_liquidity_provider_registry'; |  | ||||||
| export * from '../test/generated-wrappers/i_multi_bridge'; |  | ||||||
| export * from '../test/generated-wrappers/i_uniswap_exchange_quotes'; |  | ||||||
| export * from '../test/generated-wrappers/i_uniswap_v2_router01'; |  | ||||||
| export * from '../test/generated-wrappers/test_erc20_bridge_sampler'; |  | ||||||
| @@ -1,96 +0,0 @@ | |||||||
| /** |  | ||||||
|  * Use this file to configure your truffle project. It's seeded with some |  | ||||||
|  * common settings for different networks and features like migrations, |  | ||||||
|  * compilation and testing. Uncomment the ones you need or modify |  | ||||||
|  * them to suit your project as necessary. |  | ||||||
|  * |  | ||||||
|  * More information about configuration can be found at: |  | ||||||
|  * |  | ||||||
|  * truffleframework.com/docs/advanced/configuration |  | ||||||
|  * |  | ||||||
|  * To deploy via Infura you'll need a wallet provider (like truffle-hdwallet-provider) |  | ||||||
|  * to sign your transactions before they're sent to a remote public node. Infura accounts |  | ||||||
|  * are available for free at: infura.io/register. |  | ||||||
|  * |  | ||||||
|  * You'll also need a mnemonic - the twelve word phrase the wallet uses to generate |  | ||||||
|  * public/private key pairs. If you're publishing your code to GitHub make sure you load this |  | ||||||
|  * phrase from a file you've .gitignored so it doesn't accidentally become public. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| // const HDWalletProvider = require('truffle-hdwallet-provider'); |  | ||||||
| // const infuraKey = "fj4jll3k....."; |  | ||||||
| // |  | ||||||
| // const fs = require('fs'); |  | ||||||
| // const mnemonic = fs.readFileSync(".secret").toString().trim(); |  | ||||||
|  |  | ||||||
| module.exports = { |  | ||||||
|     /** |  | ||||||
|      * Networks define how you connect to your ethereum client and let you set the |  | ||||||
|      * defaults web3 uses to send transactions. If you don't specify one truffle |  | ||||||
|      * will spin up a development blockchain for you on port 9545 when you |  | ||||||
|      * run `develop` or `test`. You can ask a truffle command to use a specific |  | ||||||
|      * network from the command line, e.g |  | ||||||
|      * |  | ||||||
|      * $ truffle test --network <network-name> |  | ||||||
|      */ |  | ||||||
|  |  | ||||||
|     networks: { |  | ||||||
|         // Useful for testing. The `development` name is special - truffle uses it by default |  | ||||||
|         // if it's defined here and no other network is specified at the command line. |  | ||||||
|         // You should run a client (like ganache-cli, geth or parity) in a separate terminal |  | ||||||
|         // tab if you use this network and you must also set the `host`, `port` and `network_id` |  | ||||||
|         // options below to some value. |  | ||||||
|         // |  | ||||||
|         // development: { |  | ||||||
|         //  host: "127.0.0.1",     // Localhost (default: none) |  | ||||||
|         //  port: 8545,            // Standard Ethereum port (default: none) |  | ||||||
|         //  network_id: "*",       // Any network (default: none) |  | ||||||
|         // }, |  | ||||||
|         // Another network with more advanced options... |  | ||||||
|         // advanced: { |  | ||||||
|         // port: 8777,             // Custom port |  | ||||||
|         // network_id: 1342,       // Custom network |  | ||||||
|         // gas: 8500000,           // Gas sent with each transaction (default: ~6700000) |  | ||||||
|         // gasPrice: 20000000000,  // 20 gwei (in wei) (default: 100 gwei) |  | ||||||
|         // from: <address>,        // Account to send txs from (default: accounts[0]) |  | ||||||
|         // websockets: true        // Enable EventEmitter interface for web3 (default: false) |  | ||||||
|         // }, |  | ||||||
|         // Useful for deploying to a public network. |  | ||||||
|         // NB: It's important to wrap the provider as a function. |  | ||||||
|         // ropsten: { |  | ||||||
|         // provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/YOUR-PROJECT-ID`), |  | ||||||
|         // network_id: 3,       // Ropsten's id |  | ||||||
|         // gas: 5500000,        // Ropsten has a lower block limit than mainnet |  | ||||||
|         // confirmations: 2,    // # of confs to wait between deployments. (default: 0) |  | ||||||
|         // timeoutBlocks: 200,  // # of blocks before a deployment times out  (minimum/default: 50) |  | ||||||
|         // skipDryRun: true     // Skip dry run before migrations? (default: false for public nets ) |  | ||||||
|         // }, |  | ||||||
|         // Useful for private networks |  | ||||||
|         // private: { |  | ||||||
|         // provider: () => new HDWalletProvider(mnemonic, `https://network.io`), |  | ||||||
|         // network_id: 2111,   // This network is yours, in the cloud. |  | ||||||
|         // production: true    // Treats this network as if it was a public net. (default: false) |  | ||||||
|         // } |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     // Set default mocha options here, use special reporters etc. |  | ||||||
|     mocha: { |  | ||||||
|         // timeout: 100000 |  | ||||||
|     }, |  | ||||||
|  |  | ||||||
|     // Configure your compilers |  | ||||||
|     compilers: { |  | ||||||
|         solc: { |  | ||||||
|             version: '0.5.9', |  | ||||||
|             settings: { |  | ||||||
|                 evmVersion: 'istanbul', |  | ||||||
|                 optimizer: { |  | ||||||
|                     enabled: true, |  | ||||||
|                     runs: 1000000, |  | ||||||
|                     details: { yul: true, deduplicate: true, cse: true, constantOptimizer: true }, |  | ||||||
|                 }, |  | ||||||
|             }, |  | ||||||
|         }, |  | ||||||
|     }, |  | ||||||
| }; |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| { |  | ||||||
|     "extends": "../../tsconfig", |  | ||||||
|     "compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true }, |  | ||||||
|     "include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"], |  | ||||||
|     "files": [ |  | ||||||
|         "generated-artifacts/DummyLiquidityProvider.json", |  | ||||||
|         "generated-artifacts/DummyLiquidityProviderRegistry.json", |  | ||||||
|         "generated-artifacts/ERC20BridgeSampler.json", |  | ||||||
|         "generated-artifacts/IERC20BridgeSampler.json", |  | ||||||
|         "generated-artifacts/ILiquidityProvider.json", |  | ||||||
|         "generated-artifacts/ILiquidityProviderRegistry.json", |  | ||||||
|         "test/generated-artifacts/DummyLiquidityProvider.json", |  | ||||||
|         "test/generated-artifacts/DummyLiquidityProviderRegistry.json", |  | ||||||
|         "test/generated-artifacts/ERC20BridgeSampler.json", |  | ||||||
|         "test/generated-artifacts/ICurve.json", |  | ||||||
|         "test/generated-artifacts/IDevUtils.json", |  | ||||||
|         "test/generated-artifacts/IERC20BridgeSampler.json", |  | ||||||
|         "test/generated-artifacts/IEth2Dai.json", |  | ||||||
|         "test/generated-artifacts/IKyberHintHandler.json", |  | ||||||
|         "test/generated-artifacts/IKyberNetwork.json", |  | ||||||
|         "test/generated-artifacts/IKyberNetworkProxy.json", |  | ||||||
|         "test/generated-artifacts/IKyberStorage.json", |  | ||||||
|         "test/generated-artifacts/ILiquidityProvider.json", |  | ||||||
|         "test/generated-artifacts/ILiquidityProviderRegistry.json", |  | ||||||
|         "test/generated-artifacts/IMultiBridge.json", |  | ||||||
|         "test/generated-artifacts/IUniswapExchangeQuotes.json", |  | ||||||
|         "test/generated-artifacts/IUniswapV2Router01.json", |  | ||||||
|         "test/generated-artifacts/TestERC20BridgeSampler.json" |  | ||||||
|     ], |  | ||||||
|     "exclude": ["./deploy/solc/solc_bin"] |  | ||||||
| } |  | ||||||
| @@ -1,4 +1,189 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "3.3.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "3.3.5", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "3.3.4", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "3.3.3", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "3.3.2", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "3.3.1", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "version": "3.3.0", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Add SPDX license identifiers to solidity files", | ||||||
|  |                 "pr": 105 | ||||||
|  |             }, | ||||||
|  |             { | ||||||
|  |                 "note": "Allow for excess return data in `LibERC20TokenV06` compat* functions", | ||||||
|  |                 "pr": 97 | ||||||
|  |             } | ||||||
|  |         ], | ||||||
|  |         "timestamp": 1609802516 | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "3.2.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "3.2.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "3.2.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "3.2.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "3.2.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "3.2.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "3.2.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "3.2.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "3.2.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "3.2.5", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "3.2.4", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "3.2.3", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "3.2.2", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "3.2.1", |         "version": "3.2.1", | ||||||
|   | |||||||
| @@ -5,6 +5,87 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v3.3.6 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.5 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.4 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.3 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.2 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.1 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.3.0 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Add SPDX license identifiers to solidity files (#105) | ||||||
|  |     * Allow for excess return data in `LibERC20TokenV06` compat* functions (#97) | ||||||
|  |  | ||||||
|  | ## v3.2.14 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.13 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.12 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.11 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.10 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.9 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.8 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.7 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.6 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.5 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.4 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.3 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.2 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v3.2.1 - _July 15, 2020_ | ## v3.2.1 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
| /* | /* | ||||||
|  |  | ||||||
|   Copyright 2020 ZeroEx Intl. |   Copyright 2020 ZeroEx Intl. | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
| /* | /* | ||||||
|  |  | ||||||
|   Copyright 2020 ZeroEx Intl. |   Copyright 2020 ZeroEx Intl. | ||||||
|   | |||||||
| @@ -1,3 +1,4 @@ | |||||||
|  | // SPDX-License-Identifier: Apache-2.0 | ||||||
| /* | /* | ||||||
|  |  | ||||||
|   Copyright 2020 ZeroEx Intl. |   Copyright 2020 ZeroEx Intl. | ||||||
| @@ -118,7 +119,7 @@ library LibERC20TokenV06 { | |||||||
|     { |     { | ||||||
|         tokenDecimals = 18; |         tokenDecimals = 18; | ||||||
|         (bool didSucceed, bytes memory resultData) = address(token).staticcall(DECIMALS_CALL_DATA); |         (bool didSucceed, bytes memory resultData) = address(token).staticcall(DECIMALS_CALL_DATA); | ||||||
|         if (didSucceed && resultData.length == 32) { |         if (didSucceed && resultData.length >= 32) { | ||||||
|             tokenDecimals = uint8(LibBytesV06.readUint256(resultData, 0)); |             tokenDecimals = uint8(LibBytesV06.readUint256(resultData, 0)); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -141,7 +142,7 @@ library LibERC20TokenV06 { | |||||||
|                 spender |                 spender | ||||||
|             ) |             ) | ||||||
|         ); |         ); | ||||||
|         if (didSucceed && resultData.length == 32) { |         if (didSucceed && resultData.length >= 32) { | ||||||
|             allowance_ = LibBytesV06.readUint256(resultData, 0); |             allowance_ = LibBytesV06.readUint256(resultData, 0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -162,7 +163,7 @@ library LibERC20TokenV06 { | |||||||
|                 owner |                 owner | ||||||
|             ) |             ) | ||||||
|         ); |         ); | ||||||
|         if (didSucceed && resultData.length == 32) { |         if (didSucceed && resultData.length >= 32) { | ||||||
|             balance = LibBytesV06.readUint256(resultData, 0); |             balance = LibBytesV06.readUint256(resultData, 0); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| @@ -180,7 +181,7 @@ library LibERC20TokenV06 { | |||||||
|         if (resultData.length == 0) { |         if (resultData.length == 0) { | ||||||
|             return true; |             return true; | ||||||
|         } |         } | ||||||
|         if (resultData.length == 32) { |         if (resultData.length >= 32) { | ||||||
|             uint256 result = LibBytesV06.readUint256(resultData, 0); |             uint256 result = LibBytesV06.readUint256(resultData, 0); | ||||||
|             if (result == 1) { |             if (result == 1) { | ||||||
|                 return true; |                 return true; | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-erc20", |     "name": "@0x/contracts-erc20", | ||||||
|     "version": "3.2.1", |     "version": "3.3.6", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -43,34 +43,34 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
|         "dirty-chai": "^2.0.1", |         "dirty-chai": "^2.0.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "ethereum-types": "^3.4.0", | ||||||
|         "lodash": "^4.17.11", |         "lodash": "^4.17.11", | ||||||
|         "make-promises-safe": "^1.1.0", |         "make-promises-safe": "^1.1.0", | ||||||
|         "mocha": "^6.2.0", |         "mocha": "^6.2.0", | ||||||
| @@ -78,11 +78,11 @@ | |||||||
|         "shx": "^0.2.2", |         "shx": "^0.2.2", | ||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3" |         "@0x/base-contract": "^6.2.18" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -6,6 +6,7 @@ export { | |||||||
|     WETH9Events, |     WETH9Events, | ||||||
|     WETH9DepositEventArgs, |     WETH9DepositEventArgs, | ||||||
|     WETH9TransferEventArgs, |     WETH9TransferEventArgs, | ||||||
|  |     WETH9WithdrawalEventArgs, | ||||||
|     ZRXTokenContract, |     ZRXTokenContract, | ||||||
|     DummyERC20TokenTransferEventArgs, |     DummyERC20TokenTransferEventArgs, | ||||||
|     ERC20TokenEventArgs, |     ERC20TokenEventArgs, | ||||||
|   | |||||||
| @@ -39,8 +39,8 @@ describe('EtherToken', () => { | |||||||
|             artifacts.WETH9, |             artifacts.WETH9, | ||||||
|             provider, |             provider, | ||||||
|             { |             { | ||||||
|                 gasPrice, |  | ||||||
|                 ...txDefaults, |                 ...txDefaults, | ||||||
|  |                 gasPrice, | ||||||
|             }, |             }, | ||||||
|             artifacts, |             artifacts, | ||||||
|         ); |         ); | ||||||
|   | |||||||
| @@ -1,4 +1,184 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "3.1.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "3.1.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "3.1.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "3.1.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "3.1.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "3.1.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "3.1.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "3.1.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "3.1.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "3.1.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "3.1.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "3.1.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "3.1.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "3.1.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "3.1.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "3.1.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "3.1.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "3.1.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "3.1.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "3.1.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "3.1.7", |         "version": "3.1.7", | ||||||
|   | |||||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v3.1.27 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.26 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.25 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.24 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.23 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.22 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.21 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.20 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.19 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.1.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v3.1.7 - _July 15, 2020_ | ## v3.1.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-erc721", |     "name": "@0x/contracts-erc721", | ||||||
|     "version": "3.1.7", |     "version": "3.1.27", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,34 +44,34 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
|         "dirty-chai": "^2.0.1", |         "dirty-chai": "^2.0.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "ethereum-types": "^3.4.0", | ||||||
|         "lodash": "^4.17.11", |         "lodash": "^4.17.11", | ||||||
|         "make-promises-safe": "^1.1.0", |         "make-promises-safe": "^1.1.0", | ||||||
|         "mocha": "^6.2.0", |         "mocha": "^6.2.0", | ||||||
| @@ -80,11 +80,11 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3" |         "@0x/base-contract": "^6.2.18" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "4.2.28", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "4.2.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "4.2.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "4.2.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "4.2.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "4.2.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "4.2.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "4.2.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "4.2.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "4.2.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "4.2.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "4.2.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "4.2.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "4.2.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "4.2.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "4.2.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "4.2.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "4.2.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "4.2.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "4.2.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "4.2.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "4.2.7", |         "version": "4.2.7", | ||||||
|   | |||||||
| @@ -5,6 +5,90 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v4.2.28 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.27 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.26 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.25 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.24 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.23 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.22 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.21 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.20 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.19 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.2.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v4.2.7 - _July 15, 2020_ | ## v4.2.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-exchange-forwarder", |     "name": "@0x/contracts-exchange-forwarder", | ||||||
|     "version": "4.2.7", |     "version": "4.2.28", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,36 +44,36 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |         "@0x/contracts-asset-proxy": "^3.7.9", | ||||||
|         "@0x/contracts-dev-utils": "^1.3.5", |         "@0x/contracts-dev-utils": "^1.3.26", | ||||||
|         "@0x/contracts-erc1155": "^2.1.7", |         "@0x/contracts-erc1155": "^2.1.27", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-erc721": "^3.1.7", |         "@0x/contracts-erc721": "^3.1.27", | ||||||
|         "@0x/contracts-exchange": "^3.2.7", |         "@0x/contracts-exchange": "^3.2.28", | ||||||
|         "@0x/contracts-exchange-libs": "^4.3.7", |         "@0x/contracts-exchange-libs": "^4.3.27", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
| @@ -86,13 +86,13 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "ethereum-types": "^3.2.0" |         "ethereum-types": "^3.4.0" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -1,4 +1,184 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "4.3.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "4.3.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "4.3.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "4.3.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "4.3.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "4.3.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "4.3.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "4.3.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "4.3.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "4.3.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "4.3.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "4.3.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "4.3.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "4.3.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "4.3.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "4.3.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "4.3.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "4.3.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "4.3.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "4.3.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "4.3.7", |         "version": "4.3.7", | ||||||
|   | |||||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v4.3.27 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.26 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.25 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.24 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.23 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.22 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.21 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.20 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.19 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v4.3.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v4.3.7 - _July 15, 2020_ | ## v4.3.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-exchange-libs", |     "name": "@0x/contracts-exchange-libs", | ||||||
|     "version": "4.3.7", |     "version": "4.3.27", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,25 +44,25 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/libs/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/subproviders": "^6.1.1", |         "@0x/subproviders": "^6.4.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
| @@ -76,18 +76,18 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "ethereum-types": "^3.2.0" |         "ethereum-types": "^3.4.0" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|         "access": "public" |         "access": "public" | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "3.2.28", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "3.2.27", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "3.2.26", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "3.2.25", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "3.2.24", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "3.2.23", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "3.2.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "3.2.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "3.2.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "3.2.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "3.2.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "3.2.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "3.2.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "3.2.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "3.2.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "3.2.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "3.2.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "3.2.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "3.2.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "3.2.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "3.2.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "3.2.7", |         "version": "3.2.7", | ||||||
|   | |||||||
| @@ -5,6 +5,90 @@ Edit the package's CHANGELOG.json file only. | |||||||
|  |  | ||||||
| CHANGELOG | CHANGELOG | ||||||
|  |  | ||||||
|  | ## v3.2.28 - _April 1, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.27 - _March 17, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.26 - _February 24, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.25 - _February 10, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.24 - _January 26, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.23 - _January 13, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.22 - _January 4, 2021_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.21 - _December 23, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.20 - _December 17, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.19 - _December 16, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.18 - _December 9, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.17 - _December 7, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.16 - _December 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.15 - _November 19, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.14 - _November 13, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.13 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.12 - _November 3, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.11 - _November 2, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.10 - _October 28, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.9 - _October 27, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
|  | ## v3.2.8 - _October 21, 2020_ | ||||||
|  |  | ||||||
|  |     * Dependencies updated | ||||||
|  |  | ||||||
| ## v3.2.7 - _July 15, 2020_ | ## v3.2.7 - _July 15, 2020_ | ||||||
|  |  | ||||||
|     * Dependencies updated |     * Dependencies updated | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|     "name": "@0x/contracts-exchange", |     "name": "@0x/contracts-exchange", | ||||||
|     "version": "3.2.7", |     "version": "3.2.28", | ||||||
|     "engines": { |     "engines": { | ||||||
|         "node": ">=6.12" |         "node": ">=6.12" | ||||||
|     }, |     }, | ||||||
| @@ -44,37 +44,37 @@ | |||||||
|     }, |     }, | ||||||
|     "repository": { |     "repository": { | ||||||
|         "type": "git", |         "type": "git", | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo.git" |         "url": "https://github.com/0xProject/protocol.git" | ||||||
|     }, |     }, | ||||||
|     "license": "Apache-2.0", |     "license": "Apache-2.0", | ||||||
|     "bugs": { |     "bugs": { | ||||||
|         "url": "https://github.com/0xProject/0x-monorepo/issues" |         "url": "https://github.com/0xProject/protocol/issues" | ||||||
|     }, |     }, | ||||||
|     "homepage": "https://github.com/0xProject/0x-monorepo/contracts/protocol/README.md", |     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", | ||||||
|     "devDependencies": { |     "devDependencies": { | ||||||
|         "@0x/abi-gen": "^5.3.1", |         "@0x/abi-gen": "^5.4.21", | ||||||
|         "@0x/contracts-asset-proxy": "^3.4.0", |         "@0x/contracts-asset-proxy": "^3.7.9", | ||||||
|         "@0x/contracts-exchange-libs": "^4.3.7", |         "@0x/contracts-exchange-libs": "^4.3.27", | ||||||
|         "@0x/contracts-gen": "^2.0.10", |         "@0x/contracts-gen": "^2.0.32", | ||||||
|         "@0x/contracts-multisig": "^4.1.7", |         "@0x/contracts-multisig": "^4.1.28", | ||||||
|         "@0x/contracts-staking": "^2.0.14", |         "@0x/contracts-staking": "^2.0.35", | ||||||
|         "@0x/contracts-test-utils": "^5.3.4", |         "@0x/contracts-test-utils": "^5.3.24", | ||||||
|         "@0x/contracts-utils": "^4.5.1", |         "@0x/contracts-utils": "^4.7.6", | ||||||
|         "@0x/dev-utils": "^3.3.0", |         "@0x/dev-utils": "^4.2.1", | ||||||
|         "@0x/sol-compiler": "^4.1.1", |         "@0x/sol-compiler": "^4.6.1", | ||||||
|         "@0x/ts-doc-gen": "^0.0.22", |         "@0x/ts-doc-gen": "^0.0.28", | ||||||
|         "@0x/tslint-config": "^4.1.0", |         "@0x/tslint-config": "^4.1.3", | ||||||
|         "@0x/types": "^3.2.0", |         "@0x/types": "^3.3.1", | ||||||
|         "@0x/typescript-typings": "^5.1.1", |         "@0x/typescript-typings": "^5.1.6", | ||||||
|         "@0x/web3-wrapper": "^7.2.0", |         "@0x/web3-wrapper": "^7.4.1", | ||||||
|         "@types/lodash": "4.14.104", |         "@types/lodash": "4.14.104", | ||||||
|         "@types/mocha": "^5.2.7", |         "@types/mocha": "^5.2.7", | ||||||
|         "@types/node": "*", |         "@types/node": "12.12.54", | ||||||
|         "chai": "^4.0.1", |         "chai": "^4.0.1", | ||||||
|         "chai-as-promised": "^7.1.0", |         "chai-as-promised": "^7.1.0", | ||||||
|         "chai-bignumber": "^3.0.0", |         "chai-bignumber": "^3.0.0", | ||||||
|         "dirty-chai": "^2.0.1", |         "dirty-chai": "^2.0.1", | ||||||
|         "ethereum-types": "^3.2.0", |         "ethereum-types": "^3.4.0", | ||||||
|         "ethereumjs-util": "^5.1.1", |         "ethereumjs-util": "^5.1.1", | ||||||
|         "js-combinatorics": "^0.5.3", |         "js-combinatorics": "^0.5.3", | ||||||
|         "make-promises-safe": "^1.1.0", |         "make-promises-safe": "^1.1.0", | ||||||
| @@ -84,17 +84,17 @@ | |||||||
|         "solhint": "^1.4.1", |         "solhint": "^1.4.1", | ||||||
|         "truffle": "^5.0.32", |         "truffle": "^5.0.32", | ||||||
|         "tslint": "5.11.0", |         "tslint": "5.11.0", | ||||||
|         "typedoc": "^0.15.0", |         "typedoc": "~0.16.11", | ||||||
|         "typescript": "3.0.1" |         "typescript": "4.2.2" | ||||||
|     }, |     }, | ||||||
|     "dependencies": { |     "dependencies": { | ||||||
|         "@0x/base-contract": "^6.2.3", |         "@0x/base-contract": "^6.2.18", | ||||||
|         "@0x/contracts-dev-utils": "^1.3.5", |         "@0x/contracts-dev-utils": "^1.3.26", | ||||||
|         "@0x/contracts-erc1155": "^2.1.7", |         "@0x/contracts-erc1155": "^2.1.27", | ||||||
|         "@0x/contracts-erc20": "^3.2.1", |         "@0x/contracts-erc20": "^3.3.6", | ||||||
|         "@0x/contracts-erc721": "^3.1.7", |         "@0x/contracts-erc721": "^3.1.27", | ||||||
|         "@0x/order-utils": "^10.3.0", |         "@0x/order-utils": "^10.4.19", | ||||||
|         "@0x/utils": "^5.5.1", |         "@0x/utils": "^6.2.0", | ||||||
|         "lodash": "^4.17.11" |         "lodash": "^4.17.11" | ||||||
|     }, |     }, | ||||||
|     "publishConfig": { |     "publishConfig": { | ||||||
|   | |||||||
| @@ -286,11 +286,11 @@ describe('AssetProxyDispatcher', () => { | |||||||
|             }); |             }); | ||||||
|             const encodedAssetData = encodeERC20AssetData(erc20TokenA.address); |             const encodedAssetData = encodeERC20AssetData(erc20TokenA.address); | ||||||
|             const amount = new BigNumber(1); |             const amount = new BigNumber(1); | ||||||
|             const nestedError = new StringRevertError(RevertReason.TransferFailed).encode(); |             const nestedError = new StringRevertError(RevertReason.TransferFailed); | ||||||
|             const expectedError = new ExchangeRevertErrors.AssetProxyTransferError( |             const expectedError = new ExchangeRevertErrors.AssetProxyTransferError( | ||||||
|                 orderHash, |                 orderHash, | ||||||
|                 encodedAssetData, |                 encodedAssetData, | ||||||
|                 nestedError, |                 nestedError.encode(), | ||||||
|             ); |             ); | ||||||
|             const tx = assetProxyDispatcher |             const tx = assetProxyDispatcher | ||||||
|                 .dispatchTransferFrom(orderHash, encodedAssetData, makerAddress, takerAddress, amount) |                 .dispatchTransferFrom(orderHash, encodedAssetData, makerAddress, takerAddress, amount) | ||||||
| @@ -309,11 +309,11 @@ describe('AssetProxyDispatcher', () => { | |||||||
|                 from: makerAddress, |                 from: makerAddress, | ||||||
|             }); |             }); | ||||||
|             const transferIndexAsBytes32 = '0x0000000000000000000000000000000000000000000000000000000000000001'; |             const transferIndexAsBytes32 = '0x0000000000000000000000000000000000000000000000000000000000000001'; | ||||||
|             const nestedError = new StringRevertError(RevertReason.TransferFailed).encode(); |             const nestedError = new StringRevertError(RevertReason.TransferFailed); | ||||||
|             const expectedError = new ExchangeRevertErrors.AssetProxyTransferError( |             const expectedError = new ExchangeRevertErrors.AssetProxyTransferError( | ||||||
|                 transferIndexAsBytes32, |                 transferIndexAsBytes32, | ||||||
|                 assetDataB, |                 assetDataB, | ||||||
|                 nestedError, |                 nestedError.encode(), | ||||||
|             ); |             ); | ||||||
|             const tx = assetProxyDispatcher |             const tx = assetProxyDispatcher | ||||||
|                 .simulateDispatchTransferFromCalls( |                 .simulateDispatchTransferFromCalls( | ||||||
|   | |||||||
| @@ -12,12 +12,12 @@ export abstract class AbstractBalanceAndProxyAllowanceFetcher { | |||||||
|      * @param userAddress Ethereum address for which to fetch the balance |      * @param userAddress Ethereum address for which to fetch the balance | ||||||
|      * @return Balance amount in base units |      * @return Balance amount in base units | ||||||
|      */ |      */ | ||||||
|     public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; |     public abstract getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||||
|     /** |     /** | ||||||
|      * Get the 0x asset proxy allowance of assetData for userAddress |      * Get the 0x asset proxy allowance of assetData for userAddress | ||||||
|      * @param assetData AssetData for which to fetch the allowance |      * @param assetData AssetData for which to fetch the allowance | ||||||
|      * @param userAddress Ethereum address for which to fetch the allowance |      * @param userAddress Ethereum address for which to fetch the allowance | ||||||
|      * @return Allowance amount in base units |      * @return Allowance amount in base units | ||||||
|      */ |      */ | ||||||
|     public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; |     public abstract getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| import { BigNumber } from '@0x/utils'; | import { BigNumber } from '@0x/utils'; | ||||||
|  |  | ||||||
| export abstract class AbstractBalanceAndProxyAllowanceLazyStore { | export abstract class AbstractBalanceAndProxyAllowanceLazyStore { | ||||||
|     public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; |     public abstract getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||||
|     public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; |     public abstract getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||||
|     public abstract setBalance(assetData: string, userAddress: string, balance: BigNumber): void; |     public abstract setBalance(assetData: string, userAddress: string, balance: BigNumber): void; | ||||||
|     public abstract deleteBalance(assetData: string, userAddress: string): void; |     public abstract deleteBalance(assetData: string, userAddress: string): void; | ||||||
|     public abstract setProxyAllowance(assetData: string, userAddress: string, proxyAllowance: BigNumber): void; |     public abstract setProxyAllowance(assetData: string, userAddress: string, proxyAllowance: BigNumber): void; | ||||||
|   | |||||||
| @@ -11,5 +11,5 @@ export abstract class AbstractOrderFilledCancelledFetcher { | |||||||
|      * @param orderHash OrderHash of order we are interested in |      * @param orderHash OrderHash of order we are interested in | ||||||
|      * @return FilledTakerAmount |      * @return FilledTakerAmount | ||||||
|      */ |      */ | ||||||
|     public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; |     public abstract getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| import { BigNumber } from '@0x/utils'; | import { BigNumber } from '@0x/utils'; | ||||||
|  |  | ||||||
| export abstract class AbstractOrderFilledCancelledLazyStore { | export abstract class AbstractOrderFilledCancelledLazyStore { | ||||||
|     public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; |     public abstract getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>; | ||||||
|     public abstract setFilledTakerAmount(orderHash: string, balance: BigNumber): void; |     public abstract setFilledTakerAmount(orderHash: string, balance: BigNumber): void; | ||||||
|     public abstract deleteFilledTakerAmount(orderHash: string): void; |     public abstract deleteFilledTakerAmount(orderHash: string): void; | ||||||
|     public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void; |     public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void; | ||||||
|   | |||||||
| @@ -18,6 +18,7 @@ import { | |||||||
|     IsolatedExchangeFillEventArgs as FillEventArgs, |     IsolatedExchangeFillEventArgs as FillEventArgs, | ||||||
| } from '../wrappers'; | } from '../wrappers'; | ||||||
|  |  | ||||||
|  | export { Order } from '@0x/types'; | ||||||
| export interface AssetBalances { | export interface AssetBalances { | ||||||
|     [assetData: string]: { [address: string]: BigNumber }; |     [assetData: string]: { [address: string]: BigNumber }; | ||||||
| } | } | ||||||
| @@ -27,7 +28,6 @@ export interface IsolatedExchangeEvents { | |||||||
|     transferFromCalls: DispatchTransferFromCallArgs[]; |     transferFromCalls: DispatchTransferFromCallArgs[]; | ||||||
| } | } | ||||||
|  |  | ||||||
| export type Order = Order; |  | ||||||
| export type Numberish = string | number | BigNumber; | export type Numberish = string | number | BigNumber; | ||||||
|  |  | ||||||
| export const DEFAULT_GOOD_SIGNATURE = createGoodSignature(); | export const DEFAULT_GOOD_SIGNATURE = createGoodSignature(); | ||||||
|   | |||||||
| @@ -1,4 +1,193 @@ | |||||||
| [ | [ | ||||||
|  |     { | ||||||
|  |         "timestamp": 1617311315, | ||||||
|  |         "version": "6.2.22", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1616005394, | ||||||
|  |         "version": "6.2.21", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1614141718, | ||||||
|  |         "version": "6.2.20", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1612950500, | ||||||
|  |         "version": "6.2.19", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1611648096, | ||||||
|  |         "version": "6.2.18", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1610510890, | ||||||
|  |         "version": "6.2.17", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1609802516, | ||||||
|  |         "version": "6.2.16", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608692071, | ||||||
|  |         "version": "6.2.15", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608245516, | ||||||
|  |         "version": "6.2.14", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1608105788, | ||||||
|  |         "version": "6.2.13", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607485227, | ||||||
|  |         "version": "6.2.12", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1607381756, | ||||||
|  |         "version": "6.2.11", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1606961263, | ||||||
|  |         "version": "6.2.10", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605763885, | ||||||
|  |         "version": "6.2.9", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1605302002, | ||||||
|  |         "version": "6.2.8", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604385937, | ||||||
|  |         "version": "6.2.7", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604376968, | ||||||
|  |         "version": "6.2.6", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1604355662, | ||||||
|  |         "version": "6.2.5", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603851023, | ||||||
|  |         "version": "6.2.4", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603833198, | ||||||
|  |         "version": "6.2.3", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|  |     { | ||||||
|  |         "timestamp": 1603265572, | ||||||
|  |         "version": "6.2.2", | ||||||
|  |         "changes": [ | ||||||
|  |             { | ||||||
|  |                 "note": "Dependencies updated" | ||||||
|  |             } | ||||||
|  |         ] | ||||||
|  |     }, | ||||||
|     { |     { | ||||||
|         "timestamp": 1594788383, |         "timestamp": 1594788383, | ||||||
|         "version": "6.2.1", |         "version": "6.2.1", | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user