Compare commits
	
		
			253 Commits
		
	
	
		
			@0x/contra
			...
			protocol@6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					692231c2ea | ||
| 
						 | 
					3a1becc3e4 | ||
| 
						 | 
					3653e2d7f9 | ||
| 
						 | 
					65def38d98 | ||
| 
						 | 
					859c36cb10 | ||
| 
						 | 
					3e34386812 | ||
| 
						 | 
					a35af11981 | ||
| 
						 | 
					59eabec71e | ||
| 
						 | 
					bf4c7e7d50 | ||
| 
						 | 
					fd098ca4df | ||
| 
						 | 
					c360f8d8fd | ||
| 
						 | 
					b358559421 | ||
| 
						 | 
					df5aad8e8e | ||
| 
						 | 
					8dbf79db59 | ||
| 
						 | 
					1839608e84 | ||
| 
						 | 
					6e3e795b8b | ||
| 
						 | 
					d9c410a7e3 | ||
| 
						 | 
					609727afe8 | ||
| 
						 | 
					8a5c74c0b4 | ||
| 
						 | 
					cd93f3b07e | ||
| 
						 | 
					8397b12de6 | ||
| 
						 | 
					3f85acec3a | ||
| 
						 | 
					d6a9e3d600 | ||
| 
						 | 
					361569ac2f | ||
| 
						 | 
					719664c145 | ||
| 
						 | 
					f800d6c24c | ||
| 
						 | 
					a9a81bcafb | ||
| 
						 | 
					4280307a15 | ||
| 
						 | 
					7b57d3ae51 | ||
| 
						 | 
					8a8a5bbda0 | ||
| 
						 | 
					76987c8db1 | ||
| 
						 | 
					6f8971cc42 | ||
| 
						 | 
					71ab882143 | ||
| 
						 | 
					5a4961c8d9 | ||
| 
						 | 
					4c4fb99d87 | ||
| 
						 | 
					872abf09e9 | ||
| 
						 | 
					f10bfe7d04 | ||
| 
						 | 
					a74d8deff3 | ||
| 
						 | 
					835ee4e8de | ||
| 
						 | 
					63ec42303f | ||
| 
						 | 
					f789aebddc | ||
| 
						 | 
					efd83be779 | ||
| 
						 | 
					603bc1d51c | ||
| 
						 | 
					32a930a7fc | ||
| 
						 | 
					f464bf68d7 | ||
| 
						 | 
					ebdc4fb509 | ||
| 
						 | 
					7580719586 | ||
| 
						 | 
					aba9db2be7 | ||
| 
						 | 
					a6680411c8 | ||
| 
						 | 
					0d0e87de94 | ||
| 
						 | 
					ccf2000c09 | ||
| 
						 | 
					3eb2e0f56a | ||
| 
						 | 
					d07c7d5b69 | ||
| 
						 | 
					adf6684c29 | ||
| 
						 | 
					9bf889aa30 | ||
| 
						 | 
					e81c88564e | ||
| 
						 | 
					901d400d62 | ||
| 
						 | 
					289474e2ce | ||
| 
						 | 
					407ca21168 | ||
| 
						 | 
					5c68fc24d2 | ||
| 
						 | 
					548800e0a9 | ||
| 
						 | 
					bde3d6dc6a | ||
| 
						 | 
					56550a6acc | ||
| 
						 | 
					e51b83accc | ||
| 
						 | 
					d5ae971f1c | ||
| 
						 | 
					5a2f5f9a42 | ||
| 
						 | 
					75a3b70cef | ||
| 
						 | 
					803cf65ba1 | ||
| 
						 | 
					5d3947b838 | ||
| 
						 | 
					4397a59008 | ||
| 
						 | 
					966d54c935 | ||
| 
						 | 
					234ddb495d | ||
| 
						 | 
					a744acc7bc | ||
| 
						 | 
					27c624633c | ||
| 
						 | 
					7ef75101b4 | ||
| 
						 | 
					6f8aace00d | ||
| 
						 | 
					6c264b2f18 | ||
| 
						 | 
					df055e1958 | ||
| 
						 | 
					70d2117470 | ||
| 
						 | 
					2c173ccaf3 | ||
| 
						 | 
					d2f4a0c5f3 | ||
| 
						 | 
					0d6021e5e3 | ||
| 
						 | 
					bb04726e7f | ||
| 
						 | 
					220ca370c2 | ||
| 
						 | 
					63af4e3e98 | ||
| 
						 | 
					9754e12d82 | ||
| 
						 | 
					d72ebed246 | ||
| 
						 | 
					587fc71058 | ||
| 
						 | 
					7d34e09a12 | ||
| 
						 | 
					7d15baad0f | ||
| 
						 | 
					1e6476ada7 | ||
| 
						 | 
					1d6ca5f6b5 | ||
| 
						 | 
					fb249f02fc | ||
| 
						 | 
					fdf04ef275 | ||
| 
						 | 
					b0f5f634f2 | ||
| 
						 | 
					6ee0108565 | ||
| 
						 | 
					c73097e688 | ||
| 
						 | 
					a2d42b07b5 | ||
| 
						 | 
					f9a794af93 | ||
| 
						 | 
					a2643674ca | ||
| 
						 | 
					c00ce9daac | ||
| 
						 | 
					c68b5d7844 | ||
| 
						 | 
					09ed106d4c | ||
| 
						 | 
					a6b92fc658 | ||
| 
						 | 
					4be4a1a30b | ||
| 
						 | 
					9bede5d331 | ||
| 
						 | 
					b50d4aee6d | ||
| 
						 | 
					55bc367bd6 | ||
| 
						 | 
					7a59b7eafe | ||
| 
						 | 
					9e59d41e44 | ||
| 
						 | 
					475e6c7bca | ||
| 
						 | 
					dbc5a5293e | ||
| 
						 | 
					f4bd2bd0d8 | ||
| 
						 | 
					f1782a83ba | ||
| 
						 | 
					cbade0d558 | ||
| 
						 | 
					fe0c26387c | ||
| 
						 | 
					c03a014740 | ||
| 
						 | 
					84e6d788aa | ||
| 
						 | 
					cd296b8767 | ||
| 
						 | 
					5946d32a7d | ||
| 
						 | 
					842dd8572b | ||
| 
						 | 
					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 | 
@@ -1,25 +1,25 @@
 | 
			
		||||
version: 2
 | 
			
		||||
version: 2.1
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
    build:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        resource_class: xlarge
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        environment:
 | 
			
		||||
            CONTRACTS_COMMIT_HASH: '9ed05f5'
 | 
			
		||||
            NODE_OPTIONS: '--max-old-space-size=16384'
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - checkout
 | 
			
		||||
            - run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV
 | 
			
		||||
            - run:
 | 
			
		||||
                  name: install-yarn
 | 
			
		||||
                  command: npm install --force --global yarn@1.17.0
 | 
			
		||||
                  command: npm install --force --global yarn@1.22.0
 | 
			
		||||
            - run:
 | 
			
		||||
                  name: yarn
 | 
			
		||||
                  command: yarn --frozen-lockfile --ignore-engines install || yarn --frozen-lockfile --ignore-engines install
 | 
			
		||||
            - setup_remote_docker
 | 
			
		||||
            - run: yarn build:ci
 | 
			
		||||
            - run: yarn build:ts
 | 
			
		||||
            - run: yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci || yarn build:ci
 | 
			
		||||
            - run: yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts || yarn build:ts
 | 
			
		||||
            - save_cache:
 | 
			
		||||
                  key: repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
                  paths:
 | 
			
		||||
@@ -31,57 +31,59 @@ jobs:
 | 
			
		||||
    test-exchange-ganache:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-exchange
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-exchange -m --serial -c test:circleci
 | 
			
		||||
    test-integrations-ganache:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-integrations
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-integrations -m --serial -c test:circleci
 | 
			
		||||
    test-contracts-staking-ganache:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-staking
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-staking -m --serial -c test:circleci
 | 
			
		||||
    test-contracts-extra-ganache:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-exchange-forwarder @0x/contracts-coordinator
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-exchange-forwarder -p @0x/contracts-coordinator -m --serial -c test:circleci
 | 
			
		||||
    test-contracts-rest-ganache:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-multisig @0x/contracts-utils @0x/contracts-exchange-libs @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-asset-proxy @0x/contracts-broker @0x/contracts-zero-ex
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-multisig -p @0x/contracts-utils -p @0x/contracts-exchange-libs -p  @0x/contracts-erc20 -p @0x/contracts-erc721 -p @0x/contracts-erc1155 -p @0x/contracts-asset-proxy -p @0x/contracts-broker -p @0x/contracts-zero-ex -m --serial -c test:circleci
 | 
			
		||||
    test-publish:
 | 
			
		||||
        resource_class: medium+
 | 
			
		||||
        resource_class: large
 | 
			
		||||
        environment:
 | 
			
		||||
            NODE_OPTIONS: '--max-old-space-size=6442'
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
            - image: 0xorg/verdaccio
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
@@ -95,7 +97,7 @@ jobs:
 | 
			
		||||
                  path: ~/.npm/_logs
 | 
			
		||||
    test-doc-generation:
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
@@ -106,18 +108,18 @@ jobs:
 | 
			
		||||
                  no_output_timeout: 1200
 | 
			
		||||
    test-rest:
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
                      - repo-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contracts-test-utils
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contract-artifacts
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/contract-wrappers-test
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/migrations
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/order-utils
 | 
			
		||||
            - run: yarn wsrun test:circleci @0x/asset-swapper
 | 
			
		||||
            - run: yarn wsrun -p @0x/contracts-test-utils -m --serial -c test:circleci
 | 
			
		||||
            - run: yarn wsrun -p @0x/contract-artifacts -m --serial -c test:circleci
 | 
			
		||||
            - run: yarn wsrun -p @0x/contract-wrappers-test -m --serial -c test:circleci
 | 
			
		||||
            - run: yarn wsrun -p @0x/migrations -m --serial -c test:circleci
 | 
			
		||||
            - run: yarn wsrun -p @0x/order-utils -m --serial -c test:circleci
 | 
			
		||||
            - run: yarn wsrun -p @0x/asset-swapper -m --serial -c test:circleci
 | 
			
		||||
            - save_cache:
 | 
			
		||||
                  key: coverage-contract-wrappers-test-{{ .Environment.CIRCLE_SHA1 }}
 | 
			
		||||
                  paths:
 | 
			
		||||
