Compare commits
	
		
			17 Commits
		
	
	
		
			@0x/contra
			...
			protocol@d
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					dbcb221a59 | ||
| 
						 | 
					6bbc179f52 | ||
| 
						 | 
					48e7a391c8 | ||
| 
						 | 
					2334e64d0c | ||
| 
						 | 
					14f920ee84 | ||
| 
						 | 
					e10a81023a | ||
| 
						 | 
					f4709ed1cb | ||
| 
						 | 
					e2e14a977a | ||
| 
						 | 
					866f958a10 | ||
| 
						 | 
					717db99b38 | ||
| 
						 | 
					02006118c7 | ||
| 
						 | 
					9816019bc5 | ||
| 
						 | 
					9c821dbfc3 | ||
| 
						 | 
					af1b890423 | ||
| 
						 | 
					673835d2de | ||
| 
						 | 
					500b57e935 | ||
| 
						 | 
					3f7d0580c1 | 
@@ -82,4 +82,5 @@ lib
 | 
			
		||||
/packages/asset-swapper/test/generated-wrappers
 | 
			
		||||
package.json
 | 
			
		||||
packages/*/docs
 | 
			
		||||
docs/
 | 
			
		||||
*.sol
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										12
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								README.md
									
									
									
									
									
								
							@@ -8,7 +8,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
 | 
			
		||||
 | 
			
		||||
[website-url]: https://0x.org
 | 
			
		||||
 | 
			
		||||
[](https://circleci.com/gh/0xProject/0x-monorepo)
 | 
			
		||||
[](https://circleci.com/gh/0xProject/protocool)
 | 
			
		||||
[](https://coveralls.io/github/0xProject/0x-monorepo?branch=development)
 | 
			
		||||
[](https://discordapp.com/invite/d3FTX3M)
 | 
			
		||||
[](https://opensource.org/licenses/Apache-2.0)
 | 
			
		||||
@@ -92,7 +92,7 @@ yarn build
 | 
			
		||||
To build a specific package:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
PKG=@0x/web3-wrapper yarn build
 | 
			
		||||
PKG=@0x/contract-wrappers yarn build
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
To build all contracts packages:
 | 
			
		||||
@@ -115,7 +115,7 @@ To watch a specific package and all it's dependent packages:
 | 
			
		||||
PKG=[NPM_PACKAGE_NAME] yarn watch
 | 
			
		||||
 | 
			
		||||
e.g
 | 
			
		||||
PKG=@0x/web3-wrapper yarn watch
 | 
			
		||||
PKG=@0x/contract-wrappers yarn watch
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Clean
 | 
			
		||||
@@ -143,7 +143,7 @@ yarn rebuild
 | 
			
		||||
To re-build (clean & build) a specific package & it's deps:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
PKG=0x.js yarn rebuild
 | 
			
		||||
PKG=@0x/contract-wrappers yarn rebuild
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Lint
 | 
			
		||||
@@ -157,7 +157,7 @@ yarn lint
 | 
			
		||||
Lint a specific package:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
PKG=0x.js yarn lint
 | 
			
		||||
PKG=@0x/contract-wrappers yarn lint
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Run Tests
 | 
			
		||||
@@ -171,7 +171,7 @@ yarn test
 | 
			
		||||
Run a specific package's test:
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
PKG=@0x/web3-wrapper yarn test
 | 
			
		||||
PKG=@0x/contract-wrappers yarn test
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Run all contracts packages tests:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "3.6.3",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "3.6.2",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "3.6.1",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "version": "3.6.0",
 | 
			
		||||
        "changes": [
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.6.3 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.6.2 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.6.1 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.6.0 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Add `SwerveBridge` and `SnowSwapBridge` (duplicate of `CurveBridge`) (#2707)
 | 
			
		||||
 
 | 
			
		||||
@@ -51,16 +51,15 @@ contract ShellBridge is
 | 
			
		||||
        external
 | 
			
		||||
        returns (bytes4 success)
 | 
			
		||||
    {
 | 
			
		||||
        // Decode the bridge data to get the `fromTokenAddress`.
 | 
			
		||||
        (address fromTokenAddress) = abi.decode(bridgeData, (address));
 | 
			
		||||
        // Decode the bridge data to get the `fromTokenAddress` and `pool`.
 | 
			
		||||
        (address fromTokenAddress, address pool) = abi.decode(bridgeData, (address, address));
 | 
			
		||||
 | 
			
		||||
        uint256 fromTokenBalance = IERC20Token(fromTokenAddress).balanceOf(address(this));
 | 
			
		||||
        IShell exchange = IShell(_getShellAddress());
 | 
			
		||||
        // Grant an allowance to the exchange to spend `fromTokenAddress` token.
 | 
			
		||||
        LibERC20Token.approveIfBelow(fromTokenAddress, address(exchange), fromTokenBalance);
 | 
			
		||||
        LibERC20Token.approveIfBelow(fromTokenAddress, pool, fromTokenBalance);
 | 
			
		||||
 | 
			
		||||
        // Try to sell all of this contract's `fromTokenAddress` token balance.
 | 
			
		||||
        uint256 boughtAmount = exchange.originSwap(
 | 
			
		||||
        uint256 boughtAmount = IShell(pool).originSwap(
 | 
			
		||||
            fromTokenAddress,
 | 
			
		||||
            toTokenAddress,
 | 
			
		||||
            fromTokenBalance,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-asset-proxy",
 | 
			
		||||
    "version": "3.6.0",
 | 
			
		||||
    "version": "3.6.3",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,13 +51,13 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.9.1",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.9.4",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
@@ -79,16 +79,16 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.9",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.12",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "1.1.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "1.1.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "1.1.9",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "1.1.8",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v1.1.11 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.10 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.9 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.1.8 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-broker",
 | 
			
		||||
    "version": "1.1.8",
 | 
			
		||||
    "version": "1.1.11",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,20 +51,20 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.9",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.12",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -84,10 +84,10 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "3.1.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "3.1.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "3.1.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "3.1.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.1.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-coordinator",
 | 
			
		||||
    "version": "3.1.9",
 | 
			
		||||
    "version": "3.1.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,17 +52,17 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -82,16 +82,16 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/assert": "^3.0.13",
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contract-addresses": "^5.0.0",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.9",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/json-schemas": "^5.2.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/assert": "^3.0.17",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contract-addresses": "^5.1.0",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.12",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/json-schemas": "^5.3.3",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "http-status-codes": "^1.3.2"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "1.3.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "1.3.9",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "1.3.8",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "1.3.7",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v1.3.10 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.9 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.8 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v1.3.7 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-dev-utils",
 | 
			
		||||
    "version": "1.3.7",
 | 
			
		||||
    "version": "1.3.10",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -41,17 +41,17 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/assert": "^3.0.13",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/assert": "^3.0.17",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "ethers": "~4.0.4",
 | 
			
		||||
        "npm-run-all": "^4.1.2",
 | 
			
		||||
@@ -63,7 +63,7 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@types/node": "12.12.54"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "2.1.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "2.1.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "2.1.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "2.1.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v2.1.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.1.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-erc1155",
 | 
			
		||||
    "version": "2.1.9",
 | 
			
		||||
    "version": "2.1.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,14 +52,14 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
@@ -80,10 +80,10 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "3.2.6",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "3.2.5",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "3.2.4",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "3.2.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.2.6 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.5 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.4 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.3 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-erc20",
 | 
			
		||||
    "version": "3.2.3",
 | 
			
		||||
    "version": "3.2.6",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,18 +51,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -82,7 +82,7 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7"
 | 
			
		||||
        "@0x/base-contract": "^6.2.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "3.1.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "3.1.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "3.1.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "3.1.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.1.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.1.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-erc721",
 | 
			
		||||
    "version": "3.1.9",
 | 
			
		||||
    "version": "3.1.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,18 +52,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -84,7 +84,7 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7"
 | 
			
		||||
        "@0x/base-contract": "^6.2.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
        "access": "public"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "4.2.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "4.2.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "4.2.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "4.2.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.2.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.2.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange-forwarder",
 | 
			
		||||
    "version": "4.2.9",
 | 
			
		||||
    "version": "4.2.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,25 +52,25 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.9",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.9",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.12",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.12",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -90,7 +90,7 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "4.3.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "4.3.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "4.3.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "4.3.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.3.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.3.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange-libs",
 | 
			
		||||
    "version": "4.3.9",
 | 
			
		||||
    "version": "4.3.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,14 +52,14 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/subproviders": "^6.1.5",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/subproviders": "^6.1.9",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -80,13 +80,13 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "3.2.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "3.2.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "3.2.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "3.2.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v3.2.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v3.2.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-exchange",
 | 
			
		||||
    "version": "3.2.9",
 | 
			
		||||
    "version": "3.2.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,21 +52,21 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.9",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.16",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.12",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.19",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -88,13 +88,13 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.9",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.12",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
    },
 | 
			
		||||
    "publishConfig": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "6.2.6",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "6.2.5",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "6.2.4",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "6.2.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v6.2.6 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.5 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.4 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v6.2.3 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-extensions",
 | 
			
		||||
    "version": "6.2.3",
 | 
			
		||||
    "version": "6.2.6",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -52,23 +52,23 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.9",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.12",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -90,8 +90,8 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "2.7.5",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "2.7.4",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "2.7.3",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "2.7.2",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v2.7.5 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.7.4 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.7.3 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.7.2 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-integrations",
 | 
			
		||||
    "version": "2.7.2",
 | 
			
		||||
    "version": "2.7.5",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -51,24 +51,24 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contract-addresses": "^5.0.0",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.9.1",
 | 
			
		||||
        "@0x/contracts-broker": "^1.1.8",
 | 
			
		||||
        "@0x/contracts-coordinator": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-exchange-forwarder": "^4.2.9",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-extensions": "^6.2.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contract-addresses": "^5.1.0",
 | 
			
		||||
        "@0x/contract-wrappers": "^13.9.4",
 | 
			
		||||
        "@0x/contracts-broker": "^1.1.11",
 | 
			
		||||
        "@0x/contracts-coordinator": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-exchange-forwarder": "^4.2.12",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-extensions": "^6.2.6",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/coordinator-server": "^1.0.5",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/migrations": "^6.4.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/migrations": "^6.4.6",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@azure/core-asynciterator-polyfill": "^1.0.0",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
@@ -91,21 +91,21 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/asset-swapper": "^4.8.0",
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.9",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.9",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.9",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.9",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.16",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-zero-ex": "^0.5.0",
 | 
			
		||||
        "@0x/subproviders": "^6.1.5",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/asset-swapper": "^5.0.1",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-erc1155": "^2.1.12",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-erc721": "^3.1.12",
 | 
			
		||||
        "@0x/contracts-exchange": "^3.2.12",
 | 
			
		||||
        "@0x/contracts-multisig": "^4.1.12",
 | 
			
		||||
        "@0x/contracts-staking": "^2.0.19",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-zero-ex": "^0.7.0",
 | 
			
		||||
        "@0x/subproviders": "^6.1.9",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "ethereumjs-util": "^6.2.0",
 | 
			
		||||
        "lodash": "^4.17.11"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "4.1.12",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "4.1.11",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "4.1.10",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "4.1.9",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.1.12 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.11 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.10 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.1.9 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-multisig",
 | 
			
		||||
    "version": "4.1.9",
 | 
			
		||||
    "version": "4.1.12",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -49,18 +49,18 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
@@ -78,7 +78,7 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "2.0.19",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "2.0.18",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "2.0.17",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "2.0.16",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v2.0.19 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.18 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.17 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v2.0.16 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-staking",
 | 
			
		||||
    "version": "2.0.16",
 | 
			
		||||
    "version": "2.0.19",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -53,20 +53,20 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.0",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.7",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.9",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.3",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-asset-proxy": "^3.6.3",
 | 
			
		||||
        "@0x/contracts-dev-utils": "^1.3.10",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-exchange-libs": "^4.3.12",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-utils": "^4.5.6",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/node": "12.12.54",
 | 
			
		||||
        "chai": "^4.0.1",
 | 
			
		||||
@@ -87,10 +87,10 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "5.3.9",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "5.3.8",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "5.3.7",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "5.3.6",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v5.3.9 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.3.8 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.3.7 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v5.3.6 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-test-utils",
 | 
			
		||||
    "version": "5.3.6",
 | 
			
		||||
    "version": "5.3.9",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -34,7 +34,7 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "npm-run-all": "^4.1.2",
 | 
			
		||||
        "shx": "^0.2.2",
 | 
			
		||||
@@ -42,20 +42,20 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/assert": "^3.0.13",
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/contract-addresses": "^5.0.0",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/json-schemas": "^5.2.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-coverage": "^4.0.14",
 | 
			
		||||
        "@0x/sol-profiler": "^4.1.4",
 | 
			
		||||
        "@0x/sol-trace": "^3.0.14",
 | 
			
		||||
        "@0x/subproviders": "^6.1.5",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/assert": "^3.0.17",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/contract-addresses": "^5.1.0",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/json-schemas": "^5.3.3",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-coverage": "^4.0.18",
 | 
			
		||||
        "@0x/sol-profiler": "^4.1.8",
 | 
			
		||||
        "@0x/sol-trace": "^3.0.18",
 | 
			
		||||
        "@0x/subproviders": "^6.1.9",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/bn.js": "^4.11.0",
 | 
			
		||||
        "@types/js-combinatorics": "^0.5.29",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,31 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604376968,
 | 
			
		||||
        "version": "4.5.6",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1604355662,
 | 
			
		||||
        "version": "4.5.5",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "4.5.4",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603833198,
 | 
			
		||||
        "version": "4.5.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v4.5.6 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.5.5 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.5.4 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v4.5.3 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 
 | 
			
		||||
@@ -56,8 +56,6 @@ contract DeploymentConstants {
 | 
			
		||||
    address constant private MUSD_ADDRESS = 0xe2f2a5C287993345a840Db3B0845fbC70f5935a5;
 | 
			
		||||
    /// @dev Mainnet address of the Mooniswap Registry contract
 | 
			
		||||
    address constant private MOONISWAP_REGISTRY = 0x71CD6666064C3A1354a3B4dca5fA1E2D3ee7D303;
 | 
			
		||||
    /// @dev Mainnet address of the Shell contract
 | 
			
		||||
    address constant private SHELL_CONTRACT = 0x2E703D658f8dd21709a7B458967aB4081F8D3d05;
 | 
			
		||||
    /// @dev Mainnet address of the DODO Registry (ZOO) contract
 | 
			
		||||
    address constant private DODO_REGISTRY = 0x3A97247DF274a17C59A3bd12735ea3FcDFb49950;
 | 
			
		||||
    /// @dev Mainnet address of the DODO Helper contract
 | 
			
		||||
@@ -303,16 +301,6 @@ contract DeploymentConstants {
 | 
			
		||||
        return MOONISWAP_REGISTRY;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev An overridable way to retrieve the Shell contract address.
 | 
			
		||||
    /// @return registry The Shell contract address.
 | 
			
		||||
    function _getShellAddress()
 | 
			
		||||
        internal
 | 
			
		||||
        view
 | 
			
		||||
        returns (address)
 | 
			
		||||
    {
 | 
			
		||||
        return SHELL_CONTRACT;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev An overridable way to retrieve the DODO Registry contract address.
 | 
			
		||||
    /// @return registry The DODO Registry contract address.
 | 
			
		||||
    function _getDODORegistryAddress()
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-utils",
 | 
			
		||||
    "version": "4.5.3",
 | 
			
		||||
    "version": "4.5.6",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -50,15 +50,15 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/utils",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "@types/bn.js": "^4.11.0",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
        "@types/mocha": "^5.2.7",
 | 
			
		||||
@@ -79,9 +79,9 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "bn.js": "^4.11.8",
 | 
			
		||||
        "ethereum-types": "^3.3.3"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,41 @@
 | 
			
		||||
[
 | 
			
		||||
    {
 | 
			
		||||
        "version": "0.7.0",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Change `ProtocolFeeUnfunded` event in FQT",
 | 
			
		||||
                "pr": 28
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Use new PLP interface in FQT.",
 | 
			
		||||
                "pr": 28
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "timestamp": 1604376968
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "version": "0.6.0",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Add support for collecting protocol fees in ETH or WETH",
 | 
			
		||||
                "pr": 2
 | 
			
		||||
            },
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Add `LibSignature` library",
 | 
			
		||||
                "pr": 21
 | 
			
		||||
            }
 | 
			
		||||
        ],
 | 
			
		||||
        "timestamp": 1604355662
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "timestamp": 1603851023,
 | 
			
		||||
        "version": "0.5.1",
 | 
			
		||||
        "changes": [
 | 
			
		||||
            {
 | 
			
		||||
                "note": "Dependencies updated"
 | 
			
		||||
            }
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        "version": "0.5.0",
 | 
			
		||||
        "changes": [
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,20 @@ Edit the package's CHANGELOG.json file only.
 | 
			
		||||
 | 
			
		||||
CHANGELOG
 | 
			
		||||
 | 
			
		||||
## v0.7.0 - _November 3, 2020_
 | 
			
		||||
 | 
			
		||||
    * Change `ProtocolFeeUnfunded` event in FQT (#28)
 | 
			
		||||
    * Use new PLP interface in FQT. (#28)
 | 
			
		||||
 | 
			
		||||
## v0.6.0 - _November 2, 2020_
 | 
			
		||||
 | 
			
		||||
    * Add support for collecting protocol fees in ETH or WETH (#2)
 | 
			
		||||
    * Add `LibSignature` library (#21)
 | 
			
		||||
 | 
			
		||||
## v0.5.1 - _October 28, 2020_
 | 
			
		||||
 | 
			
		||||
    * Dependencies updated
 | 
			
		||||
 | 
			
		||||
## v0.5.0 - _October 27, 2020_
 | 
			
		||||
 | 
			
		||||
    * Add `Swerve`, `SnowSwap`, `DODO` and `SushiSwap` into FQT (#7)
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,8 @@ library LibSignatureRichErrors {
 | 
			
		||||
        INVALID_LENGTH,
 | 
			
		||||
        UNSUPPORTED,
 | 
			
		||||
        ILLEGAL,
 | 
			
		||||
        WRONG_SIGNER
 | 
			
		||||
        WRONG_SIGNER,
 | 
			
		||||
        BAD_SIGNATURE_DATA
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // solhint-disable func-name-mixedcase
 | 
			
		||||
@@ -49,4 +50,19 @@ library LibSignatureRichErrors {
 | 
			
		||||
            signature
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function SignatureValidationError(
 | 
			
		||||
        SignatureValidationErrorCodes code,
 | 
			
		||||
        bytes32 hash
 | 
			
		||||
    )
 | 
			
		||||
        internal
 | 
			
		||||
        pure
 | 
			
		||||
        returns (bytes memory)
 | 
			
		||||
    {
 | 
			
		||||
        return abi.encodeWithSelector(
 | 
			
		||||
            bytes4(keccak256("SignatureValidationError(uint8,bytes32)")),
 | 
			
		||||
            code,
 | 
			
		||||
            hash
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								contracts/zero-ex/contracts/src/external/FeeCollector.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								contracts/zero-ex/contracts/src/external/FeeCollector.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol";
 | 
			
		||||
import "@0x/contracts-utils/contracts/src/v06/AuthorizableV06.sol";
 | 
			
		||||
import "../vendor/v3/IStaking.sol";
 | 
			
		||||
 | 
			
		||||
/// @dev The collector contract for protocol fees
 | 
			
		||||
contract FeeCollector is AuthorizableV06 {
 | 
			
		||||
    /// @dev Allow ether transfers to the collector.
 | 
			
		||||
    receive() external payable { }
 | 
			
		||||
 | 
			
		||||
    constructor() public {
 | 
			
		||||
        _addAuthorizedAddress(msg.sender);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev   Approve the staking contract and join a pool. Only an authority
 | 
			
		||||
    ///        can call this.
 | 
			
		||||
    /// @param weth The WETH contract.
 | 
			
		||||
    /// @param staking The staking contract.
 | 
			
		||||
    /// @param poolId The pool ID this contract is collecting fees for.
 | 
			
		||||
    function initialize(
 | 
			
		||||
        IEtherTokenV06 weth,
 | 
			
		||||
        IStaking staking,
 | 
			
		||||
        bytes32 poolId
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        onlyAuthorized
 | 
			
		||||
    {
 | 
			
		||||
        weth.approve(address(staking), type(uint256).max);
 | 
			
		||||
        staking.joinStakingPoolAsMaker(poolId);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Convert all held ether to WETH. Only an authority can call this.
 | 
			
		||||
    /// @param weth The WETH contract.
 | 
			
		||||
    function convertToWeth(
 | 
			
		||||
        IEtherTokenV06 weth
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        onlyAuthorized
 | 
			
		||||
    {
 | 
			
		||||
        // Leave 1 wei behind to avoid expensive zero-->non-zero state change.
 | 
			
		||||
        if (address(this).balance > 1) {
 | 
			
		||||
            weth.deposit{value: address(this).balance - 1}();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										151
									
								
								contracts/zero-ex/contracts/src/features/libs/LibSignature.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								contracts/zero-ex/contracts/src/features/libs/LibSignature.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol";
 | 
			
		||||
import "../../errors/LibSignatureRichErrors.sol";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// @dev A library for validating signatures.
 | 
			
		||||
library LibSignature {
 | 
			
		||||
    using LibRichErrorsV06 for bytes;
 | 
			
		||||
 | 
			
		||||
    // '\x19Ethereum Signed Message:\n32\x00\x00\x00\x00' in a word.
 | 
			
		||||
    uint256 private constant ETH_SIGN_HASH_PREFIX =
 | 
			
		||||
        0x19457468657265756d205369676e6564204d6573736167653a0a333200000000;
 | 
			
		||||
    /// @dev Exclusive upper limit on ECDSA signatures 'R' values.
 | 
			
		||||
    ///      The valid range is given by fig (282) of the yellow paper.
 | 
			
		||||
    uint256 private constant ECDSA_SIGNATURE_R_LIMIT =
 | 
			
		||||
        uint256(0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141);
 | 
			
		||||
    /// @dev Exclusive upper limit on ECDSA signatures 'S' values.
 | 
			
		||||
    ///      The valid range is given by fig (283) of the yellow paper.
 | 
			
		||||
    uint256 private constant ECDSA_SIGNATURE_S_LIMIT = ECDSA_SIGNATURE_R_LIMIT / 2 + 1;
 | 
			
		||||
 | 
			
		||||
   /// @dev Allowed signature types.
 | 
			
		||||
    enum SignatureType {
 | 
			
		||||
        ILLEGAL,
 | 
			
		||||
        INVALID,
 | 
			
		||||
        EIP712,
 | 
			
		||||
        ETHSIGN
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Encoded EC signature.
 | 
			
		||||
    struct Signature {
 | 
			
		||||
        // How to validate the signature.
 | 
			
		||||
        SignatureType signatureType;
 | 
			
		||||
        // EC Signature data.
 | 
			
		||||
        uint8 v;
 | 
			
		||||
        // EC Signature data.
 | 
			
		||||
        bytes32 r;
 | 
			
		||||
        // EC Signature data.
 | 
			
		||||
        bytes32 s;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Retrieve the signer of a signature.
 | 
			
		||||
    ///      Throws if the signature can't be validated.
 | 
			
		||||
    /// @param hash The hash that was signed.
 | 
			
		||||
    /// @param signature The signature.
 | 
			
		||||
    /// @return recovered The recovered signer address.
 | 
			
		||||
    function getSignerOfHash(
 | 
			
		||||
        bytes32 hash,
 | 
			
		||||
        Signature memory signature
 | 
			
		||||
    )
 | 
			
		||||
        internal
 | 
			
		||||
        pure
 | 
			
		||||
        returns (address recovered)
 | 
			
		||||
    {
 | 
			
		||||
        // Ensure this is a signature type that can be validated against a hash.
 | 
			
		||||
        _validateHashCompatibleSignature(hash, signature);
 | 
			
		||||
 | 
			
		||||
        if (signature.signatureType == SignatureType.EIP712) {
 | 
			
		||||
            // Signed using EIP712
 | 
			
		||||
            recovered = ecrecover(
 | 
			
		||||
                hash,
 | 
			
		||||
                signature.v,
 | 
			
		||||
                signature.r,
 | 
			
		||||
                signature.s
 | 
			
		||||
            );
 | 
			
		||||
        } else if (signature.signatureType == SignatureType.ETHSIGN) {
 | 
			
		||||
            // Signed using `eth_sign`
 | 
			
		||||
            // Need to hash `hash` with "\x19Ethereum Signed Message:\n32" prefix
 | 
			
		||||
            // in packed encoding.
 | 
			
		||||
            bytes32 ethSignHash;
 | 
			
		||||
            assembly {
 | 
			
		||||
                // Use scratch space
 | 
			
		||||
                mstore(0, ETH_SIGN_HASH_PREFIX) // length of 28 bytes
 | 
			
		||||
                mstore(28, hash) // length of 32 bytes
 | 
			
		||||
                ethSignHash := keccak256(0, 60)
 | 
			
		||||
            }
 | 
			
		||||
            recovered = ecrecover(
 | 
			
		||||
                ethSignHash,
 | 
			
		||||
                signature.v,
 | 
			
		||||
                signature.r,
 | 
			
		||||
                signature.s
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        // `recovered` can be null if the signature values are out of range.
 | 
			
		||||
        if (recovered == address(0)) {
 | 
			
		||||
            LibSignatureRichErrors.SignatureValidationError(
 | 
			
		||||
                LibSignatureRichErrors.SignatureValidationErrorCodes.BAD_SIGNATURE_DATA,
 | 
			
		||||
                hash
 | 
			
		||||
            ).rrevert();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Validates that a signature is compatible with a hash signee.
 | 
			
		||||
    /// @param hash The hash that was signed.
 | 
			
		||||
    /// @param signature The signature.
 | 
			
		||||
    function _validateHashCompatibleSignature(
 | 
			
		||||
        bytes32 hash,
 | 
			
		||||
        Signature memory signature
 | 
			
		||||
    )
 | 
			
		||||
        private
 | 
			
		||||
        pure
 | 
			
		||||
    {
 | 
			
		||||
        // Ensure the r and s are within malleability limits.
 | 
			
		||||
        if (uint256(signature.r) >= ECDSA_SIGNATURE_R_LIMIT ||
 | 
			
		||||
            uint256(signature.s) >= ECDSA_SIGNATURE_S_LIMIT)
 | 
			
		||||
        {
 | 
			
		||||
            LibSignatureRichErrors.SignatureValidationError(
 | 
			
		||||
                LibSignatureRichErrors.SignatureValidationErrorCodes.BAD_SIGNATURE_DATA,
 | 
			
		||||
                hash
 | 
			
		||||
            ).rrevert();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Always illegal signature.
 | 
			
		||||
        if (signature.signatureType == SignatureType.ILLEGAL) {
 | 
			
		||||
            LibSignatureRichErrors.SignatureValidationError(
 | 
			
		||||
                LibSignatureRichErrors.SignatureValidationErrorCodes.ILLEGAL,
 | 
			
		||||
                hash
 | 
			
		||||
            ).rrevert();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Always invalid.
 | 
			
		||||
        if (signature.signatureType == SignatureType.INVALID) {
 | 
			
		||||
            LibSignatureRichErrors.SignatureValidationError(
 | 
			
		||||
                LibSignatureRichErrors.SignatureValidationErrorCodes.ALWAYS_INVALID,
 | 
			
		||||
                hash
 | 
			
		||||
            ).rrevert();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // Solidity should check that the signature type is within enum range for us
 | 
			
		||||
        // when abi-decoding.
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -27,6 +27,9 @@ import "../ITokenSpenderFeature.sol";
 | 
			
		||||
library LibTokenSpender {
 | 
			
		||||
    using LibRichErrorsV06 for bytes;
 | 
			
		||||
 | 
			
		||||
    // Mask of the lower 20 bytes of a bytes32.
 | 
			
		||||
    uint256 constant private ADDRESS_MASK = 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff;
 | 
			
		||||
 | 
			
		||||
    /// @dev Transfers ERC20 tokens from `owner` to `to`.
 | 
			
		||||
    /// @param token The token to spend.
 | 
			
		||||
    /// @param owner The owner of the tokens.
 | 
			
		||||
@@ -50,11 +53,11 @@ library LibTokenSpender {
 | 
			
		||||
 | 
			
		||||
            // selector for transferFrom(address,address,uint256)
 | 
			
		||||
            mstore(ptr, 0x23b872dd00000000000000000000000000000000000000000000000000000000)
 | 
			
		||||
            mstore(add(ptr, 0x04), owner)
 | 
			
		||||
            mstore(add(ptr, 0x24), to)
 | 
			
		||||
            mstore(add(ptr, 0x04), and(owner, ADDRESS_MASK))
 | 
			
		||||
            mstore(add(ptr, 0x24), and(to, ADDRESS_MASK))
 | 
			
		||||
            mstore(add(ptr, 0x44), amount)
 | 
			
		||||
 | 
			
		||||
            success := call(gas(), token, 0, ptr, 0x64, 0, 0)
 | 
			
		||||
            success := call(gas(), and(token, ADDRESS_MASK), 0, ptr, 0x64, 0, 0)
 | 
			
		||||
 | 
			
		||||
            let rdsize := returndatasize()
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										114
									
								
								contracts/zero-ex/contracts/src/fixins/FixinProtocolFees.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								contracts/zero-ex/contracts/src/fixins/FixinProtocolFees.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol";
 | 
			
		||||
import "../external/FeeCollector.sol";
 | 
			
		||||
import "../features/libs/LibTokenSpender.sol";
 | 
			
		||||
 | 
			
		||||
/// @dev Helpers for collecting protocol fees.
 | 
			
		||||
abstract contract FixinProtocolFees {
 | 
			
		||||
    bytes32 immutable feeCollectorCodeHash;
 | 
			
		||||
 | 
			
		||||
    constructor() internal {
 | 
			
		||||
        feeCollectorCodeHash = keccak256(type(FeeCollector).creationCode);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev   Collect the specified protocol fee in either WETH or ETH. If
 | 
			
		||||
    ///        msg.value is non-zero, the fee will be paid in ETH. Otherwise,
 | 
			
		||||
    ///        this function attempts to transfer the fee in WETH. Either way,
 | 
			
		||||
    ///        The fee is stored in a per-pool fee collector contract.
 | 
			
		||||
    /// @param poolId The pool ID for which a fee is being collected.
 | 
			
		||||
    /// @param amount The amount of ETH/WETH to be collected.
 | 
			
		||||
    /// @param weth The WETH token contract.
 | 
			
		||||
    function _collectProtocolFee(
 | 
			
		||||
        bytes32 poolId,
 | 
			
		||||
        uint256 amount,
 | 
			
		||||
        IERC20TokenV06 weth
 | 
			
		||||
    )
 | 
			
		||||
        internal
 | 
			
		||||
    {
 | 
			
		||||
        FeeCollector feeCollector = _getFeeCollector(poolId);
 | 
			
		||||
 | 
			
		||||
        if (msg.value == 0) {
 | 
			
		||||
            // WETH
 | 
			
		||||
            LibTokenSpender.spendERC20Tokens(weth, msg.sender, address(feeCollector), amount);
 | 
			
		||||
        } else {
 | 
			
		||||
            // ETH
 | 
			
		||||
            (bool success,) = address(feeCollector).call{value: amount}("");
 | 
			
		||||
            require(success, "FixinProtocolFees/ETHER_TRANSFER_FALIED");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Transfer fees for a given pool to the staking contract.
 | 
			
		||||
    /// @param poolId Identifies the pool whose fees are being paid.
 | 
			
		||||
    function _transferFeesForPool(
 | 
			
		||||
        bytes32 poolId,
 | 
			
		||||
        IStaking staking,
 | 
			
		||||
        IEtherTokenV06 weth
 | 
			
		||||
    )
 | 
			
		||||
        internal
 | 
			
		||||
    {
 | 
			
		||||
        FeeCollector feeCollector = _getFeeCollector(poolId);
 | 
			
		||||
 | 
			
		||||
        uint256 codeSize;
 | 
			
		||||
        assembly {
 | 
			
		||||
            codeSize := extcodesize(feeCollector)
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (codeSize == 0) {
 | 
			
		||||
            // Create and initialize the contract if necessary.
 | 
			
		||||
            new FeeCollector{salt: poolId}();
 | 
			
		||||
            feeCollector.initialize(weth, staking, poolId);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (address(feeCollector).balance > 1) {
 | 
			
		||||
            feeCollector.convertToWeth(weth);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        uint256 bal = weth.balanceOf(address(feeCollector));
 | 
			
		||||
        if (bal > 1) {
 | 
			
		||||
            // Leave 1 wei behind to avoid high SSTORE cost of zero-->non-zero.
 | 
			
		||||
            staking.payProtocolFee(
 | 
			
		||||
                address(feeCollector),
 | 
			
		||||
                address(feeCollector),
 | 
			
		||||
                bal - 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Compute the CREATE2 address for a fee collector.
 | 
			
		||||
    /// @param poolId The fee collector's pool ID.
 | 
			
		||||
    function _getFeeCollector(
 | 
			
		||||
        bytes32 poolId
 | 
			
		||||
    )
 | 
			
		||||
        internal
 | 
			
		||||
        view
 | 
			
		||||
        returns (FeeCollector)
 | 
			
		||||
    {
 | 
			
		||||
        // Compute the CREATE2 address for the fee collector.
 | 
			
		||||
        address payable addr = address(uint256(keccak256(abi.encodePacked(
 | 
			
		||||
            byte(0xff),
 | 
			
		||||
            address(this),
 | 
			
		||||
            poolId, // pool ID is salt
 | 
			
		||||
            feeCollectorCodeHash
 | 
			
		||||
        ))));
 | 
			
		||||
        return FeeCollector(addr);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -27,6 +27,7 @@ import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
 | 
			
		||||
import "@0x/contracts-utils/contracts/src/v06/LibMathV06.sol";
 | 
			
		||||
import "../errors/LibTransformERC20RichErrors.sol";
 | 
			
		||||
import "../vendor/v3/IExchange.sol";
 | 
			
		||||
import "../vendor/v3/LibOrderHash.sol";
 | 
			
		||||
import "./bridges/IBridgeAdapter.sol";
 | 
			
		||||
import "./Transformer.sol";
 | 
			
		||||
import "./LibERC20Transformer.sol";
 | 
			
		||||
@@ -104,13 +105,8 @@ contract FillQuoteTransformer is
 | 
			
		||||
 | 
			
		||||
    /// @dev Emitted when a trade is skipped due to a lack of funds
 | 
			
		||||
    ///      to pay the 0x Protocol fee.
 | 
			
		||||
    /// @param ethBalance The current eth balance.
 | 
			
		||||
    /// @param ethNeeded The current eth balance required to pay
 | 
			
		||||
    ///        the protocol fee.
 | 
			
		||||
    event ProtocolFeeUnfunded(
 | 
			
		||||
        uint256 ethBalance,
 | 
			
		||||
        uint256 ethNeeded
 | 
			
		||||
    );
 | 
			
		||||
    /// @param orderHash The hash of the order that was skipped.
 | 
			
		||||
    event ProtocolFeeUnfunded(bytes32 orderHash);
 | 
			
		||||
 | 
			
		||||
    /// @dev The Exchange ERC20Proxy ID.
 | 
			
		||||
    bytes4 private constant ERC20_ASSET_PROXY_ID = 0xf47261b0;
 | 
			
		||||
@@ -450,7 +446,11 @@ contract FillQuoteTransformer is
 | 
			
		||||
            }
 | 
			
		||||
            // Emit an event if we do not have sufficient ETH to cover the protocol fee.
 | 
			
		||||
            if (state.ethRemaining < state.protocolFee) {
 | 
			
		||||
                emit ProtocolFeeUnfunded(state.ethRemaining, state.protocolFee);
 | 
			
		||||
                bytes32 orderHash = LibOrderHash.getTypedDataHash(
 | 
			
		||||
                    order,
 | 
			
		||||
                    exchange.EIP712_EXCHANGE_DOMAIN_HASH()
 | 
			
		||||
                );
 | 
			
		||||
                emit ProtocolFeeUnfunded(orderHash);
 | 
			
		||||
                return results;
 | 
			
		||||
            }
 | 
			
		||||
            try
 | 
			
		||||
 
 | 
			
		||||
@@ -64,22 +64,6 @@ contract BridgeAdapter is
 | 
			
		||||
    address private immutable UNISWAP_BRIDGE_ADDRESS;
 | 
			
		||||
    address private immutable UNISWAP_V2_BRIDGE_ADDRESS;
 | 
			
		||||
 | 
			
		||||
    /// @dev Emitted when a trade occurs.
 | 
			
		||||
    /// @param inputToken The token the bridge is converting from.
 | 
			
		||||
    /// @param outputToken The token the bridge is converting to.
 | 
			
		||||
    /// @param inputTokenAmount Amount of input token.
 | 
			
		||||
    /// @param outputTokenAmount Amount of output token.
 | 
			
		||||
    /// @param from The bridge address, indicating the underlying source of the fill.
 | 
			
		||||
    /// @param to The `to` address, currrently `address(this)`
 | 
			
		||||
    event ERC20BridgeTransfer(
 | 
			
		||||
        IERC20TokenV06 inputToken,
 | 
			
		||||
        IERC20TokenV06 outputToken,
 | 
			
		||||
        uint256 inputTokenAmount,
 | 
			
		||||
        uint256 outputTokenAmount,
 | 
			
		||||
        address from,
 | 
			
		||||
        address to
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    constructor(AdapterAddresses memory addresses)
 | 
			
		||||
        public
 | 
			
		||||
        MixinBalancer()
 | 
			
		||||
@@ -89,7 +73,7 @@ contract BridgeAdapter is
 | 
			
		||||
        MixinMooniswap(addresses)
 | 
			
		||||
        MixinMStable(addresses)
 | 
			
		||||
        MixinOasis(addresses)
 | 
			
		||||
        MixinShell(addresses)
 | 
			
		||||
        MixinShell()
 | 
			
		||||
        MixinSushiswap(addresses)
 | 
			
		||||
        MixinUniswap(addresses)
 | 
			
		||||
        MixinUniswapV2(addresses)
 | 
			
		||||
@@ -209,7 +193,8 @@ contract BridgeAdapter is
 | 
			
		||||
                sellAmount,
 | 
			
		||||
                bridgeData
 | 
			
		||||
            );
 | 
			
		||||
            // Do not emit an event. The bridge contract should emit one itself.
 | 
			
		||||
            // Old bridge contracts should emit an `ERC20BridgeTransfer` themselves,
 | 
			
		||||
            // otherwise an event will be emitted from `_tradeZeroExBridge`.
 | 
			
		||||
            return boughtAmount;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,7 +44,6 @@ contract MixinAdapterAddresses
 | 
			
		||||
        address uniswapV2Router;
 | 
			
		||||
        address uniswapExchangeFactory;
 | 
			
		||||
        address mStable;
 | 
			
		||||
        address shell;
 | 
			
		||||
        address dodoHelper;
 | 
			
		||||
        // Other
 | 
			
		||||
        address weth;
 | 
			
		||||
 
 | 
			
		||||
@@ -37,22 +37,11 @@ interface IShell {
 | 
			
		||||
        returns (uint256 toAmount);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
contract MixinShell is
 | 
			
		||||
    MixinAdapterAddresses
 | 
			
		||||
{
 | 
			
		||||
    using LibERC20TokenV06 for IERC20TokenV06;
 | 
			
		||||
 | 
			
		||||
    /// @dev Mainnet address of the `Shell` contract.
 | 
			
		||||
    IShell private immutable SHELL;
 | 
			
		||||
 | 
			
		||||
    constructor(AdapterAddresses memory addresses)
 | 
			
		||||
        public
 | 
			
		||||
    {
 | 
			
		||||
        SHELL = IShell(addresses.shell);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function _tradeShell(
 | 
			
		||||
        IERC20TokenV06 buyToken,
 | 
			
		||||
        uint256 sellAmount,
 | 
			
		||||
@@ -61,15 +50,15 @@ contract MixinShell is
 | 
			
		||||
        internal
 | 
			
		||||
        returns (uint256 boughtAmount)
 | 
			
		||||
    {
 | 
			
		||||
        (address fromTokenAddress) = abi.decode(bridgeData, (address));
 | 
			
		||||
        (address fromTokenAddress, address pool) = abi.decode(bridgeData, (address, address));
 | 
			
		||||
 | 
			
		||||
        // Grant the Shell contract an allowance to sell the first token.
 | 
			
		||||
        IERC20TokenV06(fromTokenAddress).approveIfBelow(
 | 
			
		||||
            address(SHELL),
 | 
			
		||||
            pool,
 | 
			
		||||
            sellAmount
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        boughtAmount = SHELL.originSwap(
 | 
			
		||||
        boughtAmount = IShell(pool).originSwap(
 | 
			
		||||
            fromTokenAddress,
 | 
			
		||||
            address(buyToken),
 | 
			
		||||
             // Sell all tokens we hold.
 | 
			
		||||
 
 | 
			
		||||
@@ -21,32 +21,31 @@ pragma solidity ^0.6.5;
 | 
			
		||||
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
 | 
			
		||||
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
 | 
			
		||||
import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
 | 
			
		||||
import "../../../vendor/ILiquidityProvider.sol";
 | 
			
		||||
import "../../../vendor/v3/IERC20Bridge.sol";
 | 
			
		||||
 | 
			
		||||
interface IERC20Bridge {
 | 
			
		||||
 | 
			
		||||
    /// @dev Transfers `amount` of the ERC20 `buyToken` from `from` to `to`.
 | 
			
		||||
    /// @param buyToken The address of the ERC20 token to transfer.
 | 
			
		||||
    /// @param from Address to transfer asset from.
 | 
			
		||||
    /// @param to Address to transfer asset to.
 | 
			
		||||
    /// @param amount Amount of asset to transfer.
 | 
			
		||||
    /// @param bridgeData Arbitrary asset data needed by the bridge contract.
 | 
			
		||||
    /// @return success The magic bytes `0xdc1600f3` if successful.
 | 
			
		||||
    function bridgeTransferFrom(
 | 
			
		||||
        IERC20TokenV06 buyToken,
 | 
			
		||||
        address from,
 | 
			
		||||
        address to,
 | 
			
		||||
        uint256 amount,
 | 
			
		||||
        bytes calldata bridgeData
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        returns (bytes4 success);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
contract MixinZeroExBridge {
 | 
			
		||||
 | 
			
		||||
    using LibERC20TokenV06 for IERC20TokenV06;
 | 
			
		||||
    using LibSafeMathV06 for uint256;
 | 
			
		||||
 | 
			
		||||
    /// @dev Emitted when a trade occurs.
 | 
			
		||||
    /// @param inputToken The token the bridge is converting from.
 | 
			
		||||
    /// @param outputToken The token the bridge is converting to.
 | 
			
		||||
    /// @param inputTokenAmount Amount of input token.
 | 
			
		||||
    /// @param outputTokenAmount Amount of output token.
 | 
			
		||||
    /// @param from The bridge address, indicating the underlying source of the fill.
 | 
			
		||||
    /// @param to The `to` address, currrently `address(this)`
 | 
			
		||||
    event ERC20BridgeTransfer(
 | 
			
		||||
        IERC20TokenV06 inputToken,
 | 
			
		||||
        IERC20TokenV06 outputToken,
 | 
			
		||||
        uint256 inputTokenAmount,
 | 
			
		||||
        uint256 outputTokenAmount,
 | 
			
		||||
        address from,
 | 
			
		||||
        address to
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    function _tradeZeroExBridge(
 | 
			
		||||
        address bridgeAddress,
 | 
			
		||||
        IERC20TokenV06 sellToken,
 | 
			
		||||
@@ -63,13 +62,31 @@ contract MixinZeroExBridge {
 | 
			
		||||
            bridgeAddress,
 | 
			
		||||
            sellAmount
 | 
			
		||||
        );
 | 
			
		||||
        IERC20Bridge(bridgeAddress).bridgeTransferFrom(
 | 
			
		||||
            buyToken,
 | 
			
		||||
            address(bridgeAddress),
 | 
			
		||||
            address(this),
 | 
			
		||||
            1, // amount to transfer back from the bridge
 | 
			
		||||
            bridgeData
 | 
			
		||||
        );
 | 
			
		||||
        boughtAmount = buyToken.balanceOf(address(this)).safeSub(balanceBefore);
 | 
			
		||||
        try ILiquidityProvider(bridgeAddress).sellTokenForToken(
 | 
			
		||||
                address(sellToken),
 | 
			
		||||
                address(buyToken),
 | 
			
		||||
                address(this), // recipient
 | 
			
		||||
                1, // minBuyAmount
 | 
			
		||||
                bridgeData
 | 
			
		||||
        ) {
 | 
			
		||||
            boughtAmount = buyToken.balanceOf(address(this)).safeSub(balanceBefore);
 | 
			
		||||
            emit ERC20BridgeTransfer(
 | 
			
		||||
                sellToken,
 | 
			
		||||
                buyToken,
 | 
			
		||||
                sellAmount,
 | 
			
		||||
                boughtAmount,
 | 
			
		||||
                bridgeAddress,
 | 
			
		||||
                address(this)
 | 
			
		||||
            );
 | 
			
		||||
        } catch {
 | 
			
		||||
            IERC20Bridge(bridgeAddress).bridgeTransferFrom(
 | 
			
		||||
                address(buyToken),
 | 
			
		||||
                bridgeAddress,
 | 
			
		||||
                address(this), // recipient
 | 
			
		||||
                1, // minBuyAmount
 | 
			
		||||
                bridgeData
 | 
			
		||||
            );
 | 
			
		||||
            boughtAmount = buyToken.balanceOf(address(this)).safeSub(balanceBefore);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								contracts/zero-ex/contracts/src/vendor/ILiquidityProvider.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								contracts/zero-ex/contracts/src/vendor/ILiquidityProvider.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
 | 
			
		||||
interface ILiquidityProvider {
 | 
			
		||||
 | 
			
		||||
    /// @dev Trades `inputToken` for `outputToken`. The amount of `inputToken`
 | 
			
		||||
    ///      to sell must be transferred to the contract prior to calling this
 | 
			
		||||
    ///      function to trigger the trade.
 | 
			
		||||
    /// @param inputToken The token being sold.
 | 
			
		||||
    /// @param outputToken The token being bought.
 | 
			
		||||
    /// @param recipient The recipient of the bought tokens.
 | 
			
		||||
    /// @param minBuyAmount The minimum acceptable amount of `outputToken` to buy.
 | 
			
		||||
    /// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
 | 
			
		||||
    /// @return boughtAmount The amount of `outputToken` bought.
 | 
			
		||||
    function sellTokenForToken(
 | 
			
		||||
        address inputToken,
 | 
			
		||||
        address outputToken,
 | 
			
		||||
        address recipient,
 | 
			
		||||
        uint256 minBuyAmount,
 | 
			
		||||
        bytes calldata auxiliaryData
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        returns (uint256 boughtAmount);
 | 
			
		||||
 | 
			
		||||
    /// @dev Trades ETH for token. ETH must either be attached to this function
 | 
			
		||||
    ///      call or sent to the contract prior to calling this function to
 | 
			
		||||
    ///      trigger the trade.
 | 
			
		||||
    /// @param outputToken The token being bought.
 | 
			
		||||
    /// @param recipient The recipient of the bought tokens.
 | 
			
		||||
    /// @param minBuyAmount The minimum acceptable amount of `outputToken` to buy.
 | 
			
		||||
    /// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
 | 
			
		||||
    /// @return boughtAmount The amount of `outputToken` bought.
 | 
			
		||||
    function sellEthForToken(
 | 
			
		||||
        address outputToken,
 | 
			
		||||
        address recipient,
 | 
			
		||||
        uint256 minBuyAmount,
 | 
			
		||||
        bytes calldata auxiliaryData
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        payable
 | 
			
		||||
        returns (uint256 boughtAmount);
 | 
			
		||||
 | 
			
		||||
    /// @dev Trades token for ETH. The token must be sent to the contract prior
 | 
			
		||||
    ///      to calling this function to trigger the trade.
 | 
			
		||||
    /// @param inputToken The token being sold.
 | 
			
		||||
    /// @param recipient The recipient of the bought tokens.
 | 
			
		||||
    /// @param minBuyAmount The minimum acceptable amount of ETH to buy.
 | 
			
		||||
    /// @param auxiliaryData Arbitrary auxiliary data supplied to the contract.
 | 
			
		||||
    /// @return boughtAmount The amount of ETH bought.
 | 
			
		||||
    function sellTokenForEth(
 | 
			
		||||
        address inputToken,
 | 
			
		||||
        address payable recipient,
 | 
			
		||||
        uint256 minBuyAmount,
 | 
			
		||||
        bytes calldata auxiliaryData
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        returns (uint256 boughtAmount);
 | 
			
		||||
 | 
			
		||||
    /// @dev Quotes the amount of `outputToken` that would be obtained by
 | 
			
		||||
    ///      selling `sellAmount` of `inputToken`.
 | 
			
		||||
    /// @param inputToken Address of the taker token (what to sell). Use
 | 
			
		||||
    ///        the wETH address if selling ETH.
 | 
			
		||||
    /// @param outputToken Address of the maker token (what to buy). Use
 | 
			
		||||
    ///        the wETH address if buying ETH.
 | 
			
		||||
    /// @param sellAmount Amount of `inputToken` to sell.
 | 
			
		||||
    /// @return outputTokenAmount Amount of `outputToken` that would be obtained.
 | 
			
		||||
    function getSellQuote(
 | 
			
		||||
        address inputToken,
 | 
			
		||||
        address outputToken,
 | 
			
		||||
        uint256 sellAmount
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        view
 | 
			
		||||
        returns (uint256 outputTokenAmount);
 | 
			
		||||
}
 | 
			
		||||
@@ -104,4 +104,9 @@ interface IExchange {
 | 
			
		||||
        external
 | 
			
		||||
        view
 | 
			
		||||
        returns (address proxyAddress);
 | 
			
		||||
 | 
			
		||||
    function EIP712_EXCHANGE_DOMAIN_HASH()
 | 
			
		||||
        external
 | 
			
		||||
        view
 | 
			
		||||
        returns (bytes32 domainHash);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										24
									
								
								contracts/zero-ex/contracts/src/vendor/v3/IStaking.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								contracts/zero-ex/contracts/src/vendor/v3/IStaking.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
 | 
			
		||||
interface IStaking {
 | 
			
		||||
    function joinStakingPoolAsMaker(bytes32) external;
 | 
			
		||||
    function payProtocolFee(address, address, uint256) external payable;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										167
									
								
								contracts/zero-ex/contracts/src/vendor/v3/LibOrderHash.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								contracts/zero-ex/contracts/src/vendor/v3/LibOrderHash.sol
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,167 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
 | 
			
		||||
import "./IExchange.sol";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
library LibOrderHash {
 | 
			
		||||
 | 
			
		||||
    using LibOrderHash for IExchange.Order;
 | 
			
		||||
 | 
			
		||||
    // Hash for the EIP712 Order Schema:
 | 
			
		||||
    // keccak256(abi.encodePacked(
 | 
			
		||||
    //     "Order(",
 | 
			
		||||
    //     "address makerAddress,",
 | 
			
		||||
    //     "address takerAddress,",
 | 
			
		||||
    //     "address feeRecipientAddress,",
 | 
			
		||||
    //     "address senderAddress,",
 | 
			
		||||
    //     "uint256 makerAssetAmount,",
 | 
			
		||||
    //     "uint256 takerAssetAmount,",
 | 
			
		||||
    //     "uint256 makerFee,",
 | 
			
		||||
    //     "uint256 takerFee,",
 | 
			
		||||
    //     "uint256 expirationTimeSeconds,",
 | 
			
		||||
    //     "uint256 salt,",
 | 
			
		||||
    //     "bytes makerAssetData,",
 | 
			
		||||
    //     "bytes takerAssetData,",
 | 
			
		||||
    //     "bytes makerFeeAssetData,",
 | 
			
		||||
    //     "bytes takerFeeAssetData",
 | 
			
		||||
    //     ")"
 | 
			
		||||
    // ))
 | 
			
		||||
    bytes32 constant internal _EIP712_ORDER_SCHEMA_HASH =
 | 
			
		||||
        0xf80322eb8376aafb64eadf8f0d7623f22130fd9491a221e902b713cb984a7534;
 | 
			
		||||
 | 
			
		||||
    /// @dev Calculates the EIP712 typed data hash of an order with a given domain separator.
 | 
			
		||||
    /// @param order The order structure.
 | 
			
		||||
    /// @param eip712ExchangeDomainHash Domain hash for the Exchange.
 | 
			
		||||
    /// @return orderHash EIP712 typed data hash of the order.
 | 
			
		||||
    function getTypedDataHash(IExchange.Order memory order, bytes32 eip712ExchangeDomainHash)
 | 
			
		||||
        internal
 | 
			
		||||
        pure
 | 
			
		||||
        returns (bytes32 orderHash)
 | 
			
		||||
    {
 | 
			
		||||
        orderHash = _hashEIP712Message(
 | 
			
		||||
            eip712ExchangeDomainHash,
 | 
			
		||||
            order.getStructHash()
 | 
			
		||||
        );
 | 
			
		||||
        return orderHash;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Calculates EIP712 hash of the order struct.
 | 
			
		||||
    /// @param order The order structure.
 | 
			
		||||
    /// @return result EIP712 hash of the order struct.
 | 
			
		||||
    function getStructHash(IExchange.Order memory order)
 | 
			
		||||
        internal
 | 
			
		||||
        pure
 | 
			
		||||
        returns (bytes32 result)
 | 
			
		||||
    {
 | 
			
		||||
        bytes32 schemaHash = _EIP712_ORDER_SCHEMA_HASH;
 | 
			
		||||
        bytes memory makerAssetData = order.makerAssetData;
 | 
			
		||||
        bytes memory takerAssetData = order.takerAssetData;
 | 
			
		||||
        bytes memory makerFeeAssetData = order.makerFeeAssetData;
 | 
			
		||||
        bytes memory takerFeeAssetData = order.takerFeeAssetData;
 | 
			
		||||
 | 
			
		||||
        // Assembly for more efficiently computing:
 | 
			
		||||
        // keccak256(abi.encodePacked(
 | 
			
		||||
        //     EIP712_ORDER_SCHEMA_HASH,
 | 
			
		||||
        //     uint256(order.makerAddress),
 | 
			
		||||
        //     uint256(order.takerAddress),
 | 
			
		||||
        //     uint256(order.feeRecipientAddress),
 | 
			
		||||
        //     uint256(order.senderAddress),
 | 
			
		||||
        //     order.makerAssetAmount,
 | 
			
		||||
        //     order.takerAssetAmount,
 | 
			
		||||
        //     order.makerFee,
 | 
			
		||||
        //     order.takerFee,
 | 
			
		||||
        //     order.expirationTimeSeconds,
 | 
			
		||||
        //     order.salt,
 | 
			
		||||
        //     keccak256(order.makerAssetData),
 | 
			
		||||
        //     keccak256(order.takerAssetData),
 | 
			
		||||
        //     keccak256(order.makerFeeAssetData),
 | 
			
		||||
        //     keccak256(order.takerFeeAssetData)
 | 
			
		||||
        // ));
 | 
			
		||||
 | 
			
		||||
        assembly {
 | 
			
		||||
            // Assert order offset (this is an internal error that should never be triggered)
 | 
			
		||||
            if lt(order, 32) {
 | 
			
		||||
                invalid()
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Calculate memory addresses that will be swapped out before hashing
 | 
			
		||||
            let pos1 := sub(order, 32)
 | 
			
		||||
            let pos2 := add(order, 320)
 | 
			
		||||
            let pos3 := add(order, 352)
 | 
			
		||||
            let pos4 := add(order, 384)
 | 
			
		||||
            let pos5 := add(order, 416)
 | 
			
		||||
 | 
			
		||||
            // Backup
 | 
			
		||||
            let temp1 := mload(pos1)
 | 
			
		||||
            let temp2 := mload(pos2)
 | 
			
		||||
            let temp3 := mload(pos3)
 | 
			
		||||
            let temp4 := mload(pos4)
 | 
			
		||||
            let temp5 := mload(pos5)
 | 
			
		||||
 | 
			
		||||
            // Hash in place
 | 
			
		||||
            mstore(pos1, schemaHash)
 | 
			
		||||
            mstore(pos2, keccak256(add(makerAssetData, 32), mload(makerAssetData)))        // store hash of makerAssetData
 | 
			
		||||
            mstore(pos3, keccak256(add(takerAssetData, 32), mload(takerAssetData)))        // store hash of takerAssetData
 | 
			
		||||
            mstore(pos4, keccak256(add(makerFeeAssetData, 32), mload(makerFeeAssetData)))  // store hash of makerFeeAssetData
 | 
			
		||||
            mstore(pos5, keccak256(add(takerFeeAssetData, 32), mload(takerFeeAssetData)))  // store hash of takerFeeAssetData
 | 
			
		||||
            result := keccak256(pos1, 480)
 | 
			
		||||
 | 
			
		||||
            // Restore
 | 
			
		||||
            mstore(pos1, temp1)
 | 
			
		||||
            mstore(pos2, temp2)
 | 
			
		||||
            mstore(pos3, temp3)
 | 
			
		||||
            mstore(pos4, temp4)
 | 
			
		||||
            mstore(pos5, temp5)
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// @dev Calculates EIP712 encoding for a hash struct with a given domain hash.
 | 
			
		||||
    /// @param eip712DomainHash Hash of the domain domain separator data, computed
 | 
			
		||||
    ///                         with getDomainHash().
 | 
			
		||||
    /// @param hashStruct The EIP712 hash struct.
 | 
			
		||||
    /// @return result EIP712 hash applied to the given EIP712 Domain.
 | 
			
		||||
    function _hashEIP712Message(bytes32 eip712DomainHash, bytes32 hashStruct)
 | 
			
		||||
        internal
 | 
			
		||||
        pure
 | 
			
		||||
        returns (bytes32 result)
 | 
			
		||||
    {
 | 
			
		||||
        // Assembly for more efficient computing:
 | 
			
		||||
        // keccak256(abi.encodePacked(
 | 
			
		||||
        //     EIP191_HEADER,
 | 
			
		||||
        //     EIP712_DOMAIN_HASH,
 | 
			
		||||
        //     hashStruct
 | 
			
		||||
        // ));
 | 
			
		||||
 | 
			
		||||
        assembly {
 | 
			
		||||
            // Load free memory pointer
 | 
			
		||||
            let memPtr := mload(64)
 | 
			
		||||
 | 
			
		||||
            mstore(memPtr, 0x1901000000000000000000000000000000000000000000000000000000000000)  // EIP191 header
 | 
			
		||||
            mstore(add(memPtr, 2), eip712DomainHash)                                            // EIP712 domain hash
 | 
			
		||||
            mstore(add(memPtr, 34), hashStruct)                                                 // Hash of struct
 | 
			
		||||
 | 
			
		||||
            // Compute hash
 | 
			
		||||
            result := keccak256(memPtr, 66)
 | 
			
		||||
        }
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -35,6 +35,8 @@ contract TestFillQuoteTransformerExchange {
 | 
			
		||||
        uint256 makerAssetMintRatio;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bytes32 public constant EIP712_EXCHANGE_DOMAIN_HASH = 0xaa81d881b1adbbf115e15b849cb9cdc643cad3c6a90f30eb505954af943247e6;
 | 
			
		||||
 | 
			
		||||
    uint256 private constant PROTOCOL_FEE_MULTIPLIER = 1337;
 | 
			
		||||
 | 
			
		||||
    using LibSafeMathV06 for uint256;
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										34
									
								
								contracts/zero-ex/contracts/test/TestLibSignature.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								contracts/zero-ex/contracts/test/TestLibSignature.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "../src/features/libs/LibSignature.sol";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
contract TestLibSignature {
 | 
			
		||||
 | 
			
		||||
    function getSignerOfHash(bytes32 hash, LibSignature.Signature calldata signature)
 | 
			
		||||
        external
 | 
			
		||||
        pure
 | 
			
		||||
        returns (address signer)
 | 
			
		||||
    {
 | 
			
		||||
        return LibSignature.getSignerOfHash(hash, signature);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										55
									
								
								contracts/zero-ex/contracts/test/TestProtocolFees.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								contracts/zero-ex/contracts/test/TestProtocolFees.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "../src/fixins/FixinProtocolFees.sol";
 | 
			
		||||
 | 
			
		||||
contract TestProtocolFees is FixinProtocolFees {
 | 
			
		||||
    function collectProtocolFee(
 | 
			
		||||
        bytes32 poolId,
 | 
			
		||||
        uint256 amount,
 | 
			
		||||
        IERC20TokenV06 weth
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        payable
 | 
			
		||||
    {
 | 
			
		||||
        _collectProtocolFee(poolId, amount, weth);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function transferFeesForPool(
 | 
			
		||||
        bytes32 poolId,
 | 
			
		||||
        IStaking staking,
 | 
			
		||||
        IEtherTokenV06 weth
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
    {
 | 
			
		||||
        _transferFeesForPool(poolId, staking, weth);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function getFeeCollector(
 | 
			
		||||
        bytes32 poolId
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        view
 | 
			
		||||
        returns (FeeCollector)
 | 
			
		||||
    {
 | 
			
		||||
        return _getFeeCollector(poolId);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										49
									
								
								contracts/zero-ex/contracts/test/TestStaking.sol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								contracts/zero-ex/contracts/test/TestStaking.sol
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
/*
 | 
			
		||||
 | 
			
		||||
  Copyright 2020 ZeroEx Intl.
 | 
			
		||||
 | 
			
		||||
  Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
  you may not use this file except in compliance with the License.
 | 
			
		||||
  You may obtain a copy of the License at
 | 
			
		||||
 | 
			
		||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 | 
			
		||||
  Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
  distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
  See the License for the specific language governing permissions and
 | 
			
		||||
  limitations under the License.
 | 
			
		||||
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
pragma solidity ^0.6.5;
 | 
			
		||||
pragma experimental ABIEncoderV2;
 | 
			
		||||
 | 
			
		||||
import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol";
 | 
			
		||||
 | 
			
		||||
contract TestStaking {
 | 
			
		||||
    mapping(address => bytes32) public poolForMaker;
 | 
			
		||||
    mapping(bytes32 => uint256) public balanceForPool;
 | 
			
		||||
 | 
			
		||||
    IEtherTokenV06 immutable weth;
 | 
			
		||||
 | 
			
		||||
    constructor(IEtherTokenV06 _weth) public {
 | 
			
		||||
        weth = _weth;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function joinStakingPoolAsMaker(bytes32 poolId) external {
 | 
			
		||||
        poolForMaker[msg.sender] = poolId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    function payProtocolFee(
 | 
			
		||||
        address makerAddress,
 | 
			
		||||
        address payerAddress,
 | 
			
		||||
        uint256 amount
 | 
			
		||||
    )
 | 
			
		||||
        external
 | 
			
		||||
        payable
 | 
			
		||||
    {
 | 
			
		||||
        require(weth.transferFrom(payerAddress, address(this), amount));
 | 
			
		||||
        balanceForPool[poolForMaker[makerAddress]] += amount;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "@0x/contracts-zero-ex",
 | 
			
		||||
    "version": "0.5.0",
 | 
			
		||||
    "version": "0.7.0",
 | 
			
		||||
    "engines": {
 | 
			
		||||
        "node": ">=6.12"
 | 
			
		||||
    },
 | 
			
		||||
@@ -10,8 +10,9 @@
 | 
			
		||||
        "test": "test"
 | 
			
		||||
    },
 | 
			
		||||
    "scripts": {
 | 
			
		||||
        "build": "yarn pre_build && tsc -b",
 | 
			
		||||
        "build": "yarn pre_build && yarn build:ts",
 | 
			
		||||
        "build:ci": "yarn build",
 | 
			
		||||
        "build:ts": "tsc -b",
 | 
			
		||||
        "pre_build": "run-s compile contracts:gen generate_contract_wrappers contracts:copy",
 | 
			
		||||
        "test": "yarn run_mocha",
 | 
			
		||||
        "rebuild_and_test": "run-s build test",
 | 
			
		||||
@@ -41,7 +42,7 @@
 | 
			
		||||
    "config": {
 | 
			
		||||
        "publicInterfaceContracts": "IZeroEx,ZeroEx,FullMigration,InitialMigration,IFlashWallet,IAllowanceTarget,IERC20Transformer,IOwnableFeature,ISimpleFunctionRegistryFeature,ITokenSpenderFeature,ITransformERC20Feature,FillQuoteTransformer,PayTakerTransformer,WethTransformer,OwnableFeature,SimpleFunctionRegistryFeature,TransformERC20Feature,TokenSpenderFeature,AffiliateFeeTransformer,SignatureValidatorFeature,MetaTransactionsFeature,LogMetadataTransformer,BridgeAdapter,LiquidityProviderFeature",
 | 
			
		||||
        "abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
 | 
			
		||||
        "abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinReentrancyGuard|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProviderFeature|IMetaTransactionsFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibLiquidityProviderRichErrors|LibLiquidityProviderStorage|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignatureRichErrors|LibSignedCallData|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpender|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinCurve|MixinDodo|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinSushiswap|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|OwnableFeature|PayTakerTransformer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFullMigration|TestInitialMigration|TestLibTokenSpender|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx).json"
 | 
			
		||||
        "abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FeeCollector|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinProtocolFees|FixinReentrancyGuard|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProvider|ILiquidityProviderFeature|IMetaTransactionsFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|IStaking|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibLiquidityProviderRichErrors|LibLiquidityProviderStorage|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibOrderHash|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSignedCallData|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpender|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinCurve|MixinDodo|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinSushiswap|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|OwnableFeature|PayTakerTransformer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFullMigration|TestInitialMigration|TestLibSignature|TestLibTokenSpender|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestProtocolFees|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx).json"
 | 
			
		||||
    },
 | 
			
		||||
    "repository": {
 | 
			
		||||
        "type": "git",
 | 
			
		||||
@@ -53,13 +54,12 @@
 | 
			
		||||
    },
 | 
			
		||||
    "homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
 | 
			
		||||
    "devDependencies": {
 | 
			
		||||
        "@0x/abi-gen": "^5.4.3",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.3",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.13",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.6",
 | 
			
		||||
        "@0x/dev-utils": "^3.3.4",
 | 
			
		||||
        "@0x/order-utils": "^10.4.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.3",
 | 
			
		||||
        "@0x/abi-gen": "^5.4.7",
 | 
			
		||||
        "@0x/contracts-erc20": "^3.2.6",
 | 
			
		||||
        "@0x/contracts-gen": "2.0.18",
 | 
			
		||||
        "@0x/contracts-test-utils": "^5.3.9",
 | 
			
		||||
        "@0x/dev-utils": "^4.0.1",
 | 
			
		||||
        "@0x/sol-compiler": "^4.2.7",
 | 
			
		||||
        "@0x/ts-doc-gen": "^0.0.28",
 | 
			
		||||
        "@0x/tslint-config": "^4.1.3",
 | 
			
		||||
        "@types/lodash": "4.14.104",
 | 
			
		||||
@@ -75,12 +75,13 @@
 | 
			
		||||
        "typescript": "3.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "dependencies": {
 | 
			
		||||
        "@0x/base-contract": "^6.2.7",
 | 
			
		||||
        "@0x/subproviders": "^6.1.5",
 | 
			
		||||
        "@0x/types": "^3.2.4",
 | 
			
		||||
        "@0x/base-contract": "^6.2.11",
 | 
			
		||||
        "@0x/order-utils": "^10.4.4",
 | 
			
		||||
        "@0x/subproviders": "^6.1.9",
 | 
			
		||||
        "@0x/types": "^3.3.0",
 | 
			
		||||
        "@0x/typescript-typings": "^5.1.5",
 | 
			
		||||
        "@0x/utils": "^5.6.3",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.4",
 | 
			
		||||
        "@0x/utils": "^6.1.0",
 | 
			
		||||
        "@0x/web3-wrapper": "^7.2.8",
 | 
			
		||||
        "ethereum-types": "^3.3.3",
 | 
			
		||||
        "ethereumjs-util": "^5.1.1"
 | 
			
		||||
    },
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,7 @@ export { artifacts } from './artifacts';
 | 
			
		||||
export * from './migration';
 | 
			
		||||
export * from './nonce_utils';
 | 
			
		||||
export * from './signed_call_data';
 | 
			
		||||
export * from './signature_utils';
 | 
			
		||||
export {
 | 
			
		||||
    AffiliateFeeTransformerContract,
 | 
			
		||||
    BridgeAdapterContract,
 | 
			
		||||
@@ -48,3 +49,6 @@ export {
 | 
			
		||||
    WethTransformerContract,
 | 
			
		||||
    ZeroExContract,
 | 
			
		||||
} from './wrappers';
 | 
			
		||||
export * from './revert_errors';
 | 
			
		||||
export { EIP712TypedData } from '@0x/types';
 | 
			
		||||
export { SupportedProvider } from '@0x/subproviders';
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										30
									
								
								contracts/zero-ex/src/revert_errors.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								contracts/zero-ex/src/revert_errors.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,30 @@
 | 
			
		||||
// TODO(dorothy-zbornak): Move these into `@0x/protocol-utils` whenever that
 | 
			
		||||
// becomes a thing.
 | 
			
		||||
// tslint:disable:max-classes-per-file
 | 
			
		||||
import { RevertError } from '@0x/utils';
 | 
			
		||||
 | 
			
		||||
export enum SignatureValidationErrorCodes {
 | 
			
		||||
    AlwaysInvalid = 0,
 | 
			
		||||
    InvalidLength = 1,
 | 
			
		||||
    Unsupported = 2,
 | 
			
		||||
    Illegal = 3,
 | 
			
		||||
    WrongSigner = 4,
 | 
			
		||||
    BadSignatureData = 5,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// tslint:disable:max-classes-per-file
 | 
			
		||||
export class SignatureValidationError extends RevertError {
 | 
			
		||||
    constructor(code?: SignatureValidationErrorCodes, hash?: string) {
 | 
			
		||||
        super('SignatureValidationError', 'SignatureValidationError(uint8 code, bytes32 hash)', {
 | 
			
		||||
            code,
 | 
			
		||||
            hash,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const types = [SignatureValidationError];
 | 
			
		||||
 | 
			
		||||
// Register the types we've defined.
 | 
			
		||||
for (const type of types) {
 | 
			
		||||
    RevertError.registerType(type);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										113
									
								
								contracts/zero-ex/src/signature_utils.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								contracts/zero-ex/src/signature_utils.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
import { signatureUtils } from '@0x/order-utils';
 | 
			
		||||
import { SupportedProvider } from '@0x/subproviders';
 | 
			
		||||
import { EIP712TypedData } from '@0x/types';
 | 
			
		||||
import { hexUtils, signTypedDataUtils } from '@0x/utils';
 | 
			
		||||
import * as ethjs from 'ethereumjs-util';
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Valid signature types on the Exchange Proxy.
 | 
			
		||||
 */
 | 
			
		||||
