Compare commits
	
		
			226 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 | 
							
								
								
									
										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 | ||||
							
								
								
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -113,6 +113,8 @@ contracts/dev-utils/generated-artifacts/ | ||||
| contracts/dev-utils/test/generated-artifacts/ | ||||
| contracts/zero-ex/generated-artifacts/ | ||||
| contracts/zero-ex/test/generated-artifacts/ | ||||
| contracts/treasury/generated-artifacts/ | ||||
| contracts/treasury/test/generated-artifacts/ | ||||
|  | ||||
| # generated truffle contract artifacts/ | ||||
| contracts/broker/build/ | ||||
| @@ -167,6 +169,8 @@ contracts/dev-utils/generated-wrappers/ | ||||
| contracts/dev-utils/test/generated-wrappers/ | ||||
| contracts/zero-ex/generated-wrappers/ | ||||
| contracts/zero-ex/test/generated-wrappers/ | ||||
| contracts/treasury/generated-wrappers/ | ||||
| contracts/treasury/test/generated-wrappers/ | ||||
|  | ||||
| # Doc README copy | ||||
| packages/*/docs/README.md | ||||
|   | ||||
| @@ -64,6 +64,10 @@ lib | ||||
| /contracts/zero-ex/test/generated-wrappers | ||||
| /contracts/zero-ex/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/coordinator/build/ | ||||
| /contracts/exchange/build/ | ||||
| @@ -82,4 +86,5 @@ lib | ||||
| /packages/asset-swapper/test/generated-wrappers | ||||
| package.json | ||||
| packages/*/docs | ||||
| docs/ | ||||
| *.sol | ||||
|   | ||||
							
								
								
									
										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 | ||||
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							| @@ -8,7 +8,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume | ||||
|  | ||||
| [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://discordapp.com/invite/d3FTX3M) | ||||
| [](https://opensource.org/licenses/Apache-2.0) | ||||
| @@ -92,7 +92,7 @@ yarn build | ||||
| To build a specific package: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/web3-wrapper yarn build | ||||
| PKG=@0x/contract-wrappers yarn build | ||||
| ``` | ||||
|  | ||||
| To build all contracts packages: | ||||
| @@ -115,7 +115,7 @@ To watch a specific package and all it's dependent packages: | ||||
| PKG=[NPM_PACKAGE_NAME] yarn watch | ||||
|  | ||||
| e.g | ||||
| PKG=@0x/web3-wrapper yarn watch | ||||
| PKG=@0x/contract-wrappers yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
| @@ -143,7 +143,7 @@ yarn rebuild | ||||
| To re-build (clean & build) a specific package & it's deps: | ||||
|  | ||||
| ```bash | ||||
| PKG=0x.js yarn rebuild | ||||
| PKG=@0x/contract-wrappers yarn rebuild | ||||
| ``` | ||||
|  | ||||
| ### Lint | ||||
| @@ -157,7 +157,7 @@ yarn lint | ||||
| Lint a specific package: | ||||
|  | ||||
| ```bash | ||||
| PKG=0x.js yarn lint | ||||
| PKG=@0x/contract-wrappers yarn lint | ||||
| ``` | ||||
|  | ||||
| ### Run Tests | ||||
| @@ -171,7 +171,7 @@ yarn test | ||||
| Run a specific package's test: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/web3-wrapper yarn test | ||||
| PKG=@0x/contract-wrappers yarn test | ||||
| ``` | ||||
|  | ||||
| Run all contracts packages tests: | ||||
|   | ||||
| @@ -16,6 +16,7 @@ | ||||
|         "quotes": ["error", "double"], | ||||
|         "separate-by-one-line-in-contract": "error", | ||||
|         "space-after-comma": "error", | ||||
|         "statement-indent": "error" | ||||
|         "statement-indent": "error", | ||||
|         "no-empty-blocks": false | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,186 @@ | ||||
| [ | ||||
|     { | ||||
|         "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": [ | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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) | ||||
|   | ||||
| @@ -21,6 +21,7 @@ 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"; | ||||
| @@ -36,6 +37,20 @@ contract BancorBridge is | ||||
|     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 | ||||
| @@ -60,7 +75,6 @@ contract BancorBridge is | ||||
|     { | ||||
|         // hold variables to get around stack depth limitations | ||||
|         TransferState memory state; | ||||
|  | ||||
|         // Decode the bridge data. | ||||
|         ( | ||||
|             state.path, | ||||
| @@ -68,34 +82,42 @@ contract BancorBridge is | ||||
|         // solhint-disable indent | ||||
|         ) = abi.decode(bridgeData, (address[], address)); | ||||
|         // solhint-enable indent | ||||
|         state.weth = IEtherToken(_getWethAddress()); | ||||
|  | ||||
|         require(state.path.length > 0, "BancorBridge/PATH_MUST_EXIST"); | ||||
|         // Just transfer the tokens if they're the same. | ||||
|         if (state.path[0] == toTokenAddress) { | ||||
|             LibERC20Token.transfer(state.path[0], to, amount); | ||||
|             return BRIDGE_SUCCESS; | ||||
|         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); | ||||
|         } | ||||
|  | ||||
|         // Otherwise use Bancor to convert | ||||
|         require(state.path.length > 2, "BancorBridge/PATH_LENGTH_MUST_BE_GREATER_THAN_TWO"); | ||||
|         require(state.path[state.path.length - 1] == toTokenAddress, "BancorBridge/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"); | ||||
|          | ||||
|         // // Grant an allowance to the Bancor Network to spend `fromTokenAddress` token. | ||||
|         uint256 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( | ||||
|         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 | ||||
|             to, // beneficiary | ||||
|             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], // fromTokenAddress | ||||
|             state.path[0] == BANCOR_ETH_ADDRESS ? address(state.weth) : state.path[0], | ||||
|             toTokenAddress, | ||||
|             fromTokenBalance, | ||||
|             boughtAmount, | ||||
| @@ -118,5 +140,5 @@ contract BancorBridge is | ||||
|     { | ||||
|         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; | ||||
|     } | ||||
| } | ||||
| @@ -56,11 +56,14 @@ contract KyberBridge is | ||||
|     uint256 constant private KYBER_RATE_BASE = 10 ** 18; | ||||
|  | ||||
|     // solhint-disable no-empty-blocks | ||||
|     /// @dev Payable fallback to receive ETH from Kyber. | ||||
|     /// @dev Payable fallback to receive ETH from Kyber/WETH. | ||||
|     function () | ||||
|         external | ||||
|         payable | ||||
|     {} | ||||
|     { | ||||
|         // Poor man's receive in 0.5.9 | ||||
|         require(msg.data.length == 0); | ||||
|     } | ||||
|  | ||||
|     /// @dev Callback for `IKyberBridge`. Tries to buy `amount` of | ||||
|     ///      `toTokenAddress` tokens by selling the entirety of the opposing asset | ||||
|   | ||||
| @@ -51,16 +51,15 @@ contract ShellBridge is | ||||
|         external | ||||
|         returns (bytes4 success) | ||||
|     { | ||||
|         // Decode the bridge data to get the `fromTokenAddress`. | ||||
|         (address fromTokenAddress) = abi.decode(bridgeData, (address)); | ||||
|         // 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)); | ||||
|         IShell exchange = IShell(_getShellAddress()); | ||||
|         // Grant an allowance to the exchange to spend `fromTokenAddress` token. | ||||
|         LibERC20Token.approveIfBelow(fromTokenAddress, address(exchange), fromTokenBalance); | ||||
|         LibERC20Token.approveIfBelow(fromTokenAddress, pool, fromTokenBalance); | ||||
|  | ||||
|         // Try to sell all of this contract's `fromTokenAddress` token balance. | ||||
|         uint256 boughtAmount = exchange.originSwap( | ||||
|         uint256 boughtAmount = IShell(pool).originSwap( | ||||
|             fromTokenAddress, | ||||
|             toTokenAddress, | ||||
|             fromTokenBalance, | ||||
|   | ||||
							
								
								
									
										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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										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; | ||||
|     } | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-asset-proxy", | ||||
|     "version": "3.5.0", | ||||
|     "version": "3.7.9", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -38,7 +38,7 @@ | ||||
|         "docs:json": "typedoc --excludePrivate --excludeExternals --excludeProtected --ignoreCompilerErrors --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" | ||||
|     }, | ||||
|     "config": { | ||||
|         "abis": "./test/generated-artifacts/@(BalancerBridge|BancorBridge|ChaiBridge|CreamBridge|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|StaticCallProxy|SushiSwapBridge|TestBancorBridge|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." | ||||
|     }, | ||||
|     "repository": { | ||||
| @@ -51,13 +51,13 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contract-wrappers": "^13.9.0", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contract-wrappers": "^13.15.0", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@types/lodash": "4.14.104", | ||||
| @@ -76,20 +76,20 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-erc1155": "^2.1.8", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-erc1155": "^2.1.27", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "lodash": "^4.17.11" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -9,6 +9,7 @@ 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 CreamBridge from '../generated-artifacts/CreamBridge.json'; | ||||
| import * as CryptoComBridge from '../generated-artifacts/CryptoComBridge.json'; | ||||
| import * as CurveBridge from '../generated-artifacts/CurveBridge.json'; | ||||
| import * as DexForwarderBridge from '../generated-artifacts/DexForwarderBridge.json'; | ||||
| import * as DODOBridge from '../generated-artifacts/DODOBridge.json'; | ||||
| @@ -47,8 +48,10 @@ import * as MStableBridge from '../generated-artifacts/MStableBridge.json'; | ||||
| import * as MultiAssetProxy from '../generated-artifacts/MultiAssetProxy.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 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 TestDexForwarderBridge from '../generated-artifacts/TestDexForwarderBridge.json'; | ||||
| @@ -75,6 +78,7 @@ export const artifacts = { | ||||
|     BancorBridge: BancorBridge as ContractArtifact, | ||||
|     ChaiBridge: ChaiBridge as ContractArtifact, | ||||
|     CreamBridge: CreamBridge as ContractArtifact, | ||||
|     CryptoComBridge: CryptoComBridge as ContractArtifact, | ||||
|     CurveBridge: CurveBridge as ContractArtifact, | ||||
|     DODOBridge: DODOBridge as ContractArtifact, | ||||
|     DexForwarderBridge: DexForwarderBridge as ContractArtifact, | ||||
| @@ -85,7 +89,9 @@ export const artifacts = { | ||||
|     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, | ||||
|     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, | ||||
|     IAssetData: IAssetData as ContractArtifact, | ||||
|   | ||||
| @@ -7,6 +7,7 @@ export * from '../generated-wrappers/balancer_bridge'; | ||||
| export * from '../generated-wrappers/bancor_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/d_o_d_o_bridge'; | ||||
| export * from '../generated-wrappers/dex_forwarder_bridge'; | ||||
| @@ -45,8 +46,10 @@ export * from '../generated-wrappers/mooniswap_bridge'; | ||||
| export * from '../generated-wrappers/multi_asset_proxy'; | ||||
| 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/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_dex_forwarder_bridge'; | ||||
|   | ||||
| @@ -9,6 +9,7 @@ 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 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 DexForwarderBridge from '../test/generated-artifacts/DexForwarderBridge.json'; | ||||
| import * as DODOBridge from '../test/generated-artifacts/DODOBridge.json'; | ||||
| @@ -47,8 +48,10 @@ import * as MStableBridge from '../test/generated-artifacts/MStableBridge.json'; | ||||
| import * as MultiAssetProxy from '../test/generated-artifacts/MultiAssetProxy.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 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 TestDexForwarderBridge from '../test/generated-artifacts/TestDexForwarderBridge.json'; | ||||
| @@ -75,6 +78,7 @@ export const artifacts = { | ||||
|     BancorBridge: BancorBridge as ContractArtifact, | ||||
|     ChaiBridge: ChaiBridge as ContractArtifact, | ||||
|     CreamBridge: CreamBridge as ContractArtifact, | ||||
|     CryptoComBridge: CryptoComBridge as ContractArtifact, | ||||
|     CurveBridge: CurveBridge as ContractArtifact, | ||||
|     DODOBridge: DODOBridge as ContractArtifact, | ||||
|     DexForwarderBridge: DexForwarderBridge as ContractArtifact, | ||||
| @@ -85,7 +89,9 @@ export const artifacts = { | ||||
|     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, | ||||
|     UniswapV2Bridge: UniswapV2Bridge as ContractArtifact, | ||||
|     IAssetData: IAssetData as ContractArtifact, | ||||
|   | ||||
| @@ -12,13 +12,11 @@ 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, | ||||
|     TestBancorBridgeTokenTransferEventArgs as TokenTransferArgs, | ||||
| } from './wrappers'; | ||||
|  | ||||
| blockchainTests.resets('Bancor unit tests', env => { | ||||
| @@ -128,24 +126,6 @@ blockchainTests.resets('Bancor unit tests', env => { | ||||
|             expect(result).to.eq(AssetProxyId.ERC20Bridge); | ||||
|         }); | ||||
|  | ||||
|         it('performs transfer when both tokens are the same', async () => { | ||||
|             const createTokenFn = testContract.createToken(constants.NULL_ADDRESS); | ||||
|             const tokenAddress = await createTokenFn.callAsync(); | ||||
|             await createTokenFn.awaitTransactionSuccessAsync(); | ||||
|  | ||||
|             const { opts, result, logs } = await transferFromAsync({ | ||||
|                 tokenAddressesPath: [tokenAddress, tokenAddress], | ||||
|             }); | ||||
|             expect(result).to.eq(AssetProxyId.ERC20Bridge, 'asset proxy id'); | ||||
|             const transfers = filterLogsToArguments<TokenTransferArgs>(logs, ContractEvents.TokenTransfer); | ||||
|  | ||||
|             expect(transfers.length).to.eq(1); | ||||
|             expect(transfers[0].token).to.eq(tokenAddress, 'input token address'); | ||||
|             expect(transfers[0].from).to.eq(testContract.address); | ||||
|             expect(transfers[0].to).to.eq(opts.toAddress, 'recipient address'); | ||||
|             expect(transfers[0].amount).to.bignumber.eq(opts.amount, 'amount'); | ||||
|         }); | ||||
|  | ||||
|         describe('token -> token', async () => { | ||||
|             it('calls BancorNetwork.convertByPath()', async () => { | ||||
|                 const { opts, result, logs } = await transferFromAsync(); | ||||
|   | ||||
| @@ -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'); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| @@ -7,6 +7,7 @@ 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/cream_bridge'; | ||||
| export * from '../test/generated-wrappers/crypto_com_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'; | ||||
| @@ -45,8 +46,10 @@ export * from '../test/generated-wrappers/mooniswap_bridge'; | ||||
| export * from '../test/generated-wrappers/multi_asset_proxy'; | ||||
| 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/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_dex_forwarder_bridge'; | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
|         "generated-artifacts/BancorBridge.json", | ||||
|         "generated-artifacts/ChaiBridge.json", | ||||
|         "generated-artifacts/CreamBridge.json", | ||||
|         "generated-artifacts/CryptoComBridge.json", | ||||
|         "generated-artifacts/CurveBridge.json", | ||||
|         "generated-artifacts/DODOBridge.json", | ||||
|         "generated-artifacts/DexForwarderBridge.json", | ||||
| @@ -45,8 +46,10 @@ | ||||
|         "generated-artifacts/MultiAssetProxy.json", | ||||
|         "generated-artifacts/Ownable.json", | ||||
|         "generated-artifacts/ShellBridge.json", | ||||
|         "generated-artifacts/SnowSwapBridge.json", | ||||
|         "generated-artifacts/StaticCallProxy.json", | ||||
|         "generated-artifacts/SushiSwapBridge.json", | ||||
|         "generated-artifacts/SwerveBridge.json", | ||||
|         "generated-artifacts/TestBancorBridge.json", | ||||
|         "generated-artifacts/TestChaiBridge.json", | ||||
|         "generated-artifacts/TestDexForwarderBridge.json", | ||||
| @@ -63,6 +66,7 @@ | ||||
|         "test/generated-artifacts/BancorBridge.json", | ||||
|         "test/generated-artifacts/ChaiBridge.json", | ||||
|         "test/generated-artifacts/CreamBridge.json", | ||||
|         "test/generated-artifacts/CryptoComBridge.json", | ||||
|         "test/generated-artifacts/CurveBridge.json", | ||||
|         "test/generated-artifacts/DODOBridge.json", | ||||
|         "test/generated-artifacts/DexForwarderBridge.json", | ||||
| @@ -101,8 +105,10 @@ | ||||
|         "test/generated-artifacts/MultiAssetProxy.json", | ||||
|         "test/generated-artifacts/Ownable.json", | ||||
|         "test/generated-artifacts/ShellBridge.json", | ||||
|         "test/generated-artifacts/SnowSwapBridge.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/TestDexForwarderBridge.json", | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-broker", | ||||
|     "version": "1.1.7", | ||||
|     "version": "1.1.27", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -51,20 +51,20 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/contracts-exchange": "^3.2.8", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/contracts-exchange": "^3.2.28", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -81,14 +81,14 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3" | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-coordinator", | ||||
|     "version": "3.1.8", | ||||
|     "version": "3.1.28", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,17 +52,17 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -79,20 +79,20 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/assert": "^3.0.13", | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contract-addresses": "^4.12.0", | ||||
|         "@0x/contracts-exchange": "^3.2.8", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/json-schemas": "^5.2.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "@0x/assert": "^3.0.21", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contract-addresses": "^6.0.0", | ||||
|         "@0x/contracts-exchange": "^3.2.28", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/json-schemas": "^5.4.1", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "http-status-codes": "^1.3.2" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-dev-utils", | ||||
|     "version": "1.3.6", | ||||
|     "version": "1.3.26", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -41,18 +41,18 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/assert": "^3.0.13", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/assert": "^3.0.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "ethers": "~4.0.4", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "shx": "^0.2.2", | ||||
| @@ -60,10 +60,10 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@types/node": "12.12.54" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -1,4 +1,175 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-erc1155", | ||||
|     "version": "2.1.8", | ||||
|     "version": "2.1.27", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,15 +52,15 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -68,7 +68,7 @@ | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^3.0.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^6.2.0", | ||||
|         "npm-run-all": "^4.1.2", | ||||
| @@ -77,13 +77,13 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "lodash": "^4.17.11" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -1,4 +1,180 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,83 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // SPDX-License-Identifier: Apache-2.0 | ||||
| /* | ||||
|  | ||||
|   Copyright 2020 ZeroEx Intl. | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // SPDX-License-Identifier: Apache-2.0 | ||||
| /* | ||||
|  | ||||
|   Copyright 2020 ZeroEx Intl. | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| // SPDX-License-Identifier: Apache-2.0 | ||||
| /* | ||||
|  | ||||
|   Copyright 2020 ZeroEx Intl. | ||||
| @@ -118,7 +119,7 @@ library LibERC20TokenV06 { | ||||
|     { | ||||
|         tokenDecimals = 18; | ||||
|         (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)); | ||||
|         } | ||||
|     } | ||||
| @@ -141,7 +142,7 @@ library LibERC20TokenV06 { | ||||
|                 spender | ||||
|             ) | ||||
|         ); | ||||
|         if (didSucceed && resultData.length == 32) { | ||||
|         if (didSucceed && resultData.length >= 32) { | ||||
|             allowance_ = LibBytesV06.readUint256(resultData, 0); | ||||
|         } | ||||
|     } | ||||
| @@ -162,7 +163,7 @@ library LibERC20TokenV06 { | ||||
|                 owner | ||||
|             ) | ||||
|         ); | ||||
|         if (didSucceed && resultData.length == 32) { | ||||
|         if (didSucceed && resultData.length >= 32) { | ||||
|             balance = LibBytesV06.readUint256(resultData, 0); | ||||
|         } | ||||
|     } | ||||
| @@ -180,7 +181,7 @@ library LibERC20TokenV06 { | ||||
|         if (resultData.length == 0) { | ||||
|             return true; | ||||
|         } | ||||
|         if (resultData.length == 32) { | ||||
|         if (resultData.length >= 32) { | ||||
|             uint256 result = LibBytesV06.readUint256(resultData, 0); | ||||
|             if (result == 1) { | ||||
|                 return true; | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-erc20", | ||||
|     "version": "3.2.2", | ||||
|     "version": "3.3.6", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -51,18 +51,18 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -70,7 +70,7 @@ | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^3.0.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "lodash": "^4.17.11", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^6.2.0", | ||||
| @@ -79,10 +79,10 @@ | ||||
|         "solhint": "^1.4.1", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7" | ||||
|         "@0x/base-contract": "^6.2.18" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -6,6 +6,7 @@ export { | ||||
|     WETH9Events, | ||||
|     WETH9DepositEventArgs, | ||||
|     WETH9TransferEventArgs, | ||||
|     WETH9WithdrawalEventArgs, | ||||
|     ZRXTokenContract, | ||||
|     DummyERC20TokenTransferEventArgs, | ||||
|     ERC20TokenEventArgs, | ||||
|   | ||||
| @@ -39,8 +39,8 @@ describe('EtherToken', () => { | ||||
|             artifacts.WETH9, | ||||
|             provider, | ||||
|             { | ||||
|                 gasPrice, | ||||
|                 ...txDefaults, | ||||
|                 gasPrice, | ||||
|             }, | ||||
|             artifacts, | ||||
|         ); | ||||
|   | ||||
| @@ -1,4 +1,175 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-erc721", | ||||
|     "version": "3.1.8", | ||||
|     "version": "3.1.27", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,18 +52,18 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -71,7 +71,7 @@ | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^3.0.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "lodash": "^4.17.11", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
|         "mocha": "^6.2.0", | ||||
| @@ -81,10 +81,10 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7" | ||||
|         "@0x/base-contract": "^6.2.18" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-exchange-forwarder", | ||||
|     "version": "4.2.8", | ||||
|     "version": "4.2.28", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,25 +52,25 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-erc1155": "^2.1.8", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/contracts-exchange": "^3.2.8", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-erc1155": "^2.1.27", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/contracts-exchange": "^3.2.28", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -87,12 +87,12 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "ethereum-types": "^3.3.3" | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "ethereum-types": "^3.4.0" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,175 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-exchange-libs", | ||||
|     "version": "4.3.8", | ||||
|     "version": "4.3.27", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,14 +52,14 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/subproviders": "^6.1.5", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/subproviders": "^6.4.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -77,17 +77,17 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3" | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-exchange", | ||||
|     "version": "3.2.8", | ||||
|     "version": "3.2.28", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,21 +52,21 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-multisig": "^4.1.8", | ||||
|         "@0x/contracts-staking": "^2.0.15", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-multisig": "^4.1.28", | ||||
|         "@0x/contracts-staking": "^2.0.35", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -74,7 +74,7 @@ | ||||
|         "chai-as-promised": "^7.1.0", | ||||
|         "chai-bignumber": "^3.0.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "ethereumjs-util": "^5.1.1", | ||||
|         "js-combinatorics": "^0.5.3", | ||||
|         "make-promises-safe": "^1.1.0", | ||||
| @@ -85,16 +85,16 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-erc1155": "^2.1.8", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-erc1155": "^2.1.27", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "lodash": "^4.17.11" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -12,12 +12,12 @@ export abstract class AbstractBalanceAndProxyAllowanceFetcher { | ||||
|      * @param userAddress Ethereum address for which to fetch the balance | ||||
|      * @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 | ||||
|      * @param assetData AssetData for which to fetch the allowance | ||||
|      * @param userAddress Ethereum address for which to fetch the allowance | ||||
|      * @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'; | ||||
|  | ||||
| export abstract class AbstractBalanceAndProxyAllowanceLazyStore { | ||||
|     public abstract async getBalanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||
|     public abstract async getProxyAllowanceAsync(assetData: string, userAddress: string): Promise<BigNumber>; | ||||
|     public abstract getBalanceAsync(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 deleteBalance(assetData: string, userAddress: string): 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 | ||||
|      * @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'; | ||||
|  | ||||
| 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 deleteFilledTakerAmount(orderHash: string): void; | ||||
|     public abstract setIsCancelled(orderHash: string, isCancelled: boolean): void; | ||||
|   | ||||
| @@ -18,6 +18,7 @@ import { | ||||
|     IsolatedExchangeFillEventArgs as FillEventArgs, | ||||
| } from '../wrappers'; | ||||
|  | ||||
| export { Order } from '@0x/types'; | ||||
| export interface AssetBalances { | ||||
|     [assetData: string]: { [address: string]: BigNumber }; | ||||
| } | ||||
| @@ -27,7 +28,6 @@ export interface IsolatedExchangeEvents { | ||||
|     transferFromCalls: DispatchTransferFromCallArgs[]; | ||||
| } | ||||
|  | ||||
| export type Order = Order; | ||||
| export type Numberish = string | number | BigNumber; | ||||
|  | ||||
| export const DEFAULT_GOOD_SIGNATURE = createGoodSignature(); | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "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", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v6.2.22 - _April 1, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.21 - _March 17, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.20 - _February 24, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.19 - _February 10, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.18 - _January 26, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.17 - _January 13, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.16 - _January 4, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.15 - _December 23, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.14 - _December 17, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.13 - _December 16, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.12 - _December 9, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.11 - _December 7, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.10 - _December 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.9 - _November 19, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.8 - _November 13, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.7 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.6 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.5 - _November 2, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.4 - _October 28, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.3 - _October 27, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v6.2.2 - _October 21, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-extensions", | ||||
|     "version": "6.2.2", | ||||
|     "version": "6.2.22", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -52,23 +52,23 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/contracts-exchange": "^3.2.8", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/contracts-exchange": "^3.2.28", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -87,13 +87,13 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "ethereum-types": "^3.3.3" | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "ethereum-types": "^3.4.0" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,94 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1605763885, | ||||
|         "version": "2.7.10", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605320370, | ||||
|         "version": "2.7.9", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605302002, | ||||
|         "version": "2.7.8", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604620645, | ||||
|         "version": "2.7.7", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604385937, | ||||
|         "version": "2.7.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604376968, | ||||
|         "version": "2.7.5", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604355662, | ||||
|         "version": "2.7.4", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603851023, | ||||
|         "version": "2.7.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603833198, | ||||
|         "version": "2.7.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603487270, | ||||
|         "version": "2.7.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "2.7.0", | ||||
|         "changes": [ | ||||
|   | ||||
| @@ -5,6 +5,46 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v2.7.10 - _November 19, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.9 - _November 14, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.8 - _November 13, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.7 - _November 5, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.6 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.5 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.4 - _November 2, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.3 - _October 28, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.2 - _October 27, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.1 - _October 23, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.7.0 - _October 21, 2020_ | ||||
|  | ||||
|     * Update curveBridge tests (#2633) | ||||
|   | ||||
| @@ -0,0 +1,39 @@ | ||||
| /* | ||||
|  | ||||
|   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.6.5; | ||||
|  | ||||
| import "@0x/contracts-zero-ex/contracts/test/TestFixinProtocolFees.sol"; | ||||
| import "@0x/contracts-zero-ex/contracts/src/external/FeeCollectorController.sol"; | ||||
|  | ||||
|  | ||||
| contract TestFixinProtocolFeesIntegration is TestFixinProtocolFees { | ||||
|     constructor( | ||||
|         IEtherTokenV06 weth, | ||||
|         IStaking staking, | ||||
|         uint32 protocolFeeMultiplier | ||||
|     ) | ||||
|         public | ||||
|         TestFixinProtocolFees( | ||||
|             weth, | ||||
|             staking, | ||||
|             new FeeCollectorController(weth, staking), | ||||
|             protocolFeeMultiplier | ||||
|         ) | ||||
|     {} | ||||
| } | ||||
							
								
								
									
										110
									
								
								contracts/integrations/contracts/test/TestStaking.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										110
									
								
								contracts/integrations/contracts/test/TestStaking.sol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,110 @@ | ||||
| /* | ||||
|  | ||||
|   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-staking/contracts/src/Staking.sol"; | ||||
|  | ||||
|  | ||||
| contract TestStaking is | ||||
|     Staking | ||||
| { | ||||
|     IEtherToken public testWeth; | ||||
|  | ||||
|     struct TestPool { | ||||
|         uint96 operatorStake; | ||||
|         uint96 membersStake; | ||||
|     } | ||||
|  | ||||
|     mapping(bytes32 => TestPool) private _testPools; | ||||
|  | ||||
|     constructor(address exchangeAddress, IEtherToken _testWeth) public { | ||||
|         testWeth = _testWeth; | ||||
|  | ||||
|         _addAuthorizedAddress(msg.sender); | ||||
|         init(); | ||||
|         validExchanges[exchangeAddress] = true; | ||||
|         _removeAuthorizedAddressAtIndex(msg.sender, 0); | ||||
|     } | ||||
|  | ||||
|     function advanceEpoch() | ||||
|         external | ||||
|     { | ||||
|         currentEpoch += 1; | ||||
|     } | ||||
|  | ||||
|     /// @dev Create a test pool. | ||||
|     function createTestPool( | ||||
|         bytes32 poolId, | ||||
|         uint96 operatorStake, | ||||
|         uint96 membersStake | ||||
|     ) | ||||
|         external | ||||
|     { | ||||
|         TestPool storage pool = _testPools[poolId]; | ||||
|         pool.operatorStake = operatorStake; | ||||
|         pool.membersStake = membersStake; | ||||
|     } | ||||
|  | ||||
|     function getAggregatedStatsForCurrentEpoch() | ||||
|         external | ||||
|         view | ||||
|         returns (IStructs.AggregatedStats memory) | ||||
|     { | ||||
|         return aggregatedStatsByEpoch[currentEpoch]; | ||||
|     } | ||||
|  | ||||
|     /// @dev Overridden to use test pools. | ||||
|     function getTotalStakeDelegatedToPool(bytes32 poolId) | ||||
|         public | ||||
|         view | ||||
|         returns (IStructs.StoredBalance memory balance) | ||||
|     { | ||||
|         TestPool memory pool = _testPools[poolId]; | ||||
|         uint96 stake = pool.operatorStake + pool.membersStake; | ||||
|         return IStructs.StoredBalance({ | ||||
|             currentEpoch: currentEpoch.downcastToUint64(), | ||||
|             currentEpochBalance: stake, | ||||
|             nextEpochBalance: stake | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     /// @dev Overridden to use test pools. | ||||
|     function getStakeDelegatedToPoolByOwner(address, bytes32 poolId) | ||||
|         public | ||||
|         view | ||||
|         returns (IStructs.StoredBalance memory balance) | ||||
|     { | ||||
|         TestPool memory pool = _testPools[poolId]; | ||||
|         return IStructs.StoredBalance({ | ||||
|             currentEpoch: currentEpoch.downcastToUint64(), | ||||
|             currentEpochBalance: pool.operatorStake, | ||||
|             nextEpochBalance: pool.operatorStake | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     function getWethContract() | ||||
|         public | ||||
|         view | ||||
|         returns (IEtherToken wethContract) | ||||
|     { | ||||
|         return testWeth; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,24 @@ | ||||
| /* | ||||
|  | ||||
|   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.6.5; | ||||
|  | ||||
| import "@0x/contracts-zero-ex/contracts/test/TestWeth.sol"; | ||||
|  | ||||
|  | ||||
| contract TestWethIntegration is TestWeth {} | ||||
| @@ -1,6 +1,7 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-integrations", | ||||
|     "version": "2.7.0", | ||||
|     "version": "2.7.36", | ||||
|     "private": true, | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -38,7 +39,7 @@ | ||||
|     }, | ||||
|     "config": { | ||||
|         "publicInterfaceContracts": "TestFramework", | ||||
|         "abis": "./test/generated-artifacts/@(ChainlinkStopLimit|IChainlinkAggregator|TestChainlinkAggregator|TestContractWrapper|TestDydxUser|TestEth2Dai|TestEth2DaiBridge|TestFramework|TestMainnetAggregatorFills|TestSignatureValidationWallet|TestUniswapBridge|TestUniswapExchange|TestUniswapExchangeFactory).json", | ||||
|         "abis": "./test/generated-artifacts/@(ChainlinkStopLimit|IChainlinkAggregator|TestChainlinkAggregator|TestContractWrapper|TestDydxUser|TestEth2Dai|TestEth2DaiBridge|TestFixinProtocolFeesIntegration|TestFramework|TestMainnetAggregatorFills|TestSignatureValidationWallet|TestStaking|TestUniswapBridge|TestUniswapExchange|TestUniswapExchangeFactory|TestWethIntegration).json", | ||||
|         "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually." | ||||
|     }, | ||||
|     "repository": { | ||||
| @@ -51,24 +52,25 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contract-addresses": "^4.12.0", | ||||
|         "@0x/contract-wrappers": "^13.9.0", | ||||
|         "@0x/contracts-broker": "^1.1.7", | ||||
|         "@0x/contracts-coordinator": "^3.1.8", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-exchange-forwarder": "^4.2.8", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-extensions": "^6.2.2", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contract-addresses": "^6.0.0", | ||||
|         "@0x/contract-wrappers": "^13.15.0", | ||||
|         "@0x/contracts-broker": "^1.1.27", | ||||
|         "@0x/contracts-coordinator": "^3.1.28", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-exchange-forwarder": "^4.2.28", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-extensions": "^6.2.22", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/coordinator-server": "^1.0.5", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/migrations": "^6.4.1", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/migrations": "^8.0.2", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/protocol-utils": "^1.5.0", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@azure/core-asynciterator-polyfill": "^1.0.0", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
| @@ -88,25 +90,25 @@ | ||||
|         "solhint": "^1.4.1", | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/asset-swapper": "0xProject/gitpkg-registry#0x-asset-swapper-v4.6.0-36546480b", | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-erc1155": "^2.1.8", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-erc721": "^3.1.8", | ||||
|         "@0x/contracts-exchange": "^3.2.8", | ||||
|         "@0x/contracts-multisig": "^4.1.8", | ||||
|         "@0x/contracts-staking": "^2.0.15", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-zero-ex": "^0.3.0", | ||||
|         "@0x/subproviders": "^6.1.5", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "@0x/asset-swapper": "^6.7.0", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-erc1155": "^2.1.27", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-erc721": "^3.1.27", | ||||
|         "@0x/contracts-exchange": "^3.2.28", | ||||
|         "@0x/contracts-multisig": "^4.1.28", | ||||
|         "@0x/contracts-staking": "^2.0.35", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-zero-ex": "^0.22.0", | ||||
|         "@0x/subproviders": "^6.4.1", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "ethereumjs-util": "^6.2.0", | ||||
|         "lodash": "^4.17.11" | ||||
|     }, | ||||
|   | ||||
| @@ -1,239 +0,0 @@ | ||||
| import { MarketBuySwapQuote, MarketSellSwapQuote, Orderbook, SwapQuoter } from '@0x/asset-swapper'; | ||||
| import { blockchainTests, expect, Numberish } from '@0x/contracts-test-utils'; | ||||
| import { assetDataUtils } from '@0x/order-utils'; | ||||
| import { FillResults, SignedOrder } from '@0x/types'; | ||||
| import { BigNumber, logUtils } from '@0x/utils'; | ||||
| import * as _ from 'lodash'; | ||||
|  | ||||
| import { TestMainnetAggregatorFillsContract } from '../wrappers'; | ||||
|  | ||||
| import { tokens } from './tokens'; | ||||
|  | ||||
| blockchainTests.live('Aggregator Mainnet Tests', env => { | ||||
|     // Mainnet address of the `TestMainnetAggregatorFills` contract. | ||||
|     const TEST_CONTRACT_ADDRESS = '0x37Ca306F42748b7fe105F89FCBb2CD03D27c8146'; | ||||
|     const TAKER_ADDRESS = '0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B'; // Vitalik | ||||
|     const ORDERBOOK_POLLING_MS = 1000; | ||||
|     const GAS_PRICE = new BigNumber(1); | ||||
|     const TAKER_ASSET_ETH_VALUE = 500e18; | ||||
|     const MIN_BALANCE = 500.1e18; | ||||
|     const SYMBOLS = ['ETH', 'DAI', 'USDC', 'FOAM']; | ||||
|     const TEST_PAIRS = _.flatten(SYMBOLS.map(m => SYMBOLS.filter(t => t !== m).map(t => [m, t]))); | ||||
|     const FILL_VALUES = [1, 10, 1e2, 1e3, 1e4, 2.5e4, 5e4]; | ||||
|  | ||||
|     let testContract: TestMainnetAggregatorFillsContract; | ||||
|     let swapQuoter: SwapQuoter; | ||||
|     let takerEthBalance: BigNumber; | ||||
|     const orderbooks: { [name: string]: Orderbook } = {}; | ||||
|  | ||||
|     async function getTakerOrdersAsync(takerAssetSymbol: string): Promise<SignedOrder[]> { | ||||
|         if (takerAssetSymbol === 'ETH') { | ||||
|             return []; | ||||
|         } | ||||
|         return getOrdersAsync(takerAssetSymbol, 'ETH'); | ||||
|     } | ||||
|  | ||||
|     // Fetches ETH -> taker asset orders for the forwarder contract. | ||||
|     async function getOrdersAsync(makerAssetSymbol: string, takerAssetSymbol: string): Promise<SignedOrder[]> { | ||||
|         const takerTokenAddress = tokens[takerAssetSymbol].address; | ||||
|         const makerTokenAddress = tokens[makerAssetSymbol].address; | ||||
|         const makerAssetData = assetDataUtils.encodeERC20AssetData(makerTokenAddress); | ||||
|         const takerAssetData = assetDataUtils.encodeERC20AssetData(takerTokenAddress); | ||||
|         const orders = _.flatten( | ||||
|             await Promise.all( | ||||
|                 Object.keys(orderbooks).map(async name => | ||||
|                     getOrdersFromOrderBookAsync(name, makerAssetData, takerAssetData), | ||||
|                 ), | ||||
|             ), | ||||
|         ); | ||||
|         const uniqueOrders: SignedOrder[] = []; | ||||
|         for (const order of orders) { | ||||
|             if (!order.makerFee.eq(0) || !order.takerFee.eq(0)) { | ||||
|                 continue; | ||||
|             } | ||||
|             if (uniqueOrders.findIndex(o => isSameOrder(order, o)) === -1) { | ||||
|                 uniqueOrders.push(order); | ||||
|             } | ||||
|         } | ||||
|         return uniqueOrders; | ||||
|     } | ||||
|  | ||||
|     async function getOrdersFromOrderBookAsync( | ||||
|         name: string, | ||||
|         makerAssetData: string, | ||||
|         takerAssetData: string, | ||||
|     ): Promise<SignedOrder[]> { | ||||
|         try { | ||||
|             return (await orderbooks[name].getOrdersAsync(makerAssetData, takerAssetData)).map(r => r.order); | ||||
|         } catch (err) { | ||||
|             logUtils.warn(`Failed to retrieve orders from orderbook "${name}".`); | ||||
|         } | ||||
|         return []; | ||||
|     } | ||||
|  | ||||
|     function isSameOrder(a: SignedOrder, b: SignedOrder): boolean { | ||||
|         for (const [k, v] of Object.entries(a)) { | ||||
|             if (k in (b as any)) { | ||||
|                 if (BigNumber.isBigNumber(v) && !v.eq((b as any)[k])) { | ||||
|                     return false; | ||||
|                 } | ||||
|                 if (v !== (b as any)[k]) { | ||||
|                     return false; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     function toTokenUnits(symbol: string, weis: Numberish): BigNumber { | ||||
|         return new BigNumber(weis).div(new BigNumber(10).pow(tokens[symbol].decimals)); | ||||
|     } | ||||
|  | ||||
|     function fromTokenUnits(symbol: string, units: Numberish): BigNumber { | ||||
|         return new BigNumber(units) | ||||
|             .times(new BigNumber(10).pow(tokens[symbol].decimals)) | ||||
|             .integerValue(BigNumber.ROUND_DOWN); | ||||
|     } | ||||
|  | ||||
|     interface MarketOperationResult { | ||||
|         makerAssetBalanceBefore: BigNumber; | ||||
|         takerAssetBalanceBefore: BigNumber; | ||||
|         makerAssetBalanceAfter: BigNumber; | ||||
|         takerAssetBalanceAfter: BigNumber; | ||||
|         fillResults: FillResults; | ||||
|     } | ||||
|  | ||||
|     // Liquidity is low right now so it's possible we didn't have | ||||
|     // enough taker assets to cover the orders, so occasionally we'll get incomplete | ||||
|     // fills. This function will catch those cases. | ||||
|     // TODO(dorothy-zbornak): Remove this special case when liquidity is up. | ||||
|     function checkHadEnoughTakerAsset( | ||||
|         quote: MarketBuySwapQuote | MarketSellSwapQuote, | ||||
|         result: MarketOperationResult, | ||||
|     ): boolean { | ||||
|         if (result.takerAssetBalanceBefore.gte(quote.worstCaseQuoteInfo.takerAssetAmount)) { | ||||
|             return true; | ||||
|         } | ||||
|         const takerAssetPct = result.takerAssetBalanceBefore | ||||
|             .div(quote.worstCaseQuoteInfo.takerAssetAmount) | ||||
|             .times(100) | ||||
|             .toNumber() | ||||
|             .toFixed(1); | ||||
|         logUtils.warn(`Could not acquire enough taker asset to complete the fill: ${takerAssetPct}%`); | ||||
|         expect(result.fillResults.makerAssetFilledAmount).to.bignumber.lt(quote.worstCaseQuoteInfo.makerAssetAmount); | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     before(async () => { | ||||
|         testContract = new TestMainnetAggregatorFillsContract(TEST_CONTRACT_ADDRESS, env.provider, { | ||||
|             ...env.txDefaults, | ||||
|             gasPrice: GAS_PRICE, | ||||
|             gas: 10e6, | ||||
|         }); | ||||
|         swapQuoter = SwapQuoter.getSwapQuoterForStandardRelayerAPIUrl(env.provider, 'https://api.0x.org/sra'); | ||||
|         // Pool orderbooks because we're desperate for liquidity. | ||||
|         orderbooks.swapQuoter = swapQuoter.orderbook; | ||||
|         orderbooks.bamboo = Orderbook.getOrderbookForPollingProvider({ | ||||
|             httpEndpoint: 'https://sra.bamboorelay.com/0x/v3', | ||||
|             pollingIntervalMs: ORDERBOOK_POLLING_MS, | ||||
|         }); | ||||
|         // TODO(dorothy-zbornak): Uncomment when radar's SRA is up. | ||||
|         // orderbooks.radar = Orderbook.getOrderbookForPollingProvider({ | ||||
|         //     httpEndpoint: 'https://api-v3.radarrelay.com/v3', | ||||
|         //     pollingIntervalMs: ORDERBOOK_POLLING_MS, | ||||
|         // }); | ||||
|         takerEthBalance = await env.web3Wrapper.getBalanceInWeiAsync(TAKER_ADDRESS); | ||||
|     }); | ||||
|  | ||||
|     it('taker has minimum ETH', async () => { | ||||
|         expect(takerEthBalance).to.bignumber.gte(MIN_BALANCE); | ||||
|     }); | ||||
|  | ||||
|     describe('market sells', () => { | ||||
|         for (const [makerSymbol, takerSymbol] of TEST_PAIRS) { | ||||
|             for (const fillValue of FILL_VALUES) { | ||||
|                 const fillAmount = fromTokenUnits(takerSymbol, new BigNumber(fillValue).div(tokens[takerSymbol].price)); | ||||
|                 it(`sell ${toTokenUnits(takerSymbol, fillAmount)} ${takerSymbol} for ${makerSymbol}`, async () => { | ||||
|                     const [quote, takerOrders] = await Promise.all([ | ||||
|                         swapQuoter.getMarketSellSwapQuoteAsync( | ||||
|                             tokens[makerSymbol].address, | ||||
|                             tokens[takerSymbol].address, | ||||
|                             fillAmount, | ||||
|                             { gasPrice: GAS_PRICE }, | ||||
|                         ), | ||||
|                         getTakerOrdersAsync(takerSymbol), | ||||
|                     ]); | ||||
|                     // Buy taker assets from `takerOrders` and and perform a | ||||
|                     // market sell on the bridge orders. | ||||
|                     const fill = await testContract | ||||
|                         .marketSell( | ||||
|                             tokens[makerSymbol].address, | ||||
|                             tokens[takerSymbol].address, | ||||
|                             quote.orders, | ||||
|                             takerOrders, | ||||
|                             quote.orders.map(o => o.signature), | ||||
|                             takerOrders.map(o => o.signature), | ||||
|                             quote.takerAssetFillAmount, | ||||
|                         ) | ||||
|                         .callAsync({ | ||||
|                             value: quote.worstCaseQuoteInfo.protocolFeeInWeiAmount.plus(TAKER_ASSET_ETH_VALUE), | ||||
|                             from: TAKER_ADDRESS, | ||||
|                             gasPrice: quote.gasPrice, | ||||
|                         }); | ||||
|                     if (checkHadEnoughTakerAsset(quote, fill)) { | ||||
|                         expect(fill.fillResults.makerAssetFilledAmount, 'makerAssetFilledAmount').to.bignumber.gte( | ||||
|                             quote.worstCaseQuoteInfo.makerAssetAmount, | ||||
|                         ); | ||||
|                         expect(fill.fillResults.takerAssetFilledAmount, 'takerAssetFilledAmount').to.bignumber.lte( | ||||
|                             quote.takerAssetFillAmount, | ||||
|                         ); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
|  | ||||
|     describe('market buys', () => { | ||||
|         for (const [makerSymbol, takerSymbol] of TEST_PAIRS) { | ||||
|             for (const fillValue of FILL_VALUES) { | ||||
|                 const fillAmount = fromTokenUnits(makerSymbol, new BigNumber(fillValue).div(tokens[makerSymbol].price)); | ||||
|                 it(`buy ${toTokenUnits(makerSymbol, fillAmount)} ${makerSymbol} with ${takerSymbol}`, async () => { | ||||
|                     const [quote, takerOrders] = await Promise.all([ | ||||
|                         swapQuoter.getMarketBuySwapQuoteAsync( | ||||
|                             tokens[makerSymbol].address, | ||||
|                             tokens[takerSymbol].address, | ||||
|                             fillAmount, | ||||
|                             { gasPrice: GAS_PRICE }, | ||||
|                         ), | ||||
|                         getTakerOrdersAsync(takerSymbol), | ||||
|                     ]); | ||||
|                     // Buy taker assets from `takerOrders` and and perform a | ||||
|                     // market buy on the bridge orders. | ||||
|                     const fill = await testContract | ||||
|                         .marketBuy( | ||||
|                             tokens[makerSymbol].address, | ||||
|                             tokens[takerSymbol].address, | ||||
|                             quote.orders, | ||||
|                             takerOrders, | ||||
|                             quote.orders.map(o => o.signature), | ||||
|                             takerOrders.map(o => o.signature), | ||||
|                             quote.makerAssetFillAmount, | ||||
|                         ) | ||||
|                         .callAsync({ | ||||
|                             value: quote.worstCaseQuoteInfo.protocolFeeInWeiAmount.plus(TAKER_ASSET_ETH_VALUE), | ||||
|                             from: TAKER_ADDRESS, | ||||
|                             gasPrice: quote.gasPrice, | ||||
|                         }); | ||||
|                     if (checkHadEnoughTakerAsset(quote, fill)) { | ||||
|                         expect(fill.fillResults.takerAssetFilledAmount, 'takerAssetFilledAmount').to.bignumber.lte( | ||||
|                             quote.worstCaseQuoteInfo.takerAssetAmount, | ||||
|                         ); | ||||
|                         expect(fill.fillResults.makerAssetFilledAmount, 'makerAssetFilledAmount').to.bignumber.gte( | ||||
|                             quote.makerAssetFillAmount, | ||||
|                         ); | ||||
|                     } | ||||
|                 }); | ||||
|             } | ||||
|         } | ||||
|     }); | ||||
| }); | ||||
| @@ -1,77 +0,0 @@ | ||||
| export const tokens: { [symbol: string]: { address: string; decimals: number; price: number } } = { | ||||
|     ETH: { | ||||
|         address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', | ||||
|         decimals: 18, | ||||
|         price: 133, | ||||
|     }, | ||||
|     SAI: { | ||||
|         address: '0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359', | ||||
|         decimals: 18, | ||||
|         price: 1, | ||||
|     }, | ||||
|     DAI: { | ||||
|         address: '0x6B175474E89094C44Da98b954EedeAC495271d0F', | ||||
|         decimals: 18, | ||||
|         price: 1, | ||||
|     }, | ||||
|     USDC: { | ||||
|         address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', | ||||
|         decimals: 6, | ||||
|         price: 1, | ||||
|     }, | ||||
|     WBTC: { | ||||
|         address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', | ||||
|         decimals: 8, | ||||
|         price: 6900, | ||||
|     }, | ||||
|     MKR: { | ||||
|         address: '0x9f8F72aA9304c8B593d555F12eF6589cC3A579A2', | ||||
|         decimals: 18, | ||||
|         price: 454, | ||||
|     }, | ||||
|     BAT: { | ||||
|         address: '0x0D8775F648430679A709E98d2b0Cb6250d2887EF', | ||||
|         decimals: 18, | ||||
|         price: 0.17, | ||||
|     }, | ||||
|     OMG: { | ||||
|         address: '0xd26114cd6EE289AccF82350c8d8487fedB8A0C07', | ||||
|         decimals: 18, | ||||
|         price: 0.65, | ||||
|     }, | ||||
|     ZRX: { | ||||
|         address: '0xE41d2489571d322189246DaFA5ebDe1F4699F498', | ||||
|         decimals: 18, | ||||
|         price: 0.19, | ||||
|     }, | ||||
|     ZIL: { | ||||
|         address: '0x05f4a42e251f2d52b8ed15E9FEdAacFcEF1FAD27', | ||||
|         decimals: 12, | ||||
|         price: 0.004, | ||||
|     }, | ||||
|     FOAM: { | ||||
|         address: '0x4946Fcea7C692606e8908002e55A582af44AC121', | ||||
|         decimals: 18, | ||||
|         price: 0.004, | ||||
|     }, | ||||
|     USDT: { | ||||
|         address: '0xdAC17F958D2ee523a2206206994597C13D831ec7', | ||||
|         decimals: 6, | ||||
|         price: 0.019, | ||||
|     }, | ||||
|     REP: { | ||||
|         address: '0x1985365e9f78359a9B6AD760e32412f4a445E862', | ||||
|         decimals: 18, | ||||
|         price: 8.9, | ||||
|     }, | ||||
|     MANA: { | ||||
|         address: '0x0F5D2fB29fb7d3CFeE444a200298f468908cC942', | ||||
|         decimals: 18, | ||||
|         price: 0.025, | ||||
|     }, | ||||
|     LINK: { | ||||
|         address: '0x514910771AF9Ca656af840dff83E8264EcF986CA', | ||||
|         decimals: 18, | ||||
|         price: 1.8, | ||||
|     }, | ||||
| }; | ||||
| @@ -12,12 +12,15 @@ import * as TestContractWrapper from '../test/generated-artifacts/TestContractWr | ||||
| import * as TestDydxUser from '../test/generated-artifacts/TestDydxUser.json'; | ||||
| import * as TestEth2Dai from '../test/generated-artifacts/TestEth2Dai.json'; | ||||
| import * as TestEth2DaiBridge from '../test/generated-artifacts/TestEth2DaiBridge.json'; | ||||
| import * as TestFixinProtocolFeesIntegration from '../test/generated-artifacts/TestFixinProtocolFeesIntegration.json'; | ||||
| import * as TestFramework from '../test/generated-artifacts/TestFramework.json'; | ||||
| import * as TestMainnetAggregatorFills from '../test/generated-artifacts/TestMainnetAggregatorFills.json'; | ||||
| import * as TestSignatureValidationWallet from '../test/generated-artifacts/TestSignatureValidationWallet.json'; | ||||
| import * as TestStaking from '../test/generated-artifacts/TestStaking.json'; | ||||
| import * as TestUniswapBridge from '../test/generated-artifacts/TestUniswapBridge.json'; | ||||
| import * as TestUniswapExchange from '../test/generated-artifacts/TestUniswapExchange.json'; | ||||
| import * as TestUniswapExchangeFactory from '../test/generated-artifacts/TestUniswapExchangeFactory.json'; | ||||
| import * as TestWethIntegration from '../test/generated-artifacts/TestWethIntegration.json'; | ||||
| export const artifacts = { | ||||
|     ChainlinkStopLimit: ChainlinkStopLimit as ContractArtifact, | ||||
|     IChainlinkAggregator: IChainlinkAggregator as ContractArtifact, | ||||
| @@ -26,10 +29,13 @@ export const artifacts = { | ||||
|     TestDydxUser: TestDydxUser as ContractArtifact, | ||||
|     TestEth2Dai: TestEth2Dai as ContractArtifact, | ||||
|     TestEth2DaiBridge: TestEth2DaiBridge as ContractArtifact, | ||||
|     TestFixinProtocolFeesIntegration: TestFixinProtocolFeesIntegration as ContractArtifact, | ||||
|     TestFramework: TestFramework as ContractArtifact, | ||||
|     TestMainnetAggregatorFills: TestMainnetAggregatorFills as ContractArtifact, | ||||
|     TestSignatureValidationWallet: TestSignatureValidationWallet as ContractArtifact, | ||||
|     TestStaking: TestStaking as ContractArtifact, | ||||
|     TestUniswapBridge: TestUniswapBridge as ContractArtifact, | ||||
|     TestUniswapExchange: TestUniswapExchange as ContractArtifact, | ||||
|     TestUniswapExchangeFactory: TestUniswapExchangeFactory as ContractArtifact, | ||||
|     TestWethIntegration: TestWethIntegration as ContractArtifact, | ||||
| }; | ||||
|   | ||||
| @@ -63,11 +63,9 @@ blockchainTests.fork('DevUtils dydx order validation tests', env => { | ||||
|     let dai: ERC20TokenContract; | ||||
|     let usdc: ERC20TokenContract; | ||||
|     let devUtils: DevUtilsContract; | ||||
|     let accountOwner: string; | ||||
|     let minMarginRatio: number; | ||||
|  | ||||
|     before(async () => { | ||||
|         [accountOwner] = await env.getAccountAddressesAsync(); | ||||
|         dydx = new IDydxContract(DYDX_ADDRESS, env.provider, env.txDefaults); | ||||
|         dai = new ERC20TokenContract(DAI_ADDRESS, env.provider, env.txDefaults); | ||||
|         usdc = new ERC20TokenContract(USDC_ADDRESS, env.provider, env.txDefaults); | ||||
|   | ||||
| @@ -1,426 +0,0 @@ | ||||
| import { ContractAddresses } from '@0x/contract-addresses'; | ||||
| import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20'; | ||||
| import { IExchangeContract } from '@0x/contracts-exchange'; | ||||
| import { blockchainTests, constants, expect, getRandomPortion, verifyEventsFromLogs } from '@0x/contracts-test-utils'; | ||||
| import { | ||||
|     artifacts as exchangeProxyArtifacts, | ||||
|     IZeroExContract, | ||||
|     LogMetadataTransformerContract, | ||||
|     signCallData, | ||||
| } from '@0x/contracts-zero-ex'; | ||||
| import { migrateOnceAsync } from '@0x/migrations'; | ||||
| import { | ||||
|     assetDataUtils, | ||||
|     encodeFillQuoteTransformerData, | ||||
|     encodePayTakerTransformerData, | ||||
|     ETH_TOKEN_ADDRESS, | ||||
|     FillQuoteTransformerSide, | ||||
|     findTransformerNonce, | ||||
|     signatureUtils, | ||||
|     SignedExchangeProxyMetaTransaction, | ||||
| } from '@0x/order-utils'; | ||||
| import { AssetProxyId, Order, SignedOrder } from '@0x/types'; | ||||
| import { BigNumber, hexUtils, ZeroExRevertErrors } from '@0x/utils'; | ||||
| import * as ethjs from 'ethereumjs-util'; | ||||
|  | ||||
| const { MAX_UINT256, NULL_ADDRESS, NULL_BYTES, NULL_BYTES32, ZERO_AMOUNT } = constants; | ||||
|  | ||||
| blockchainTests.resets('exchange proxy - meta-transactions', env => { | ||||
|     const quoteSignerKey = hexUtils.random(); | ||||
|     const quoteSigner = hexUtils.toHex(ethjs.privateToAddress(ethjs.toBuffer(quoteSignerKey))); | ||||
|     let owner: string; | ||||
|     let relayer: string; | ||||
|     let maker: string; | ||||
|     let taker: string; | ||||
|     let flashWalletAddress: string; | ||||
|     let zeroEx: IZeroExContract; | ||||
|     let exchange: IExchangeContract; | ||||
|     let inputToken: DummyERC20TokenContract; | ||||
|     let outputToken: DummyERC20TokenContract; | ||||
|     let feeToken: DummyERC20TokenContract; | ||||
|     let addresses: ContractAddresses; | ||||
|     let protocolFee: BigNumber; | ||||
|     let metadataTransformer: LogMetadataTransformerContract; | ||||
|     const GAS_PRICE = new BigNumber('1e9'); | ||||
|     const MAKER_BALANCE = new BigNumber('100e18'); | ||||
|     const TAKER_BALANCE = new BigNumber('100e18'); | ||||
|     const TAKER_FEE_BALANCE = new BigNumber('100e18'); | ||||
|  | ||||
|     before(async () => { | ||||
|         [, relayer, maker, taker] = await env.getAccountAddressesAsync(); | ||||
|         addresses = await migrateOnceAsync(env.provider); | ||||
|         zeroEx = new IZeroExContract(addresses.exchangeProxy, env.provider, env.txDefaults, { | ||||
|             LogMetadataTransformer: LogMetadataTransformerContract.ABI(), | ||||
|             DummyERC20Token: DummyERC20TokenContract.ABI(), | ||||
|         }); | ||||
|         exchange = new IExchangeContract(addresses.exchange, env.provider, env.txDefaults); | ||||
|         [inputToken, outputToken, feeToken] = await Promise.all( | ||||
|             [...new Array(3)].map(i => | ||||
|                 DummyERC20TokenContract.deployFrom0xArtifactAsync( | ||||
|                     erc20Artifacts.DummyERC20Token, | ||||
|                     env.provider, | ||||
|                     env.txDefaults, | ||||
|                     {}, | ||||
|                     `DummyToken-${i}`, | ||||
|                     `TOK${i}`, | ||||
|                     new BigNumber(18), | ||||
|                     BigNumber.max(MAKER_BALANCE, TAKER_BALANCE), | ||||
|                 ), | ||||
|             ), | ||||
|         ); | ||||
|         // LogMetadataTransformer is not deployed in migrations. | ||||
|         metadataTransformer = await LogMetadataTransformerContract.deployFrom0xArtifactAsync( | ||||
|             exchangeProxyArtifacts.LogMetadataTransformer, | ||||
|             env.provider, | ||||
|             { | ||||
|                 ...env.txDefaults, | ||||
|                 from: addresses.exchangeProxyTransformerDeployer, | ||||
|             }, | ||||
|             {}, | ||||
|         ); | ||||
|         owner = await zeroEx.owner().callAsync(); | ||||
|         protocolFee = await exchange.protocolFeeMultiplier().callAsync(); | ||||
|         flashWalletAddress = await zeroEx.getTransformWallet().callAsync(); | ||||
|         const erc20Proxy = await exchange.getAssetProxy(AssetProxyId.ERC20).callAsync(); | ||||
|         const allowanceTarget = await zeroEx.getAllowanceTarget().callAsync(); | ||||
|         await outputToken.mint(MAKER_BALANCE).awaitTransactionSuccessAsync({ from: maker }); | ||||
|         await inputToken.mint(TAKER_BALANCE).awaitTransactionSuccessAsync({ from: taker }); | ||||
|         await feeToken.mint(TAKER_FEE_BALANCE).awaitTransactionSuccessAsync({ from: taker }); | ||||
|         await outputToken.approve(erc20Proxy, MAX_UINT256).awaitTransactionSuccessAsync({ from: maker }); | ||||
|         await inputToken.approve(allowanceTarget, MAX_UINT256).awaitTransactionSuccessAsync({ from: taker }); | ||||
|         await feeToken.approve(allowanceTarget, MAX_UINT256).awaitTransactionSuccessAsync({ from: taker }); | ||||
|         await zeroEx.setQuoteSigner(quoteSigner).awaitTransactionSuccessAsync({ from: owner }); | ||||
|     }); | ||||
|  | ||||
|     interface Transformation { | ||||
|         deploymentNonce: number; | ||||
|         data: string; | ||||
|     } | ||||
|  | ||||
|     interface SwapInfo { | ||||
|         inputTokenAddress: string; | ||||
|         outputTokenAddress: string; | ||||
|         inputTokenAmount: BigNumber; | ||||
|         minOutputTokenAmount: BigNumber; | ||||
|         transformations: Transformation[]; | ||||
|         orders: SignedOrder[]; | ||||
|     } | ||||
|  | ||||
|     async function generateSwapAsync(orderFields: Partial<Order> = {}, isRfqt: boolean = false): Promise<SwapInfo> { | ||||
|         const order = await signatureUtils.ecSignTypedDataOrderAsync( | ||||
|             env.provider, | ||||
|             { | ||||
|                 chainId: 1337, | ||||
|                 exchangeAddress: exchange.address, | ||||
|                 expirationTimeSeconds: new BigNumber(Date.now()), | ||||
|                 salt: new BigNumber(hexUtils.random()), | ||||
|                 feeRecipientAddress: NULL_ADDRESS, | ||||
|                 senderAddress: NULL_ADDRESS, | ||||
|                 takerAddress: isRfqt ? flashWalletAddress : NULL_ADDRESS, | ||||
|                 makerAddress: maker, | ||||
|                 makerAssetData: assetDataUtils.encodeERC20AssetData(outputToken.address), | ||||
|                 takerAssetData: assetDataUtils.encodeERC20AssetData(inputToken.address), | ||||
|                 makerFeeAssetData: NULL_BYTES, | ||||
|                 takerFeeAssetData: NULL_BYTES, | ||||
|                 takerAssetAmount: getRandomPortion(TAKER_BALANCE), | ||||
|                 makerAssetAmount: getRandomPortion(MAKER_BALANCE), | ||||
|                 makerFee: ZERO_AMOUNT, | ||||
|                 takerFee: ZERO_AMOUNT, | ||||
|                 ...orderFields, | ||||
|             }, | ||||
|             maker, | ||||
|         ); | ||||
|         const transformations = [ | ||||
|             { | ||||
|                 deploymentNonce: findTransformerNonce( | ||||
|                     addresses.transformers.fillQuoteTransformer, | ||||
|                     addresses.exchangeProxyTransformerDeployer, | ||||
|                 ), | ||||
|                 data: encodeFillQuoteTransformerData({ | ||||
|                     orders: [order], | ||||
|                     signatures: [order.signature], | ||||
|                     buyToken: outputToken.address, | ||||
|                     sellToken: inputToken.address, | ||||
|                     fillAmount: order.takerAssetAmount, | ||||
|                     maxOrderFillAmounts: [], | ||||
|                     refundReceiver: hexUtils.leftPad(2, 20), // Send refund to sender. | ||||
|                     rfqtTakerAddress: isRfqt ? taker : NULL_ADDRESS, | ||||
|                     side: FillQuoteTransformerSide.Sell, | ||||
|                 }), | ||||
|             }, | ||||
|             { | ||||
|                 deploymentNonce: findTransformerNonce( | ||||
|                     addresses.transformers.payTakerTransformer, | ||||
|                     addresses.exchangeProxyTransformerDeployer, | ||||
|                 ), | ||||
|                 data: encodePayTakerTransformerData({ | ||||
|                     tokens: [inputToken.address, outputToken.address, ETH_TOKEN_ADDRESS], | ||||
|                     amounts: [MAX_UINT256, MAX_UINT256, MAX_UINT256], | ||||
|                 }), | ||||
|             }, | ||||
|             { | ||||
|                 deploymentNonce: findTransformerNonce( | ||||
|                     metadataTransformer.address, | ||||
|                     addresses.exchangeProxyTransformerDeployer, | ||||
|                 ), | ||||
|                 data: NULL_BYTES, | ||||
|             }, | ||||
|         ]; | ||||
|         return { | ||||
|             transformations, | ||||
|             orders: [order], | ||||
|             inputTokenAddress: inputToken.address, | ||||
|             outputTokenAddress: outputToken.address, | ||||
|             inputTokenAmount: order.takerAssetAmount, | ||||
|             minOutputTokenAmount: order.makerAssetAmount, | ||||
|         }; | ||||
|     } | ||||
|  | ||||
|     function getSwapData(swap: SwapInfo): string { | ||||
|         return zeroEx | ||||
|             .transformERC20( | ||||
|                 swap.inputTokenAddress, | ||||
|                 swap.outputTokenAddress, | ||||
|                 swap.inputTokenAmount, | ||||
|                 swap.minOutputTokenAmount, | ||||
|                 swap.transformations, | ||||
|             ) | ||||
|             .getABIEncodedTransactionData(); | ||||
|     } | ||||
|  | ||||
|     function getSignedSwapData(swap: SwapInfo, signerKey?: string): string { | ||||
|         return signCallData( | ||||
|             zeroEx | ||||
|                 .transformERC20( | ||||
|                     swap.inputTokenAddress, | ||||
|                     swap.outputTokenAddress, | ||||
|                     swap.inputTokenAmount, | ||||
|                     swap.minOutputTokenAmount, | ||||
|                     swap.transformations, | ||||
|                 ) | ||||
|                 .getABIEncodedTransactionData(), | ||||
|             signerKey ? signerKey : quoteSignerKey, | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     async function createMetaTransactionAsync( | ||||
|         data: string, | ||||
|         value: BigNumber, | ||||
|         fee?: BigNumber | number, | ||||
|     ): Promise<SignedExchangeProxyMetaTransaction> { | ||||
|         return signatureUtils.ecSignTypedDataExchangeProxyMetaTransactionAsync( | ||||
|             env.provider, | ||||
|             { | ||||
|                 value, | ||||
|                 signer: taker, | ||||
|                 sender: relayer, | ||||
|                 minGasPrice: GAS_PRICE, | ||||
|                 maxGasPrice: GAS_PRICE, | ||||
|                 expirationTimeSeconds: new BigNumber(Math.floor(Date.now() / 1000) + 60), | ||||
|                 salt: new BigNumber(hexUtils.random()), | ||||
|                 callData: data, | ||||
|                 feeToken: feeToken.address, | ||||
|                 feeAmount: fee !== undefined ? new BigNumber(fee) : getRandomPortion(TAKER_FEE_BALANCE), | ||||
|                 domain: { | ||||
|                     chainId: 1, | ||||
|                     name: 'ZeroEx', | ||||
|                     version: '1.0.0', | ||||
|                     verifyingContract: zeroEx.address, | ||||
|                 }, | ||||
|             }, | ||||
|             taker, | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     it('can call `transformERC20()` with signed calldata and no relayer fee', async () => { | ||||
|         const swap = await generateSwapAsync(); | ||||
|         const callDataHash = hexUtils.hash(getSwapData(swap)); | ||||
|         const signedSwapData = getSignedSwapData(swap); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(signedSwapData, _protocolFee, 0); | ||||
|         const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer); | ||||
|         const receipt = await zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         const relayerEthRefund = relayerEthBalanceBefore | ||||
|             .minus(await env.web3Wrapper.getBalanceInWeiAsync(relayer)) | ||||
|             .minus(GAS_PRICE.times(receipt.gasUsed)); | ||||
|         // Ensure the relayer got back the unused protocol fees. | ||||
|         expect(relayerEthRefund).to.bignumber.eq(protocolFee.times(GAS_PRICE)); | ||||
|         // Ensure the relayer got paid no mtx fees. | ||||
|         expect(await feeToken.balanceOf(relayer).callAsync()).to.bignumber.eq(0); | ||||
|         // Ensure the taker got output tokens. | ||||
|         expect(await outputToken.balanceOf(taker).callAsync()).to.bignumber.eq(swap.minOutputTokenAmount); | ||||
|         // Ensure the maker got input tokens. | ||||
|         expect(await inputToken.balanceOf(maker).callAsync()).to.bignumber.eq(swap.inputTokenAmount); | ||||
|         // Check events. | ||||
|         verifyEventsFromLogs( | ||||
|             receipt.logs, | ||||
|             [ | ||||
|                 { | ||||
|                     taker, | ||||
|                     callDataHash, | ||||
|                     sender: zeroEx.address, | ||||
|                     data: NULL_BYTES, | ||||
|                 }, | ||||
|             ], | ||||
|             'TransformerMetadata', | ||||
|         ); | ||||
|     }); | ||||
|  | ||||
|     it('can call `transformERC20()` with signed calldata and a relayer fee', async () => { | ||||
|         const swap = await generateSwapAsync(); | ||||
|         const callDataHash = hexUtils.hash(getSwapData(swap)); | ||||
|         const signedSwapData = getSignedSwapData(swap); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(signedSwapData, _protocolFee); | ||||
|         const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer); | ||||
|         const receipt = await zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         const relayerEthRefund = relayerEthBalanceBefore | ||||
|             .minus(await env.web3Wrapper.getBalanceInWeiAsync(relayer)) | ||||
|             .minus(GAS_PRICE.times(receipt.gasUsed)); | ||||
|         // Ensure the relayer got back the unused protocol fees. | ||||
|         expect(relayerEthRefund).to.bignumber.eq(protocolFee.times(GAS_PRICE)); | ||||
|         // Ensure the relayer got paid mtx fees. | ||||
|         expect(await feeToken.balanceOf(relayer).callAsync()).to.bignumber.eq(mtx.feeAmount); | ||||
|         // Ensure the taker got output tokens. | ||||
|         expect(await outputToken.balanceOf(taker).callAsync()).to.bignumber.eq(swap.minOutputTokenAmount); | ||||
|         // Ensure the maker got input tokens. | ||||
|         expect(await inputToken.balanceOf(maker).callAsync()).to.bignumber.eq(swap.inputTokenAmount); | ||||
|         // Check events. | ||||
|         verifyEventsFromLogs( | ||||
|             receipt.logs, | ||||
|             [ | ||||
|                 { | ||||
|                     taker, | ||||
|                     callDataHash, | ||||
|                     sender: zeroEx.address, | ||||
|                     data: NULL_BYTES, | ||||
|                 }, | ||||
|             ], | ||||
|             'TransformerMetadata', | ||||
|         ); | ||||
|     }); | ||||
|  | ||||
|     it('can call `transformERC20()` with wrongly signed calldata and a relayer fee', async () => { | ||||
|         const swap = await generateSwapAsync(); | ||||
|         const signedSwapData = getSignedSwapData(swap, hexUtils.random()); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(signedSwapData, _protocolFee); | ||||
|         const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer); | ||||
|         const receipt = await zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         const relayerEthRefund = relayerEthBalanceBefore | ||||
|             .minus(await env.web3Wrapper.getBalanceInWeiAsync(relayer)) | ||||
|             .minus(GAS_PRICE.times(receipt.gasUsed)); | ||||
|         // Ensure the relayer got back the unused protocol fees. | ||||
|         expect(relayerEthRefund).to.bignumber.eq(protocolFee.times(GAS_PRICE)); | ||||
|         // Ensure the relayer got paid mtx fees. | ||||
|         expect(await feeToken.balanceOf(relayer).callAsync()).to.bignumber.eq(mtx.feeAmount); | ||||
|         // Ensure the taker got output tokens. | ||||
|         expect(await outputToken.balanceOf(taker).callAsync()).to.bignumber.eq(swap.minOutputTokenAmount); | ||||
|         // Ensure the maker got input tokens. | ||||
|         expect(await inputToken.balanceOf(maker).callAsync()).to.bignumber.eq(swap.inputTokenAmount); | ||||
|         // Check events. | ||||
|         verifyEventsFromLogs( | ||||
|             receipt.logs, | ||||
|             [ | ||||
|                 { | ||||
|                     taker, | ||||
|                     // Only signed calldata should have a nonzero hash. | ||||
|                     callDataHash: NULL_BYTES32, | ||||
|                     sender: zeroEx.address, | ||||
|                     data: NULL_BYTES, | ||||
|                 }, | ||||
|             ], | ||||
|             'TransformerMetadata', | ||||
|         ); | ||||
|     }); | ||||
|  | ||||
|     it('`transformERC20()` can fill RFQT order if calldata is signed', async () => { | ||||
|         const swap = await generateSwapAsync({}, true); | ||||
|         const callDataHash = hexUtils.hash(getSwapData(swap)); | ||||
|         const signedSwapData = getSignedSwapData(swap); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(signedSwapData, _protocolFee, 0); | ||||
|         const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer); | ||||
|         const receipt = await zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         const relayerEthRefund = relayerEthBalanceBefore | ||||
|             .minus(await env.web3Wrapper.getBalanceInWeiAsync(relayer)) | ||||
|             .minus(GAS_PRICE.times(receipt.gasUsed)); | ||||
|         // Ensure the relayer got back the unused protocol fees. | ||||
|         expect(relayerEthRefund).to.bignumber.eq(protocolFee.times(GAS_PRICE)); | ||||
|         // Ensure the relayer got paid no mtx fees. | ||||
|         expect(await feeToken.balanceOf(relayer).callAsync()).to.bignumber.eq(0); | ||||
|         // Ensure the taker got output tokens. | ||||
|         expect(await outputToken.balanceOf(taker).callAsync()).to.bignumber.eq(swap.minOutputTokenAmount); | ||||
|         // Ensure the maker got input tokens. | ||||
|         expect(await inputToken.balanceOf(maker).callAsync()).to.bignumber.eq(swap.inputTokenAmount); | ||||
|         // Check events. | ||||
|         verifyEventsFromLogs( | ||||
|             receipt.logs, | ||||
|             [ | ||||
|                 { | ||||
|                     taker, | ||||
|                     callDataHash, | ||||
|                     sender: zeroEx.address, | ||||
|                     data: NULL_BYTES, | ||||
|                 }, | ||||
|             ], | ||||
|             'TransformerMetadata', | ||||
|         ); | ||||
|     }); | ||||
|  | ||||
|     it('`transformERC20()` can fill RFQT order if calldata is not signed but no quote signer configured', async () => { | ||||
|         const swap = await generateSwapAsync({}, true); | ||||
|         const callData = getSwapData(swap); | ||||
|         const callDataHash = hexUtils.hash(callData); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(callData, _protocolFee, 0); | ||||
|         const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer); | ||||
|         await zeroEx.setQuoteSigner(NULL_ADDRESS).awaitTransactionSuccessAsync({ from: owner }); | ||||
|         const receipt = await zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         const relayerEthRefund = relayerEthBalanceBefore | ||||
|             .minus(await env.web3Wrapper.getBalanceInWeiAsync(relayer)) | ||||
|             .minus(GAS_PRICE.times(receipt.gasUsed)); | ||||
|         // Ensure the relayer got back the unused protocol fees. | ||||
|         expect(relayerEthRefund).to.bignumber.eq(protocolFee.times(GAS_PRICE)); | ||||
|         // Ensure the relayer got paid no mtx fees. | ||||
|         expect(await feeToken.balanceOf(relayer).callAsync()).to.bignumber.eq(0); | ||||
|         // Ensure the taker got output tokens. | ||||
|         expect(await outputToken.balanceOf(taker).callAsync()).to.bignumber.eq(swap.minOutputTokenAmount); | ||||
|         // Ensure the maker got input tokens. | ||||
|         expect(await inputToken.balanceOf(maker).callAsync()).to.bignumber.eq(swap.inputTokenAmount); | ||||
|         // Check events. | ||||
|         verifyEventsFromLogs( | ||||
|             receipt.logs, | ||||
|             [ | ||||
|                 { | ||||
|                     taker, | ||||
|                     callDataHash, | ||||
|                     sender: zeroEx.address, | ||||
|                     data: NULL_BYTES, | ||||
|                 }, | ||||
|             ], | ||||
|             'TransformerMetadata', | ||||
|         ); | ||||
|     }); | ||||
|  | ||||
|     it('`transformERC20()` cannot fill RFQT order if calldata is not signed', async () => { | ||||
|         const swap = await generateSwapAsync({}, true); | ||||
|         const callData = getSwapData(swap); | ||||
|         const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed. | ||||
|         const mtx = await createMetaTransactionAsync(callData, _protocolFee, 0); | ||||
|         const tx = zeroEx | ||||
|             .executeMetaTransaction(mtx, mtx.signature) | ||||
|             .awaitTransactionSuccessAsync({ from: relayer, value: mtx.value, gasPrice: GAS_PRICE }); | ||||
|         return expect(tx).to.revertWith(new ZeroExRevertErrors.MetaTransactions.MetaTransactionCallFailedError()); | ||||
|     }); | ||||
| }); | ||||
| @@ -19,5 +19,5 @@ export function filterActorsByRole<TClass extends Constructor>( | ||||
|     actors: Actor[], | ||||
|     role: TClass, | ||||
| ): Array<InstanceType<typeof role>> { | ||||
|     return actors.filter(actor => actor.mixins.includes(role.name)) as InstanceType<typeof role>; | ||||
|     return actors.filter(actor => actor.mixins.includes(role.name)) as Array<InstanceType<typeof role>>; | ||||
| } | ||||
|   | ||||
| @@ -10,9 +10,12 @@ export * from '../test/generated-wrappers/test_contract_wrapper'; | ||||
| export * from '../test/generated-wrappers/test_dydx_user'; | ||||
| export * from '../test/generated-wrappers/test_eth2_dai'; | ||||
| export * from '../test/generated-wrappers/test_eth2_dai_bridge'; | ||||
| export * from '../test/generated-wrappers/test_fixin_protocol_fees_integration'; | ||||
| export * from '../test/generated-wrappers/test_framework'; | ||||
| export * from '../test/generated-wrappers/test_mainnet_aggregator_fills'; | ||||
| export * from '../test/generated-wrappers/test_signature_validation_wallet'; | ||||
| export * from '../test/generated-wrappers/test_staking'; | ||||
| export * from '../test/generated-wrappers/test_uniswap_bridge'; | ||||
| export * from '../test/generated-wrappers/test_uniswap_exchange'; | ||||
| export * from '../test/generated-wrappers/test_uniswap_exchange_factory'; | ||||
| export * from '../test/generated-wrappers/test_weth_integration'; | ||||
|   | ||||
| @@ -0,0 +1,85 @@ | ||||
| import { blockchainTests, constants, expect } from '@0x/contracts-test-utils'; | ||||
| import { BigNumber, hexUtils } from '@0x/utils'; | ||||
|  | ||||
| import { artifacts } from '../artifacts'; | ||||
| import { | ||||
|     TestFixinProtocolFeesIntegrationContract, | ||||
|     TestStakingContract, | ||||
|     TestWethIntegrationContract, | ||||
| } from '../wrappers'; | ||||
|  | ||||
| blockchainTests.resets('ProtocolFeeIntegration', env => { | ||||
|     const FEE_MULTIPLIER = 70e3; | ||||
|     let owner: string; | ||||
|     let taker: string; | ||||
|     let protocolFees: TestFixinProtocolFeesIntegrationContract; | ||||
|     let staking: TestStakingContract; | ||||
|     let weth: TestWethIntegrationContract; | ||||
|     let singleFeeAmount: BigNumber; | ||||
|  | ||||
|     before(async () => { | ||||
|         [owner, taker] = await env.getAccountAddressesAsync(); | ||||
|         weth = await TestWethIntegrationContract.deployFrom0xArtifactAsync( | ||||
|             artifacts.TestWethIntegration, | ||||
|             env.provider, | ||||
|             env.txDefaults, | ||||
|             artifacts, | ||||
|         ); | ||||
|         staking = await TestStakingContract.deployFrom0xArtifactAsync( | ||||
|             artifacts.TestStaking, | ||||
|             env.provider, | ||||
|             env.txDefaults, | ||||
|             artifacts, | ||||
|             constants.NULL_ADDRESS, // exchange address, which we don't know yet | ||||
|             weth.address, | ||||
|         ); | ||||
|         protocolFees = await TestFixinProtocolFeesIntegrationContract.deployFrom0xArtifactAsync( | ||||
|             artifacts.TestFixinProtocolFeesIntegration, | ||||
|             env.provider, | ||||
|             { ...env.txDefaults, from: taker }, | ||||
|             artifacts, | ||||
|             weth.address, | ||||
|             staking.address, | ||||
|             FEE_MULTIPLIER, | ||||
|         ); | ||||
|         await staking.addAuthorizedAddress(owner).awaitTransactionSuccessAsync(); | ||||
|         await staking.addExchangeAddress(protocolFees.address).awaitTransactionSuccessAsync({ from: owner }); | ||||
|         await weth.mint(taker, constants.ONE_ETHER).awaitTransactionSuccessAsync(); | ||||
|         await weth.approve(protocolFees.address, constants.ONE_ETHER).awaitTransactionSuccessAsync({ from: taker }); | ||||
|  | ||||
|         singleFeeAmount = await protocolFees.getSingleProtocolFee().callAsync(); | ||||
|     }); | ||||
|  | ||||
|     describe('fee collection integration', () => { | ||||
|         const pool0 = constants.NULL_BYTES32; | ||||
|         const poolId = hexUtils.random(); | ||||
|  | ||||
|         it('should collect fees for pool 0', async () => { | ||||
|             await protocolFees.collectProtocolFee(pool0).awaitTransactionSuccessAsync({ value: singleFeeAmount }); | ||||
|             await protocolFees.transferFeesForPool(pool0).awaitTransactionSuccessAsync(); | ||||
|  | ||||
|             // Fees in the pool bytes32(0) don't get attributed to a pool. | ||||
|             await expect( | ||||
|                 (await staking.getStakingPoolStatsThisEpoch(pool0).callAsync()).feesCollected, | ||||
|             ).to.bignumber.equal(constants.ZERO_AMOUNT); | ||||
|  | ||||
|             // Expected amount is singleFeeAmount - 1 because we leave 1 wei of WETH behind for future gas savings. | ||||
|             return expect(await weth.balanceOf(staking.address).callAsync()).to.bignumber.equal( | ||||
|                 singleFeeAmount.minus(1), | ||||
|             ); | ||||
|         }); | ||||
|  | ||||
|         it('should collect fees for non-zero pool', async () => { | ||||
|             const eth100 = constants.ONE_ETHER.multipliedBy(100); | ||||
|             await staking.createTestPool(poolId, eth100, eth100).awaitTransactionSuccessAsync(); | ||||
|  | ||||
|             await protocolFees.collectProtocolFee(poolId).awaitTransactionSuccessAsync({ value: singleFeeAmount }); | ||||
|             await protocolFees.transferFeesForPool(poolId).awaitTransactionSuccessAsync(); | ||||
|  | ||||
|             // Expected amount is singleFeeAmount - 1 because we leave 1 wei of WETH behind for future gas savings. | ||||
|             return expect( | ||||
|                 (await staking.getStakingPoolStatsThisEpoch(poolId).callAsync()).feesCollected, | ||||
|             ).to.bignumber.equal(singleFeeAmount.minus(1)); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| @@ -11,11 +11,14 @@ | ||||
|         "test/generated-artifacts/TestDydxUser.json", | ||||
|         "test/generated-artifacts/TestEth2Dai.json", | ||||
|         "test/generated-artifacts/TestEth2DaiBridge.json", | ||||
|         "test/generated-artifacts/TestFixinProtocolFeesIntegration.json", | ||||
|         "test/generated-artifacts/TestFramework.json", | ||||
|         "test/generated-artifacts/TestMainnetAggregatorFills.json", | ||||
|         "test/generated-artifacts/TestSignatureValidationWallet.json", | ||||
|         "test/generated-artifacts/TestStaking.json", | ||||
|         "test/generated-artifacts/TestUniswapBridge.json", | ||||
|         "test/generated-artifacts/TestUniswapExchange.json", | ||||
|         "test/generated-artifacts/TestUniswapExchangeFactory.json" | ||||
|         "test/generated-artifacts/TestUniswapExchangeFactory.json", | ||||
|         "test/generated-artifacts/TestWethIntegration.json" | ||||
|     ] | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1617311315, | ||||
|         "version": "4.1.28", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1616005394, | ||||
|         "version": "4.1.27", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1614141718, | ||||
|         "version": "4.1.26", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1612950500, | ||||
|         "version": "4.1.25", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1611648096, | ||||
|         "version": "4.1.24", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1610510890, | ||||
|         "version": "4.1.23", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1609802516, | ||||
|         "version": "4.1.22", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608692071, | ||||
|         "version": "4.1.21", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608245516, | ||||
|         "version": "4.1.20", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608105788, | ||||
|         "version": "4.1.19", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607485227, | ||||
|         "version": "4.1.18", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607381756, | ||||
|         "version": "4.1.17", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1606961263, | ||||
|         "version": "4.1.16", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605763885, | ||||
|         "version": "4.1.15", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605302002, | ||||
|         "version": "4.1.14", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604385937, | ||||
|         "version": "4.1.13", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604376968, | ||||
|         "version": "4.1.12", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604355662, | ||||
|         "version": "4.1.11", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603851023, | ||||
|         "version": "4.1.10", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603833198, | ||||
|         "version": "4.1.9", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603265572, | ||||
|         "version": "4.1.8", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v4.1.28 - _April 1, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.27 - _March 17, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.26 - _February 24, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.25 - _February 10, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.24 - _January 26, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.23 - _January 13, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.22 - _January 4, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.21 - _December 23, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.20 - _December 17, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.19 - _December 16, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.18 - _December 9, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.17 - _December 7, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.16 - _December 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.15 - _November 19, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.14 - _November 13, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.13 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.12 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.11 - _November 2, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.10 - _October 28, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.9 - _October 27, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v4.1.8 - _October 21, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-multisig", | ||||
|     "version": "4.1.8", | ||||
|     "version": "4.1.28", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -49,18 +49,18 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/mocha": "^5.2.7", | ||||
|         "@types/node": "12.12.54", | ||||
| @@ -75,12 +75,12 @@ | ||||
|         "shx": "^0.2.2", | ||||
|         "solhint": "^1.4.1", | ||||
|         "tslint": "5.11.0", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "ethereum-types": "^3.3.3" | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "ethereum-types": "^3.4.0" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|         "access": "public" | ||||
|   | ||||
| @@ -1,4 +1,184 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1617311315, | ||||
|         "version": "2.0.35", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1616005394, | ||||
|         "version": "2.0.34", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1614141718, | ||||
|         "version": "2.0.33", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1612950500, | ||||
|         "version": "2.0.32", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1611648096, | ||||
|         "version": "2.0.31", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1610510890, | ||||
|         "version": "2.0.30", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1609802516, | ||||
|         "version": "2.0.29", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608692071, | ||||
|         "version": "2.0.28", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608245516, | ||||
|         "version": "2.0.27", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608105788, | ||||
|         "version": "2.0.26", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607485227, | ||||
|         "version": "2.0.25", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607381756, | ||||
|         "version": "2.0.24", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1606961263, | ||||
|         "version": "2.0.23", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605763885, | ||||
|         "version": "2.0.22", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605302002, | ||||
|         "version": "2.0.21", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604385937, | ||||
|         "version": "2.0.20", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604376968, | ||||
|         "version": "2.0.19", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604355662, | ||||
|         "version": "2.0.18", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603851023, | ||||
|         "version": "2.0.17", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603833198, | ||||
|         "version": "2.0.16", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603265572, | ||||
|         "version": "2.0.15", | ||||
|   | ||||
| @@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v2.0.35 - _April 1, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.34 - _March 17, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.33 - _February 24, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.32 - _February 10, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.31 - _January 26, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.30 - _January 13, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.29 - _January 4, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.28 - _December 23, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.27 - _December 17, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.26 - _December 16, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.25 - _December 9, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.24 - _December 7, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.23 - _December 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.22 - _November 19, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.21 - _November 13, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.20 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.19 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.18 - _November 2, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.17 - _October 28, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.16 - _October 27, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v2.0.15 - _October 21, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|     "artifactsDir": "./test/generated-artifacts", | ||||
|     "contractsDir": "./contracts", | ||||
|     "useDockerisedSolc": false, | ||||
|     "isOfflineMode": true, | ||||
|     "isOfflineMode": false, | ||||
|     "shouldSaveStandardInput": true, | ||||
|     "compilerSettings": { | ||||
|         "evmVersion": "istanbul", | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-staking", | ||||
|     "version": "2.0.15", | ||||
|     "version": "2.0.35", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -53,20 +53,20 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens", | ||||
|     "devDependencies": { | ||||
|         "@0x/abi-gen": "^5.4.3", | ||||
|         "@0x/contracts-asset-proxy": "^3.5.0", | ||||
|         "@0x/contracts-dev-utils": "^1.3.6", | ||||
|         "@0x/contracts-erc20": "^3.2.2", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.8", | ||||
|         "@0x/contracts-gen": "2.0.13", | ||||
|         "@0x/contracts-utils": "^4.5.2", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/abi-gen": "^5.4.21", | ||||
|         "@0x/contracts-asset-proxy": "^3.7.9", | ||||
|         "@0x/contracts-dev-utils": "^1.3.26", | ||||
|         "@0x/contracts-erc20": "^3.3.6", | ||||
|         "@0x/contracts-exchange-libs": "^4.3.27", | ||||
|         "@0x/contracts-gen": "^2.0.32", | ||||
|         "@0x/contracts-utils": "^4.7.6", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/ts-doc-gen": "^0.0.28", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/lodash": "4.14.104", | ||||
|         "@types/node": "12.12.54", | ||||
|         "chai": "^4.0.1", | ||||
| @@ -84,14 +84,14 @@ | ||||
|         "truffle": "^5.0.32", | ||||
|         "tslint": "5.11.0", | ||||
|         "typedoc": "~0.16.11", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contracts-test-utils": "^5.3.5", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contracts-test-utils": "^5.3.24", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "ethereumjs-util": "^5.1.1" | ||||
|     }, | ||||
|     "publishConfig": { | ||||
|   | ||||
| @@ -4,6 +4,7 @@ import { DecodedLogArgs, LogWithDecodedArgs } from 'ethereum-types'; | ||||
|  | ||||
| import { constants as stakingConstants } from './constants'; | ||||
|  | ||||
| export { Numberish } from '@0x/contracts-test-utils'; | ||||
| // tslint:disable:max-classes-per-file | ||||
|  | ||||
| export interface StakingParams { | ||||
| @@ -259,5 +260,3 @@ export class AggregatedStats { | ||||
| export interface AggregatedStatsByEpoch { | ||||
|     [epoch: string]: AggregatedStats; | ||||
| } | ||||
|  | ||||
| export type Numberish = Numberish; | ||||
|   | ||||
| @@ -12,7 +12,6 @@ import { | ||||
|  | ||||
| blockchainTests.resets('Exchange Unit Tests', env => { | ||||
|     // Addresses | ||||
|     let nonOwner: string; | ||||
|     let owner: string; | ||||
|     let nonExchange: string; | ||||
|     let exchange: string; | ||||
| @@ -24,7 +23,7 @@ blockchainTests.resets('Exchange Unit Tests', env => { | ||||
|  | ||||
|     before(async () => { | ||||
|         // Set up addresses for testing. | ||||
|         [nonOwner, owner, nonExchange, exchange, nonAuthority, authority] = await env.getAccountAddressesAsync(); | ||||
|         [, owner, nonExchange, exchange, nonAuthority, authority] = await env.getAccountAddressesAsync(); | ||||
|  | ||||
|         // Deploy the Exchange Manager contract. | ||||
|         exchangeManager = await TestExchangeManagerContract.deployFrom0xArtifactAsync( | ||||
|   | ||||
| @@ -543,7 +543,7 @@ blockchainTests.resets('Finalizer unit tests', env => { | ||||
|             const expectedPoolRewards = await calculatePoolRewardsAsync(INITIAL_BALANCE, pools); | ||||
|             const [pool, reward] = _.sampleSize(shortZip(pools, expectedPoolRewards), 1)[0]; | ||||
|             return assertUnfinalizedPoolRewardsAsync(pool.poolId, { | ||||
|                 totalReward: (reward as any) as BigNumber, | ||||
|                 totalReward: reward, | ||||
|                 membersStake: pool.membersStake, | ||||
|             }); | ||||
|         }); | ||||
|   | ||||
| @@ -12,17 +12,13 @@ import * as _ from 'lodash'; | ||||
| import { artifacts } from '../artifacts'; | ||||
| import { TestCobbDouglasContract } from '../wrappers'; | ||||
|  | ||||
| // tslint:disable: no-unnecessary-type-assertion | ||||
| blockchainTests('LibCobbDouglas unit tests', env => { | ||||
|     const FUZZ_COUNT = 1024; | ||||
|     const PRECISION = 15; | ||||
|  | ||||
|     let testContract: TestCobbDouglasContract; | ||||
|     let ownerAddress: string; | ||||
|     let notOwnerAddress: string; | ||||
|  | ||||
|     before(async () => { | ||||
|         [ownerAddress, notOwnerAddress] = await env.getAccountAddressesAsync(); | ||||
|         testContract = await TestCobbDouglasContract.deployFrom0xArtifactAsync( | ||||
|             artifacts.TestCobbDouglas, | ||||
|             env.provider, | ||||
| @@ -211,4 +207,3 @@ blockchainTests('LibCobbDouglas unit tests', env => { | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| // tslint:enable:no-unnecessary-type-assertion | ||||
|   | ||||
| @@ -1,4 +1,175 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1617311315, | ||||
|         "version": "5.3.24", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1616005394, | ||||
|         "version": "5.3.23", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1614141718, | ||||
|         "version": "5.3.22", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1612950500, | ||||
|         "version": "5.3.21", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1611648096, | ||||
|         "version": "5.3.20", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1610510890, | ||||
|         "version": "5.3.19", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1609802516, | ||||
|         "version": "5.3.18", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608692071, | ||||
|         "version": "5.3.17", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1608245516, | ||||
|         "version": "5.3.16", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607485227, | ||||
|         "version": "5.3.15", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1607381756, | ||||
|         "version": "5.3.14", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1606961263, | ||||
|         "version": "5.3.13", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605763885, | ||||
|         "version": "5.3.12", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1605302002, | ||||
|         "version": "5.3.11", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604385937, | ||||
|         "version": "5.3.10", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604376968, | ||||
|         "version": "5.3.9", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1604355662, | ||||
|         "version": "5.3.8", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603851023, | ||||
|         "version": "5.3.7", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603833198, | ||||
|         "version": "5.3.6", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1603265572, | ||||
|         "version": "5.3.5", | ||||
|   | ||||
| @@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only. | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v5.3.24 - _April 1, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.23 - _March 17, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.22 - _February 24, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.21 - _February 10, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.20 - _January 26, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.19 - _January 13, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.18 - _January 4, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.17 - _December 23, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.16 - _December 17, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.15 - _December 9, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.14 - _December 7, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.13 - _December 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.12 - _November 19, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.11 - _November 13, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.10 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.9 - _November 3, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.8 - _November 2, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.7 - _October 28, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.6 - _October 27, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v5.3.5 - _October 21, 2020_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|     "name": "@0x/contracts-test-utils", | ||||
|     "version": "5.3.5", | ||||
|     "version": "5.3.24", | ||||
|     "engines": { | ||||
|         "node": ">=6.12" | ||||
|     }, | ||||
| @@ -34,28 +34,28 @@ | ||||
|     }, | ||||
|     "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils", | ||||
|     "devDependencies": { | ||||
|         "@0x/sol-compiler": "^4.2.3", | ||||
|         "@0x/sol-compiler": "^4.6.1", | ||||
|         "@0x/tslint-config": "^4.1.3", | ||||
|         "npm-run-all": "^4.1.2", | ||||
|         "shx": "^0.2.2", | ||||
|         "tslint": "5.11.0", | ||||
|         "typescript": "3.0.1" | ||||
|         "typescript": "4.2.2" | ||||
|     }, | ||||
|     "dependencies": { | ||||
|         "@0x/assert": "^3.0.13", | ||||
|         "@0x/base-contract": "^6.2.7", | ||||
|         "@0x/contract-addresses": "^4.12.0", | ||||
|         "@0x/dev-utils": "^3.3.4", | ||||
|         "@0x/json-schemas": "^5.2.3", | ||||
|         "@0x/order-utils": "^10.4.0", | ||||
|         "@0x/sol-coverage": "^4.0.14", | ||||
|         "@0x/sol-profiler": "^4.1.4", | ||||
|         "@0x/sol-trace": "^3.0.14", | ||||
|         "@0x/subproviders": "^6.1.5", | ||||
|         "@0x/types": "^3.2.4", | ||||
|         "@0x/typescript-typings": "^5.1.5", | ||||
|         "@0x/utils": "^5.6.3", | ||||
|         "@0x/web3-wrapper": "^7.2.4", | ||||
|         "@0x/assert": "^3.0.21", | ||||
|         "@0x/base-contract": "^6.2.18", | ||||
|         "@0x/contract-addresses": "^6.0.0", | ||||
|         "@0x/dev-utils": "^4.2.1", | ||||
|         "@0x/json-schemas": "^5.4.1", | ||||
|         "@0x/order-utils": "^10.4.19", | ||||
|         "@0x/sol-coverage": "^4.0.31", | ||||
|         "@0x/sol-profiler": "^4.1.21", | ||||
|         "@0x/sol-trace": "^3.0.31", | ||||
|         "@0x/subproviders": "^6.4.1", | ||||
|         "@0x/types": "^3.3.1", | ||||
|         "@0x/typescript-typings": "^5.1.6", | ||||
|         "@0x/utils": "^6.2.0", | ||||
|         "@0x/web3-wrapper": "^7.4.1", | ||||
|         "@types/bn.js": "^4.11.0", | ||||
|         "@types/js-combinatorics": "^0.5.29", | ||||
|         "@types/lodash": "4.14.104", | ||||
| @@ -67,7 +67,7 @@ | ||||
|         "chai-bignumber": "^3.0.0", | ||||
|         "decimal.js": "^10.2.0", | ||||
|         "dirty-chai": "^2.0.1", | ||||
|         "ethereum-types": "^3.3.3", | ||||
|         "ethereum-types": "^3.4.0", | ||||
|         "ethereumjs-util": "^5.1.1", | ||||
|         "ethers": "~4.0.4", | ||||
|         "js-combinatorics": "^0.5.3", | ||||
|   | ||||
| @@ -14,6 +14,6 @@ export function shortZip<T1, T2>(a: T1[], b: T2[]): Array<[T1, T2]> { | ||||
| export function replaceKeysDeep(obj: {}, mapKeys: (key: string) => string | void): _.Dictionary<{}> { | ||||
|     return _.transform(obj, (result, value, key) => { | ||||
|         const currentKey = mapKeys(key) || key; | ||||
|         result[currentKey] = _.isObject(value) ? replaceKeysDeep(value, mapKeys) : value; | ||||
|         result[currentKey] = _.isObject(value) ? replaceKeysDeep(value as {}, mapKeys) : (value as {}); | ||||
|     }); | ||||
| } | ||||
|   | ||||
| @@ -22,14 +22,14 @@ export class OrderFactory { | ||||
|     ): Promise<SignedOrder> { | ||||
|         const fifteenMinutesInSeconds = 15 * 60; | ||||
|         const currentBlockTimestamp = await getLatestBlockTimestampAsync(); | ||||
|         const order = ({ | ||||
|         const order = { | ||||
|             takerAddress: constants.NULL_ADDRESS, | ||||
|             senderAddress: constants.NULL_ADDRESS, | ||||
|             expirationTimeSeconds: new BigNumber(currentBlockTimestamp).plus(fifteenMinutesInSeconds), | ||||
|             salt: generatePseudoRandomSalt(), | ||||
|             ...this._defaultOrderParams, | ||||
|             ...customOrderParams, | ||||
|         } as any) as Order; | ||||
|         } as Order; // tslint:disable-line:no-object-literal-type-assertion | ||||
|         const orderHashBuff = orderHashUtils.getOrderHashBuffer(order); | ||||
|         const signature = signingUtils.signMessage(orderHashBuff, this._privateKey, signatureType); | ||||
|         const signedOrder = { | ||||
|   | ||||
| @@ -30,7 +30,8 @@ export const orderUtils = { | ||||
|         return cancel; | ||||
|     }, | ||||
|     createOrderWithoutSignature(signedOrder: SignedOrder): Order { | ||||
|         return _.omit(signedOrder, ['signature']) as Order; | ||||
|         const { signature, ...order } = signedOrder; | ||||
|         return order; | ||||
|     }, | ||||
|     createBatchMatchOrders(signedOrdersLeft: SignedOrder[], signedOrdersRight: SignedOrder[]): BatchMatchOrder { | ||||
|         return { | ||||
|   | ||||
							
								
								
									
										10
									
								
								contracts/treasury/.npmignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								contracts/treasury/.npmignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| # Blacklist all files | ||||
| .* | ||||
| * | ||||
| # Whitelist lib | ||||
| !lib/**/* | ||||
| # Whitelist Solidity contracts | ||||
| !contracts/src/**/* | ||||
| # Blacklist tests in lib | ||||
| /lib/test/* | ||||
| # Package specific ignore | ||||
							
								
								
									
										67
									
								
								contracts/treasury/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								contracts/treasury/CHANGELOG.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
| [ | ||||
|     { | ||||
|         "timestamp": 1619481586, | ||||
|         "version": "1.1.3", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1618259868, | ||||
|         "version": "1.1.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1617311315, | ||||
|         "version": "1.1.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.1.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Make the proposal/quorum thresholds updatable", | ||||
|                 "pr": 165 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1616005394 | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1614141718, | ||||
|         "version": "1.0.2", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "timestamp": 1612950500, | ||||
|         "version": "1.0.1", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Dependencies updated" | ||||
|             } | ||||
|         ] | ||||
|     }, | ||||
|     { | ||||
|         "version": "1.0.0", | ||||
|         "changes": [ | ||||
|             { | ||||
|                 "note": "Create this package", | ||||
|                 "pr": 120 | ||||
|             } | ||||
|         ], | ||||
|         "timestamp": 1611869778 | ||||
|     } | ||||
| ] | ||||
							
								
								
									
										34
									
								
								contracts/treasury/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								contracts/treasury/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| <!-- | ||||
| changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. | ||||
| Edit the package's CHANGELOG.json file only. | ||||
| --> | ||||
|  | ||||
| CHANGELOG | ||||
|  | ||||
| ## v1.1.3 - _April 26, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.1.2 - _April 12, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.1.1 - _April 1, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.1.0 - _March 17, 2021_ | ||||
|  | ||||
|     * Make the proposal/quorum thresholds updatable (#165) | ||||
|  | ||||
| ## v1.0.2 - _February 24, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.1 - _February 10, 2021_ | ||||
|  | ||||
|     * Dependencies updated | ||||
|  | ||||
| ## v1.0.0 - _January 28, 2021_ | ||||
|  | ||||
|     * Create this package (#120) | ||||
							
								
								
									
										1
									
								
								contracts/treasury/DEPLOYS.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								contracts/treasury/DEPLOYS.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| [] | ||||
							
								
								
									
										65
									
								
								contracts/treasury/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								contracts/treasury/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,65 @@ | ||||
| ## Governance | ||||
|  | ||||
| This package contains contracts for the governance of the 0x ZRX treasury. | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| **Install** | ||||
|  | ||||
| ```bash | ||||
| npm install @0x/contracts-treasury --save | ||||
| ``` | ||||
|  | ||||
| ## Contributing | ||||
|  | ||||
| We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository. | ||||
|  | ||||
| For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein. | ||||
|  | ||||
| Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. | ||||
|  | ||||
| ### Install Dependencies | ||||
|  | ||||
| If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: | ||||
|  | ||||
| ```bash | ||||
| yarn config set workspaces-experimental true | ||||
| ``` | ||||
|  | ||||
| Then install dependencies | ||||
|  | ||||
| ```bash | ||||
| yarn install | ||||
| ``` | ||||
|  | ||||
| ### Build | ||||
|  | ||||
| To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/contracts-treasury yarn build | ||||
| ``` | ||||
|  | ||||
| Or continuously rebuild on change: | ||||
|  | ||||
| ```bash | ||||
| PKG=@0x/contracts-treasury yarn watch | ||||
| ``` | ||||
|  | ||||
| ### Clean | ||||
|  | ||||
| ```bash | ||||
| yarn clean | ||||
| ``` | ||||
|  | ||||
| ### Lint | ||||
|  | ||||
| ```bash | ||||
| yarn lint | ||||
| ``` | ||||
|  | ||||
| ### Run Tests | ||||
|  | ||||
| ```bash | ||||
| yarn test | ||||
| ``` | ||||
							
								
								
									
										29
									
								
								contracts/treasury/compiler.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								contracts/treasury/compiler.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| { | ||||
|     "artifactsDir": "./test/generated-artifacts", | ||||
|     "contractsDir": "./contracts", | ||||
|     "useDockerisedSolc": false, | ||||
|     "isOfflineMode": false, | ||||
|     "shouldSaveStandardInput": true, | ||||
|     "shouldCompileIndependently": true, | ||||
|     "compilerSettings": { | ||||
|         "evmVersion": "istanbul", | ||||
|         "optimizer": { | ||||
|             "enabled": true, | ||||
|             "runs": 1000000, | ||||
|             "details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true } | ||||
|         }, | ||||
|         "outputSelection": { | ||||
|             "*": { | ||||
|                 "*": [ | ||||
|                     "abi", | ||||
|                     "devdoc", | ||||
|                     "evm.bytecode.object", | ||||
|                     "evm.bytecode.sourceMap", | ||||
|                     "evm.deployedBytecode.object", | ||||
|                     "evm.deployedBytecode.sourceMap", | ||||
|                     "evm.methodIdentifiers" | ||||
|                 ] | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user