@@ -134,7 +136,7 @@ jobs:
 | 
			
		||||
        resource_class: large
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
                  keys:
 | 
			
		||||
@@ -145,7 +147,7 @@ jobs:
 | 
			
		||||
            - run: yarn diff_md_docs:ci
 | 
			
		||||
    submit-coverage:
 | 
			
		||||
        docker:
 | 
			
		||||
            - image: nikolaik/python-nodejs:python3.7-nodejs10
 | 
			
		||||
            - image: node:12
 | 
			
		||||
        working_directory: ~/repo
 | 
			
		||||
        steps:
 | 
			
		||||
            - restore_cache:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										7
									
								
								.github/workflows/publish.yml
									
									
									
									
										vendored
									
									
								
							@@ -7,6 +7,9 @@ on:
 | 
			
		||||
              description: 'required CI status'
 | 
			
		||||
              default: 'success'
 | 
			
		||||
              required: true
 | 
			
		||||
          prerelease:
 | 
			
		||||
              description: 'prerelease name'
 | 
			
		||||
              required: false
 | 
			
		||||
 | 
			
		||||
jobs:
 | 
			
		||||
    publish:
 | 
			
		||||
@@ -21,7 +24,7 @@ jobs:
 | 
			
		||||
                  (echo "::error ::${{ github.ref }} does not have a successful CI status" && false)
 | 
			
		||||
            - uses: actions/checkout@v2
 | 
			
		||||
              with:
 | 
			
		||||
                ref: 'development'
 | 
			
		||||
                ref: ${{ github.ref }}
 | 
			
		||||
                fetch-depth: 0
 | 
			
		||||
            - uses: actions/setup-node@v1
 | 
			
		||||
              with:
 | 
			
		||||
@@ -41,7 +44,9 @@ jobs:
 | 
			
		||||
              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 }} && \
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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/
 | 
			
		||||
 
 | 
			
		||||
@@ -3,5 +3,6 @@
 | 
			
		||||
    "tabWidth": 4,
 | 
			
		||||
    "singleQuote": true,
 | 
			
		||||
    "trailingComma": "all",
 | 
			
		||||
    "bracketSpacing": true
 | 
			
		||||
    "bracketSpacing": true,
 | 
			
		||||
    "arrowParens": "avoid"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,6 @@
 | 
			
		||||
| Package | Version |
 | 
			
		||||
| ------: | :------ |
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
<!-- For example:
 | 
			
		||||
|             `0x.js` | 2.0.4   |
 | 
			
		||||
| `Exchange Contract` | v2      |
 | 
			
		||||
 
 | 
			
		||||