export enum SignatureType {
 | 
			
		||||
    Illegal = 0,
 | 
			
		||||
    Invalid = 1,
 | 
			
		||||
    EIP712 = 2,
 | 
			
		||||
    EthSign = 3,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Represents a raw EC signature.
 | 
			
		||||
 */
 | 
			
		||||
export interface ECSignature {
 | 
			
		||||
    v: number;
 | 
			
		||||
    r: string;
 | 
			
		||||
    s: string;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * A complete signature on the Exchange Proxy.
 | 
			
		||||
 */
 | 
			
		||||
export interface Signature extends ECSignature {
 | 
			
		||||
    signatureType: SignatureType;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Sign a hash with the EthSign signature type on a provider.
 | 
			
		||||
 */
 | 
			
		||||
export async function ethSignHashFromProviderAsync(
 | 
			
		||||
    signer: string,
 | 
			
		||||
    hash: string,
 | 
			
		||||
    provider: SupportedProvider,
 | 
			
		||||
): Promise<Signature> {
 | 
			
		||||
    const signatureBytes = await signatureUtils.ecSignHashAsync(provider, hash, signer);
 | 
			
		||||
    const parsed = parsePackedSignatureBytes(signatureBytes);
 | 
			
		||||
    assertSignatureType(parsed, SignatureType.EthSign);
 | 
			
		||||
    return parsed;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Sign a hash with the EthSign signature type, given a private key.
 | 
			
		||||
 */
 | 
			
		||||
export function ethSignHashWithKey(hash: string, key: string): Signature {
 | 
			
		||||
    const ethHash = hexUtils.toHex(
 | 
			
		||||
        ethjs.sha3(hexUtils.concat(ethjs.toBuffer('\x19Ethereum Signed Message:\n32'), hash)),
 | 
			
		||||
    );
 | 
			
		||||
    return {
 | 
			
		||||
        ...ecSignHashWithKey(ethHash, key),
 | 
			
		||||
        signatureType: SignatureType.EthSign,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Sign a typed data object with the EIP712 signature type, given a private key.
 | 
			
		||||
 */
 | 
			
		||||
export function eip712SignTypedDataWithKey(typedData: EIP712TypedData, key: string): Signature {
 | 
			
		||||
    const hash = hexUtils.toHex(signTypedDataUtils.generateTypedDataHash(typedData));
 | 
			
		||||
    return {
 | 
			
		||||
        ...ecSignHashWithKey(hash, key),
 | 
			
		||||
        signatureType: SignatureType.EIP712,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Sign an EIP712 hash with the EIP712 signature type, given a private key.
 | 
			
		||||
 */
 | 
			
		||||
export function eip712SignHashWithKey(hash: string, key: string): Signature {
 | 
			
		||||
    return {
 | 
			
		||||
        ...ecSignHashWithKey(hash, key),
 | 
			
		||||
        signatureType: SignatureType.EIP712,
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Generate the EC signature for a hash given a private key.
 | 
			
		||||
 */
 | 
			
		||||
export function ecSignHashWithKey(hash: string, key: string): ECSignature {
 | 
			
		||||
    const { v, r, s } = ethjs.ecsign(ethjs.toBuffer(hash), ethjs.toBuffer(key));
 | 
			
		||||
    return {
 | 
			
		||||
        v,
 | 
			
		||||
        r: ethjs.bufferToHex(r),
 | 
			
		||||
        s: ethjs.bufferToHex(s),
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function assertSignatureType(signature: Signature, expectedType: SignatureType): void {
 | 
			
		||||
    if (signature.signatureType !== expectedType) {
 | 
			
		||||
        throw new Error(`Expected signature type to be ${expectedType} but received ${signature.signatureType}.`);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function parsePackedSignatureBytes(signatureBytes: string): Signature {
 | 
			
		||||
    if (hexUtils.size(signatureBytes) !== 66) {
 | 
			
		||||
        throw new Error(`Expected packed signatureBytes to be 66 bytes long: ${signatureBytes}`);
 | 
			
		||||
    }
 | 
			
		||||
    const typeId = parseInt(signatureBytes.slice(-2), 16) as SignatureType;
 | 
			
		||||
    if (!Object.values(SignatureType).includes(typeId)) {
 | 
			
		||||
        throw new Error(`Invalid signatureBytes type ID detected: ${typeId}`);
 | 
			
		||||
    }
 | 
			
		||||
    return {
 | 
			
		||||
        signatureType: typeId,
 | 
			
		||||
        v: parseInt(signatureBytes.slice(2, 4), 16),
 | 
			
		||||
        r: hexUtils.slice(signatureBytes, 1, 33),
 | 
			
		||||
        s: hexUtils.slice(signatureBytes, 33),
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
@@ -9,9 +9,11 @@ import * as AffiliateFeeTransformer from '../test/generated-artifacts/AffiliateF
 | 
			
		||||
import * as AllowanceTarget from '../test/generated-artifacts/AllowanceTarget.json';
 | 
			
		||||
import * as BootstrapFeature from '../test/generated-artifacts/BootstrapFeature.json';
 | 
			
		||||
import * as BridgeAdapter from '../test/generated-artifacts/BridgeAdapter.json';
 | 
			
		||||
import * as FeeCollector from '../test/generated-artifacts/FeeCollector.json';
 | 
			
		||||
import * as FillQuoteTransformer from '../test/generated-artifacts/FillQuoteTransformer.json';
 | 
			
		||||
import * as FixinCommon from '../test/generated-artifacts/FixinCommon.json';
 | 
			
		||||
import * as FixinEIP712 from '../test/generated-artifacts/FixinEIP712.json';
 | 
			
		||||
import * as FixinProtocolFees from '../test/generated-artifacts/FixinProtocolFees.json';
 | 
			
		||||
import * as FixinReentrancyGuard from '../test/generated-artifacts/FixinReentrancyGuard.json';
 | 
			
		||||
import * as FlashWallet from '../test/generated-artifacts/FlashWallet.json';
 | 
			
		||||
import * as FullMigration from '../test/generated-artifacts/FullMigration.json';
 | 
			
		||||
@@ -24,12 +26,14 @@ import * as IExchange from '../test/generated-artifacts/IExchange.json';
 | 
			
		||||
import * as IFeature from '../test/generated-artifacts/IFeature.json';
 | 
			
		||||
import * as IFlashWallet from '../test/generated-artifacts/IFlashWallet.json';
 | 
			
		||||
import * as IGasToken from '../test/generated-artifacts/IGasToken.json';
 | 
			
		||||
import * as ILiquidityProvider from '../test/generated-artifacts/ILiquidityProvider.json';
 | 
			
		||||
import * as ILiquidityProviderFeature from '../test/generated-artifacts/ILiquidityProviderFeature.json';
 | 
			
		||||
import * as IMetaTransactionsFeature from '../test/generated-artifacts/IMetaTransactionsFeature.json';
 | 
			
		||||
import * as InitialMigration from '../test/generated-artifacts/InitialMigration.json';
 | 
			
		||||
import * as IOwnableFeature from '../test/generated-artifacts/IOwnableFeature.json';
 | 
			
		||||
import * as ISignatureValidatorFeature from '../test/generated-artifacts/ISignatureValidatorFeature.json';
 | 
			
		||||
import * as ISimpleFunctionRegistryFeature from '../test/generated-artifacts/ISimpleFunctionRegistryFeature.json';
 | 
			
		||||
import * as IStaking from '../test/generated-artifacts/IStaking.json';
 | 
			
		||||
import * as ITestSimpleFunctionRegistryFeature from '../test/generated-artifacts/ITestSimpleFunctionRegistryFeature.json';
 | 
			
		||||
import * as ITokenSpenderFeature from '../test/generated-artifacts/ITokenSpenderFeature.json';
 | 
			
		||||
import * as ITransformERC20Feature from '../test/generated-artifacts/ITransformERC20Feature.json';
 | 
			
		||||
@@ -43,11 +47,13 @@ import * as LibLiquidityProviderStorage from '../test/generated-artifacts/LibLiq
 | 
			
		||||
import * as LibMetaTransactionsRichErrors from '../test/generated-artifacts/LibMetaTransactionsRichErrors.json';
 | 
			
		||||
import * as LibMetaTransactionsStorage from '../test/generated-artifacts/LibMetaTransactionsStorage.json';
 | 
			
		||||
import * as LibMigrate from '../test/generated-artifacts/LibMigrate.json';
 | 
			
		||||
import * as LibOrderHash from '../test/generated-artifacts/LibOrderHash.json';
 | 
			
		||||
import * as LibOwnableRichErrors from '../test/generated-artifacts/LibOwnableRichErrors.json';
 | 
			
		||||
import * as LibOwnableStorage from '../test/generated-artifacts/LibOwnableStorage.json';
 | 
			
		||||
import * as LibProxyRichErrors from '../test/generated-artifacts/LibProxyRichErrors.json';
 | 
			
		||||
import * as LibProxyStorage from '../test/generated-artifacts/LibProxyStorage.json';
 | 
			
		||||
import * as LibReentrancyGuardStorage from '../test/generated-artifacts/LibReentrancyGuardStorage.json';
 | 
			
		||||
import * as LibSignature from '../test/generated-artifacts/LibSignature.json';
 | 
			
		||||
import * as LibSignatureRichErrors from '../test/generated-artifacts/LibSignatureRichErrors.json';
 | 
			
		||||
import * as LibSignedCallData from '../test/generated-artifacts/LibSignedCallData.json';
 | 
			
		||||
import * as LibSimpleFunctionRegistryRichErrors from '../test/generated-artifacts/LibSimpleFunctionRegistryRichErrors.json';
 | 
			
		||||
@@ -87,13 +93,16 @@ import * as TestFillQuoteTransformerExchange from '../test/generated-artifacts/T
 | 
			
		||||
import * as TestFillQuoteTransformerHost from '../test/generated-artifacts/TestFillQuoteTransformerHost.json';
 | 
			
		||||
import * as TestFullMigration from '../test/generated-artifacts/TestFullMigration.json';
 | 
			
		||||
import * as TestInitialMigration from '../test/generated-artifacts/TestInitialMigration.json';
 | 
			
		||||
import * as TestLibSignature from '../test/generated-artifacts/TestLibSignature.json';
 | 
			
		||||
import * as TestLibTokenSpender from '../test/generated-artifacts/TestLibTokenSpender.json';
 | 
			
		||||
import * as TestMetaTransactionsTransformERC20Feature from '../test/generated-artifacts/TestMetaTransactionsTransformERC20Feature.json';
 | 
			
		||||
import * as TestMigrator from '../test/generated-artifacts/TestMigrator.json';
 | 
			
		||||
import * as TestMintableERC20Token from '../test/generated-artifacts/TestMintableERC20Token.json';
 | 
			
		||||
import * as TestMintTokenERC20Transformer from '../test/generated-artifacts/TestMintTokenERC20Transformer.json';
 | 
			
		||||
import * as TestProtocolFees from '../test/generated-artifacts/TestProtocolFees.json';
 | 
			
		||||
import * as TestSimpleFunctionRegistryFeatureImpl1 from '../test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl1.json';
 | 
			
		||||
import * as TestSimpleFunctionRegistryFeatureImpl2 from '../test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl2.json';
 | 
			
		||||
import * as TestStaking from '../test/generated-artifacts/TestStaking.json';
 | 
			
		||||
import * as TestTokenSpender from '../test/generated-artifacts/TestTokenSpender.json';
 | 
			
		||||
import * as TestTokenSpenderERC20Token from '../test/generated-artifacts/TestTokenSpenderERC20Token.json';
 | 
			
		||||
import * as TestTransformerBase from '../test/generated-artifacts/TestTransformerBase.json';
 | 
			
		||||
@@ -124,6 +133,7 @@ export const artifacts = {
 | 
			
		||||
    LibTransformERC20RichErrors: LibTransformERC20RichErrors as ContractArtifact,
 | 
			
		||||
    LibWalletRichErrors: LibWalletRichErrors as ContractArtifact,
 | 
			
		||||
    AllowanceTarget: AllowanceTarget as ContractArtifact,
 | 
			
		||||
    FeeCollector: FeeCollector as ContractArtifact,
 | 
			
		||||
    FlashWallet: FlashWallet as ContractArtifact,
 | 
			
		||||
    IAllowanceTarget: IAllowanceTarget as ContractArtifact,
 | 
			
		||||
    IFlashWallet: IFlashWallet as ContractArtifact,
 | 
			
		||||
@@ -147,10 +157,12 @@ export const artifacts = {
 | 
			
		||||
    TokenSpenderFeature: TokenSpenderFeature as ContractArtifact,
 | 
			
		||||
    TransformERC20Feature: TransformERC20Feature as ContractArtifact,
 | 
			
		||||
    UniswapFeature: UniswapFeature as ContractArtifact,
 | 
			
		||||
    LibSignature: LibSignature as ContractArtifact,
 | 
			
		||||
    LibSignedCallData: LibSignedCallData as ContractArtifact,
 | 
			
		||||
    LibTokenSpender: LibTokenSpender as ContractArtifact,
 | 
			
		||||
    FixinCommon: FixinCommon as ContractArtifact,
 | 
			
		||||
    FixinEIP712: FixinEIP712 as ContractArtifact,
 | 
			
		||||
    FixinProtocolFees: FixinProtocolFees as ContractArtifact,
 | 
			
		||||
    FixinReentrancyGuard: FixinReentrancyGuard as ContractArtifact,
 | 
			
		||||
    FullMigration: FullMigration as ContractArtifact,
 | 
			
		||||
    InitialMigration: InitialMigration as ContractArtifact,
 | 
			
		||||
@@ -188,9 +200,12 @@ export const artifacts = {
 | 
			
		||||
    MixinUniswap: MixinUniswap as ContractArtifact,
 | 
			
		||||
    MixinUniswapV2: MixinUniswapV2 as ContractArtifact,
 | 
			
		||||
    MixinZeroExBridge: MixinZeroExBridge as ContractArtifact,
 | 
			
		||||
    ILiquidityProvider: ILiquidityProvider as ContractArtifact,
 | 
			
		||||
    IERC20Bridge: IERC20Bridge as ContractArtifact,
 | 
			
		||||
    IExchange: IExchange as ContractArtifact,
 | 
			
		||||
    IGasToken: IGasToken as ContractArtifact,
 | 
			
		||||
    IStaking: IStaking as ContractArtifact,
 | 
			
		||||
    LibOrderHash: LibOrderHash as ContractArtifact,
 | 
			
		||||
    ITestSimpleFunctionRegistryFeature: ITestSimpleFunctionRegistryFeature as ContractArtifact,
 | 
			
		||||
    TestBridge: TestBridge as ContractArtifact,
 | 
			
		||||
    TestCallTarget: TestCallTarget as ContractArtifact,
 | 
			
		||||
@@ -200,13 +215,16 @@ export const artifacts = {
 | 
			
		||||
    TestFillQuoteTransformerHost: TestFillQuoteTransformerHost as ContractArtifact,
 | 
			
		||||
    TestFullMigration: TestFullMigration as ContractArtifact,
 | 
			
		||||
    TestInitialMigration: TestInitialMigration as ContractArtifact,
 | 
			
		||||
    TestLibSignature: TestLibSignature as ContractArtifact,
 | 
			
		||||
    TestLibTokenSpender: TestLibTokenSpender as ContractArtifact,
 | 
			
		||||
    TestMetaTransactionsTransformERC20Feature: TestMetaTransactionsTransformERC20Feature as ContractArtifact,
 | 
			
		||||
    TestMigrator: TestMigrator as ContractArtifact,
 | 
			
		||||
    TestMintTokenERC20Transformer: TestMintTokenERC20Transformer as ContractArtifact,
 | 
			
		||||
    TestMintableERC20Token: TestMintableERC20Token as ContractArtifact,
 | 
			
		||||
    TestProtocolFees: TestProtocolFees as ContractArtifact,
 | 
			
		||||
    TestSimpleFunctionRegistryFeatureImpl1: TestSimpleFunctionRegistryFeatureImpl1 as ContractArtifact,
 | 
			
		||||
    TestSimpleFunctionRegistryFeatureImpl2: TestSimpleFunctionRegistryFeatureImpl2 as ContractArtifact,
 | 
			
		||||
    TestStaking: TestStaking as ContractArtifact,
 | 
			
		||||
    TestTokenSpender: TestTokenSpender as ContractArtifact,
 | 
			
		||||
    TestTokenSpenderERC20Token: TestTokenSpenderERC20Token as ContractArtifact,
 | 
			
		||||
    TestTransformERC20: TestTransformERC20 as ContractArtifact,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										98
									
								
								contracts/zero-ex/test/lib_signature_test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								contracts/zero-ex/test/lib_signature_test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
			
		||||
import { blockchainTests, expect } from '@0x/contracts-test-utils';
 | 
			
		||||
import { hexUtils } from '@0x/utils';
 | 
			
		||||
import * as ethjs from 'ethereumjs-util';
 | 
			
		||||
 | 
			
		||||
import { SignatureValidationError, SignatureValidationErrorCodes } from '../src/revert_errors';
 | 
			
		||||
import { eip712SignHashWithKey, ethSignHashWithKey, SignatureType } from '../src/signature_utils';
 | 
			
		||||
 | 
			
		||||
import { artifacts } from './artifacts';
 | 
			
		||||
import { TestLibSignatureContract } from './wrappers';
 | 
			
		||||
 | 
			
		||||
const EMPTY_REVERT = 'reverted with no data';
 | 
			
		||||
 | 
			
		||||
blockchainTests.resets('LibSignature library', env => {
 | 
			
		||||
    let testLib: TestLibSignatureContract;
 | 
			
		||||
    let signerKey: string;
 | 
			
		||||
    let signer: string;
 | 
			
		||||
 | 
			
		||||
    before(async () => {
 | 
			
		||||
        signerKey = hexUtils.random();
 | 
			
		||||
        signer = ethjs.bufferToHex(ethjs.privateToAddress(ethjs.toBuffer(signerKey)));
 | 
			
		||||
        testLib = await TestLibSignatureContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.TestLibSignature,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            artifacts,
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('getSignerOfHash()', () => {
 | 
			
		||||
        it('can recover the signer of an EIP712 signature', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = eip712SignHashWithKey(hash, signerKey);
 | 
			
		||||
            const recovered = await testLib.getSignerOfHash(hash, sig).callAsync();
 | 
			
		||||
            expect(recovered).to.eq(signer);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('can recover the signer of an EthSign signature', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = ethSignHashWithKey(hash, signerKey);
 | 
			
		||||
            const recovered = await testLib.getSignerOfHash(hash, sig).callAsync();
 | 
			
		||||
            expect(recovered).to.eq(signer);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('throws if the signature type is out of range', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const badType = (Object.values(SignatureType).slice(-1)[0] as number) + 1;
 | 
			
		||||
            const sig = {
 | 
			
		||||
                ...ethSignHashWithKey(hash, signerKey),
 | 
			
		||||
                signatureType: badType,
 | 
			
		||||
            };
 | 
			
		||||
            return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.be.rejectedWith(EMPTY_REVERT);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('throws if the signature data is malformed', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = {
 | 
			
		||||
                ...ethSignHashWithKey(hash, signerKey),
 | 
			
		||||
                v: 1,
 | 
			
		||||
            };
 | 
			
		||||
            return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
 | 
			
		||||
                new SignatureValidationError(SignatureValidationErrorCodes.BadSignatureData, hash),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('throws if an EC value is out of range', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = {
 | 
			
		||||
                ...ethSignHashWithKey(hash, signerKey),
 | 
			
		||||
                r: '0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141',
 | 
			
		||||
            };
 | 
			
		||||
            return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
 | 
			
		||||
                new SignatureValidationError(SignatureValidationErrorCodes.BadSignatureData, hash),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('throws if the type is Illegal', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = {
 | 
			
		||||
                ...ethSignHashWithKey(hash, signerKey),
 | 
			
		||||
                signatureType: SignatureType.Illegal,
 | 
			
		||||
            };
 | 
			
		||||
            return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
 | 
			
		||||
                new SignatureValidationError(SignatureValidationErrorCodes.Illegal, hash),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        it('throws if the type is Invalid', async () => {
 | 
			
		||||
            const hash = hexUtils.random();
 | 
			
		||||
            const sig = {
 | 
			
		||||
                ...ethSignHashWithKey(hash, signerKey),
 | 
			
		||||
                signatureType: SignatureType.Invalid,
 | 
			
		||||
            };
 | 
			
		||||
            return expect(testLib.getSignerOfHash(hash, sig).callAsync()).to.revertWith(
 | 
			
		||||
                new SignatureValidationError(SignatureValidationErrorCodes.AlwaysInvalid, hash),
 | 
			
		||||
            );
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										75
									
								
								contracts/zero-ex/test/protocol_fees_test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								contracts/zero-ex/test/protocol_fees_test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
import { blockchainTests, constants, expect } from '@0x/contracts-test-utils';
 | 
			
		||||
import { BigNumber, hexUtils } from '@0x/utils';
 | 
			
		||||
 | 
			
		||||
import { artifacts } from './artifacts';
 | 
			
		||||
import { TestProtocolFeesContract, TestStakingContract, TestWethContract } from './wrappers';
 | 
			
		||||
 | 
			
		||||
blockchainTests.resets('ProtocolFees', env => {
 | 
			
		||||
    let payer: string;
 | 
			
		||||
    let protocolFees: TestProtocolFeesContract;
 | 
			
		||||
    let staking: TestStakingContract;
 | 
			
		||||
    let weth: TestWethContract;
 | 
			
		||||
 | 
			
		||||
    before(async () => {
 | 
			
		||||
        [payer] = await env.getAccountAddressesAsync();
 | 
			
		||||
        protocolFees = await TestProtocolFeesContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.TestProtocolFees,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            artifacts,
 | 
			
		||||
        );
 | 
			
		||||
        weth = await TestWethContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.TestWeth,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            artifacts,
 | 
			
		||||
        );
 | 
			
		||||
        staking = await TestStakingContract.deployFrom0xArtifactAsync(
 | 
			
		||||
            artifacts.TestStaking,
 | 
			
		||||
            env.provider,
 | 
			
		||||
            env.txDefaults,
 | 
			
		||||
            artifacts,
 | 
			
		||||
            weth.address,
 | 
			
		||||
        );
 | 
			
		||||
        await weth.mint(payer, constants.ONE_ETHER).awaitTransactionSuccessAsync();
 | 
			
		||||
        await weth.approve(protocolFees.address, constants.ONE_ETHER).awaitTransactionSuccessAsync({ from: payer });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    describe('_collectProtocolFee()', () => {
 | 
			
		||||
        it('can collect a protocol fee multiple times', async () => {
 | 
			
		||||
            const poolId = hexUtils.random();
 | 
			
		||||
            const amount1 = new BigNumber(123456);
 | 
			
		||||
            const amount2 = new BigNumber(456789);
 | 
			
		||||
 | 
			
		||||
            // Transfer amount1 via WETH.
 | 
			
		||||
            await protocolFees
 | 
			
		||||
                .collectProtocolFee(poolId, amount1, weth.address)
 | 
			
		||||
                .awaitTransactionSuccessAsync({ from: payer });
 | 
			
		||||
 | 
			
		||||
            // Send to staking contract.
 | 
			
		||||
            await protocolFees
 | 
			
		||||
                .transferFeesForPool(poolId, staking.address, weth.address)
 | 
			
		||||
                .awaitTransactionSuccessAsync();
 | 
			
		||||
 | 
			
		||||
            // Transfer amount2 via ETH.
 | 
			
		||||
            await protocolFees
 | 
			
		||||
                .collectProtocolFee(poolId, amount2, weth.address)
 | 
			
		||||
                .awaitTransactionSuccessAsync({ from: payer, value: amount2 });
 | 
			
		||||
 | 
			
		||||
            // Send to staking contract again.
 | 
			
		||||
            await protocolFees
 | 
			
		||||
                .transferFeesForPool(poolId, staking.address, weth.address)
 | 
			
		||||
                .awaitTransactionSuccessAsync();
 | 
			
		||||
 | 
			
		||||
            const balance = await staking.balanceForPool(poolId).callAsync();
 | 
			
		||||
            const wethBalance = await weth.balanceOf(staking.address).callAsync();
 | 
			
		||||
 | 
			
		||||
            // Check that staking accounted for the collected ether properly.
 | 
			
		||||
            expect(balance).to.bignumber.eq(wethBalance);
 | 
			
		||||
 | 
			
		||||
            // We leave 1 wei behind, of both ETH and WETH, for gas reasons.
 | 
			
		||||
            const total = amount1.plus(amount2).minus(2);
 | 
			
		||||
            return expect(balance).to.bignumber.eq(total);
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -77,7 +77,6 @@ blockchainTests.resets('FillQuoteTransformer', env => {
 | 
			
		||||
                mStable: NULL_ADDRESS,
 | 
			
		||||
                weth: NULL_ADDRESS,
 | 
			
		||||
                shellBridge: NULL_ADDRESS,
 | 
			
		||||
                shell: NULL_ADDRESS,
 | 
			
		||||
                creamBridge: NULL_ADDRESS,
 | 
			
		||||
                dodoBridge: NULL_ADDRESS,
 | 
			
		||||
                dodoHelper: NULL_ADDRESS,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,11 @@ export * from '../test/generated-wrappers/affiliate_fee_transformer';
 | 
			
		||||
export * from '../test/generated-wrappers/allowance_target';
 | 
			
		||||
export * from '../test/generated-wrappers/bootstrap_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/bridge_adapter';
 | 
			
		||||
export * from '../test/generated-wrappers/fee_collector';
 | 
			
		||||
export * from '../test/generated-wrappers/fill_quote_transformer';
 | 
			
		||||
export * from '../test/generated-wrappers/fixin_common';
 | 
			
		||||
export * from '../test/generated-wrappers/fixin_e_i_p712';
 | 
			
		||||
export * from '../test/generated-wrappers/fixin_protocol_fees';
 | 
			
		||||
export * from '../test/generated-wrappers/fixin_reentrancy_guard';
 | 
			
		||||
export * from '../test/generated-wrappers/flash_wallet';
 | 
			
		||||
export * from '../test/generated-wrappers/full_migration';
 | 
			
		||||
@@ -22,11 +24,13 @@ export * from '../test/generated-wrappers/i_exchange';
 | 
			
		||||
export * from '../test/generated-wrappers/i_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_flash_wallet';
 | 
			
		||||
export * from '../test/generated-wrappers/i_gas_token';
 | 
			
		||||
export * from '../test/generated-wrappers/i_liquidity_provider';
 | 
			
		||||
export * from '../test/generated-wrappers/i_liquidity_provider_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_meta_transactions_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_ownable_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_signature_validator_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_simple_function_registry_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_staking';
 | 
			
		||||
export * from '../test/generated-wrappers/i_test_simple_function_registry_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_token_spender_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/i_transform_erc20_feature';
 | 
			
		||||
@@ -41,11 +45,13 @@ export * from '../test/generated-wrappers/lib_liquidity_provider_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_meta_transactions_rich_errors';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_meta_transactions_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_migrate';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_order_hash';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_ownable_rich_errors';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_ownable_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_proxy_rich_errors';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_proxy_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_reentrancy_guard_storage';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_signature';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_signature_rich_errors';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_signed_call_data';
 | 
			
		||||
export * from '../test/generated-wrappers/lib_simple_function_registry_rich_errors';
 | 
			
		||||
@@ -85,13 +91,16 @@ export * from '../test/generated-wrappers/test_fill_quote_transformer_exchange';
 | 
			
		||||
export * from '../test/generated-wrappers/test_fill_quote_transformer_host';
 | 
			
		||||
export * from '../test/generated-wrappers/test_full_migration';
 | 
			
		||||
export * from '../test/generated-wrappers/test_initial_migration';
 | 
			
		||||
export * from '../test/generated-wrappers/test_lib_signature';
 | 
			
		||||
export * from '../test/generated-wrappers/test_lib_token_spender';
 | 
			
		||||
export * from '../test/generated-wrappers/test_meta_transactions_transform_erc20_feature';
 | 
			
		||||
export * from '../test/generated-wrappers/test_migrator';
 | 
			
		||||
export * from '../test/generated-wrappers/test_mint_token_erc20_transformer';
 | 
			
		||||
export * from '../test/generated-wrappers/test_mintable_erc20_token';
 | 
			
		||||
export * from '../test/generated-wrappers/test_protocol_fees';
 | 
			
		||||
export * from '../test/generated-wrappers/test_simple_function_registry_feature_impl1';
 | 
			
		||||
export * from '../test/generated-wrappers/test_simple_function_registry_feature_impl2';
 | 
			
		||||
export * from '../test/generated-wrappers/test_staking';
 | 
			
		||||
export * from '../test/generated-wrappers/test_token_spender';
 | 
			
		||||
export * from '../test/generated-wrappers/test_token_spender_erc20_token';
 | 
			
		||||
export * from '../test/generated-wrappers/test_transform_erc20';
 | 
			
		||||
 
 | 
			
		||||
@@ -31,9 +31,11 @@
 | 
			
		||||
        "test/generated-artifacts/AllowanceTarget.json",
 | 
			
		||||
        "test/generated-artifacts/BootstrapFeature.json",
 | 
			
		||||
        "test/generated-artifacts/BridgeAdapter.json",
 | 
			
		||||
        "test/generated-artifacts/FeeCollector.json",
 | 
			
		||||
        "test/generated-artifacts/FillQuoteTransformer.json",
 | 
			
		||||
        "test/generated-artifacts/FixinCommon.json",
 | 
			
		||||
        "test/generated-artifacts/FixinEIP712.json",
 | 
			
		||||
        "test/generated-artifacts/FixinProtocolFees.json",
 | 
			
		||||
        "test/generated-artifacts/FixinReentrancyGuard.json",
 | 
			
		||||
        "test/generated-artifacts/FlashWallet.json",
 | 
			
		||||
        "test/generated-artifacts/FullMigration.json",
 | 
			
		||||
@@ -46,11 +48,13 @@
 | 
			
		||||
        "test/generated-artifacts/IFeature.json",
 | 
			
		||||
        "test/generated-artifacts/IFlashWallet.json",
 | 
			
		||||
        "test/generated-artifacts/IGasToken.json",
 | 
			
		||||
        "test/generated-artifacts/ILiquidityProvider.json",
 | 
			
		||||
        "test/generated-artifacts/ILiquidityProviderFeature.json",
 | 
			
		||||
        "test/generated-artifacts/IMetaTransactionsFeature.json",
 | 
			
		||||
        "test/generated-artifacts/IOwnableFeature.json",
 | 
			
		||||
        "test/generated-artifacts/ISignatureValidatorFeature.json",
 | 
			
		||||
        "test/generated-artifacts/ISimpleFunctionRegistryFeature.json",
 | 
			
		||||
        "test/generated-artifacts/IStaking.json",
 | 
			
		||||
        "test/generated-artifacts/ITestSimpleFunctionRegistryFeature.json",
 | 
			
		||||
        "test/generated-artifacts/ITokenSpenderFeature.json",
 | 
			
		||||
        "test/generated-artifacts/ITransformERC20Feature.json",
 | 
			
		||||
@@ -65,11 +69,13 @@
 | 
			
		||||
        "test/generated-artifacts/LibMetaTransactionsRichErrors.json",
 | 
			
		||||
        "test/generated-artifacts/LibMetaTransactionsStorage.json",
 | 
			
		||||
        "test/generated-artifacts/LibMigrate.json",
 | 
			
		||||
        "test/generated-artifacts/LibOrderHash.json",
 | 
			
		||||
        "test/generated-artifacts/LibOwnableRichErrors.json",
 | 
			
		||||
        "test/generated-artifacts/LibOwnableStorage.json",
 | 
			
		||||
        "test/generated-artifacts/LibProxyRichErrors.json",
 | 
			
		||||
        "test/generated-artifacts/LibProxyStorage.json",
 | 
			
		||||
        "test/generated-artifacts/LibReentrancyGuardStorage.json",
 | 
			
		||||
        "test/generated-artifacts/LibSignature.json",
 | 
			
		||||
        "test/generated-artifacts/LibSignatureRichErrors.json",
 | 
			
		||||
        "test/generated-artifacts/LibSignedCallData.json",
 | 
			
		||||
        "test/generated-artifacts/LibSimpleFunctionRegistryRichErrors.json",
 | 
			
		||||
@@ -109,13 +115,16 @@
 | 
			
		||||
        "test/generated-artifacts/TestFillQuoteTransformerHost.json",
 | 
			
		||||
        "test/generated-artifacts/TestFullMigration.json",
 | 
			
		||||
        "test/generated-artifacts/TestInitialMigration.json",
 | 
			
		||||
        "test/generated-artifacts/TestLibSignature.json",
 | 
			
		||||
        "test/generated-artifacts/TestLibTokenSpender.json",
 | 
			
		||||
        "test/generated-artifacts/TestMetaTransactionsTransformERC20Feature.json",
 | 
			
		||||
        "test/generated-artifacts/TestMigrator.json",
 | 
			
		||||
        "test/generated-artifacts/TestMintTokenERC20Transformer.json",
 | 
			
		||||
        "test/generated-artifacts/TestMintableERC20Token.json",
 | 
			
		||||
        "test/generated-artifacts/TestProtocolFees.json",
 | 
			
		||||
        "test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl1.json",
 | 
			
		||||
        "test/generated-artifacts/TestSimpleFunctionRegistryFeatureImpl2.json",
 | 
			
		||||
        "test/generated-artifacts/TestStaking.json",
 | 
			
		||||
        "test/generated-artifacts/TestTokenSpender.json",
 | 
			
		||||
        "test/generated-artifacts/TestTokenSpenderERC20Token.json",
 | 
			
		||||
        "test/generated-artifacts/TestTransformERC20.json",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								doc-gen-config.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								doc-gen-config.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
{
 | 
			
		||||
    "docJsonVersion": "0.0.1",
 | 
			
		||||
    "externalTypeMap": {
 | 
			
		||||
        "Array": true,
 | 
			
		||||
        "BigNumber": true,
 | 
			
		||||
        "Error": true,
 | 
			
		||||
        "ErrorConstructor": true,
 | 
			
		||||
        "Buffer": true,
 | 
			
		||||
        "solc.StandardContractOutput": true,
 | 
			
		||||
        "solc.CompilerSettings": true,
 | 
			
		||||
        "Schema": true,
 | 
			
		||||
        "Uint8Array": true,
 | 
			
		||||
        "GanacheOpts": true,
 | 
			
		||||
        "keystore": true,
 | 
			
		||||
        "Ganache.GanacheOpts": true,
 | 
			
		||||
        "PromiseWithTransactionHash": true,
 | 
			
		||||
        "Buy": true,
 | 
			
		||||
        "Sell": true,
 | 
			
		||||
        "TFillData": true,
 | 
			
		||||
        "IterableIterator": true,
 | 
			
		||||
        "Set": true,
 | 
			
		||||
        "Exclude": true
 | 
			
		||||
    },
 | 
			
		||||
    "ignoredExcessiveTypes": [
 | 
			
		||||
        "NonceSubproviderErrors",
 | 
			
		||||
        "Web3WrapperErrors",
 | 
			
		||||
        "AssetBuyerError",
 | 
			
		||||
        "ContractError",
 | 
			
		||||
        "SubscriptionErrors",
 | 
			
		||||
        "TypedDataError",
 | 
			
		||||
        "SwapQuoterError",
 | 
			
		||||
        "SwapQuoteConsumerError",
 | 
			
		||||
        "SwapQuoteGetOutputOpts",
 | 
			
		||||
        "SwapQuoteExecutionOpts",
 | 
			
		||||
        "ForwarderError",
 | 
			
		||||
        "CoordinatorServerError",
 | 
			
		||||
        "CoordinatorServerCancellationResponse",
 | 
			
		||||
        "EventCallback",
 | 
			
		||||
        "IndexedFilterValues",
 | 
			
		||||
        "OrderInfo",
 | 
			
		||||
        "TransactionOpts",
 | 
			
		||||
        "ContractEvent",
 | 
			
		||||
        "SendTransactionOpts",
 | 
			
		||||
        "AwaitTransactionOpts",
 | 
			
		||||
        "ContractFunctionObj",
 | 
			
		||||
        "ContractTxFunctionObj",
 | 
			
		||||
        "EventCallback ",
 | 
			
		||||
        "EnvVars",
 | 
			
		||||
        "GlobalStakeByStatus",
 | 
			
		||||
        "OwnerStakeByStatus",
 | 
			
		||||
        "StakingPoolById",
 | 
			
		||||
        "AssetData",
 | 
			
		||||
        "SingleAssetData",
 | 
			
		||||
        "ERC20AssetData",
 | 
			
		||||
        "ERC20BridgeAssetData",
 | 
			
		||||
        "ERC721AssetData",
 | 
			
		||||
        "ERC1155AssetData",
 | 
			
		||||
        "MultiAssetData",
 | 
			
		||||
        "StaticCallAssetData",
 | 
			
		||||
        "MultiAssetDataWithRecursiveDecoding",
 | 
			
		||||
        "OrderPrunerPermittedFeeTypes"
 | 
			
		||||
    ],
 | 
			
		||||
    "typesOnlyLibraries": ["@0x/protocol-types"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
_build*
 | 
			
		||||
							
								
								
									
										177
									
								
								docs/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								docs/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,177 @@
 | 
			
		||||
# Makefile for Sphinx documentation
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
# You can set these variables from the command line.
 | 
			
		||||
SPHINXOPTS    =
 | 
			
		||||
SPHINXBUILD   = sphinx-build
 | 
			
		||||
PAPER         =
 | 
			
		||||
BUILDDIR      = _build
 | 
			
		||||
 | 
			
		||||
# User-friendly check for sphinx-build
 | 
			
		||||
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
 | 
			
		||||
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
# Internal variables.
 | 
			
		||||
PAPEROPT_a4     = -D latex_paper_size=a4
 | 
			
		||||
PAPEROPT_letter = -D latex_paper_size=letter
 | 
			
		||||
ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
 | 
			
		||||
# the i18n builder cannot share the environment and doctrees with the others
 | 
			
		||||
I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
 | 
			
		||||
 | 
			
		||||
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
 | 
			
		||||
 | 
			
		||||
help:
 | 
			
		||||
	@echo "Please use \`make <target>' where <target> is one of"
 | 
			
		||||
	@echo "  html       to make standalone HTML files"
 | 
			
		||||
	@echo "  dirhtml    to make HTML files named index.html in directories"
 | 
			
		||||
	@echo "  singlehtml to make a single large HTML file"
 | 
			
		||||
	@echo "  pickle     to make pickle files"
 | 
			
		||||
	@echo "  json       to make JSON files"
 | 
			
		||||
	@echo "  htmlhelp   to make HTML files and a HTML help project"
 | 
			
		||||
	@echo "  qthelp     to make HTML files and a qthelp project"
 | 
			
		||||
	@echo "  devhelp    to make HTML files and a Devhelp project"
 | 
			
		||||
	@echo "  epub       to make an epub"
 | 
			
		||||
	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
 | 
			
		||||
	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
 | 
			
		||||
	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
 | 
			
		||||
	@echo "  text       to make text files"
 | 
			
		||||
	@echo "  man        to make manual pages"
 | 
			
		||||
	@echo "  texinfo    to make Texinfo files"
 | 
			
		||||
	@echo "  info       to make Texinfo files and run them through makeinfo"
 | 
			
		||||
	@echo "  gettext    to make PO message catalogs"
 | 
			
		||||
	@echo "  changes    to make an overview of all changed/added/deprecated items"
 | 
			
		||||
	@echo "  xml        to make Docutils-native XML files"
 | 
			
		||||
	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
 | 
			
		||||
	@echo "  linkcheck  to check all external links for integrity"
 | 
			
		||||
	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	rm -rf $(BUILDDIR)/*
 | 
			
		||||
 | 
			
		||||
html:
 | 
			
		||||
	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
 | 
			
		||||
 | 
			
		||||
dirhtml:
 | 
			
		||||
	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
 | 
			
		||||
 | 
			
		||||
singlehtml:
 | 
			
		||||
	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
 | 
			
		||||
 | 
			
		||||
pickle:
 | 
			
		||||
	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can process the pickle files."
 | 
			
		||||
 | 
			
		||||
json:
 | 
			
		||||
	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can process the JSON files."
 | 
			
		||||
 | 
			
		||||
htmlhelp:
 | 
			
		||||
	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can run HTML Help Workshop with the" \
 | 
			
		||||
	      ".hhp project file in $(BUILDDIR)/htmlhelp."
 | 
			
		||||
 | 
			
		||||
qthelp:
 | 
			
		||||
	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
 | 
			
		||||
	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
 | 
			
		||||
	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ReadtheDocsTemplate.qhcp"
 | 
			
		||||
	@echo "To view the help file:"
 | 
			
		||||
	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ReadtheDocsTemplate.qhc"
 | 
			
		||||
 | 
			
		||||
devhelp:
 | 
			
		||||
	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished."
 | 
			
		||||
	@echo "To view the help file:"
 | 
			
		||||
	@echo "# mkdir -p $$HOME/.local/share/devhelp/ReadtheDocsTemplate"
 | 
			
		||||
	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ReadtheDocsTemplate"
 | 
			
		||||
	@echo "# devhelp"
 | 
			
		||||
 | 
			
		||||
epub:
 | 
			
		||||
	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
 | 
			
		||||
 | 
			
		||||
latex:
 | 
			
		||||
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
 | 
			
		||||
	@echo "Run \`make' in that directory to run these through (pdf)latex" \
 | 
			
		||||
	      "(use \`make latexpdf' here to do that automatically)."
 | 
			
		||||
 | 
			
		||||
latexpdf:
 | 
			
		||||
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 | 
			
		||||
	@echo "Running LaTeX files through pdflatex..."
 | 
			
		||||
	$(MAKE) -C $(BUILDDIR)/latex all-pdf
 | 
			
		||||
	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 | 
			
		||||
 | 
			
		||||
latexpdfja:
 | 
			
		||||
	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
 | 
			
		||||
	@echo "Running LaTeX files through platex and dvipdfmx..."
 | 
			
		||||
	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
 | 
			
		||||
	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
 | 
			
		||||
 | 
			
		||||
text:
 | 
			
		||||
	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The text files are in $(BUILDDIR)/text."
 | 
			
		||||
 | 
			
		||||
man:
 | 
			
		||||
	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
 | 
			
		||||
 | 
			
		||||
texinfo:
 | 
			
		||||
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
 | 
			
		||||
	@echo "Run \`make' in that directory to run these through makeinfo" \
 | 
			
		||||
	      "(use \`make info' here to do that automatically)."
 | 
			
		||||
 | 
			
		||||
info:
 | 
			
		||||
	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
 | 
			
		||||
	@echo "Running Texinfo files through makeinfo..."
 | 
			
		||||
	make -C $(BUILDDIR)/texinfo info
 | 
			
		||||
	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
 | 
			
		||||
 | 
			
		||||
gettext:
 | 
			
		||||
	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
 | 
			
		||||
 | 
			
		||||
changes:
 | 
			
		||||
	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "The overview file is in $(BUILDDIR)/changes."
 | 
			
		||||
 | 
			
		||||
linkcheck:
 | 
			
		||||
	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Link check complete; look for any errors in the above output " \
 | 
			
		||||
	      "or in $(BUILDDIR)/linkcheck/output.txt."
 | 
			
		||||
 | 
			
		||||
doctest:
 | 
			
		||||
	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
 | 
			
		||||
	@echo "Testing of doctests in the sources finished, look at the " \
 | 
			
		||||
	      "results in $(BUILDDIR)/doctest/output.txt."
 | 
			
		||||
 | 
			
		||||
xml:
 | 
			
		||||
	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
 | 
			
		||||
 | 
			
		||||
pseudoxml:
 | 
			
		||||
	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
 | 
			
		||||
							
								
								
									
										18
									
								
								docs/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								docs/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
### Dependencies
 | 
			
		||||
```bash
 | 
			
		||||
    pip3 install sphinx recommonmark
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Syntax
 | 
			
		||||
Documentation can be written in [Markdown](https://en.wikipedia.org/wiki/Markdown) (.md) or [Restructured Text](https://en.wikipedia.org/wiki/ReStructuredText) (.rst).
 | 
			
		||||
 | 
			
		||||
### Build and Test
 | 
			
		||||
```bash
 | 
			
		||||
cd docs
 | 
			
		||||
make html
 | 
			
		||||
open _build/html/index.html
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Tips
 | 
			
		||||
* Generate RST tables [here](https://www.tablesgenerator.com/text_tables#).
 | 
			
		||||
* Set your editor's ruler to `100` characters.
 | 
			
		||||
							
								
								
									
										13
									
								
								docs/_static/theme_overrides.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								docs/_static/theme_overrides.css
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
/* override table width restrictions */
 | 
			
		||||
@media screen and (min-width: 767px) {
 | 
			
		||||
 | 
			
		||||
    .wy-table-responsive table td {
 | 
			
		||||
       /* !important prevents the common CSS stylesheets from overriding
 | 
			
		||||
          this as on RTD they are loaded after this stylesheet */
 | 
			
		||||
       white-space: normal !important;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
    .wy-table-responsive {
 | 
			
		||||
       overflow: visible !important;
 | 
			
		||||
    }
 | 
			
		||||
 }
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/additional/audits.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/additional/audits.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Audits
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/additional/bounties.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/additional/bounties.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Bounties
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/additional/contributing.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/additional/contributing.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Contributing
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/aggregation.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/aggregation.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Aggregation
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/erc20_transformations.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/erc20_transformations.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
ERC20 Transformations
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/private_liquidity_pools.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/private_liquidity_pools.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Private Liquidity Poools
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/request_for_quote.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/request_for_quote.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Request for Quote
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/vip_paths.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/vip_paths.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
VIP Paths
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/advanced/weth_wrapping.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/advanced/weth_wrapping.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
WETH Wrapping
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/architecture/features.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/architecture/features.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Features
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/architecture/flash_wallet.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/architecture/flash_wallet.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Flash Wallet
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/architecture/overview.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/architecture/overview.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Overview
 | 
			
		||||
###############################
 | 
			
		||||
							
								
								
									
										3
									
								
								docs/architecture/proxy.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								docs/architecture/proxy.rst
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
###############################
 | 
			
		||||
Proxy
 | 
			
		||||
###############################
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user