Compare commits
9 Commits
@0x/contra
...
@0x/contra
Author | SHA1 | Date | |
---|---|---|---|
|
7fd25be02e | ||
|
aa688c4a92 | ||
|
fb437551c9 | ||
|
6fa1de7889 | ||
|
7a42df9a65 | ||
|
15a508f3ea | ||
|
b3c20ff909 | ||
|
682c07cb73 | ||
|
602605ab4b |
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "3.7.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "3.7.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.7.1 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.7.0 - _December 16, 2020_
|
||||
|
||||
* Fix Bancor support of ETH (#88)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-asset-proxy",
|
||||
"version": "3.7.0",
|
||||
"version": "3.7.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,10 +52,10 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
@@ -80,11 +80,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-erc1155": "^2.1.18",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/contracts-erc1155": "^2.1.19",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "1.1.19",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "1.1.18",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.1.19 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.1.18 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-broker",
|
||||
"version": "1.1.18",
|
||||
"version": "1.1.19",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,14 +52,14 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
@@ -85,7 +85,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"ethereum-types": "^3.4.0"
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "3.1.20",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "3.1.19",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.1.20 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.1.19 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-coordinator",
|
||||
"version": "3.1.19",
|
||||
"version": "3.1.20",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,12 +53,12 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
@@ -84,10 +84,10 @@
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "1.3.18",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "1.3.17",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.3.18 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.3.17 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-dev-utils",
|
||||
"version": "1.3.17",
|
||||
"version": "1.3.18",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -43,10 +43,10 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "2.1.19",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "2.1.18",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v2.1.19 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v2.1.18 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc1155",
|
||||
"version": "2.1.18",
|
||||
"version": "2.1.19",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -54,7 +54,7 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
@@ -81,7 +81,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"lodash": "^4.17.11"
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "3.2.13",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "3.2.12",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.2.13 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.2.12 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc20",
|
||||
"version": "3.2.12",
|
||||
"version": "3.2.13",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,8 +53,8 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "3.1.19",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "3.1.18",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.1.19 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.1.18 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc721",
|
||||
"version": "3.1.18",
|
||||
"version": "3.1.19",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -54,8 +54,8 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "4.2.20",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "4.2.19",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.2.20 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.2.19 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange-forwarder",
|
||||
"version": "4.2.19",
|
||||
"version": "4.2.20",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,18 +53,18 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc1155": "^2.1.18",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc1155": "^2.1.19",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "4.3.19",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "4.3.18",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.3.19 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.3.18 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange-libs",
|
||||
"version": "4.3.18",
|
||||
"version": "4.3.19",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -81,9 +81,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "3.2.20",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "3.2.19",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.2.20 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.2.19 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange",
|
||||
"version": "3.2.19",
|
||||
"version": "3.2.20",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,13 +53,13 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-multisig": "^4.1.19",
|
||||
"@0x/contracts-staking": "^2.0.26",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-multisig": "^4.1.20",
|
||||
"@0x/contracts-staking": "^2.0.27",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
@@ -89,11 +89,11 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc1155": "^2.1.18",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc1155": "^2.1.19",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "6.2.14",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "6.2.13",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v6.2.14 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v6.2.13 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-extensions",
|
||||
"version": "6.2.13",
|
||||
"version": "6.2.14",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,16 +53,16 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
@@ -91,7 +91,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-integrations",
|
||||
"version": "2.7.16",
|
||||
"version": "2.7.18",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
@@ -53,21 +53,21 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contracts-broker": "^1.1.18",
|
||||
"@0x/contracts-coordinator": "^3.1.19",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-extensions": "^6.2.13",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/contracts-broker": "^1.1.19",
|
||||
"@0x/contracts-coordinator": "^3.1.20",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.20",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-extensions": "^6.2.14",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/coordinator-server": "^1.0.5",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/migrations": "^6.5.5",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/protocol-utils": "^1.0.1",
|
||||
"@0x/migrations": "^6.5.7",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/protocol-utils": "^1.1.1",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
@@ -93,17 +93,17 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/asset-swapper": "^5.5.0",
|
||||
"@0x/asset-swapper": "^5.5.2",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-erc1155": "^2.1.18",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-multisig": "^4.1.19",
|
||||
"@0x/contracts-staking": "^2.0.26",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-zero-ex": "^0.13.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-erc1155": "^2.1.19",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-multisig": "^4.1.20",
|
||||
"@0x/contracts-staking": "^2.0.27",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-zero-ex": "^0.15.0",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "4.1.20",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "4.1.19",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.1.20 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.1.19 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-multisig",
|
||||
"version": "4.1.19",
|
||||
"version": "4.1.20",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -50,11 +50,11 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "2.0.27",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "2.0.26",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v2.0.27 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v2.0.26 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-staking",
|
||||
"version": "2.0.26",
|
||||
"version": "2.0.27",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -54,14 +54,14 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
@@ -88,7 +88,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"ethereum-types": "^3.4.0",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "5.3.16",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "5.3.15",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.3.16 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.3.15 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-test-utils",
|
||||
"version": "5.3.15",
|
||||
"version": "5.3.16",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -44,10 +44,10 @@
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-coverage": "^4.0.24",
|
||||
"@0x/sol-profiler": "^4.1.14",
|
||||
"@0x/sol-trace": "^3.0.24",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "4.6.4",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "4.6.3",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.6.4 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.6.3 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-utils",
|
||||
"version": "4.6.3",
|
||||
"version": "4.6.4",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,9 +52,9 @@
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
|
@@ -1,4 +1,28 @@
|
||||
[
|
||||
{
|
||||
"version": "0.15.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Add MixinBancor to BridgeAdapter",
|
||||
"pr": 91
|
||||
},
|
||||
{
|
||||
"note": "Add MixinCoFiX to BridgeAdapter",
|
||||
"pr": 92
|
||||
}
|
||||
],
|
||||
"timestamp": 1608245516
|
||||
},
|
||||
{
|
||||
"version": "0.14.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Use the `MetaTransaction` class from `@0x/protocol-utils` in tests.",
|
||||
"pr": 90
|
||||
}
|
||||
],
|
||||
"timestamp": 1608149382
|
||||
},
|
||||
{
|
||||
"version": "0.13.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,15 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v0.15.0 - _December 17, 2020_
|
||||
|
||||
* Add MixinBancor to BridgeAdapter (#91)
|
||||
* Add MixinCoFiX to BridgeAdapter (#92)
|
||||
|
||||
## v0.14.0 - _December 16, 2020_
|
||||
|
||||
* Use the `MetaTransaction` class from `@0x/protocol-utils` in tests. (#90)
|
||||
|
||||
## v0.13.0 - _December 16, 2020_
|
||||
|
||||
* Address audit feedback in UniswapFeature (#82)
|
||||
|
@@ -21,6 +21,8 @@ pragma experimental ABIEncoderV2;
|
||||
|
||||
import "./mixins/MixinAdapterAddresses.sol";
|
||||
import "./mixins/MixinBalancer.sol";
|
||||
import "./mixins/MixinBancor.sol";
|
||||
import "./mixins/MixinCoFiX.sol";
|
||||
import "./mixins/MixinCurve.sol";
|
||||
import "./mixins/MixinCryptoCom.sol";
|
||||
import "./mixins/MixinDodo.sol";
|
||||
@@ -37,6 +39,8 @@ import "./mixins/MixinZeroExBridge.sol";
|
||||
contract BridgeAdapter is
|
||||
MixinAdapterAddresses,
|
||||
MixinBalancer,
|
||||
MixinBancor,
|
||||
MixinCoFiX,
|
||||
MixinCurve,
|
||||
MixinCryptoCom,
|
||||
MixinDodo,
|
||||
@@ -51,7 +55,25 @@ contract BridgeAdapter is
|
||||
MixinZeroExBridge
|
||||
{
|
||||
|
||||
/// @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
|
||||
);
|
||||
|
||||
address private immutable BALANCER_BRIDGE_ADDRESS;
|
||||
address private immutable BANCOR_BRIDGE_ADDRESS;
|
||||
address private immutable COFIX_BRIDGE_ADDRESS;
|
||||
address private immutable CREAM_BRIDGE_ADDRESS;
|
||||
address private immutable CURVE_BRIDGE_ADDRESS;
|
||||
address private immutable CRYPTO_COM_BRIDGE_ADDRESS;
|
||||
@@ -70,6 +92,8 @@ contract BridgeAdapter is
|
||||
constructor(AdapterAddresses memory addresses)
|
||||
public
|
||||
MixinBalancer()
|
||||
MixinBancor(addresses)
|
||||
MixinCoFiX()
|
||||
MixinCurve()
|
||||
MixinCryptoCom(addresses)
|
||||
MixinDodo(addresses)
|
||||
@@ -84,6 +108,8 @@ contract BridgeAdapter is
|
||||
MixinZeroExBridge()
|
||||
{
|
||||
BALANCER_BRIDGE_ADDRESS = addresses.balancerBridge;
|
||||
BANCOR_BRIDGE_ADDRESS = addresses.bancorBridge;
|
||||
COFIX_BRIDGE_ADDRESS = addresses.cofixBridge;
|
||||
CURVE_BRIDGE_ADDRESS = addresses.curveBridge;
|
||||
CRYPTO_COM_BRIDGE_ADDRESS = addresses.cryptoComBridge;
|
||||
KYBER_BRIDGE_ADDRESS = addresses.kyberBridge;
|
||||
@@ -196,6 +222,18 @@ contract BridgeAdapter is
|
||||
sellAmount,
|
||||
bridgeData
|
||||
);
|
||||
} else if (bridgeAddress == BANCOR_BRIDGE_ADDRESS) {
|
||||
boughtAmount = _tradeBancor(
|
||||
buyToken,
|
||||
sellAmount,
|
||||
bridgeData
|
||||
);
|
||||
} else if (bridgeAddress == COFIX_BRIDGE_ADDRESS) {
|
||||
boughtAmount = _tradeCoFiX(
|
||||
buyToken,
|
||||
sellAmount,
|
||||
bridgeData
|
||||
);
|
||||
} else {
|
||||
boughtAmount = _tradeZeroExBridge(
|
||||
bridgeAddress,
|
||||
@@ -204,9 +242,6 @@ contract BridgeAdapter is
|
||||
sellAmount,
|
||||
bridgeData
|
||||
);
|
||||
// Old bridge contracts should emit an `ERC20BridgeTransfer` themselves,
|
||||
// otherwise an event will be emitted from `_tradeZeroExBridge`.
|
||||
return boughtAmount;
|
||||
}
|
||||
|
||||
emit ERC20BridgeTransfer(
|
||||
|
@@ -24,6 +24,8 @@ contract MixinAdapterAddresses
|
||||
struct AdapterAddresses {
|
||||
// Bridges
|
||||
address balancerBridge;
|
||||
address bancorBridge;
|
||||
address cofixBridge;
|
||||
address creamBridge;
|
||||
address curveBridge;
|
||||
address cryptoComBridge;
|
||||
|
@@ -0,0 +1,111 @@
|
||||
|
||||
/*
|
||||
|
||||
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/LibERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol";
|
||||
import "./MixinAdapterAddresses.sol";
|
||||
|
||||
|
||||
interface IBancorNetwork {
|
||||
function convertByPath(
|
||||
address[] calldata _path,
|
||||
uint256 _amount,
|
||||
uint256 _minReturn,
|
||||
address _beneficiary,
|
||||
address _affiliateAccount,
|
||||
uint256 _affiliateFee
|
||||
)
|
||||
external
|
||||
payable
|
||||
returns (uint256);
|
||||
}
|
||||
|
||||
|
||||
contract MixinBancor is
|
||||
MixinAdapterAddresses
|
||||
{
|
||||
/// @dev Bancor ETH pseudo-address.
|
||||
address constant public BANCOR_ETH_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE;
|
||||
IEtherTokenV06 private immutable WETH;
|
||||
|
||||
constructor(AdapterAddresses memory addresses)
|
||||
public
|
||||
{
|
||||
WETH = IEtherTokenV06(addresses.weth);
|
||||
}
|
||||
|
||||
function _tradeBancor(
|
||||
IERC20TokenV06 buyToken,
|
||||
uint256 sellAmount,
|
||||
bytes memory bridgeData
|
||||
)
|
||||
internal
|
||||
returns (uint256 boughtAmount)
|
||||
{
|
||||
// Decode the bridge data.
|
||||
(
|
||||
address[] memory path,
|
||||
address bancorNetworkAddress
|
||||
// solhint-disable indent
|
||||
) = abi.decode(bridgeData, (address[], address));
|
||||
// solhint-enable indent
|
||||
|
||||
require(path.length >= 2, "MixinBancor/PATH_LENGTH_MUST_BE_AT_LEAST_TWO");
|
||||
require(
|
||||
path[path.length - 1] == address(buyToken) ||
|
||||
(path[path.length - 1] == BANCOR_ETH_ADDRESS && address(buyToken) == address(WETH)),
|
||||
"MixinBancor/LAST_ELEMENT_OF_PATH_MUST_MATCH_OUTPUT_TOKEN"
|
||||
);
|
||||
|
||||
uint256 payableAmount = 0;
|
||||
// If it's ETH in the path then withdraw from WETH
|
||||
// The Bancor path will have ETH as the 0xeee address
|
||||
// Bancor expects to be paid in ETH not WETH
|
||||
if (path[0] == BANCOR_ETH_ADDRESS) {
|
||||
WETH.withdraw(sellAmount);
|
||||
payableAmount = sellAmount;
|
||||
} else {
|
||||
// Grant an allowance to the Bancor Network.
|
||||
LibERC20TokenV06.approveIfBelow(
|
||||
IERC20TokenV06(path[0]),
|
||||
bancorNetworkAddress,
|
||||
sellAmount
|
||||
);
|
||||
}
|
||||
|
||||
// Convert the tokens
|
||||
boughtAmount = IBancorNetwork(bancorNetworkAddress).convertByPath{value: payableAmount}(
|
||||
path, // path originating with source token and terminating in destination token
|
||||
sellAmount, // amount of source token to trade
|
||||
1, // minimum amount of destination token expected to receive
|
||||
address(this), // beneficiary
|
||||
address(0), // affiliateAccount; no fee paid
|
||||
0 // affiliateFee; no fee paid
|
||||
);
|
||||
if (path[path.length - 1] == BANCOR_ETH_ADDRESS) {
|
||||
WETH.deposit{value: boughtAmount}();
|
||||
}
|
||||
|
||||
return boughtAmount;
|
||||
}
|
||||
}
|
@@ -0,0 +1,86 @@
|
||||
/*
|
||||
|
||||
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/LibERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IEtherTokenV06.sol";
|
||||
import "./MixinAdapterAddresses.sol";
|
||||
|
||||
|
||||
interface ICoFiXRouter {
|
||||
// msg.value = fee
|
||||
function swapExactTokensForETH(
|
||||
address token,
|
||||
uint amountIn,
|
||||
uint amountOutMin,
|
||||
address to,
|
||||
address rewardTo,
|
||||
uint deadline
|
||||
) external payable returns (uint _amountIn, uint _amountOut);
|
||||
|
||||
// msg.value = amountIn + fee
|
||||
function swapExactETHForTokens(
|
||||
address token,
|
||||
uint amountIn,
|
||||
uint amountOutMin,
|
||||
address to,
|
||||
address rewardTo,
|
||||
uint deadline
|
||||
) external payable returns (uint _amountIn, uint _amountOut);
|
||||
}
|
||||
|
||||
interface ICoFiXPair {
|
||||
|
||||
function swapWithExact(address outToken, address to)
|
||||
external
|
||||
payable
|
||||
returns (uint amountIn, uint amountOut, uint oracleFeeChange, uint256[4] memory tradeInfo);
|
||||
}
|
||||
|
||||
contract MixinCoFiX is
|
||||
MixinAdapterAddresses
|
||||
{
|
||||
using LibERC20TokenV06 for IERC20TokenV06;
|
||||
|
||||
function _tradeCoFiX(
|
||||
IERC20TokenV06 buyToken,
|
||||
uint256 sellAmount,
|
||||
bytes memory bridgeData
|
||||
)
|
||||
internal
|
||||
returns (uint256 boughtAmount)
|
||||
{
|
||||
(address fromTokenAddress, uint256 fee, address pool) = abi.decode(bridgeData, (address, uint256, address));
|
||||
// Transfer tokens into the pool
|
||||
LibERC20TokenV06.compatTransfer(
|
||||
IERC20TokenV06(fromTokenAddress),
|
||||
pool,
|
||||
sellAmount);
|
||||
// Call the swap exact with the tokens now in the pool
|
||||
// pay the NEST Oracle fee with ETH
|
||||
(/* In */, boughtAmount, , ) = ICoFiXPair(pool).swapWithExact{value: fee}(
|
||||
address(buyToken),
|
||||
address(this)
|
||||
);
|
||||
|
||||
return boughtAmount;
|
||||
}
|
||||
}
|
@@ -29,22 +29,6 @@ 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,
|
||||
@@ -67,13 +51,5 @@ contract MixinZeroExBridge {
|
||||
1, // minBuyAmount
|
||||
bridgeData
|
||||
);
|
||||
emit ERC20BridgeTransfer(
|
||||
sellToken,
|
||||
buyToken,
|
||||
sellAmount,
|
||||
boughtAmount,
|
||||
bridgeAddress,
|
||||
address(this)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-zero-ex",
|
||||
"version": "0.13.0",
|
||||
"version": "0.15.0",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -43,7 +43,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,ILiquidityProviderFeature,NativeOrdersFeature,INativeOrdersFeature,FeeCollectorController,FeeCollector",
|
||||
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
|
||||
"abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FeeCollector|FeeCollectorController|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinProtocolFees|FixinReentrancyGuard|FixinTokenSpender|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProvider|ILiquidityProviderFeature|ILiquidityProviderSandbox|IMetaTransactionsFeature|INativeOrdersFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|IStaking|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibFeeCollector|LibLiquidityProviderRichErrors|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibNativeOrder|LibNativeOrdersRichErrors|LibNativeOrdersStorage|LibOrderHash|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LiquidityProviderSandbox|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinCryptoCom|MixinCurve|MixinDodo|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinSushiswap|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|NativeOrdersFeature|OwnableFeature|PayTakerTransformer|PermissionlessTransformerDeployer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFeeCollectorController|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFixinProtocolFees|TestFixinTokenSpender|TestFullMigration|TestInitialMigration|TestLibNativeOrder|TestLibSignature|TestLiquidityProvider|TestMetaTransactionsNativeOrdersFeature|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestNativeOrdersFeature|TestPermissionlessTransformerDeployerSuicidal|TestPermissionlessTransformerDeployerTransformer|TestRfqOriginRegistration|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx|ZeroExOptimized).json"
|
||||
"abis": "./test/generated-artifacts/@(AffiliateFeeTransformer|AllowanceTarget|BootstrapFeature|BridgeAdapter|FeeCollector|FeeCollectorController|FillQuoteTransformer|FixinCommon|FixinEIP712|FixinProtocolFees|FixinReentrancyGuard|FixinTokenSpender|FlashWallet|FullMigration|IAllowanceTarget|IBootstrapFeature|IBridgeAdapter|IERC20Bridge|IERC20Transformer|IExchange|IFeature|IFlashWallet|IGasToken|ILiquidityProvider|ILiquidityProviderFeature|ILiquidityProviderSandbox|IMetaTransactionsFeature|INativeOrdersFeature|IOwnableFeature|ISignatureValidatorFeature|ISimpleFunctionRegistryFeature|IStaking|ITestSimpleFunctionRegistryFeature|ITokenSpenderFeature|ITransformERC20Feature|IUniswapFeature|IZeroEx|InitialMigration|LibBootstrap|LibCommonRichErrors|LibERC20Transformer|LibFeeCollector|LibLiquidityProviderRichErrors|LibMetaTransactionsRichErrors|LibMetaTransactionsStorage|LibMigrate|LibNativeOrder|LibNativeOrdersRichErrors|LibNativeOrdersStorage|LibOrderHash|LibOwnableRichErrors|LibOwnableStorage|LibProxyRichErrors|LibProxyStorage|LibReentrancyGuardStorage|LibSignature|LibSignatureRichErrors|LibSimpleFunctionRegistryRichErrors|LibSimpleFunctionRegistryStorage|LibSpenderRichErrors|LibStorage|LibTokenSpenderStorage|LibTransformERC20RichErrors|LibTransformERC20Storage|LibWalletRichErrors|LiquidityProviderFeature|LiquidityProviderSandbox|LogMetadataTransformer|MetaTransactionsFeature|MixinAdapterAddresses|MixinBalancer|MixinBancor|MixinCoFiX|MixinCryptoCom|MixinCurve|MixinDodo|MixinKyber|MixinMStable|MixinMooniswap|MixinOasis|MixinShell|MixinSushiswap|MixinUniswap|MixinUniswapV2|MixinZeroExBridge|NativeOrdersFeature|OwnableFeature|PayTakerTransformer|PermissionlessTransformerDeployer|SignatureValidatorFeature|SimpleFunctionRegistryFeature|TestBridge|TestCallTarget|TestDelegateCaller|TestFeeCollectorController|TestFillQuoteTransformerBridge|TestFillQuoteTransformerExchange|TestFillQuoteTransformerHost|TestFixinProtocolFees|TestFixinTokenSpender|TestFullMigration|TestInitialMigration|TestLibNativeOrder|TestLibSignature|TestLiquidityProvider|TestMetaTransactionsNativeOrdersFeature|TestMetaTransactionsTransformERC20Feature|TestMigrator|TestMintTokenERC20Transformer|TestMintableERC20Token|TestNativeOrdersFeature|TestPermissionlessTransformerDeployerSuicidal|TestPermissionlessTransformerDeployerTransformer|TestRfqOriginRegistration|TestSimpleFunctionRegistryFeatureImpl1|TestSimpleFunctionRegistryFeatureImpl2|TestStaking|TestTokenSpender|TestTokenSpenderERC20Token|TestTransformERC20|TestTransformerBase|TestTransformerDeployerTransformer|TestTransformerHost|TestWeth|TestWethTransformerHost|TestZeroExFeature|TokenSpenderFeature|TransformERC20Feature|Transformer|TransformerDeployer|UniswapFeature|WethTransformer|ZeroEx|ZeroExOptimized).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
@@ -56,11 +56,12 @@
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
@@ -82,8 +83,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/protocol-utils": "^1.0.1",
|
||||
"@0x/protocol-utils": "^1.1.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
|
@@ -236,13 +236,16 @@ async function functionHistoryAsync(proxyFunctions: ProxyFunctionEntity[]): Prom
|
||||
name: 'fnSelector',
|
||||
message: 'Enter the selector or name of the function:',
|
||||
choices: [
|
||||
..._.flatMap(Object.entries(selectorToSignature), ([selector, signature]) => [
|
||||
{ title: selector, value: selector, description: signature },
|
||||
{ title: signature, value: selector, description: selector },
|
||||
]),
|
||||
...proxyFunctions
|
||||
.filter(fn => !Object.keys(selectorToSignature).includes(fn.id))
|
||||
.map(fn => ({ title: fn.id, value: fn.id, description: '(function signature not found)' })),
|
||||
...proxyFunctions.map(fn => ({
|
||||
title: fn.id,
|
||||
value: fn.id,
|
||||
description: selectorToSignature[fn.id] || '(function signature not found)',
|
||||
})),
|
||||
...proxyFunctions.map(fn => ({
|
||||
title: selectorToSignature[fn.id] || '(function signature not found)',
|
||||
value: fn.id,
|
||||
description: fn.id,
|
||||
})),
|
||||
],
|
||||
});
|
||||
const functionEntity = proxyFunctions.find(fn => fn.id === fnSelector);
|
||||
@@ -312,13 +315,17 @@ async function generateRollbackAsync(proxyFunctions: ProxyFunctionEntity[]): Pro
|
||||
value: constants.NULL_ADDRESS,
|
||||
description: 'Rolls back to address(0)',
|
||||
},
|
||||
{
|
||||
title: 'PREVIOUS',
|
||||
value: previousImpl,
|
||||
description: `${previousImpl} (${timestampToUTC(
|
||||
_.findLast(fullHistory, update => update.impl === previousImpl)!.timestamp,
|
||||
)})`,
|
||||
},
|
||||
...(previousImpl !== constants.NULL_ADDRESS
|
||||
? [
|
||||
{
|
||||
title: 'PREVIOUS',
|
||||
value: previousImpl,
|
||||
description: `${previousImpl} (${timestampToUTC(
|
||||
_.findLast(fullHistory, update => update.impl === previousImpl)!.timestamp,
|
||||
)})`,
|
||||
},
|
||||
]
|
||||
: []),
|
||||
...[...new Set(rollbackHistory)]
|
||||
.filter(impl => impl !== constants.NULL_ADDRESS)
|
||||
.map(impl => ({
|
||||
|
@@ -76,6 +76,8 @@ import * as LogMetadataTransformer from '../test/generated-artifacts/LogMetadata
|
||||
import * as MetaTransactionsFeature from '../test/generated-artifacts/MetaTransactionsFeature.json';
|
||||
import * as MixinAdapterAddresses from '../test/generated-artifacts/MixinAdapterAddresses.json';
|
||||
import * as MixinBalancer from '../test/generated-artifacts/MixinBalancer.json';
|
||||
import * as MixinBancor from '../test/generated-artifacts/MixinBancor.json';
|
||||
import * as MixinCoFiX from '../test/generated-artifacts/MixinCoFiX.json';
|
||||
import * as MixinCryptoCom from '../test/generated-artifacts/MixinCryptoCom.json';
|
||||
import * as MixinCurve from '../test/generated-artifacts/MixinCurve.json';
|
||||
import * as MixinDodo from '../test/generated-artifacts/MixinDodo.json';
|
||||
@@ -216,6 +218,8 @@ export const artifacts = {
|
||||
IBridgeAdapter: IBridgeAdapter as ContractArtifact,
|
||||
MixinAdapterAddresses: MixinAdapterAddresses as ContractArtifact,
|
||||
MixinBalancer: MixinBalancer as ContractArtifact,
|
||||
MixinBancor: MixinBancor as ContractArtifact,
|
||||
MixinCoFiX: MixinCoFiX as ContractArtifact,
|
||||
MixinCryptoCom: MixinCryptoCom as ContractArtifact,
|
||||
MixinCurve: MixinCurve as ContractArtifact,
|
||||
MixinDodo: MixinDodo as ContractArtifact,
|
||||
|
@@ -6,9 +6,7 @@ import {
|
||||
randomAddress,
|
||||
verifyEventsFromLogs,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { getExchangeProxyMetaTransactionHash, signatureUtils } from '@0x/order-utils';
|
||||
import { Signature } from '@0x/protocol-utils';
|
||||
import { ExchangeProxyMetaTransaction } from '@0x/types';
|
||||
import { MetaTransaction, MetaTransactionFields } from '@0x/protocol-utils';
|
||||
import { BigNumber, hexUtils, StringRevertError, ZeroExRevertErrors } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
@@ -31,6 +29,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
let owner: string;
|
||||
let maker: string;
|
||||
let sender: string;
|
||||
let notSigner: string;
|
||||
let signers: string[];
|
||||
let zeroEx: IZeroExContract;
|
||||
let feature: MetaTransactionsFeatureContract;
|
||||
@@ -45,7 +44,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
const REENTRANCY_FLAG_MTX = 0x1;
|
||||
|
||||
before(async () => {
|
||||
[owner, maker, sender, ...signers] = await env.getAccountAddressesAsync();
|
||||
[owner, maker, sender, notSigner, ...signers] = await env.getAccountAddressesAsync();
|
||||
transformERC20Feature = await TestMetaTransactionsTransformERC20FeatureContract.deployFrom0xArtifactAsync(
|
||||
artifacts.TestMetaTransactionsTransformERC20Feature,
|
||||
env.provider,
|
||||
@@ -83,19 +82,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
);
|
||||
});
|
||||
|
||||
function sigstruct(signature: string): Signature {
|
||||
return {
|
||||
v: parseInt(hexUtils.slice(signature, 0, 1), 16),
|
||||
signatureType: parseInt(hexUtils.slice(signature, 65, 66), 16),
|
||||
r: hexUtils.slice(signature, 1, 33),
|
||||
s: hexUtils.slice(signature, 33, 65),
|
||||
};
|
||||
}
|
||||
|
||||
function getRandomMetaTransaction(
|
||||
fields: Partial<ExchangeProxyMetaTransaction> = {},
|
||||
): ExchangeProxyMetaTransaction {
|
||||
return {
|
||||
function getRandomMetaTransaction(fields: Partial<MetaTransactionFields> = {}): MetaTransaction {
|
||||
return new MetaTransaction({
|
||||
signer: _.sampleSize(signers)[0],
|
||||
sender,
|
||||
minGasPrice: getRandomInteger('2', '1e9'),
|
||||
@@ -106,28 +94,16 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
value: getRandomInteger(1, '1e18'),
|
||||
feeToken: feeToken.address,
|
||||
feeAmount: getRandomInteger(1, MAX_FEE_AMOUNT),
|
||||
domain: {
|
||||
chainId: 1, // Ganache's `chainid` opcode is hardcoded as 1
|
||||
verifyingContract: zeroEx.address,
|
||||
},
|
||||
chainId: 1, // Ganache's `chainid` opcode is hardcoded as 1
|
||||
verifyingContract: zeroEx.address,
|
||||
...fields,
|
||||
};
|
||||
}
|
||||
|
||||
async function signMetaTransactionAsync(mtx: ExchangeProxyMetaTransaction, signer?: string): Promise<Signature> {
|
||||
return sigstruct(
|
||||
await signatureUtils.ecSignHashAsync(
|
||||
env.provider,
|
||||
getExchangeProxyMetaTransactionHash(mtx),
|
||||
signer || mtx.signer,
|
||||
),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
describe('getMetaTransactionHash()', () => {
|
||||
it('generates the correct hash', async () => {
|
||||
const mtx = getRandomMetaTransaction();
|
||||
const expected = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const expected = mtx.getHash();
|
||||
const actual = await feature.getMetaTransactionHash(mtx).callAsync();
|
||||
expect(actual).to.eq(expected);
|
||||
});
|
||||
@@ -163,7 +139,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
const mtx = getRandomMetaTransaction({
|
||||
callData: nativeOrdersFeature.fillLimitOrder(order, sig, fillAmount).getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -198,7 +174,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
callData: nativeOrdersFeature.fillRfqOrder(order, sig, fillAmount).getABIEncodedTransactionData(),
|
||||
value: ZERO_AMOUNT,
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: 0,
|
||||
@@ -237,7 +213,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -275,7 +251,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData();
|
||||
const mtx = getRandomMetaTransaction({ callData });
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -315,7 +291,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -340,7 +316,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -363,8 +339,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -393,8 +369,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
const mtx = getRandomMetaTransaction({
|
||||
callData: transformERC20Feature.createTransformWallet().getABIEncodedTransactionData(),
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -421,8 +397,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -439,8 +415,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
|
||||
it('fails if not enough ETH provided', async () => {
|
||||
const mtx = getRandomMetaTransaction();
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value.minus(1),
|
||||
@@ -457,8 +433,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
|
||||
it('fails if gas price too low', async () => {
|
||||
const mtx = getRandomMetaTransaction();
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice.minus(1),
|
||||
value: mtx.value,
|
||||
@@ -476,8 +452,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
|
||||
it('fails if gas price too high', async () => {
|
||||
const mtx = getRandomMetaTransaction();
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice.plus(1),
|
||||
value: mtx.value,
|
||||
@@ -497,8 +473,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
const mtx = getRandomMetaTransaction({
|
||||
expirationTimeSeconds: new BigNumber(Math.floor(_.now() / 1000 - 60)),
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -518,8 +494,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
const mtx = getRandomMetaTransaction({
|
||||
sender: requiredSender,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -536,8 +512,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
|
||||
it('fails if signature is wrong', async () => {
|
||||
const mtx = getRandomMetaTransaction({ signer: signers[0] });
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx, signers[1]);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.clone({ signer: notSigner }).getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -567,8 +543,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -600,8 +576,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_BATCH_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -633,8 +609,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -666,8 +642,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_BATCH_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -703,7 +679,9 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
});
|
||||
const signatures = await Promise.all(mtxs.map(async mtx => signMetaTransactionAsync(mtx)));
|
||||
const signatures = await Promise.all(
|
||||
mtxs.map(async mtx => mtx.getSignatureWithProviderAsync(env.provider)),
|
||||
);
|
||||
const callOpts = {
|
||||
gasPrice: BigNumber.max(...mtxs.map(mtx => mtx.minGasPrice)),
|
||||
value: BigNumber.sum(...mtxs.map(mtx => mtx.value)),
|
||||
@@ -728,9 +706,9 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
})();
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const mtxs = _.times(2, () => mtx);
|
||||
const signatures = await Promise.all(mtxs.map(async m => signMetaTransactionAsync(m)));
|
||||
const signatures = await Promise.all(mtxs.map(async m => m.getSignatureWithProviderAsync(env.provider)));
|
||||
const callOpts = {
|
||||
gasPrice: BigNumber.max(...mtxs.map(m => m.minGasPrice)),
|
||||
value: BigNumber.sum(...mtxs.map(m => m.value)),
|
||||
@@ -756,8 +734,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -786,8 +764,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -819,8 +797,8 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
.getABIEncodedTransactionData(),
|
||||
value: TRANSFORM_ERC20_BATCH_REENTER_VALUE,
|
||||
});
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.maxGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -859,7 +837,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
@@ -873,7 +851,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
describe('getMetaTransactionHashExecutedBlock()', () => {
|
||||
it('returns zero for an unexecuted mtx', async () => {
|
||||
const mtx = getRandomMetaTransaction();
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const block = await feature.getMetaTransactionHashExecutedBlock(mtxHash).callAsync();
|
||||
expect(block).to.bignumber.eq(0);
|
||||
});
|
||||
@@ -891,13 +869,13 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
)
|
||||
.getABIEncodedTransactionData(),
|
||||
});
|
||||
const signature = await signMetaTransactionAsync(mtx);
|
||||
const signature = await mtx.getSignatureWithProviderAsync(env.provider);
|
||||
const callOpts = {
|
||||
gasPrice: mtx.minGasPrice,
|
||||
value: mtx.value,
|
||||
};
|
||||
const receipt = await feature.executeMetaTransaction(mtx, signature).awaitTransactionSuccessAsync(callOpts);
|
||||
const mtxHash = getExchangeProxyMetaTransactionHash(mtx);
|
||||
const mtxHash = mtx.getHash();
|
||||
const block = await feature.getMetaTransactionHashExecutedBlock(mtxHash).callAsync();
|
||||
expect(block).to.bignumber.eq(receipt.blockNumber);
|
||||
});
|
||||
|
@@ -78,6 +78,8 @@ blockchainTests.resets('FillQuoteTransformer', env => {
|
||||
dodoHelper: NULL_ADDRESS,
|
||||
snowSwapBridge: NULL_ADDRESS,
|
||||
cryptoComBridge: NULL_ADDRESS,
|
||||
bancorBridge: NULL_ADDRESS,
|
||||
cofixBridge: NULL_ADDRESS,
|
||||
},
|
||||
);
|
||||
transformer = await FillQuoteTransformerContract.deployFrom0xArtifactAsync(
|
||||
|
@@ -74,6 +74,8 @@ export * from '../test/generated-wrappers/log_metadata_transformer';
|
||||
export * from '../test/generated-wrappers/meta_transactions_feature';
|
||||
export * from '../test/generated-wrappers/mixin_adapter_addresses';
|
||||
export * from '../test/generated-wrappers/mixin_balancer';
|
||||
export * from '../test/generated-wrappers/mixin_bancor';
|
||||
export * from '../test/generated-wrappers/mixin_co_fi_x';
|
||||
export * from '../test/generated-wrappers/mixin_crypto_com';
|
||||
export * from '../test/generated-wrappers/mixin_curve';
|
||||
export * from '../test/generated-wrappers/mixin_dodo';
|
||||
|
@@ -103,6 +103,8 @@
|
||||
"test/generated-artifacts/MetaTransactionsFeature.json",
|
||||
"test/generated-artifacts/MixinAdapterAddresses.json",
|
||||
"test/generated-artifacts/MixinBalancer.json",
|
||||
"test/generated-artifacts/MixinBancor.json",
|
||||
"test/generated-artifacts/MixinCoFiX.json",
|
||||
"test/generated-artifacts/MixinCryptoCom.json",
|
||||
"test/generated-artifacts/MixinCurve.json",
|
||||
"test/generated-artifacts/MixinDodo.json",
|
||||
|
99
docs/additional/emergency.rst
Normal file
99
docs/additional/emergency.rst
Normal file
File diff suppressed because one or more lines are too long
@@ -65,6 +65,7 @@ Chat with our team privately on `Discord <https://discord.com/invite/d3FTX3M>`_
|
||||
additional/contributing.rst
|
||||
additional/exceptional_erc20s.rst
|
||||
additional/releases.rst
|
||||
additional/emergency.rst
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "5.5.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608149382,
|
||||
"version": "5.5.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "5.5.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.5.2 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.5.1 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.5.0 - _December 16, 2020_
|
||||
|
||||
* Bancor now supported in all pairs (#88)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/asset-swapper",
|
||||
"version": "5.5.0",
|
||||
"version": "5.5.2",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -59,11 +59,11 @@
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/orderbook": "0xProject/gitpkg-registry#0x-orderbook-v2.2.7-e10a81023",
|
||||
"@0x/quote-server": "^3.1.0",
|
||||
"@0x/types": "^3.3.1",
|
||||
@@ -87,16 +87,16 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-exchange-libs": "^4.3.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-exchange-libs": "^4.3.19",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-zero-ex": "^0.13.0",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/contracts-zero-ex": "^0.15.0",
|
||||
"@0x/mesh-rpc-client": "^9.4.2",
|
||||
"@0x/migrations": "^6.5.5",
|
||||
"@0x/migrations": "^6.5.7",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
|
||||
import { ChainId, getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
|
||||
import { DevUtilsContract } from '@0x/contract-wrappers';
|
||||
import { schemas } from '@0x/json-schemas';
|
||||
import { assetDataUtils, SignedOrder } from '@0x/order-utils';
|
||||
@@ -26,6 +26,7 @@ import {
|
||||
import { assert } from './utils/assert';
|
||||
import { calculateLiquidity } from './utils/calculate_liquidity';
|
||||
import { MarketOperationUtils } from './utils/market_operation_utils';
|
||||
import { BancorService } from './utils/market_operation_utils/bancor_service';
|
||||
import { createDummyOrderForSampler } from './utils/market_operation_utils/orders';
|
||||
import { DexOrderSampler } from './utils/market_operation_utils/sampler';
|
||||
import { SourceFilters } from './utils/market_operation_utils/source_filters';
|
||||
@@ -208,15 +209,18 @@ export class SwapQuoter {
|
||||
gas: samplerGasLimit,
|
||||
},
|
||||
);
|
||||
|
||||
this._marketOperationUtils = new MarketOperationUtils(
|
||||
new DexOrderSampler(
|
||||
samplerContract,
|
||||
samplerOverrides,
|
||||
provider,
|
||||
undefined, // balancer pool cache
|
||||
undefined, // cream pool cache
|
||||
tokenAdjacencyGraph,
|
||||
liquidityProviderRegistry,
|
||||
this.chainId === ChainId.Mainnet // Enable Bancor only on Mainnet
|
||||
? async () => BancorService.createAsync(provider)
|
||||
: async () => undefined,
|
||||
),
|
||||
this._contractAddresses,
|
||||
{
|
||||
|
@@ -1,10 +1,10 @@
|
||||
import { SupportedProvider } from '@0x/dev-utils';
|
||||
import { BigNumber, NULL_BYTES } from '@0x/utils';
|
||||
|
||||
import { SamplerOverrides } from '../../types';
|
||||
import { ERC20BridgeSamplerContract } from '../../wrappers';
|
||||
|
||||
import { BalancerPoolsCache } from './balancer_utils';
|
||||
import { BancorService } from './bancor_service';
|
||||
import { CreamPoolsCache } from './cream_utils';
|
||||
import { SamplerOperations } from './sampler_operations';
|
||||
import { BatchedOperation, LiquidityProviderRegistry, TokenAdjacencyGraph } from './types';
|
||||
@@ -35,19 +35,19 @@ export class DexOrderSampler extends SamplerOperations {
|
||||
constructor(
|
||||
_samplerContract: ERC20BridgeSamplerContract,
|
||||
private readonly _samplerOverrides?: SamplerOverrides,
|
||||
provider?: SupportedProvider,
|
||||
balancerPoolsCache?: BalancerPoolsCache,
|
||||
creamPoolsCache?: CreamPoolsCache,
|
||||
tokenAdjacencyGraph?: TokenAdjacencyGraph,
|
||||
liquidityProviderRegistry?: LiquidityProviderRegistry,
|
||||
bancorServiceFn: () => Promise<BancorService | undefined> = async () => undefined,
|
||||
) {
|
||||
super(
|
||||
_samplerContract,
|
||||
provider,
|
||||
balancerPoolsCache,
|
||||
creamPoolsCache,
|
||||
tokenAdjacencyGraph,
|
||||
liquidityProviderRegistry,
|
||||
bancorServiceFn,
|
||||
);
|
||||
}
|
||||
|
||||
|
@@ -1,4 +1,3 @@
|
||||
import { SupportedProvider } from '@0x/dev-utils';
|
||||
import { SignedOrder } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
@@ -81,23 +80,16 @@ export class SamplerOperations {
|
||||
|
||||
constructor(
|
||||
protected readonly _samplerContract: ERC20BridgeSamplerContract,
|
||||
public readonly provider?: SupportedProvider,
|
||||
public readonly balancerPoolsCache: BalancerPoolsCache = new BalancerPoolsCache(),
|
||||
public readonly creamPoolsCache: CreamPoolsCache = new CreamPoolsCache(),
|
||||
protected readonly tokenAdjacencyGraph: TokenAdjacencyGraph = { default: [] },
|
||||
public readonly liquidityProviderRegistry: LiquidityProviderRegistry = LIQUIDITY_PROVIDER_REGISTRY,
|
||||
bancorServiceFn: () => Promise<BancorService | undefined> = async () => undefined,
|
||||
) {
|
||||
// Initialize the Bancor service, fetching paths in the background
|
||||
this.initBancorServiceAsync().catch(/* do nothing */);
|
||||
}
|
||||
|
||||
public async initBancorServiceAsync(): Promise<void> {
|
||||
if (this.provider === undefined) {
|
||||
return;
|
||||
}
|
||||
if (this._bancorService === undefined) {
|
||||
this._bancorService = await BancorService.createAsync(this.provider);
|
||||
}
|
||||
bancorServiceFn()
|
||||
.then(service => (this._bancorService = service))
|
||||
.catch(/* do nothing */);
|
||||
}
|
||||
|
||||
public getTokenDecimals(makerTokenAddress: string, takerTokenAddress: string): BatchedOperation<BigNumber[]> {
|
||||
|
@@ -102,7 +102,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedFillableAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getOrderFillableMakerAmounts(ORDERS, exchangeAddress),
|
||||
);
|
||||
@@ -118,7 +126,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedFillableAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getOrderFillableTakerAmounts(ORDERS, exchangeAddress),
|
||||
);
|
||||
@@ -138,7 +154,15 @@ describe('DexSampler tests', () => {
|
||||
return ['0x', expectedMakerFillAmounts];
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getKyberSellQuotes(
|
||||
'0x',
|
||||
@@ -169,8 +193,10 @@ describe('DexSampler tests', () => {
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
{ [poolAddress]: { tokens: [expectedMakerToken, expectedTakerToken], gasCost } },
|
||||
{
|
||||
[poolAddress]: { tokens: [expectedMakerToken, expectedTakerToken], gasCost },
|
||||
},
|
||||
async () => undefined,
|
||||
);
|
||||
const [result] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getSellQuotes(
|
||||
@@ -211,8 +237,10 @@ describe('DexSampler tests', () => {
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
{ [poolAddress]: { tokens: [expectedMakerToken, expectedTakerToken], gasCost } },
|
||||
{
|
||||
[poolAddress]: { tokens: [expectedMakerToken, expectedTakerToken], gasCost },
|
||||
},
|
||||
async () => undefined,
|
||||
);
|
||||
const [result] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getBuyQuotes(
|
||||
@@ -247,7 +275,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedMakerFillAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getEth2DaiSellQuotes(expectedMakerToken, expectedTakerToken, expectedTakerFillAmounts),
|
||||
);
|
||||
@@ -267,7 +303,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedMakerFillAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getUniswapSellQuotes(expectedMakerToken, expectedTakerToken, expectedTakerFillAmounts),
|
||||
);
|
||||
@@ -286,7 +330,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedMakerFillAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getUniswapV2SellQuotes(
|
||||
[expectedMakerToken, expectedTakerToken],
|
||||
@@ -309,7 +361,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedTakerFillAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getEth2DaiBuyQuotes(expectedMakerToken, expectedTakerToken, expectedMakerFillAmounts),
|
||||
);
|
||||
@@ -329,7 +389,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedTakerFillAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getUniswapBuyQuotes(expectedMakerToken, expectedTakerToken, expectedMakerFillAmounts),
|
||||
);
|
||||
@@ -381,8 +449,9 @@ describe('DexSampler tests', () => {
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
tokenAdjacencyGraph,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [quotes] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getSellQuotes(
|
||||
@@ -436,8 +505,11 @@ describe('DexSampler tests', () => {
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
new MockSamplerContract({}),
|
||||
undefined,
|
||||
undefined,
|
||||
balancerPoolsCache,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const quotes = await dexOrderSampler.getBalancerSellQuotesOffChainAsync(
|
||||
expectedMakerToken,
|
||||
@@ -486,8 +558,9 @@ describe('DexSampler tests', () => {
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
tokenAdjacencyGraph,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [quotes] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getBuyQuotes(sources, expectedMakerToken, expectedTakerToken, expectedMakerFillAmounts),
|
||||
@@ -532,8 +605,11 @@ describe('DexSampler tests', () => {
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
new MockSamplerContract({}),
|
||||
undefined,
|
||||
undefined,
|
||||
balancerPoolsCache,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const quotes = await dexOrderSampler.getBalancerBuyQuotesOffChainAsync(
|
||||
expectedMakerToken,
|
||||
@@ -560,7 +636,15 @@ describe('DexSampler tests', () => {
|
||||
return expectedFillableTakerAmounts;
|
||||
},
|
||||
});
|
||||
const dexOrderSampler = new DexOrderSampler(sampler);
|
||||
const dexOrderSampler = new DexOrderSampler(
|
||||
sampler,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
undefined,
|
||||
async () => undefined,
|
||||
);
|
||||
const [fillableMakerAmounts, fillableTakerAmounts] = await dexOrderSampler.executeAsync(
|
||||
dexOrderSampler.getOrderFillableMakerAmounts(ORDERS, exchangeAddress),
|
||||
dexOrderSampler.getOrderFillableTakerAmounts(ORDERS, exchangeAddress),
|
||||
|
@@ -1,4 +1,14 @@
|
||||
[
|
||||
{
|
||||
"version": "5.7.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Redeploy FQT",
|
||||
"pr": 91
|
||||
}
|
||||
],
|
||||
"timestamp": 1608245516
|
||||
},
|
||||
{
|
||||
"version": "5.6.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.7.0 - _December 17, 2020_
|
||||
|
||||
* Redeploy FQT (#91)
|
||||
|
||||
## v5.6.0 - _December 7, 2020_
|
||||
|
||||
* Update mainnet and ropsten transformer addresses for hot-pants release (#70)
|
||||
|
@@ -37,7 +37,7 @@
|
||||
"wethTransformer": "0xb2bc06a4efb20fc6553a69dbfa49b7be938034a7",
|
||||
"payTakerTransformer": "0x4638a7ebe75b911b995d0ec73a81e4f85f41f24e",
|
||||
"affiliateFeeTransformer": "0xda6d9fc5998f550a094585cf9171f0e8ee3ac59f",
|
||||
"fillQuoteTransformer": "0x74c35f17a19d4ee0ddd65cc21c671806913f9176"
|
||||
"fillQuoteTransformer": "0xab6959d63bf6557d4bc2a0fc5265f5a6851e33f3"
|
||||
}
|
||||
},
|
||||
"3": {
|
||||
@@ -78,7 +78,7 @@
|
||||
"wethTransformer": "0x05ad19aa3826e0609a19568ffbd1dfe86c6c7184",
|
||||
"payTakerTransformer": "0x6d0ebf2bcd9cc93ec553b60ad201943dcca4e291",
|
||||
"affiliateFeeTransformer": "0x6588256778ca4432fa43983ac685c45efb2379e2",
|
||||
"fillQuoteTransformer": "0x5ec162400ec00f0f3ef1d8aae1fed37742d5dc81"
|
||||
"fillQuoteTransformer": "0x5cd9164c9352ff95e3b6fa7bb9ac89a102c9d109"
|
||||
}
|
||||
},
|
||||
"4": {
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-addresses",
|
||||
"version": "5.6.0",
|
||||
"version": "5.7.0",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-wrappers-test",
|
||||
"version": "12.2.29",
|
||||
"version": "12.2.31",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -31,11 +31,11 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/packages/contract-wrappers-test",
|
||||
"devDependencies": {
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contracts-test-utils": "^5.3.15",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/contracts-test-utils": "^5.3.16",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/migrations": "^6.5.5",
|
||||
"@0x/order-utils": "^10.4.10",
|
||||
"@0x/migrations": "^6.5.7",
|
||||
"@0x/order-utils": "^10.4.11",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "13.11.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "13.11.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v13.11.1 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v13.11.0 - _December 9, 2020_
|
||||
|
||||
* Regenerate wrappers (#76)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-wrappers",
|
||||
"version": "13.11.0",
|
||||
"version": "13.11.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -57,7 +57,7 @@
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
|
@@ -1,4 +1,22 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "6.5.7",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608149382,
|
||||
"version": "6.5.6",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1608105788,
|
||||
"version": "6.5.5",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v6.5.7 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v6.5.6 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v6.5.5 - _December 16, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/migrations",
|
||||
"version": "6.5.5",
|
||||
"version": "6.5.7",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -68,20 +68,20 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.0",
|
||||
"@0x/contracts-coordinator": "^3.1.19",
|
||||
"@0x/contracts-dev-utils": "^1.3.17",
|
||||
"@0x/contracts-erc1155": "^2.1.18",
|
||||
"@0x/contracts-erc20": "^3.2.12",
|
||||
"@0x/contracts-erc721": "^3.1.18",
|
||||
"@0x/contracts-exchange": "^3.2.19",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.19",
|
||||
"@0x/contracts-extensions": "^6.2.13",
|
||||
"@0x/contracts-multisig": "^4.1.19",
|
||||
"@0x/contracts-staking": "^2.0.26",
|
||||
"@0x/contracts-utils": "^4.6.3",
|
||||
"@0x/contracts-zero-ex": "^0.13.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.1",
|
||||
"@0x/contracts-coordinator": "^3.1.20",
|
||||
"@0x/contracts-dev-utils": "^1.3.18",
|
||||
"@0x/contracts-erc1155": "^2.1.19",
|
||||
"@0x/contracts-erc20": "^3.2.13",
|
||||
"@0x/contracts-erc721": "^3.1.19",
|
||||
"@0x/contracts-exchange": "^3.2.20",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.20",
|
||||
"@0x/contracts-extensions": "^6.2.14",
|
||||
"@0x/contracts-multisig": "^4.1.20",
|
||||
"@0x/contracts-staking": "^2.0.27",
|
||||
"@0x/contracts-utils": "^4.6.4",
|
||||
"@0x/contracts-zero-ex": "^0.15.0",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
|
@@ -333,6 +333,8 @@ export async function runMigrationsAsync(
|
||||
dodoHelper: NULL_ADDRESS,
|
||||
snowSwapBridge: NULL_ADDRESS,
|
||||
cryptoComBridge: NULL_ADDRESS,
|
||||
bancorBridge: NULL_ADDRESS,
|
||||
cofixBridge: NULL_ADDRESS,
|
||||
weth: etherToken.address,
|
||||
},
|
||||
);
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "10.4.11",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "10.4.10",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v10.4.11 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v10.4.10 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/order-utils",
|
||||
"version": "10.4.10",
|
||||
"version": "10.4.11",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -69,8 +69,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
|
@@ -1,4 +1,23 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1608245516,
|
||||
"version": "1.1.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.1.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Add the `MetaTransaction` class for EP mtxs",
|
||||
"pr": 90
|
||||
}
|
||||
],
|
||||
"timestamp": 1608149382
|
||||
},
|
||||
{
|
||||
"timestamp": 1607485227,
|
||||
"version": "1.0.1",
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.1.1 - _December 17, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.1.0 - _December 16, 2020_
|
||||
|
||||
* Add the `MetaTransaction` class for EP mtxs (#90)
|
||||
|
||||
## v1.0.1 - _December 9, 2020_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/protocol-utils",
|
||||
"version": "1.0.1",
|
||||
"version": "1.1.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -62,8 +62,8 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/contract-addresses": "^5.6.0",
|
||||
"@0x/contract-wrappers": "^13.11.0",
|
||||
"@0x/contract-addresses": "^5.7.0",
|
||||
"@0x/contract-wrappers": "^13.11.1",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/utils": "^6.1.1",
|
||||
|
@@ -1 +1,4 @@
|
||||
import { BigNumber } from '@0x/utils';
|
||||
|
||||
export const ETH_TOKEN_ADDRESS = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';
|
||||
export const ZERO = new BigNumber(0);
|
||||
|
@@ -7,6 +7,8 @@ export interface EIP712Domain {
|
||||
verifyingContract: string;
|
||||
}
|
||||
|
||||
export type EIP712_STRUCT_ABI = Array<{ type: string; name: string }>;
|
||||
|
||||
export const EIP712_DOMAIN_PARAMETERS = [
|
||||
{ name: 'name', type: 'string' },
|
||||
{ name: 'version', type: 'string' },
|
||||
@@ -68,3 +70,12 @@ export function getExchangeProxyEIP712Hash(structHash: string, chainId?: number,
|
||||
hexUtils.concat('0x1901', getExchangeProxyEIP712DomainHash(chainId, verifyingContract), structHash),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compute the type hash of an EIP712 struct given its ABI.
|
||||
*/
|
||||
export function getTypeHash(structName: string, abi: EIP712_STRUCT_ABI): string {
|
||||
return hexUtils.hash(
|
||||
hexUtils.toHex(Buffer.from([`${structName}(`, abi.map(a => `${a.type} ${a.name}`).join(','), ')'].join(''))),
|
||||
);
|
||||
}
|
||||
|
@@ -4,6 +4,7 @@ export const RevertError = _RevertErrors.RevertError;
|
||||
|
||||
export * from './eip712_utils';
|
||||
export * from './orders';
|
||||
export * from './meta_transactions';
|
||||
export * from './signature_utils';
|
||||
export * from './transformer_utils';
|
||||
export * from './constants';
|
||||
|
171
packages/protocol-utils/src/meta_transactions.ts
Normal file
171
packages/protocol-utils/src/meta_transactions.ts
Normal file
@@ -0,0 +1,171 @@
|
||||
import { getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
|
||||
import { SupportedProvider } from '@0x/subproviders';
|
||||
import { EIP712TypedData } from '@0x/types';
|
||||
import { BigNumber, hexUtils, NULL_ADDRESS } from '@0x/utils';
|
||||
|
||||
import { ZERO } from './constants';
|
||||
import {
|
||||
createExchangeProxyEIP712Domain,
|
||||
EIP712_DOMAIN_PARAMETERS,
|
||||
getExchangeProxyEIP712Hash,
|
||||
getTypeHash,
|
||||
} from './eip712_utils';
|
||||
import {
|
||||
eip712SignTypedDataWithKey,
|
||||
eip712SignTypedDataWithProviderAsync,
|
||||
ethSignHashWithKey,
|
||||
ethSignHashWithProviderAsync,
|
||||
Signature,
|
||||
SignatureType,
|
||||
} from './signature_utils';
|
||||
|
||||
const MTX_DEFAULT_VALUES = {
|
||||
signer: NULL_ADDRESS,
|
||||
sender: NULL_ADDRESS,
|
||||
minGasPrice: ZERO,
|
||||
maxGasPrice: ZERO,
|
||||
expirationTimeSeconds: ZERO,
|
||||
salt: ZERO,
|
||||
callData: hexUtils.leftPad(0),
|
||||
value: ZERO,
|
||||
feeToken: NULL_ADDRESS,
|
||||
feeAmount: ZERO,
|
||||
chainId: 1,
|
||||
verifyingContract: getContractAddressesForChainOrThrow(1).exchangeProxy,
|
||||
};
|
||||
|
||||
export type MetaTransactionFields = typeof MTX_DEFAULT_VALUES;
|
||||
|
||||
export class MetaTransaction {
|
||||
public static readonly STRUCT_NAME = 'MetaTransactionData';
|
||||
public static readonly STRUCT_ABI = [
|
||||
{ type: 'address', name: 'signer' },
|
||||
{ type: 'address', name: 'sender' },
|
||||
{ type: 'uint256', name: 'minGasPrice' },
|
||||
{ type: 'uint256', name: 'maxGasPrice' },
|
||||
{ type: 'uint256', name: 'expirationTimeSeconds' },
|
||||
{ type: 'uint256', name: 'salt' },
|
||||
{ type: 'bytes', name: 'callData' },
|
||||
{ type: 'uint256', name: 'value' },
|
||||
{ type: 'address', name: 'feeToken' },
|
||||
{ type: 'uint256', name: 'feeAmount' },
|
||||
];
|
||||
public static readonly TYPE_HASH = getTypeHash(MetaTransaction.STRUCT_NAME, MetaTransaction.STRUCT_ABI);
|
||||
|
||||
public signer: string;
|
||||
public sender: string;
|
||||
public minGasPrice: BigNumber;
|
||||
public maxGasPrice: BigNumber;
|
||||
public expirationTimeSeconds: BigNumber;
|
||||
public salt: BigNumber;
|
||||
public callData: string;
|
||||
public value: BigNumber;
|
||||
public feeToken: string;
|
||||
public feeAmount: BigNumber;
|
||||
public chainId: number;
|
||||
public verifyingContract: string;
|
||||
|
||||
public constructor(fields: Partial<MetaTransactionFields> = {}) {
|
||||
const _fields = { ...MTX_DEFAULT_VALUES, ...fields };
|
||||
this.signer = _fields.signer;
|
||||
this.sender = _fields.sender;
|
||||
this.minGasPrice = _fields.minGasPrice;
|
||||
this.maxGasPrice = _fields.maxGasPrice;
|
||||
this.expirationTimeSeconds = _fields.expirationTimeSeconds;
|
||||
this.salt = _fields.salt;
|
||||
this.callData = _fields.callData;
|
||||
this.value = _fields.value;
|
||||
this.feeToken = _fields.feeToken;
|
||||
this.feeAmount = _fields.feeAmount;
|
||||
this.chainId = _fields.chainId;
|
||||
this.verifyingContract = _fields.verifyingContract;
|
||||
}
|
||||
|
||||
public clone(fields: Partial<MetaTransactionFields> = {}): MetaTransaction {
|
||||
return new MetaTransaction({
|
||||
signer: this.signer,
|
||||
sender: this.sender,
|
||||
minGasPrice: this.minGasPrice,
|
||||
maxGasPrice: this.maxGasPrice,
|
||||
expirationTimeSeconds: this.expirationTimeSeconds,
|
||||
salt: this.salt,
|
||||
callData: this.callData,
|
||||
value: this.value,
|
||||
feeToken: this.feeToken,
|
||||
feeAmount: this.feeAmount,
|
||||
chainId: this.chainId,
|
||||
verifyingContract: this.verifyingContract,
|
||||
...fields,
|
||||
});
|
||||
}
|
||||
|
||||
public getStructHash(): string {
|
||||
return hexUtils.hash(
|
||||
hexUtils.concat(
|
||||
hexUtils.leftPad(MetaTransaction.TYPE_HASH),
|
||||
hexUtils.leftPad(this.signer),
|
||||
hexUtils.leftPad(this.sender),
|
||||
hexUtils.leftPad(this.minGasPrice),
|
||||
hexUtils.leftPad(this.maxGasPrice),
|
||||
hexUtils.leftPad(this.expirationTimeSeconds),
|
||||
hexUtils.leftPad(this.salt),
|
||||
hexUtils.hash(this.callData),
|
||||
hexUtils.leftPad(this.value),
|
||||
hexUtils.leftPad(this.feeToken),
|
||||
hexUtils.leftPad(this.feeAmount),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
public getEIP712TypedData(): EIP712TypedData {
|
||||
return {
|
||||
types: {
|
||||
EIP712Domain: EIP712_DOMAIN_PARAMETERS,
|
||||
[MetaTransaction.STRUCT_NAME]: MetaTransaction.STRUCT_ABI,
|
||||
},
|
||||
domain: createExchangeProxyEIP712Domain(this.chainId, this.verifyingContract) as any,
|
||||
primaryType: MetaTransaction.STRUCT_NAME,
|
||||
message: {
|
||||
signer: this.signer,
|
||||
sender: this.sender,
|
||||
minGasPrice: this.minGasPrice.toString(10),
|
||||
maxGasPrice: this.maxGasPrice.toString(10),
|
||||
expirationTimeSeconds: this.expirationTimeSeconds.toString(10),
|
||||
salt: this.salt.toString(10),
|
||||
callData: this.callData,
|
||||
value: this.value.toString(10),
|
||||
feeToken: this.feeToken,
|
||||
feeAmount: this.feeAmount.toString(10),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
public getHash(): string {
|
||||
return getExchangeProxyEIP712Hash(this.getStructHash(), this.chainId, this.verifyingContract);
|
||||
}
|
||||
|
||||
public async getSignatureWithProviderAsync(
|
||||
provider: SupportedProvider,
|
||||
type: SignatureType = SignatureType.EthSign,
|
||||
): Promise<Signature> {
|
||||
switch (type) {
|
||||
case SignatureType.EIP712:
|
||||
return eip712SignTypedDataWithProviderAsync(this.getEIP712TypedData(), this.signer, provider);
|
||||
case SignatureType.EthSign:
|
||||
return ethSignHashWithProviderAsync(this.getHash(), this.signer, provider);
|
||||
default:
|
||||
throw new Error(`Cannot sign with signature type: ${type}`);
|
||||
}
|
||||
}
|
||||
|
||||
public getSignatureWithKey(key: string, type: SignatureType = SignatureType.EthSign): Signature {
|
||||
switch (type) {
|
||||
case SignatureType.EIP712:
|
||||
return eip712SignTypedDataWithKey(this.getEIP712TypedData(), key);
|
||||
case SignatureType.EthSign:
|
||||
return ethSignHashWithKey(this.getHash(), key);
|
||||
default:
|
||||
throw new Error(`Cannot sign with signature type: ${type}`);
|
||||
}
|
||||
}
|
||||
}
|
@@ -1,8 +1,15 @@
|
||||
import { getContractAddressesForChainOrThrow } from '@0x/contract-addresses';
|
||||
import { SupportedProvider } from '@0x/subproviders';
|
||||
import { EIP712TypedData } from '@0x/types';
|
||||
import { BigNumber, hexUtils, NULL_ADDRESS } from '@0x/utils';
|
||||
|
||||
import { createExchangeProxyEIP712Domain, EIP712_DOMAIN_PARAMETERS, getExchangeProxyEIP712Hash } from './eip712_utils';
|
||||
import { ZERO } from './constants';
|
||||
import {
|
||||
createExchangeProxyEIP712Domain,
|
||||
EIP712_DOMAIN_PARAMETERS,
|
||||
getExchangeProxyEIP712Hash,
|
||||
getTypeHash,
|
||||
} from './eip712_utils';
|
||||
import {
|
||||
eip712SignTypedDataWithKey,
|
||||
eip712SignTypedDataWithProviderAsync,
|
||||
@@ -12,7 +19,6 @@ import {
|
||||
SignatureType,
|
||||
} from './signature_utils';
|
||||
|
||||
const ZERO = new BigNumber(0);
|
||||
const COMMON_ORDER_DEFAULT_VALUES = {
|
||||
makerToken: NULL_ADDRESS,
|
||||
takerToken: NULL_ADDRESS,
|
||||
@@ -24,7 +30,7 @@ const COMMON_ORDER_DEFAULT_VALUES = {
|
||||
expiry: ZERO,
|
||||
salt: ZERO,
|
||||
chainId: 1,
|
||||
verifyingContract: '0xdef1c0ded9bec7f1a1670819833240f027b25eff',
|
||||
verifyingContract: getContractAddressesForChainOrThrow(1).exchangeProxy,
|
||||
};
|
||||
const LIMIT_ORDER_DEFAULT_VALUES = {
|
||||
...COMMON_ORDER_DEFAULT_VALUES,
|
||||
@@ -117,30 +123,22 @@ export abstract class OrderBase {
|
||||
}
|
||||
|
||||
export class LimitOrder extends OrderBase {
|
||||
public static readonly TYPE_HASH = hexUtils.hash(
|
||||
hexUtils.toHex(
|
||||
Buffer.from(
|
||||
[
|
||||
'LimitOrder(',
|
||||
[
|
||||
'address makerToken',
|
||||
'address takerToken',
|
||||
'uint128 makerAmount',
|
||||
'uint128 takerAmount',
|
||||
'uint128 takerTokenFeeAmount',
|
||||
'address maker',
|
||||
'address taker',
|
||||
'address sender',
|
||||
'address feeRecipient',
|
||||
'bytes32 pool',
|
||||
'uint64 expiry',
|
||||
'uint256 salt',
|
||||
].join(','),
|
||||
')',
|
||||
].join(''),
|
||||
),
|
||||
),
|
||||
);
|
||||
public static readonly STRUCT_NAME = 'LimitOrder';
|
||||
public static readonly STRUCT_ABI = [
|
||||
{ type: 'address', name: 'makerToken' },
|
||||
{ type: 'address', name: 'takerToken' },
|
||||
{ type: 'uint128', name: 'makerAmount' },
|
||||
{ type: 'uint128', name: 'takerAmount' },
|
||||
{ type: 'uint128', name: 'takerTokenFeeAmount' },
|
||||
{ type: 'address', name: 'maker' },
|
||||
{ type: 'address', name: 'taker' },
|
||||
{ type: 'address', name: 'sender' },
|
||||
{ type: 'address', name: 'feeRecipient' },
|
||||
{ type: 'bytes32', name: 'pool' },
|
||||
{ type: 'uint64', name: 'expiry' },
|
||||
{ type: 'uint256', name: 'salt' },
|
||||
];
|
||||
public static readonly TYPE_HASH = getTypeHash(LimitOrder.STRUCT_NAME, LimitOrder.STRUCT_ABI);
|
||||
|
||||
public takerTokenFeeAmount: BigNumber;
|
||||
public sender: string;
|
||||
@@ -198,23 +196,10 @@ export class LimitOrder extends OrderBase {
|
||||
return {
|
||||
types: {
|
||||
EIP712Domain: EIP712_DOMAIN_PARAMETERS,
|
||||
LimitOrder: [
|
||||
{ type: 'address', name: 'makerToken' },
|
||||
{ type: 'address', name: 'takerToken' },
|
||||
{ type: 'uint128', name: 'makerAmount' },
|
||||
{ type: 'uint128', name: 'takerAmount' },
|
||||
{ type: 'uint128', name: 'takerTokenFeeAmount' },
|
||||
{ type: 'address', name: 'maker' },
|
||||
{ type: 'address', name: 'taker' },
|
||||
{ type: 'address', name: 'sender' },
|
||||
{ type: 'address', name: 'feeRecipient' },
|
||||
{ type: 'bytes32', name: 'pool' },
|
||||
{ type: 'uint64', name: 'expiry' },
|
||||
{ type: 'uint256', name: 'salt' },
|
||||
],
|
||||
[LimitOrder.STRUCT_NAME]: LimitOrder.STRUCT_ABI,
|
||||
},
|
||||
domain: createExchangeProxyEIP712Domain(this.chainId, this.verifyingContract) as any,
|
||||
primaryType: 'LimitOrder',
|
||||
primaryType: LimitOrder.STRUCT_NAME,
|
||||
message: {
|
||||
makerToken: this.makerToken,
|
||||
takerToken: this.takerToken,
|
||||
@@ -234,28 +219,20 @@ export class LimitOrder extends OrderBase {
|
||||
}
|
||||
|
||||
export class RfqOrder extends OrderBase {
|
||||
public static readonly TYPE_HASH = hexUtils.hash(
|
||||
hexUtils.toHex(
|
||||
Buffer.from(
|
||||
[
|
||||
'RfqOrder(',
|
||||
[
|
||||
'address makerToken',
|
||||
'address takerToken',
|
||||
'uint128 makerAmount',
|
||||
'uint128 takerAmount',
|
||||
'address maker',
|
||||
'address taker',
|
||||
'address txOrigin',
|
||||
'bytes32 pool',
|
||||
'uint64 expiry',
|
||||
'uint256 salt',
|
||||
].join(','),
|
||||
')',
|
||||
].join(''),
|
||||
),
|
||||
),
|
||||
);
|
||||
public static readonly STRUCT_NAME = 'RfqOrder';
|
||||
public static readonly STRUCT_ABI = [
|
||||
{ type: 'address', name: 'makerToken' },
|
||||
{ type: 'address', name: 'takerToken' },
|
||||
{ type: 'uint128', name: 'makerAmount' },
|
||||
{ type: 'uint128', name: 'takerAmount' },
|
||||
{ type: 'address', name: 'maker' },
|
||||
{ type: 'address', name: 'taker' },
|
||||
{ type: 'address', name: 'txOrigin' },
|
||||
{ type: 'bytes32', name: 'pool' },
|
||||
{ type: 'uint64', name: 'expiry' },
|
||||
{ type: 'uint256', name: 'salt' },
|
||||
];
|
||||
public static readonly TYPE_HASH = getTypeHash(RfqOrder.STRUCT_NAME, RfqOrder.STRUCT_ABI);
|
||||
|
||||
public txOrigin: string;
|
||||
|
||||
@@ -305,21 +282,10 @@ export class RfqOrder extends OrderBase {
|
||||
return {
|
||||
types: {
|
||||
EIP712Domain: EIP712_DOMAIN_PARAMETERS,
|
||||
RfqOrder: [
|
||||
{ type: 'address', name: 'makerToken' },
|
||||
{ type: 'address', name: 'takerToken' },
|
||||
{ type: 'uint128', name: 'makerAmount' },
|
||||
{ type: 'uint128', name: 'takerAmount' },
|
||||
{ type: 'address', name: 'maker' },
|
||||
{ type: 'address', name: 'taker' },
|
||||
{ type: 'address', name: 'txOrigin' },
|
||||
{ type: 'bytes32', name: 'pool' },
|
||||
{ type: 'uint64', name: 'expiry' },
|
||||
{ type: 'uint256', name: 'salt' },
|
||||
],
|
||||
[RfqOrder.STRUCT_NAME]: RfqOrder.STRUCT_ABI,
|
||||
},
|
||||
domain: createExchangeProxyEIP712Domain(this.chainId, this.verifyingContract) as any,
|
||||
primaryType: 'RfqOrder',
|
||||
primaryType: RfqOrder.STRUCT_NAME,
|
||||
message: {
|
||||
makerToken: this.makerToken,
|
||||
takerToken: this.takerToken,
|
||||
|
84
packages/protocol-utils/test/meta_transactions_test.ts
Normal file
84
packages/protocol-utils/test/meta_transactions_test.ts
Normal file
@@ -0,0 +1,84 @@
|
||||
import { chaiSetup, web3Factory, Web3Wrapper } from '@0x/dev-utils';
|
||||
import { Web3ProviderEngine } from '@0x/subproviders';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import { expect } from 'chai';
|
||||
import * as ethjs from 'ethereumjs-util';
|
||||
|
||||
import { MetaTransaction } from '../src/meta_transactions';
|
||||
import { SignatureType } from '../src/signature_utils';
|
||||
|
||||
chaiSetup.configure();
|
||||
|
||||
describe('mtxs', () => {
|
||||
let provider: Web3ProviderEngine;
|
||||
let providerMaker: string;
|
||||
const key = '0xee094b79aa0315914955f2f09be9abe541dcdc51f0aae5bec5453e9f73a471a6';
|
||||
const keyMaker = ethjs.bufferToHex(ethjs.privateToAddress(ethjs.toBuffer(key)));
|
||||
|
||||
before(async () => {
|
||||
provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true });
|
||||
[providerMaker] = await new Web3Wrapper(provider).getAvailableAddressesAsync();
|
||||
});
|
||||
|
||||
describe('MetaTransaction', () => {
|
||||
const mtx = new MetaTransaction({
|
||||
signer: '0x349e8d89e8b37214d9ce3949fc5754152c525bc3',
|
||||
sender: '0x83c62b2e67dea0df2a27be0def7a22bd7102642c',
|
||||
minGasPrice: new BigNumber(1234),
|
||||
maxGasPrice: new BigNumber(5678),
|
||||
expirationTimeSeconds: new BigNumber(9101112),
|
||||
salt: new BigNumber(2001),
|
||||
callData: '0x12345678',
|
||||
value: new BigNumber(1001),
|
||||
feeToken: '0xcc3c7ea403427154ec908203ba6c418bd699f7ce',
|
||||
feeAmount: new BigNumber(9101112),
|
||||
chainId: 8008,
|
||||
verifyingContract: '0x6701704d2421c64ee9aa93ec7f96ede81c4be77d',
|
||||
});
|
||||
|
||||
it('can get the struct hash', () => {
|
||||
const actual = mtx.getStructHash();
|
||||
const expected = '0x164b8bfaed3718d233d4cc87501d0d8fa0a72ed7deeb8e591524133f17867180';
|
||||
expect(actual).to.eq(expected);
|
||||
});
|
||||
|
||||
it('can get the EIP712 hash', () => {
|
||||
const actual = mtx.getHash();
|
||||
const expected = '0x068f2f98836e489070608461768bfd3331128787d09278d38869c2b56bfc34a4';
|
||||
expect(actual).to.eq(expected);
|
||||
});
|
||||
|
||||
it('can get an EthSign signature with a provider', async () => {
|
||||
const actual = await mtx.clone({ signer: providerMaker }).getSignatureWithProviderAsync(provider);
|
||||
const expected = {
|
||||
signatureType: SignatureType.EthSign,
|
||||
r: '0xbb831776a2d6639d4e4d1641f158773ce202881bac74dddb2672d5ff5521ef5c',
|
||||
s: '0x746a61ccfdfee3afae15f4a3bd67ded2ce555d89d482940a844eeffaede2ee8a',
|
||||
v: 27,
|
||||
};
|
||||
expect(actual).to.deep.eq(expected);
|
||||
});
|
||||
|
||||
it('can get an EthSign signature with a private key', () => {
|
||||
const actual = mtx.clone({ signer: keyMaker }).getSignatureWithKey(key);
|
||||
const expected = {
|
||||
signatureType: SignatureType.EthSign,
|
||||
r: '0xbf19b5ef62df8c8315727087e9d8562e3b88d32452ac8193e3ed9f5354a220ef',
|
||||
s: '0x512387e81b2c03e4bc4cf72ee5293c86498c17fde3ae89f18dd0705076a7f472',
|
||||
v: 28,
|
||||
};
|
||||
expect(actual).to.deep.eq(expected);
|
||||
});
|
||||
|
||||
it('can get an EIP712 signature with a private key', () => {
|
||||
const actual = mtx.clone({ signer: keyMaker }).getSignatureWithKey(key, SignatureType.EIP712);
|
||||
const expected = {
|
||||
signatureType: SignatureType.EIP712,
|
||||
r: '0x050c6b80a3fafa1b816fdfd646f3e90862a21d3fbf3ed675eaf9c89e092ec405',
|
||||
s: '0x179600bd412820233598628b85b58f1e9f6da4555421f45266ec2ebf94153d1d',
|
||||
v: 27,
|
||||
};
|
||||
expect(actual).to.deep.eq(expected);
|
||||
});
|
||||
});
|
||||
});
|
Reference in New Issue
Block a user