@@ -43,12 +43,12 @@ These packages are all under development. See [/contracts/README.md](/contracts/
 | 
			
		||||
#### 0x-specific packages
 | 
			
		||||
 | 
			
		||||
| Package                                                  | Version                                                                                                                 | Description                                                                                    |
 | 
			
		||||
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
 | 
			
		||||
| -------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
 | 
			
		||||
| [`@0x/contract-addresses`](/packages/contract-addresses) | [](https://www.npmjs.com/package/@0x/contract-addresses) | A tiny utility library for getting known deployed contract addresses for a particular network. |
 | 
			
		||||
| [`@0x/contract-wrappers`](/packages/contract-wrappers)   | [](https://www.npmjs.com/package/@0x/contract-wrappers)   | JS/TS wrappers for interacting with the 0x smart contracts                                     |
 | 
			
		||||
| [`@0x/order-utils`](/packages/order-utils)               | [](https://www.npmjs.com/package/@0x/order-utils)               | A set of utilities for generating, parsing, signing and validating 0x orders                   |
 | 
			
		||||
| [`@0x/migrations`](/packages/migrations)                 | [](https://www.npmjs.com/package/@0x/migrations)                 | Migration tool for deploying 0x smart contracts on private testnets                            |
 | 
			
		||||
| [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts                                                        |  |
 | 
			
		||||
| [`@0x/contract-artifacts`](/packages/contract-artifacts) | [](https://www.npmjs.com/package/@0x/contract-artifacts) | 0x smart contract compilation artifacts                                                        |     |
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,6 @@
 | 
			
		||||
        "indent": ["error", 4],
 | 
			
		||||
        "max-line-length": ["warn", 160],
 | 
			
		||||
        "no-inline-assembly": false,
 | 
			
		||||
        "no-empty-blocks": false,
 | 
			
		||||
        "quotes": ["error", "double"],
 | 
			
		||||
        "separate-by-one-line-in-contract": "error",
 | 
			
		||||
        "space-after-comma": "error",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,185 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "3.7.18",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "3.7.17",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "3.7.16",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "3.7.15",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "3.7.14",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "3.7.13",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "3.7.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "3.7.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "3.7.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.7.18 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.17 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.16 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.15 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.14 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.13 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.12 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.11 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.7.10 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-asset-proxy",
 | 
			
		||||
    "version": "3.6.8",
 | 
			
		||||
    "version": "3.7.18",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,15 +51,15 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.10.3",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.17.4",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -67,7 +67,7 @@
 | 
			
		||||
        "chai-as-promised": "^7.1.0",
 | 
			
		||||
        "chai-bignumber": "^3.0.0",
 | 
			
		||||
        "dirty-chai": "^2.0.1",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "make-promises-safe": "^1.1.0",
 | 
			
		||||
        "mocha": "^6.2.0",
 | 
			
		||||
        "npm-run-all": "^4.1.2",
 | 
			
		||||
@@ -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.13",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.17",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.36",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -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');
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -168,7 +168,7 @@ describe('StaticCallProxy', () => {
 | 
			
		||||
        it('should revert if the hash of the output is different than expected expected', async () => {
 | 
			
		||||
            const staticCallData = staticCallTarget.isOddNumber(new BigNumber(0)).getABIEncodedTransactionData();
 | 
			
		||||
            const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001');
 | 
			
		||||
            const expectedResultHash = ethUtil.bufferToHex(ethUtil.sha3(trueAsBuffer));
 | 
			
		||||
            const expectedResultHash = ethUtil.bufferToHex(ethUtil.keccak256(trueAsBuffer));
 | 
			
		||||
            const assetData = assetDataInterface
 | 
			
		||||
                .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)
 | 
			
		||||
                .getABIEncodedTransactionData();
 | 
			
		||||
@@ -199,7 +199,7 @@ describe('StaticCallProxy', () => {
 | 
			
		||||
        it('should be successful if a function call with one static input returns the correct value', async () => {
 | 
			
		||||
            const staticCallData = staticCallTarget.isOddNumber(new BigNumber(1)).getABIEncodedTransactionData();
 | 
			
		||||
            const trueAsBuffer = ethUtil.toBuffer('0x0000000000000000000000000000000000000000000000000000000000000001');
 | 
			
		||||
            const expectedResultHash = ethUtil.bufferToHex(ethUtil.sha3(trueAsBuffer));
 | 
			
		||||
            const expectedResultHash = ethUtil.bufferToHex(ethUtil.keccak256(trueAsBuffer));
 | 
			
		||||
            const assetData = assetDataInterface
 | 
			
		||||
                .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)
 | 
			
		||||
                .getABIEncodedTransactionData();
 | 
			
		||||
@@ -232,7 +232,7 @@ describe('StaticCallProxy', () => {
 | 
			
		||||
            const offset = '0000000000000000000000000000000000000000000000000000000000000020';
 | 
			
		||||
            const encodedExpectedResultWithOffset = `0x${offset}${abiEncoder.encode(expectedResults).slice(2)}`;
 | 
			
		||||
            const expectedResultHash = ethUtil.bufferToHex(
 | 
			
		||||
                ethUtil.sha3(ethUtil.toBuffer(encodedExpectedResultWithOffset)),
 | 
			
		||||
                ethUtil.keccak256(ethUtil.toBuffer(encodedExpectedResultWithOffset)),
 | 
			
		||||
            );
 | 
			
		||||
            const assetData = assetDataInterface
 | 
			
		||||
                .StaticCall(staticCallTarget.address, staticCallData, expectedResultHash)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "1.1.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "1.1.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "1.1.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "1.1.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "1.1.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "1.1.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "1.1.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "1.1.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "1.1.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v1.1.36 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.35 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.34 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.33 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.32 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.31 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.30 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.29 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.28 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-broker",
 | 
			
		||||
    "version": "1.1.16",
 | 
			
		||||
    "version": "1.1.36",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,20 +51,20 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.17",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.37",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.13",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,10 @@ export interface GodsUnchainedProperties {
 | 
			
		||||
    quality: BigNumber | number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const propertyDataEncoder = AbiEncoder.create([{ name: 'proto', type: 'uint16' }, { name: 'quality', type: 'uint8' }]);
 | 
			
		||||
const propertyDataEncoder = AbiEncoder.create([
 | 
			
		||||
    { name: 'proto', type: 'uint16' },
 | 
			
		||||
    { name: 'quality', type: 'uint8' },
 | 
			
		||||
]);
 | 
			
		||||
const brokerDataEncoder = AbiEncoder.create([
 | 
			
		||||
    { name: 'godsUnchainedAddress', type: 'address' },
 | 
			
		||||
    { name: 'validatorAddress', type: 'address' },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "3.1.37",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "3.1.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "3.1.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "3.1.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "3.1.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "3.1.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "3.1.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "3.1.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "3.1.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.1.37 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.36 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.35 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.34 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.33 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.32 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.31 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.30 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.29 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-coordinator",
 | 
			
		||||
    "version": "3.1.17",
 | 
			
		||||
    "version": "3.1.37",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,17 +52,17 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.19",
 | 
			
		||||
        "@0x/base-contract": "^6.2.13",
 | 
			
		||||
        "@0x/contract-addresses": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.17",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/json-schemas": "^5.3.4",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "@0x/assert": "^3.0.27",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contract-addresses": "^6.6.0",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.37",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/json-schemas": "^6.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "http-status-codes": "^1.3.2"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,4 @@
 | 
			
		||||
import { assert as sharedAssert } from '@0x/assert';
 | 
			
		||||
// HACK: We need those two unused imports because they're actually used by sharedAssert which gets injected here
 | 
			
		||||
import { Schema } from '@0x/json-schemas'; // tslint:disable-line:no-unused-variable
 | 
			
		||||
import { Order } from '@0x/types'; // tslint:disable-line:no-unused-variable
 | 
			
		||||
import { BigNumber } from '@0x/utils'; // tslint:disable-line:no-unused-variable
 | 
			
		||||
import { Web3Wrapper } from '@0x/web3-wrapper';
 | 
			
		||||
 | 
			
		||||
export const assert = {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "1.3.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "1.3.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "1.3.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "1.3.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "1.3.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "1.3.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "1.3.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "1.3.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "1.3.27",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v1.3.35 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.34 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.33 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.32 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.31 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.30 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.29 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.28 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.27 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-dev-utils",
 | 
			
		||||
    "version": "1.3.15",
 | 
			
		||||
    "version": "1.3.35",
 | 
			
		||||
    "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.12",
 | 
			
		||||
        "@0x/assert": "^3.0.19",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/assert": "^3.0.27",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.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.13",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@types/node": "12.12.54"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,175 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "2.1.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "2.1.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "2.1.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "2.1.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "2.1.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "2.1.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "2.1.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "2.1.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "2.1.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v2.1.36 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.35 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.34 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.33 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.32 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.31 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.30 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.29 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.28 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-erc1155",
 | 
			
		||||
    "version": "2.1.17",
 | 
			
		||||
    "version": "2.1.36",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,15 +52,15 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@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.4.0",
 | 
			
		||||
        "ethereum-types": "^3.5.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.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,181 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "version": "3.3.15",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Add ethers as a dependency",
 | 
			
		||||
                "pr": 305
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "timestamp": 1628665757
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "3.3.14",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "3.3.13",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "3.3.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "3.3.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "3.3.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "3.3.9",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "3.3.8",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "3.3.7",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,83 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.3.15 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Add ethers as a dependency (#305)
 | 
			
		||||
 | 
			
		||||
## v3.3.14 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.13 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.12 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.11 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.10 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.9 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.8 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.3.7 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -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.11",
 | 
			
		||||
    "version": "3.3.15",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,18 +51,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.4.0",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "lodash": "^4.17.11",
 | 
			
		||||
        "make-promises-safe": "^1.1.0",
 | 
			
		||||
        "mocha": "^6.2.0",
 | 
			
		||||
@@ -79,10 +79,11 @@
 | 
			
		||||
        "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.13"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "ethers": "~4.0.4"
 | 
			
		||||
    },
 | 
			
		||||
    "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": 1628665757,
 | 
			
		||||
        "version": "3.1.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "3.1.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "3.1.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "3.1.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "3.1.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "3.1.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "3.1.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "3.1.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "3.1.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.1.36 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.35 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.34 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.33 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.32 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.31 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.30 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.29 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.28 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-erc721",
 | 
			
		||||
    "version": "3.1.17",
 | 
			
		||||
    "version": "3.1.36",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,18 +52,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.4.0",
 | 
			
		||||
        "ethereum-types": "^3.5.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.13"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "4.2.37",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "4.2.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "4.2.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "4.2.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "4.2.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "4.2.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "4.2.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "4.2.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "4.2.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.2.37 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.36 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.35 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.34 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.33 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.32 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.31 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.30 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.29 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange-forwarder",
 | 
			
		||||
    "version": "4.2.17",
 | 
			
		||||
    "version": "4.2.37",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,25 +52,25 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.17",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.17",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.36",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.37",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.13",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "ethereum-types": "^3.4.0"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "ethereum-types": "^3.5.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,175 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "4.3.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "4.3.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "4.3.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "4.3.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "4.3.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "4.3.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "4.3.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "4.3.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "4.3.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.3.36 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.35 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.34 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.33 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.32 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.31 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.30 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.29 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.28 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange-libs",
 | 
			
		||||
    "version": "4.3.17",
 | 
			
		||||
    "version": "4.3.36",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,14 +52,14 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/subproviders": "^6.2.2",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/subproviders": "^6.5.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -67,7 +67,7 @@
 | 
			
		||||
        "chai-as-promised": "^7.1.0",
 | 
			
		||||
        "chai-bignumber": "^3.0.0",
 | 
			
		||||
        "dirty-chai": "^2.0.1",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "lodash": "^4.17.11",
 | 
			
		||||
        "make-promises-safe": "^1.1.0",
 | 
			
		||||
        "mocha": "^6.2.0",
 | 
			
		||||
@@ -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.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "3.2.37",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "3.2.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "3.2.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "3.2.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "3.2.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "3.2.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "3.2.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "3.2.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "3.2.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.2.37 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.36 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.35 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.34 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.33 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.32 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.31 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.30 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.29 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange",
 | 
			
		||||
    "version": "3.2.17",
 | 
			
		||||
    "version": "3.2.37",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,21 +52,21 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.17",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.24",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.37",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.44",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -74,8 +74,8 @@
 | 
			
		||||
        "chai-as-promised": "^7.1.0",
 | 
			
		||||
        "chai-bignumber": "^3.0.0",
 | 
			
		||||
        "dirty-chai": "^2.0.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "js-combinatorics": "^0.5.3",
 | 
			
		||||
        "make-promises-safe": "^1.1.0",
 | 
			
		||||
        "mocha": "^6.2.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.13",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.17",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.36",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,11 @@ export const exchangeDataEncoder = {
 | 
			
		||||
                .getABIEncodedTransactionData();
 | 
			
		||||
        } else if (constants.BATCH_FILL_FN_NAMES.indexOf(fnName) !== -1) {
 | 
			
		||||
            data = (exchangeInstance as any)
 | 
			
		||||
                [fnName](orders, orders.map(order => order.takerAssetAmount), orders.map(order => order.signature))
 | 
			
		||||
                [fnName](
 | 
			
		||||
                    orders,
 | 
			
		||||
                    orders.map(order => order.takerAssetAmount),
 | 
			
		||||
                    orders.map(order => order.signature),
 | 
			
		||||
                )
 | 
			
		||||
                .getABIEncodedTransactionData();
 | 
			
		||||
        } else if (constants.MARKET_FILL_FN_NAMES.indexOf(fnName) !== -1) {
 | 
			
		||||
            const fillAsset = /Buy/.test(fnName) ? 'makerAssetAmount' : 'takerAssetAmount';
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,10 @@ blockchainTests.resets('Reentrancy Tests', env => {
 | 
			
		||||
        // Handle tuples.
 | 
			
		||||
        if (item.type === 'tuple') {
 | 
			
		||||
            const tuple = item as TupleDataItem;
 | 
			
		||||
            return _.zipObject(tuple.components.map(c => c.name), tuple.components.map(createFunctionInputs));
 | 
			
		||||
            return _.zipObject(
 | 
			
		||||
                tuple.components.map(c => c.name),
 | 
			
		||||
                tuple.components.map(createFunctionInputs),
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        // Handle strings.
 | 
			
		||||
        if (item.type === 'string') {
 | 
			
		||||
 
 | 
			
		||||
@@ -86,7 +86,7 @@ blockchainTests.resets('MixinSignatureValidator', env => {
 | 
			
		||||
 | 
			
		||||
    const SIGNATURE_LENGTH = 65;
 | 
			
		||||
    const generateRandomSignature = (): string => hexUtils.random(SIGNATURE_LENGTH);
 | 
			
		||||
    const hashBytes = (bytesHex: string): string => ethUtil.bufferToHex(ethUtil.sha3(ethUtil.toBuffer(bytesHex)));
 | 
			
		||||
    const hashBytes = (bytesHex: string): string => hexUtils.hash(bytesHex);
 | 
			
		||||
    const signDataHex = (dataHex: string, privateKey: Buffer): string => {
 | 
			
		||||
        const ecSignature = ethUtil.ecsign(ethUtil.toBuffer(dataHex), privateKey);
 | 
			
		||||
        return hexUtils.concat(ecSignature.v, ecSignature.r, ecSignature.s);
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -109,7 +109,11 @@ export class ExchangeWrapper {
 | 
			
		||||
        opts: { makerAssetFillAmount: BigNumber; gas?: number; gasPrice?: BigNumber },
 | 
			
		||||
    ): Promise<TransactionReceiptWithDecodedLogs> {
 | 
			
		||||
        return this.exchangeContract
 | 
			
		||||
            .marketBuyOrdersNoThrow(orders, opts.makerAssetFillAmount, orders.map(signedOrder => signedOrder.signature))
 | 
			
		||||
            .marketBuyOrdersNoThrow(
 | 
			
		||||
                orders,
 | 
			
		||||
                opts.makerAssetFillAmount,
 | 
			
		||||
                orders.map(signedOrder => signedOrder.signature),
 | 
			
		||||
            )
 | 
			
		||||
            .awaitTransactionSuccessAsync({ from, gas: opts.gas });
 | 
			
		||||
    }
 | 
			
		||||
    public async marketSellOrdersFillOrKillAsync(
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,6 @@ import { ReferenceFunctions as UtilReferenceFunctions, SafeMathRevertErrors } fr
 | 
			
		||||
import { FillResults, Order } from '@0x/types';
 | 
			
		||||
import { AnyRevertError, BigNumber, ExchangeRevertErrors, hexUtils, StringRevertError } from '@0x/utils';
 | 
			
		||||
import { LogEntry, LogWithDecodedArgs } from 'ethereum-types';
 | 
			
		||||
import * as ethjs from 'ethereumjs-util';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { artifacts } from './artifacts';
 | 
			
		||||
@@ -104,7 +103,7 @@ blockchainTests('Exchange wrapper functions unit tests.', env => {
 | 
			
		||||
    // Creates a deterministic order signature, even though no signature validation
 | 
			
		||||
    // actually occurs in the test contract.
 | 
			
		||||
    function createOrderSignature(order: Order): string {
 | 
			
		||||
        return ethjs.bufferToHex(ethjs.sha3(ethjs.toBuffer(orderHashUtils.getOrderHashHex(order))));
 | 
			
		||||
        return hexUtils.hash(orderHashUtils.getOrderHashHex(order));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Asserts that `_fillOrder()` was called in the same order and with the same
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "6.2.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "6.2.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "6.2.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "6.2.28",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "6.2.27",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "6.2.26",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "6.2.25",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "6.2.24",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "6.2.23",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v6.2.31 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.30 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.29 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.28 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.27 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.26 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.25 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.24 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.23 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-extensions",
 | 
			
		||||
    "version": "6.2.11",
 | 
			
		||||
    "version": "6.2.31",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,23 +52,23 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.17",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.37",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -77,7 +77,7 @@
 | 
			
		||||
        "chai-bignumber": "^3.0.0",
 | 
			
		||||
        "dirty-chai": "^2.0.1",
 | 
			
		||||
        "ethereumjs-abi": "0.6.5",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "lodash": "^4.17.11",
 | 
			
		||||
        "make-promises-safe": "^1.1.0",
 | 
			
		||||
        "mocha": "^6.2.0",
 | 
			
		||||
@@ -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.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "ethereum-types": "^3.4.0"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "ethereum-types": "^3.5.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-integrations",
 | 
			
		||||
    "version": "2.7.14",
 | 
			
		||||
    "version": "2.7.63",
 | 
			
		||||
    "private": true,
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
@@ -52,24 +52,25 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contract-addresses": "^5.6.0",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.10.3",
 | 
			
		||||
        "@0x/contracts-broker": "^1.1.16",
 | 
			
		||||
        "@0x/contracts-coordinator": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-exchange-forwarder": "^4.2.17",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-extensions": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contract-addresses": "^6.6.0",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.17.4",
 | 
			
		||||
        "@0x/contracts-broker": "^1.1.36",
 | 
			
		||||
        "@0x/contracts-coordinator": "^3.1.37",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-exchange-forwarder": "^4.2.37",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-extensions": "^6.2.31",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/coordinator-server": "^1.0.5",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/migrations": "^6.5.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/migrations": "^8.1.0",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/protocol-utils": "^1.8.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@azure/core-asynciterator-polyfill": "^1.0.0",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
@@ -89,26 +90,26 @@
 | 
			
		||||
        "solhint": "^1.4.1",
 | 
			
		||||
        "truffle": "^5.0.32",
 | 
			
		||||
        "tslint": "5.11.0",
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
        "typescript": "4.2.2"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/asset-swapper": "^5.4.1",
 | 
			
		||||
        "@0x/base-contract": "^6.2.13",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.17",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.17",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.17",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.17",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.24",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-zero-ex": "^0.11.1",
 | 
			
		||||
        "@0x/subproviders": "^6.2.2",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "ethereumjs-util": "^6.2.0",
 | 
			
		||||
        "@0x/asset-swapper": "^16.24.1",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.36",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.36",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.37",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.37",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.44",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-zero-ex": "^0.27.1",
 | 
			
		||||
        "@0x/subproviders": "^6.5.3",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
    },
 | 
			
		||||
};
 | 
			
		||||
@@ -534,9 +534,14 @@ blockchainTests.skip('Coordinator Client', env => {
 | 
			
		||||
            const signedOrders = [signedOrder, signedOrderWithDifferentFeeRecipient];
 | 
			
		||||
            const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
 | 
			
		||||
            await coordinatorClient
 | 
			
		||||
                .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
 | 
			
		||||
                    from: takerAddress,
 | 
			
		||||
                })
 | 
			
		||||
                .batchFillOrdersAsync(
 | 
			
		||||
                    signedOrders,
 | 
			
		||||
                    takerAssetFillAmounts,
 | 
			
		||||
                    signedOrders.map(o => o.signature),
 | 
			
		||||
                    {
 | 
			
		||||
                        from: takerAddress,
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
                .then(res => {
 | 
			
		||||
                    expect(res).to.be.undefined();
 | 
			
		||||
                })
 | 
			
		||||
@@ -570,9 +575,14 @@ blockchainTests.skip('Coordinator Client', env => {
 | 
			
		||||
            const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator];
 | 
			
		||||
            const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
 | 
			
		||||
            await coordinatorClient
 | 
			
		||||
                .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
 | 
			
		||||
                    from: takerAddress,
 | 
			
		||||
                })
 | 
			
		||||
                .batchFillOrdersAsync(
 | 
			
		||||
                    signedOrders,
 | 
			
		||||
                    takerAssetFillAmounts,
 | 
			
		||||
                    signedOrders.map(o => o.signature),
 | 
			
		||||
                    {
 | 
			
		||||
                        from: takerAddress,
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
                .then(res => {
 | 
			
		||||
                    expect(res).to.be.undefined();
 | 
			
		||||
                })
 | 
			
		||||
@@ -600,9 +610,14 @@ blockchainTests.skip('Coordinator Client', env => {
 | 
			
		||||
            const signedOrders = [signedOrder, signedOrderWithDifferentCoordinatorOperator];
 | 
			
		||||
            const takerAssetFillAmounts = [takerTokenFillAmount, takerTokenFillAmount, takerTokenFillAmount];
 | 
			
		||||
            await coordinatorClient
 | 
			
		||||
                .batchFillOrdersAsync(signedOrders, takerAssetFillAmounts, signedOrders.map(o => o.signature), {
 | 
			
		||||
                    from: takerAddress,
 | 
			
		||||
                })
 | 
			
		||||
                .batchFillOrdersAsync(
 | 
			
		||||
                    signedOrders,
 | 
			
		||||
                    takerAssetFillAmounts,
 | 
			
		||||
                    signedOrders.map(o => o.signature),
 | 
			
		||||
                    {
 | 
			
		||||
                        from: takerAddress,
 | 
			
		||||
                    },
 | 
			
		||||
                )
 | 
			
		||||
                .then(res => {
 | 
			
		||||
                    expect(res).to.be.undefined();
 | 
			
		||||
                })
 | 
			
		||||
 
 | 
			
		||||
@@ -267,7 +267,11 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
                expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
 | 
			
		||||
                await balanceStore.updateBalancesAsync();
 | 
			
		||||
                balanceStore.assertEquals(expectedBalances);
 | 
			
		||||
                verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
 | 
			
		||||
                verifyEvents(
 | 
			
		||||
                    txReceipt,
 | 
			
		||||
                    orders.map(order => expectedFillEvent(order)),
 | 
			
		||||
                    ExchangeEvents.Fill,
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
            it(`${fnName} should fill the orders if called by approver (eth fee, no refund)`, async () => {
 | 
			
		||||
                await balanceStore.updateBalancesAsync();
 | 
			
		||||
@@ -280,7 +284,11 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
                expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
 | 
			
		||||
                await balanceStore.updateBalancesAsync();
 | 
			
		||||
                balanceStore.assertEquals(expectedBalances);
 | 
			
		||||
                verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
 | 
			
		||||
                verifyEvents(
 | 
			
		||||
                    txReceipt,
 | 
			
		||||
                    orders.map(order => expectedFillEvent(order)),
 | 
			
		||||
                    ExchangeEvents.Fill,
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
            it(`${fnName} should fill the orders if called by approver (mixed fees, refund)`, async () => {
 | 
			
		||||
                await balanceStore.updateBalancesAsync();
 | 
			
		||||
@@ -293,7 +301,11 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
                expectedBalances.simulateFills(orders, taker.address, txReceipt, deployment, value);
 | 
			
		||||
                await balanceStore.updateBalancesAsync();
 | 
			
		||||
                balanceStore.assertEquals(expectedBalances);
 | 
			
		||||
                verifyEvents(txReceipt, orders.map(order => expectedFillEvent(order)), ExchangeEvents.Fill);
 | 
			
		||||
                verifyEvents(
 | 
			
		||||
                    txReceipt,
 | 
			
		||||
                    orders.map(order => expectedFillEvent(order)),
 | 
			
		||||
                    ExchangeEvents.Fill,
 | 
			
		||||
                );
 | 
			
		||||
            });
 | 
			
		||||
            it(`${fnName} should revert with an invalid approval signature`, async () => {
 | 
			
		||||
                const approvalSignature = hexUtils.concat(
 | 
			
		||||
@@ -360,7 +372,11 @@ blockchainTests.resets('Coordinator integration tests', env => {
 | 
			
		||||
                .executeTransaction(transaction, maker.address, transaction.signature, [])
 | 
			
		||||
                .awaitTransactionSuccessAsync({ from: maker.address });
 | 
			
		||||
 | 
			
		||||
            verifyEvents(txReceipt, orders.map(order => expectedCancelEvent(order)), ExchangeEvents.Cancel);
 | 
			
		||||
            verifyEvents(
 | 
			
		||||
                txReceipt,
 | 
			
		||||
                orders.map(order => expectedCancelEvent(order)),
 | 
			
		||||
                ExchangeEvents.Cancel,
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
        it('cancelOrdersUpTo call should be successful without an approval', async () => {
 | 
			
		||||
            const data = exchangeDataEncoder.encodeOrdersToExchangeData(ExchangeFunctionName.CancelOrdersUpTo, []);
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -186,13 +186,13 @@ blockchainTests.resets('LibAssetData', env => {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should decode multiasset data', async () => {
 | 
			
		||||
            expect(await devUtils.decodeMultiAssetData(KNOWN_MULTI_ASSET_ENCODING.assetData).callAsync()).to.deep.equal(
 | 
			
		||||
                [
 | 
			
		||||
                    AssetProxyId.MultiAsset,
 | 
			
		||||
                    KNOWN_MULTI_ASSET_ENCODING.amounts,
 | 
			
		||||
                    KNOWN_MULTI_ASSET_ENCODING.nestedAssetData,
 | 
			
		||||
                ],
 | 
			
		||||
            );
 | 
			
		||||
            expect(
 | 
			
		||||
                await devUtils.decodeMultiAssetData(KNOWN_MULTI_ASSET_ENCODING.assetData).callAsync(),
 | 
			
		||||
            ).to.deep.equal([
 | 
			
		||||
                AssetProxyId.MultiAsset,
 | 
			
		||||
                KNOWN_MULTI_ASSET_ENCODING.amounts,
 | 
			
		||||
                KNOWN_MULTI_ASSET_ENCODING.nestedAssetData,
 | 
			
		||||
            ]);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('should encode StaticCall data', async () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,362 +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,
 | 
			
		||||
    Signature,
 | 
			
		||||
} 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 } from '@0x/utils';
 | 
			
		||||
import * as ethjs from 'ethereumjs-util';
 | 
			
		||||
 | 
			
		||||
const { MAX_UINT256, NULL_ADDRESS, NULL_BYTES, ZERO_AMOUNT } = constants;
 | 
			
		||||
 | 
			
		||||
function sigstruct(signature: string): Signature {
 | 
			
		||||
    return {
 | 
			
		||||
        v: parseInt(hexUtils.slice(signature, 0, 1), 16),
 | 
			
		||||
        signatureType: parseInt(hexUtils.slice(signature, 65, 66), 16),
 | 
			
		||||
        r: hexUtils.slice(signature, 1, 33),
 | 
			
		||||
        s: hexUtils.slice(signature, 33, 65),
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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 calldata and no relayer fee', async () => {
 | 
			
		||||
        const swap = await generateSwapAsync();
 | 
			
		||||
        const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed.
 | 
			
		||||
        const mtx = await createMetaTransactionAsync(getSwapData(swap), _protocolFee, 0);
 | 
			
		||||
        const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer);
 | 
			
		||||
        const receipt = await zeroEx
 | 
			
		||||
            .executeMetaTransaction(mtx, sigstruct(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,
 | 
			
		||||
                    sender: zeroEx.address,
 | 
			
		||||
                    data: NULL_BYTES,
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
            'TransformerMetadata',
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('can call `transformERC20()` with calldata and a relayer fee', async () => {
 | 
			
		||||
        const swap = await generateSwapAsync();
 | 
			
		||||
        const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed.
 | 
			
		||||
        const mtx = await createMetaTransactionAsync(getSwapData(swap), _protocolFee);
 | 
			
		||||
        const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer);
 | 
			
		||||
        const receipt = await zeroEx
 | 
			
		||||
            .executeMetaTransaction(mtx, sigstruct(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,
 | 
			
		||||
                    sender: zeroEx.address,
 | 
			
		||||
                    data: NULL_BYTES,
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
            'TransformerMetadata',
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('`transformERC20()` can fill RFQT order', async () => {
 | 
			
		||||
        const swap = await generateSwapAsync({}, true);
 | 
			
		||||
        const _protocolFee = protocolFee.times(GAS_PRICE).times(swap.orders.length + 1); // Pay a little more fee than needed.
 | 
			
		||||
        const mtx = await createMetaTransactionAsync(getSwapData(swap), _protocolFee, 0);
 | 
			
		||||
        const relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer);
 | 
			
		||||
        const receipt = await zeroEx
 | 
			
		||||
            .executeMetaTransaction(mtx, sigstruct(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,
 | 
			
		||||
                    sender: zeroEx.address,
 | 
			
		||||
                    data: NULL_BYTES,
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
            'TransformerMetadata',
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('`transformERC20()` can fill RFQT order if quote signer configured', 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 relayerEthBalanceBefore = await env.web3Wrapper.getBalanceInWeiAsync(relayer);
 | 
			
		||||
        await zeroEx.setQuoteSigner(NULL_ADDRESS).awaitTransactionSuccessAsync({ from: owner });
 | 
			
		||||
        const receipt = await zeroEx
 | 
			
		||||
            .executeMetaTransaction(mtx, sigstruct(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,
 | 
			
		||||
                    sender: zeroEx.address,
 | 
			
		||||
                    data: NULL_BYTES,
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
            'TransformerMetadata',
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -278,15 +278,21 @@ blockchainTests.resets('matchOrders integration tests', env => {
 | 
			
		||||
                ExchangeRevertErrors.BatchMatchOrdersErrorCodes.InvalidLengthRightSignatures,
 | 
			
		||||
            );
 | 
			
		||||
            let tx = deployment.exchange
 | 
			
		||||
                .batchMatchOrders(leftOrders, rightOrders, leftOrders.map(order => order.signature), [
 | 
			
		||||
                    rightOrders[0].signature,
 | 
			
		||||
                ])
 | 
			
		||||
                .batchMatchOrders(
 | 
			
		||||
                    leftOrders,
 | 
			
		||||
                    rightOrders,
 | 
			
		||||
                    leftOrders.map(order => order.signature),
 | 
			
		||||
                    [rightOrders[0].signature],
 | 
			
		||||
                )
 | 
			
		||||
                .awaitTransactionSuccessAsync({ from: matcher.address });
 | 
			
		||||
            await expect(tx).to.revertWith(expectedError);
 | 
			
		||||
            tx = deployment.exchange
 | 
			
		||||
                .batchMatchOrdersWithMaximalFill(leftOrders, rightOrders, leftOrders.map(order => order.signature), [
 | 
			
		||||
                    rightOrders[0].signature,
 | 
			
		||||
                ])
 | 
			
		||||
                .batchMatchOrdersWithMaximalFill(
 | 
			
		||||
                    leftOrders,
 | 
			
		||||
                    rightOrders,
 | 
			
		||||
                    leftOrders.map(order => order.signature),
 | 
			
		||||
                    [rightOrders[0].signature],
 | 
			
		||||
                )
 | 
			
		||||
                .awaitTransactionSuccessAsync({ from: matcher.address });
 | 
			
		||||
            return expect(tx).to.revertWith(expectedError);
 | 
			
		||||
        });
 | 
			
		||||
@@ -475,7 +481,10 @@ blockchainTests.resets('matchOrders integration tests', env => {
 | 
			
		||||
                ],
 | 
			
		||||
                leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT],
 | 
			
		||||
                matchIndices: [[0, 0], [1, 0]],
 | 
			
		||||
                matchIndices: [
 | 
			
		||||
                    [0, 0],
 | 
			
		||||
                    [1, 0],
 | 
			
		||||
                ],
 | 
			
		||||
                shouldMaximallyFill: false,
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
@@ -524,7 +533,10 @@ blockchainTests.resets('matchOrders integration tests', env => {
 | 
			
		||||
                ],
 | 
			
		||||
                leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT],
 | 
			
		||||
                rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                matchIndices: [[0, 0], [0, 1]],
 | 
			
		||||
                matchIndices: [
 | 
			
		||||
                    [0, 0],
 | 
			
		||||
                    [0, 1],
 | 
			
		||||
                ],
 | 
			
		||||
                shouldMaximallyFill: false,
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
@@ -626,7 +638,11 @@ blockchainTests.resets('matchOrders integration tests', env => {
 | 
			
		||||
                ],
 | 
			
		||||
                leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                matchIndices: [[0, 0], [0, 1], [1, 1]],
 | 
			
		||||
                matchIndices: [
 | 
			
		||||
                    [0, 0],
 | 
			
		||||
                    [0, 1],
 | 
			
		||||
                    [1, 1],
 | 
			
		||||
                ],
 | 
			
		||||
                shouldMaximallyFill: false,
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
@@ -801,7 +817,11 @@ blockchainTests.resets('matchOrders integration tests', env => {
 | 
			
		||||
                ],
 | 
			
		||||
                leftOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                rightOrdersTakerAssetFilledAmounts: [constants.ZERO_AMOUNT, constants.ZERO_AMOUNT],
 | 
			
		||||
                matchIndices: [[0, 0], [1, 0], [1, 1]],
 | 
			
		||||
                matchIndices: [
 | 
			
		||||
                    [0, 0],
 | 
			
		||||
                    [1, 0],
 | 
			
		||||
                    [1, 1],
 | 
			
		||||
                ],
 | 
			
		||||
                shouldMaximallyFill: true,
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -106,7 +106,12 @@ blockchainTests.fork.resets('Forwarder mainnet tests', env => {
 | 
			
		||||
                orders[1].takerAssetAmount.dividedToIntegerBy(2),
 | 
			
		||||
            );
 | 
			
		||||
            const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder
 | 
			
		||||
                .marketSellOrdersWithEth(orders, orders.map(o => o.signature), [], [])
 | 
			
		||||
                .marketSellOrdersWithEth(
 | 
			
		||||
                    orders,
 | 
			
		||||
                    orders.map(o => o.signature),
 | 
			
		||||
                    [],
 | 
			
		||||
                    [],
 | 
			
		||||
                )
 | 
			
		||||
                .callAsync({
 | 
			
		||||
                    from: takerAddress,
 | 
			
		||||
                    value: ethSellAmount,
 | 
			
		||||
@@ -161,7 +166,13 @@ blockchainTests.fork.resets('Forwarder mainnet tests', env => {
 | 
			
		||||
                orders[1].makerAssetAmount.dividedToIntegerBy(2),
 | 
			
		||||
            );
 | 
			
		||||
            const [wethSpentAmount, makerAssetAcquiredAmount] = await forwarder
 | 
			
		||||
                .marketBuyOrdersWithEth(orders, makerAssetBuyAmount, orders.map(o => o.signature), [], [])
 | 
			
		||||
                .marketBuyOrdersWithEth(
 | 
			
		||||
                    orders,
 | 
			
		||||
                    makerAssetBuyAmount,
 | 
			
		||||
                    orders.map(o => o.signature),
 | 
			
		||||
                    [],
 | 
			
		||||
                    [],
 | 
			
		||||
                )
 | 
			
		||||
                .callAsync({
 | 
			
		||||
                    from: takerAddress,
 | 
			
		||||
                    value: ethSellAmount,
 | 
			
		||||
 
 | 
			
		||||
@@ -190,9 +190,14 @@ export function MakerMixin<TBase extends Constructor>(Base: TBase): TBase & Cons
 | 
			
		||||
                rightTakerAssetData,
 | 
			
		||||
                makerFeeAssetData,
 | 
			
		||||
                takerFeeAssetData,
 | 
			
		||||
            ] = [leftMakerToken, leftTakerToken, rightMakerToken, rightTakerToken, makerFeeToken, takerFeeToken].map(
 | 
			
		||||
                token => encodeERC20AssetData(token.address),
 | 
			
		||||
            );
 | 
			
		||||
            ] = [
 | 
			
		||||
                leftMakerToken,
 | 
			
		||||
                leftTakerToken,
 | 
			
		||||
                rightMakerToken,
 | 
			
		||||
                rightTakerToken,
 | 
			
		||||
                makerFeeToken,
 | 
			
		||||
                takerFeeToken,
 | 
			
		||||
            ].map(token => encodeERC20AssetData(token.address));
 | 
			
		||||
 | 
			
		||||
            // Construct and sign the left order
 | 
			
		||||
            const leftOrder = await this.signOrderAsync({
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,10 @@ import { Actor, Constructor } from './base';
 | 
			
		||||
 * Useful for BalanceStore.
 | 
			
		||||
 */
 | 
			
		||||
export function actorAddressesByName(actors: Actor[]): ObjectMap<string> {
 | 
			
		||||
    return _.zipObject(actors.map(actor => actor.name), actors.map(actor => actor.address));
 | 
			
		||||
    return _.zipObject(
 | 
			
		||||
        actors.map(actor => actor.name),
 | 
			
		||||
        actors.map(actor => actor.address),
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
@@ -19,5 +22,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>>;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -77,19 +77,24 @@ tests('Exchange signature validation fuzz tests', env => {
 | 
			
		||||
    before(async () => {
 | 
			
		||||
        chainId = await env.web3Wrapper.getChainIdAsync();
 | 
			
		||||
        accounts = await env.getAccountAddressesAsync();
 | 
			
		||||
        privateKeys = _.zipObject(accounts, accounts.map((a, i) => constants.TESTRPC_PRIVATE_KEYS[i]));
 | 
			
		||||
        privateKeys = _.zipObject(
 | 
			
		||||
            accounts,
 | 
			
		||||
            accounts.map((a, i) => constants.TESTRPC_PRIVATE_KEYS[i]),
 | 
			
		||||
        );
 | 
			
		||||
        deployment = await DeploymentManager.deployAsync(env, {
 | 
			
		||||
            numErc20TokensToDeploy: 0,
 | 
			
		||||
            numErc721TokensToDeploy: 0,
 | 
			
		||||
            numErc1155TokensToDeploy: 0,
 | 
			
		||||
        });
 | 
			
		||||
        exchange = deployment.exchange;
 | 
			
		||||
        walletContractAddress = (await TestSignatureValidationWalletContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.TestSignatureValidationWallet,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            {},
 | 
			
		||||
        )).address;
 | 
			
		||||
        walletContractAddress = (
 | 
			
		||||
            await TestSignatureValidationWalletContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                artifacts.TestSignatureValidationWallet,
 | 
			
		||||
                env.provider,
 | 
			
		||||
                env.txDefaults,
 | 
			
		||||
                {},
 | 
			
		||||
            )
 | 
			
		||||
        ).address;
 | 
			
		||||
        // This just has to be a contract address that doesn't implement the
 | 
			
		||||
        // wallet spec.
 | 
			
		||||
        notWalletContractAddress = exchange.address;
 | 
			
		||||
@@ -715,7 +720,7 @@ tests('Exchange signature validation fuzz tests', env => {
 | 
			
		||||
            invalidTestTransactionMangledSignature(),
 | 
			
		||||
        ];
 | 
			
		||||
        const simulationEnvironment = new SimulationEnvironment(deployment, new BlockchainBalanceStore({}, {}), []);
 | 
			
		||||
        const simulation = new class extends Simulation {
 | 
			
		||||
        const simulation = new (class extends Simulation {
 | 
			
		||||
            // tslint:disable-next-line: prefer-function-over-method
 | 
			
		||||
            protected async *_assertionGenerator(): AsyncIterableIterator<AssertionResult | void> {
 | 
			
		||||
                while (true) {
 | 
			
		||||
@@ -723,7 +728,7 @@ tests('Exchange signature validation fuzz tests', env => {
 | 
			
		||||
                    yield (await action!.next()).value;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }(simulationEnvironment);
 | 
			
		||||
        })(simulationEnvironment);
 | 
			
		||||
        simulation.resets = true;
 | 
			
		||||
        return simulation.fuzzAsync();
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,184 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "4.1.37",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "4.1.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "4.1.35",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "4.1.34",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "4.1.33",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "4.1.32",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "4.1.31",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1620214333,
 | 
			
		||||
        "version": "4.1.30",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "4.1.29",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.1.37 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.36 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.35 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.34 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.33 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.32 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.31 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.30 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.29 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-multisig",
 | 
			
		||||
    "version": "4.1.17",
 | 
			
		||||
    "version": "4.1.37",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -49,18 +49,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@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.13",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "ethereum-types": "^3.4.0"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "ethereum-types": "^3.5.0"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,185 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "2.0.44",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "2.0.43",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "2.0.42",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "2.0.41",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "2.0.40",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "2.0.39",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "2.0.38",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "version": "2.0.37",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Patch epoch finalization issue",
 | 
			
		||||
                "pr": 221
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "timestamp": 1620214333
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "2.0.36",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,86 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v2.0.44 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.43 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.42 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.41 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.40 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.39 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.38 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.37 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Patch epoch finalization issue (#221)
 | 
			
		||||
 | 
			
		||||
## v2.0.36 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										55
									
								
								contracts/staking/contracts/src/StakingPatch.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								contracts/staking/contracts/src/StakingPatch.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  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 "./interfaces/IStaking.sol";
 | 
			
		||||
import "./sys/MixinParams.sol";
 | 
			
		||||
import "./stake/MixinStake.sol";
 | 
			
		||||
import "./fees/MixinExchangeFees.sol";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
contract StakingPatch is
 | 
			
		||||
    IStaking,
 | 
			
		||||
    MixinParams,
 | 
			
		||||
    MixinStake,
 | 
			
		||||
    MixinExchangeFees
 | 
			
		||||
{
 | 
			
		||||
    /// @dev Initialize storage owned by this contract.
 | 
			
		||||
    ///      This function should not be called directly.
 | 
			
		||||
    ///      The StakingProxy contract will call it in `attachStakingContract()`.
 | 
			
		||||
    function init()
 | 
			
		||||
        public
 | 
			
		||||
        onlyAuthorized
 | 
			
		||||
    {
 | 
			
		||||
        uint256 currentEpoch_ = currentEpoch;
 | 
			
		||||
        uint256 prevEpoch = currentEpoch_.safeSub(1);
 | 
			
		||||
 | 
			
		||||
        // Patch corrupted state
 | 
			
		||||
        aggregatedStatsByEpoch[prevEpoch].numPoolsToFinalize = 0;
 | 
			
		||||
        this.endEpoch();
 | 
			
		||||
 | 
			
		||||
        uint256 lastPoolId_ = 57;
 | 
			
		||||
        for (uint256 i = 1; i <= lastPoolId_; i++) {
 | 
			
		||||
            this.finalizePool(bytes32(i));
 | 
			
		||||
        }
 | 
			
		||||
        // Ensure that current epoch's state is not corrupted
 | 
			
		||||
        aggregatedStatsByEpoch[currentEpoch_].numPoolsToFinalize = 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -53,6 +53,10 @@ contract MixinExchangeFees is
 | 
			
		||||
    {
 | 
			
		||||
        _assertValidProtocolFee(protocolFee);
 | 
			
		||||
 | 
			
		||||
        if (protocolFee == 0) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Transfer the protocol fee to this address if it should be paid in
 | 
			
		||||
        // WETH.
 | 
			
		||||
        if (msg.value == 0) {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-staking",
 | 
			
		||||
    "version": "2.0.24",
 | 
			
		||||
    "version": "2.0.44",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -41,7 +41,7 @@
 | 
			
		||||
    "config": {
 | 
			
		||||
        "publicInterfaceContracts": "IStaking,IStakingEvents,IStakingProxy,IZrxVault,LibStakingRichErrors,Staking,StakingProxy,ZrxVault,TestStaking",
 | 
			
		||||
        "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
 | 
			
		||||
        "abis": "./test/generated-artifacts/@(IStaking|IStakingEvents|IStakingProxy|IStorage|IStorageInit|IStructs|IZrxVault|LibCobbDouglas|LibFixedMath|LibFixedMathRichErrors|LibSafeDowncast|LibStakingRichErrors|MixinAbstract|MixinConstants|MixinCumulativeRewards|MixinDeploymentConstants|MixinExchangeFees|MixinExchangeManager|MixinFinalizer|MixinParams|MixinScheduler|MixinStake|MixinStakeBalances|MixinStakeStorage|MixinStakingPool|MixinStakingPoolRewards|MixinStorage|Staking|StakingProxy|TestAssertStorageParams|TestCobbDouglas|TestCumulativeRewardTracking|TestDelegatorRewards|TestExchangeManager|TestFinalizer|TestInitTarget|TestLibFixedMath|TestLibSafeDowncast|TestMixinCumulativeRewards|TestMixinParams|TestMixinScheduler|TestMixinStake|TestMixinStakeBalances|TestMixinStakeStorage|TestMixinStakingPool|TestMixinStakingPoolRewards|TestProtocolFees|TestProxyDestination|TestStaking|TestStakingNoWETH|TestStakingProxy|TestStakingProxyUnit|TestStorageLayoutAndConstants|ZrxVault).json"
 | 
			
		||||
        "abis": "./test/generated-artifacts/@(IStaking|IStakingEvents|IStakingProxy|IStorage|IStorageInit|IStructs|IZrxVault|LibCobbDouglas|LibFixedMath|LibFixedMathRichErrors|LibSafeDowncast|LibStakingRichErrors|MixinAbstract|MixinConstants|MixinCumulativeRewards|MixinDeploymentConstants|MixinExchangeFees|MixinExchangeManager|MixinFinalizer|MixinParams|MixinScheduler|MixinStake|MixinStakeBalances|MixinStakeStorage|MixinStakingPool|MixinStakingPoolRewards|MixinStorage|Staking|StakingPatch|StakingProxy|TestAssertStorageParams|TestCobbDouglas|TestCumulativeRewardTracking|TestDelegatorRewards|TestExchangeManager|TestFinalizer|TestInitTarget|TestLibFixedMath|TestLibSafeDowncast|TestMixinCumulativeRewards|TestMixinParams|TestMixinScheduler|TestMixinStake|TestMixinStakeBalances|TestMixinStakeStorage|TestMixinStakingPool|TestMixinStakingPoolRewards|TestProtocolFees|TestProxyDestination|TestStaking|TestStakingNoWETH|TestStakingProxy|TestStakingProxyUnit|TestStorageLayoutAndConstants|ZrxVault).json"
 | 
			
		||||
    },
 | 
			
		||||
    "repository": {
 | 
			
		||||
        "type": "git",
 | 
			
		||||
@@ -53,20 +53,20 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.12",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.8",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.15",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.11",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.17",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.23",
 | 
			
		||||
        "@0x/contracts-utils": "^4.6.2",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/abi-gen": "^5.6.0",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.7.18",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.35",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.3.15",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.36",
 | 
			
		||||
        "@0x/contracts-gen": "^2.0.38",
 | 
			
		||||
        "@0x/contracts-utils": "^4.7.15",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
        "chai": "^4.0.1",
 | 
			
		||||
@@ -84,15 +84,15 @@
 | 
			
		||||
        "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.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.14",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1"
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.4.7",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
 
 | 
			
		||||
@@ -157,11 +157,11 @@ export class FinalizerActor extends BaseActor {
 | 
			
		||||
            const delegators = delegatorsByPoolId[poolId];
 | 
			
		||||
            delegatorBalancesByPoolId[poolId] = {};
 | 
			
		||||
            for (const delegator of delegators) {
 | 
			
		||||
                delegatorBalancesByPoolId[poolId][
 | 
			
		||||
                    delegator
 | 
			
		||||
                ] = (await this._stakingApiWrapper.stakingContract
 | 
			
		||||
                    .getStakeDelegatedToPoolByOwner(delegator, poolId)
 | 
			
		||||
                    .callAsync()).currentEpochBalance;
 | 
			
		||||
                delegatorBalancesByPoolId[poolId][delegator] = (
 | 
			
		||||
                    await this._stakingApiWrapper.stakingContract
 | 
			
		||||
                        .getStakeDelegatedToPoolByOwner(delegator, poolId)
 | 
			
		||||
                        .callAsync()
 | 
			
		||||
                ).currentEpochBalance;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return delegatorBalancesByPoolId;
 | 
			
		||||
@@ -253,7 +253,10 @@ export class FinalizerActor extends BaseActor {
 | 
			
		||||
        const totalFeesCollected = BigNumber.sum(...activePools.map(p => p.feesCollected));
 | 
			
		||||
        const totalWeightedStake = BigNumber.sum(...activePools.map(p => p.weightedStake));
 | 
			
		||||
        if (totalRewards.eq(0) || totalFeesCollected.eq(0) || totalWeightedStake.eq(0)) {
 | 
			
		||||
            return _.zipObject(poolIds, _.times(poolIds.length, () => new BigNumber(0)));
 | 
			
		||||
            return _.zipObject(
 | 
			
		||||
                poolIds,
 | 
			
		||||
                _.times(poolIds.length, () => new BigNumber(0)),
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        const rewards = await Promise.all(
 | 
			
		||||
            activePools.map(async pool =>
 | 
			
		||||
 
 | 
			
		||||
@@ -33,6 +33,7 @@ import * as MixinStakingPool from '../test/generated-artifacts/MixinStakingPool.
 | 
			
		||||
import * as MixinStakingPoolRewards from '../test/generated-artifacts/MixinStakingPoolRewards.json';
 | 
			
		||||
import * as MixinStorage from '../test/generated-artifacts/MixinStorage.json';
 | 
			
		||||
import * as Staking from '../test/generated-artifacts/Staking.json';
 | 
			
		||||
import * as StakingPatch from '../test/generated-artifacts/StakingPatch.json';
 | 
			
		||||
import * as StakingProxy from '../test/generated-artifacts/StakingProxy.json';
 | 
			
		||||
import * as TestAssertStorageParams from '../test/generated-artifacts/TestAssertStorageParams.json';
 | 
			
		||||
import * as TestCobbDouglas from '../test/generated-artifacts/TestCobbDouglas.json';
 | 
			
		||||
@@ -61,6 +62,7 @@ import * as TestStorageLayoutAndConstants from '../test/generated-artifacts/Test
 | 
			
		||||
import * as ZrxVault from '../test/generated-artifacts/ZrxVault.json';
 | 
			
		||||
export const artifacts = {
 | 
			
		||||
    Staking: Staking as ContractArtifact,
 | 
			
		||||
    StakingPatch: StakingPatch as ContractArtifact,
 | 
			
		||||
    StakingProxy: StakingProxy as ContractArtifact,
 | 
			
		||||
    ZrxVault: ZrxVault as ContractArtifact,
 | 
			
		||||
    MixinExchangeFees: MixinExchangeFees as ContractArtifact,
 | 
			
		||||
 
 | 
			
		||||
@@ -102,13 +102,15 @@ blockchainTests('Migration tests', env => {
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
            it('should set the correct initial params', async () => {
 | 
			
		||||
                const stakingProxyContractAddress = (await StakingProxyContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                    artifacts.StakingProxy,
 | 
			
		||||
                    env.provider,
 | 
			
		||||
                    env.txDefaults,
 | 
			
		||||
                    artifacts,
 | 
			
		||||
                    stakingContract.address,
 | 
			
		||||
                )).address;
 | 
			
		||||
                const stakingProxyContractAddress = (
 | 
			
		||||
                    await StakingProxyContract.deployFrom0xArtifactAsync(
 | 
			
		||||
                        artifacts.StakingProxy,
 | 
			
		||||
                        env.provider,
 | 
			
		||||
                        env.txDefaults,
 | 
			
		||||
                        artifacts,
 | 
			
		||||
                        stakingContract.address,
 | 
			
		||||
                    )
 | 
			
		||||
                ).address;
 | 
			
		||||
 | 
			
		||||
                const stakingProxyContract = new StakingContract(
 | 
			
		||||
                    stakingProxyContractAddress,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										66
									
								
								contracts/staking/test/patch_mainnet_test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								contracts/staking/test/patch_mainnet_test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,66 @@
 | 
			
		||||
import { blockchainTests, constants, expect, filterLogsToArguments } from '@0x/contracts-test-utils';
 | 
			
		||||
import { BigNumber, logUtils } from '@0x/utils';
 | 
			
		||||
import * as _ from 'lodash';
 | 
			
		||||
 | 
			
		||||
import { artifacts } from './artifacts';
 | 
			
		||||
import { StakingEvents, StakingPatchContract, StakingProxyContract, StakingProxyEvents } from './wrappers';
 | 
			
		||||
 | 
			
		||||
const abis = _.mapValues(artifacts, v => v.compilerOutput.abi);
 | 
			
		||||
const STAKING_PROXY = '0xa26e80e7dea86279c6d778d702cc413e6cffa777';
 | 
			
		||||
const STAKING_OWNER = '0x7d3455421bbc5ed534a83c88fd80387dc8271392';
 | 
			
		||||
const EXCHANGE_PROXY = '0xdef1c0ded9bec7f1a1670819833240f027b25eff';
 | 
			
		||||
blockchainTests.configure({
 | 
			
		||||
    fork: {
 | 
			
		||||
        unlockedAccounts: [STAKING_OWNER, EXCHANGE_PROXY],
 | 
			
		||||
    },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
blockchainTests.fork('Staking patch mainnet fork tests', env => {
 | 
			
		||||
    let stakingProxyContract: StakingProxyContract;
 | 
			
		||||
    let patchedStakingPatchContract: StakingPatchContract;
 | 
			
		||||
 | 
			
		||||
    before(async () => {
 | 
			
		||||
        stakingProxyContract = new StakingProxyContract(STAKING_PROXY, env.provider, undefined, abis);
 | 
			
		||||
        patchedStakingPatchContract = await StakingPatchContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.Staking,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            artifacts,
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('Staking proxy successfully attaches to patched logic', async () => {
 | 
			
		||||
        const tx = await stakingProxyContract
 | 
			
		||||
            .attachStakingContract(patchedStakingPatchContract.address)
 | 
			
		||||
            .awaitTransactionSuccessAsync({ from: STAKING_OWNER, gasPrice: 0 }, { shouldValidate: false });
 | 
			
		||||
        expect(filterLogsToArguments(tx.logs, StakingProxyEvents.StakingContractAttachedToProxy)).to.deep.equal([
 | 
			
		||||
            {
 | 
			
		||||
                newStakingPatchContractAddress: patchedStakingPatchContract.address,
 | 
			
		||||
            },
 | 
			
		||||
        ]);
 | 
			
		||||
        expect(filterLogsToArguments(tx.logs, StakingEvents.EpochEnded).length).to.equal(1);
 | 
			
		||||
        expect(filterLogsToArguments(tx.logs, StakingEvents.EpochFinalized).length).to.equal(1);
 | 
			
		||||
        logUtils.log(`${tx.gasUsed} gas used`);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it('Patched staking handles 0 gas protocol fees', async () => {
 | 
			
		||||
        const staking = new StakingPatchContract(STAKING_PROXY, env.provider, undefined, abis);
 | 
			
		||||
        const maker = '0x7b1886e49ab5433bb46f7258548092dc8cdca28b';
 | 
			
		||||
        const zeroFeeTx = await staking
 | 
			
		||||
            .payProtocolFee(maker, constants.NULL_ADDRESS, constants.ZERO_AMOUNT)
 | 
			
		||||
            .awaitTransactionSuccessAsync({ from: EXCHANGE_PROXY, gasPrice: 0 }, { shouldValidate: false });
 | 
			
		||||
        // StakingPoolEarnedRewardsInEpoch should _not_ be emitted for a zero protocol fee.
 | 
			
		||||
        // tslint:disable-next-line:no-unused-expression
 | 
			
		||||
        expect(filterLogsToArguments(zeroFeeTx.logs, StakingEvents.StakingPoolEarnedRewardsInEpoch)).to.be.empty;
 | 
			
		||||
 | 
			
		||||
        // Coincidentally there's some ETH in the ExchangeProxy
 | 
			
		||||
        const nonZeroFeeTx = await staking
 | 
			
		||||
            .payProtocolFee(maker, constants.NULL_ADDRESS, new BigNumber(1))
 | 
			
		||||
            .awaitTransactionSuccessAsync({ from: EXCHANGE_PROXY, gasPrice: 0, value: 1 }, { shouldValidate: false });
 | 
			
		||||
        // StakingPoolEarnedRewardsInEpoch _should_ be emitted for a non-zero protocol fee.
 | 
			
		||||
        expect(
 | 
			
		||||
            filterLogsToArguments(nonZeroFeeTx.logs, StakingEvents.StakingPoolEarnedRewardsInEpoch),
 | 
			
		||||
        ).to.have.lengthOf(1);
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
// tslint:enable:no-unnecessary-type-assertion
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -31,6 +31,7 @@ export * from '../test/generated-wrappers/mixin_staking_pool';
 | 
			
		||||
export * from '../test/generated-wrappers/mixin_staking_pool_rewards';
 | 
			
		||||
export * from '../test/generated-wrappers/mixin_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/staking';
 | 
			
		||||
export * from '../test/generated-wrappers/staking_patch';
 | 
			
		||||
export * from '../test/generated-wrappers/staking_proxy';
 | 
			
		||||
export * from '../test/generated-wrappers/test_assert_storage_params';
 | 
			
		||||
export * from '../test/generated-wrappers/test_cobb_douglas';
 | 
			
		||||
 
 | 
			
		||||
@@ -40,6 +40,7 @@
 | 
			
		||||
        "test/generated-artifacts/MixinStakingPoolRewards.json",
 | 
			
		||||
        "test/generated-artifacts/MixinStorage.json",
 | 
			
		||||
        "test/generated-artifacts/Staking.json",
 | 
			
		||||
        "test/generated-artifacts/StakingPatch.json",
 | 
			
		||||
        "test/generated-artifacts/StakingProxy.json",
 | 
			
		||||
        "test/generated-artifacts/TestAssertStorageParams.json",
 | 
			
		||||
        "test/generated-artifacts/TestCobbDouglas.json",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,176 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628665757,
 | 
			
		||||
        "version": "5.4.7",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1628225642,
 | 
			
		||||
        "version": "5.4.6",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1624356181,
 | 
			
		||||
        "version": "5.4.5",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1623382456,
 | 
			
		||||
        "version": "5.4.4",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1622609597,
 | 
			
		||||
        "version": "5.4.3",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621944788,
 | 
			
		||||
        "version": "5.4.2",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1621600614,
 | 
			
		||||
        "version": "5.4.1",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "version": "5.4.0",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Set default ganache gas limit to 100e6",
 | 
			
		||||
                "pr": 197
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "timestamp": 1620214333
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1619596077,
 | 
			
		||||
        "version": "5.3.25",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "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",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,82 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v5.4.7 - _August 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.6 - _August 6, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.5 - _June 22, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.4 - _June 11, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.3 - _June 2, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.2 - _May 25, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.1 - _May 21, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.4.0 - _May 5, 2021_
 | 
			
		||||
 | 
			
		||||
    * Set default ganache gas limit to 100e6 (#197)
 | 
			
		||||
 | 
			
		||||
## v5.3.25 - _April 28, 2021_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## 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
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-test-utils",
 | 
			
		||||
    "version": "5.3.14",
 | 
			
		||||
    "version": "5.4.7",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -34,28 +34,28 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/sol-compiler": "^4.4.0",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/sol-compiler": "^4.7.3",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.4",
 | 
			
		||||
        "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.19",
 | 
			
		||||
        "@0x/base-contract": "^6.2.13",
 | 
			
		||||
        "@0x/contract-addresses": "^5.6.0",
 | 
			
		||||
        "@0x/dev-utils": "^4.1.2",
 | 
			
		||||
        "@0x/json-schemas": "^5.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.9",
 | 
			
		||||
        "@0x/sol-coverage": "^4.0.23",
 | 
			
		||||
        "@0x/sol-profiler": "^4.1.13",
 | 
			
		||||
        "@0x/sol-trace": "^3.0.23",
 | 
			
		||||
        "@0x/subproviders": "^6.2.2",
 | 
			
		||||
        "@0x/types": "^3.3.1",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.6",
 | 
			
		||||
        "@0x/utils": "^6.1.1",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.10",
 | 
			
		||||
        "@0x/assert": "^3.0.27",
 | 
			
		||||
        "@0x/base-contract": "^6.4.0",
 | 
			
		||||
        "@0x/contract-addresses": "^6.6.0",
 | 
			
		||||
        "@0x/dev-utils": "^4.2.7",
 | 
			
		||||
        "@0x/json-schemas": "^6.1.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.28",
 | 
			
		||||
        "@0x/sol-coverage": "^4.0.37",
 | 
			
		||||
        "@0x/sol-profiler": "^4.1.27",
 | 
			
		||||
        "@0x/sol-trace": "^3.0.37",
 | 
			
		||||
        "@0x/subproviders": "^6.5.3",
 | 
			
		||||
        "@0x/types": "^3.3.3",
 | 
			
		||||
        "@0x/typescript-typings": "^5.2.0",
 | 
			
		||||
        "@0x/utils": "^6.4.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.5.3",
 | 
			
		||||
        "@types/bn.js": "^4.11.0",
 | 
			
		||||
        "@types/js-combinatorics": "^0.5.29",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
@@ -67,8 +67,8 @@
 | 
			
		||||
        "chai-bignumber": "^3.0.0",
 | 
			
		||||
        "decimal.js": "^10.2.0",
 | 
			
		||||
        "dirty-chai": "^2.0.1",
 | 
			
		||||
        "ethereum-types": "^3.4.0",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1",
 | 
			
		||||
        "ethereum-types": "^3.5.0",
 | 
			
		||||
        "ethereumjs-util": "^7.0.10",
 | 
			
		||||
        "ethers": "~4.0.4",
 | 
			
		||||
        "js-combinatorics": "^0.5.3",
 | 
			
		||||
        "lodash": "^4.17.11",
 | 
			
		||||
 
 | 
			
		||||
@@ -77,7 +77,7 @@ export const constants = {
 | 
			
		||||
    ZERO_AMOUNT: new BigNumber(0),
 | 
			
		||||
    PERCENTAGE_DENOMINATOR: new BigNumber(10).pow(18),
 | 
			
		||||
    TIME_BUFFER: new BigNumber(1000),
 | 
			
		||||
    KECCAK256_NULL: ethUtil.addHexPrefix(ethUtil.bufferToHex(ethUtil.SHA3_NULL)),
 | 
			
		||||
    KECCAK256_NULL: ethUtil.bufferToHex(ethUtil.keccak256(Buffer.alloc(0))),
 | 
			
		||||
    MAX_UINT256_ROOT: new BigNumber('340282366920938463463374607431768211456'),
 | 
			
		||||
    ONE_ETHER: new BigNumber(1e18),
 | 
			
		||||
    EIP712_DOMAIN_NAME: '0x Protocol',
 | 
			
		||||
 
 | 
			
		||||
@@ -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 = {
 | 
			
		||||
 
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user