Compare commits
11 Commits
@0x/contra
...
protocol@f
Author | SHA1 | Date | |
---|---|---|---|
|
f4e5b6e38d | ||
|
477cb0a48d | ||
|
d6bc0a3368 | ||
|
e544a804c2 | ||
|
96e0ad7899 | ||
|
5a1fee5d31 | ||
|
3557a5e5a9 | ||
|
0bd43d5265 | ||
|
8fd7c1b386 | ||
|
50068750f5 | ||
|
a7a905de4c |
4
.gitignore
vendored
4
.gitignore
vendored
@@ -113,6 +113,8 @@ contracts/dev-utils/generated-artifacts/
|
||||
contracts/dev-utils/test/generated-artifacts/
|
||||
contracts/zero-ex/generated-artifacts/
|
||||
contracts/zero-ex/test/generated-artifacts/
|
||||
contracts/treasury/generated-artifacts/
|
||||
contracts/treasury/test/generated-artifacts/
|
||||
|
||||
# generated truffle contract artifacts/
|
||||
contracts/broker/build/
|
||||
@@ -167,6 +169,8 @@ contracts/dev-utils/generated-wrappers/
|
||||
contracts/dev-utils/test/generated-wrappers/
|
||||
contracts/zero-ex/generated-wrappers/
|
||||
contracts/zero-ex/test/generated-wrappers/
|
||||
contracts/treasury/generated-wrappers/
|
||||
contracts/treasury/test/generated-wrappers/
|
||||
|
||||
# Doc README copy
|
||||
packages/*/docs/README.md
|
||||
|
@@ -64,6 +64,10 @@ lib
|
||||
/contracts/zero-ex/test/generated-wrappers
|
||||
/contracts/zero-ex/generated-artifacts
|
||||
/contracts/zero-ex/test/generated-artifacts
|
||||
/contracts/treasury/generated-wrappers
|
||||
/contracts/treasury/test/generated-wrappers
|
||||
/contracts/treasury/generated-artifacts
|
||||
/contracts/treasury/test/generated-artifacts
|
||||
/contracts/staking/build/
|
||||
/contracts/coordinator/build/
|
||||
/contracts/exchange/build/
|
||||
|
@@ -13,7 +13,6 @@
|
||||
"indent": ["error", 4],
|
||||
"max-line-length": ["warn", 160],
|
||||
"no-inline-assembly": false,
|
||||
"no-empty-blocks": false,
|
||||
"quotes": ["error", "double"],
|
||||
"separate-by-one-line-in-contract": "error",
|
||||
"space-after-comma": "error",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.7.5",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "3.7.4",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.7.5 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.7.4 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-asset-proxy",
|
||||
"version": "3.7.4",
|
||||
"version": "3.7.5",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -51,13 +51,13 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contract-wrappers": "^13.12.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contract-wrappers": "^13.12.2",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@types/lodash": "4.14.104",
|
||||
@@ -79,16 +79,16 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-erc1155": "^2.1.22",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-erc1155": "^2.1.23",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "1.1.23",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "1.1.22",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.1.23 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.1.22 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-broker",
|
||||
"version": "1.1.22",
|
||||
"version": "1.1.23",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -51,20 +51,20 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -84,10 +84,10 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.1.24",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "3.1.23",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.1.24 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.1.23 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-coordinator",
|
||||
"version": "3.1.23",
|
||||
"version": "3.1.24",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,17 +52,17 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -82,16 +82,16 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/assert": "^3.0.21",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/json-schemas": "^5.4.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"http-status-codes": "^1.3.2"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "1.3.22",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "1.3.21",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.3.22 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v1.3.21 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-dev-utils",
|
||||
"version": "1.3.21",
|
||||
"version": "1.3.22",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -41,17 +41,17 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/dev-utils",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/assert": "^3.0.21",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethers": "~4.0.4",
|
||||
"npm-run-all": "^4.1.2",
|
||||
@@ -63,7 +63,7 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@types/node": "12.12.54"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "2.1.23",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "2.1.22",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v2.1.23 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v2.1.22 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc1155",
|
||||
"version": "2.1.22",
|
||||
"version": "2.1.23",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,11 +52,11 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
@@ -80,10 +80,10 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.3.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "3.3.1",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.3.2 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.3.1 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc20",
|
||||
"version": "3.3.1",
|
||||
"version": "3.3.2",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -51,18 +51,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -82,7 +82,7 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14"
|
||||
"@0x/base-contract": "^6.2.18"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.1.23",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "3.1.22",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.1.23 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.1.22 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-erc721",
|
||||
"version": "3.1.22",
|
||||
"version": "3.1.23",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,18 +52,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -84,7 +84,7 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14"
|
||||
"@0x/base-contract": "^6.2.18"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "4.2.24",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "4.2.23",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.2.24 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.2.23 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange-forwarder",
|
||||
"version": "4.2.23",
|
||||
"version": "4.2.24",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,25 +52,25 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc1155": "^2.1.22",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc1155": "^2.1.23",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -90,7 +90,7 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "4.3.23",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "4.3.22",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.3.23 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.3.22 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange-libs",
|
||||
"version": "4.3.22",
|
||||
"version": "4.3.23",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,14 +52,14 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/libs",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -80,13 +80,13 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.2.24",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "3.2.23",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.2.24 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.2.23 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-exchange",
|
||||
"version": "3.2.23",
|
||||
"version": "3.2.24",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,21 +52,21 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/protocol",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-multisig": "^4.1.23",
|
||||
"@0x/contracts-staking": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-multisig": "^4.1.24",
|
||||
"@0x/contracts-staking": "^2.0.31",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -88,13 +88,13 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc1155": "^2.1.22",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc1155": "^2.1.23",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"publishConfig": {
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "6.2.18",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "6.2.17",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v6.2.18 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v6.2.17 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-extensions",
|
||||
"version": "6.2.17",
|
||||
"version": "6.2.18",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -52,23 +52,23 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -90,8 +90,8 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-integrations",
|
||||
"version": "2.7.23",
|
||||
"version": "2.7.25",
|
||||
"private": true,
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
@@ -52,25 +52,25 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/extensions",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/contract-wrappers": "^13.12.1",
|
||||
"@0x/contracts-broker": "^1.1.22",
|
||||
"@0x/contracts-coordinator": "^3.1.23",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-extensions": "^6.2.17",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/contract-wrappers": "^13.12.2",
|
||||
"@0x/contracts-broker": "^1.1.23",
|
||||
"@0x/contracts-coordinator": "^3.1.24",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.24",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-extensions": "^6.2.18",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/coordinator-server": "^1.0.5",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/migrations": "^6.5.10",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/protocol-utils": "^1.1.4",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/migrations": "^6.5.11",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/protocol-utils": "^1.1.5",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@azure/core-asynciterator-polyfill": "^1.0.0",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
@@ -93,21 +93,21 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/asset-swapper": "^5.8.0",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-erc1155": "^2.1.22",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-multisig": "^4.1.23",
|
||||
"@0x/contracts-staking": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-zero-ex": "^0.18.0",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/asset-swapper": "^5.8.2",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-erc1155": "^2.1.23",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-multisig": "^4.1.24",
|
||||
"@0x/contracts-staking": "^2.0.31",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-zero-ex": "^0.18.1",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethereumjs-util": "^6.2.0",
|
||||
"lodash": "^4.17.11"
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "4.1.24",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "4.1.23",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.1.24 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.1.23 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-multisig",
|
||||
"version": "4.1.23",
|
||||
"version": "4.1.24",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -49,18 +49,18 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/multisig",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/node": "12.12.54",
|
||||
@@ -78,7 +78,7 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "2.0.31",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "2.0.30",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v2.0.31 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v2.0.30 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-staking",
|
||||
"version": "2.0.30",
|
||||
"version": "2.0.31",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -53,20 +53,20 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/tokens",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/node": "12.12.54",
|
||||
"chai": "^4.0.1",
|
||||
@@ -87,10 +87,10 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethereumjs-util": "^5.1.1"
|
||||
},
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "5.3.20",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "5.3.19",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.3.20 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.3.19 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-test-utils",
|
||||
"version": "5.3.19",
|
||||
"version": "5.3.20",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -34,7 +34,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/test-utils",
|
||||
"devDependencies": {
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"shx": "^0.2.2",
|
||||
@@ -42,20 +42,20 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/assert": "^3.0.21",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-coverage": "^4.0.24",
|
||||
"@0x/sol-profiler": "^4.1.14",
|
||||
"@0x/sol-trace": "^3.0.24",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/json-schemas": "^5.4.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-coverage": "^4.0.29",
|
||||
"@0x/sol-profiler": "^4.1.19",
|
||||
"@0x/sol-trace": "^3.0.29",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/bn.js": "^4.11.0",
|
||||
"@types/js-combinatorics": "^0.5.29",
|
||||
"@types/lodash": "4.14.104",
|
||||
|
10
contracts/treasury/.npmignore
Normal file
10
contracts/treasury/.npmignore
Normal file
@@ -0,0 +1,10 @@
|
||||
# Blacklist all files
|
||||
.*
|
||||
*
|
||||
# Whitelist lib
|
||||
!lib/**/*
|
||||
# Whitelist Solidity contracts
|
||||
!contracts/src/**/*
|
||||
# Blacklist tests in lib
|
||||
/lib/test/*
|
||||
# Package specific ignore
|
12
contracts/treasury/CHANGELOG.json
Normal file
12
contracts/treasury/CHANGELOG.json
Normal file
@@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"version": "1.0.0",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Create this package",
|
||||
"pr": 120
|
||||
}
|
||||
],
|
||||
"timestamp": 1611869778
|
||||
}
|
||||
]
|
10
contracts/treasury/CHANGELOG.md
Normal file
10
contracts/treasury/CHANGELOG.md
Normal file
@@ -0,0 +1,10 @@
|
||||
<!--
|
||||
changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||
Edit the package's CHANGELOG.json file only.
|
||||
-->
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v1.0.0 - _January 28, 2021_
|
||||
|
||||
* Create this package (#120)
|
1
contracts/treasury/DEPLOYS.json
Normal file
1
contracts/treasury/DEPLOYS.json
Normal file
@@ -0,0 +1 @@
|
||||
[]
|
65
contracts/treasury/README.md
Normal file
65
contracts/treasury/README.md
Normal file
@@ -0,0 +1,65 @@
|
||||
## Governance
|
||||
|
||||
This package contains contracts for the governance of the 0x ZRX treasury.
|
||||
|
||||
## Installation
|
||||
|
||||
**Install**
|
||||
|
||||
```bash
|
||||
npm install @0x/contracts-treasury --save
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
|
||||
|
||||
For proposals regarding the 0x protocol's smart contract architecture, message format, or additional functionality, go to the [0x Improvement Proposals (ZEIPs)](https://github.com/0xProject/ZEIPs) repository and follow the contribution guidelines provided therein.
|
||||
|
||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||
|
||||
### Install Dependencies
|
||||
|
||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||
|
||||
```bash
|
||||
yarn config set workspaces-experimental true
|
||||
```
|
||||
|
||||
Then install dependencies
|
||||
|
||||
```bash
|
||||
yarn install
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-treasury yarn build
|
||||
```
|
||||
|
||||
Or continuously rebuild on change:
|
||||
|
||||
```bash
|
||||
PKG=@0x/contracts-treasury yarn watch
|
||||
```
|
||||
|
||||
### Clean
|
||||
|
||||
```bash
|
||||
yarn clean
|
||||
```
|
||||
|
||||
### Lint
|
||||
|
||||
```bash
|
||||
yarn lint
|
||||
```
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
29
contracts/treasury/compiler.json
Normal file
29
contracts/treasury/compiler.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"artifactsDir": "./test/generated-artifacts",
|
||||
"contractsDir": "./contracts",
|
||||
"useDockerisedSolc": false,
|
||||
"isOfflineMode": false,
|
||||
"shouldSaveStandardInput": true,
|
||||
"shouldCompileIndependently": true,
|
||||
"compilerSettings": {
|
||||
"evmVersion": "istanbul",
|
||||
"optimizer": {
|
||||
"enabled": true,
|
||||
"runs": 1000000,
|
||||
"details": { "yul": true, "deduplicate": true, "cse": true, "constantOptimizer": true }
|
||||
},
|
||||
"outputSelection": {
|
||||
"*": {
|
||||
"*": [
|
||||
"abi",
|
||||
"devdoc",
|
||||
"evm.bytecode.object",
|
||||
"evm.bytecode.sourceMap",
|
||||
"evm.deployedBytecode.object",
|
||||
"evm.deployedBytecode.sourceMap",
|
||||
"evm.methodIdentifiers"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
63
contracts/treasury/contracts/src/DefaultPoolOperator.sol
Normal file
63
contracts/treasury/contracts/src/DefaultPoolOperator.sol
Normal file
@@ -0,0 +1,63 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
/*
|
||||
|
||||
Copyright 2021 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.12;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
|
||||
import "./IStaking.sol";
|
||||
|
||||
|
||||
contract DefaultPoolOperator {
|
||||
using LibERC20TokenV06 for IERC20TokenV06;
|
||||
|
||||
// Immutables
|
||||
IStaking public immutable stakingProxy;
|
||||
IERC20TokenV06 public immutable weth;
|
||||
bytes32 public immutable poolId;
|
||||
|
||||
/// @dev Initializes this contract and creates a staking pool.
|
||||
/// @param stakingProxy_ The 0x staking proxy contract.
|
||||
/// @param weth_ The WETH token contract.
|
||||
constructor(
|
||||
IStaking stakingProxy_,
|
||||
IERC20TokenV06 weth_
|
||||
)
|
||||
public
|
||||
{
|
||||
stakingProxy = stakingProxy_;
|
||||
weth = weth_;
|
||||
// operator share = 100%
|
||||
poolId = stakingProxy_.createStakingPool(10 ** 6, false);
|
||||
}
|
||||
|
||||
/// @dev Sends this contract's entire WETH balance to the
|
||||
/// staking proxy contract. This function exists in case
|
||||
/// someone joins the default staking pool and starts
|
||||
/// market making for some reason, thus earning this contract
|
||||
/// some staking rewards. Note that anyone can call this
|
||||
/// function at any time.
|
||||
function returnStakingRewards()
|
||||
external
|
||||
{
|
||||
uint256 wethBalance = weth.compatBalanceOf(address(this));
|
||||
weth.compatTransfer(address(stakingProxy), wethBalance);
|
||||
}
|
||||
}
|
127
contracts/treasury/contracts/src/IStaking.sol
Normal file
127
contracts/treasury/contracts/src/IStaking.sol
Normal file
@@ -0,0 +1,127 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
/*
|
||||
|
||||
Copyright 2021 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.12;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
|
||||
interface IStaking {
|
||||
/// @dev Statuses that stake can exist in.
|
||||
/// Any stake can be (re)delegated effective at the next epoch
|
||||
/// Undelegated stake can be withdrawn if it is available in both the current and next epoch
|
||||
enum StakeStatus {
|
||||
UNDELEGATED,
|
||||
DELEGATED
|
||||
}
|
||||
|
||||
/// @dev Encapsulates a balance for the current and next epochs.
|
||||
/// Note that these balances may be stale if the current epoch
|
||||
/// is greater than `currentEpoch`.
|
||||
/// @param currentEpoch The current epoch
|
||||
/// @param currentEpochBalance Balance in the current epoch.
|
||||
/// @param nextEpochBalance Balance in `currentEpoch+1`.
|
||||
struct StoredBalance {
|
||||
uint64 currentEpoch;
|
||||
uint96 currentEpochBalance;
|
||||
uint96 nextEpochBalance;
|
||||
}
|
||||
|
||||
/// @dev Holds the metadata for a staking pool.
|
||||
/// @param operator Operator of the pool.
|
||||
/// @param operatorShare Fraction of the total balance owned by the operator, in ppm.
|
||||
struct Pool {
|
||||
address operator;
|
||||
uint32 operatorShare;
|
||||
}
|
||||
|
||||
/// @dev Create a new staking pool. The sender will be the operator of this pool.
|
||||
/// Note that an operator must be payable.
|
||||
/// @param operatorShare Portion of rewards owned by the operator, in ppm.
|
||||
/// @param addOperatorAsMaker Adds operator to the created pool as a maker for convenience iff true.
|
||||
/// @return poolId The unique pool id generated for this pool.
|
||||
function createStakingPool(uint32 operatorShare, bool addOperatorAsMaker)
|
||||
external
|
||||
returns (bytes32 poolId);
|
||||
|
||||
/// @dev Returns the current staking epoch number.
|
||||
/// @return epoch The current epoch.
|
||||
function currentEpoch()
|
||||
external
|
||||
view
|
||||
returns (uint256 epoch);
|
||||
|
||||
/// @dev Returns the time (in seconds) at which the current staking epoch started.
|
||||
/// @return startTime The start time of the current epoch, in seconds.
|
||||
function currentEpochStartTimeInSeconds()
|
||||
external
|
||||
view
|
||||
returns (uint256 startTime);
|
||||
|
||||
/// @dev Returns the duration of an epoch in seconds. This value can be updated.
|
||||
/// @return duration The duration of an epoch, in seconds.
|
||||
function epochDurationInSeconds()
|
||||
external
|
||||
view
|
||||
returns (uint256 duration);
|
||||
|
||||
/// @dev Returns a staking pool
|
||||
/// @param poolId Unique id of pool.
|
||||
function getStakingPool(bytes32 poolId)
|
||||
external
|
||||
view
|
||||
returns (Pool memory);
|
||||
|
||||
/// @dev Gets global stake for a given status.
|
||||
/// @param stakeStatus UNDELEGATED or DELEGATED
|
||||
/// @return balance Global stake for given status.
|
||||
function getGlobalStakeByStatus(StakeStatus stakeStatus)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
|
||||
/// @dev Gets an owner's stake balances by status.
|
||||
/// @param staker Owner of stake.
|
||||
/// @param stakeStatus UNDELEGATED or DELEGATED
|
||||
/// @return balance Owner's stake balances for given status.
|
||||
function getOwnerStakeByStatus(
|
||||
address staker,
|
||||
StakeStatus stakeStatus
|
||||
)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
|
||||
/// @dev Returns the total stake delegated to a specific staking pool,
|
||||
/// across all members.
|
||||
/// @param poolId Unique Id of pool.
|
||||
/// @return balance Total stake delegated to pool.
|
||||
function getTotalStakeDelegatedToPool(bytes32 poolId)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
|
||||
/// @dev Returns the stake delegated to a specific staking pool, by a given staker.
|
||||
/// @param staker of stake.
|
||||
/// @param poolId Unique Id of pool.
|
||||
/// @return balance Stake delegated to pool by staker.
|
||||
function getStakeDelegatedToPoolByOwner(address staker, bytes32 poolId)
|
||||
external
|
||||
view
|
||||
returns (StoredBalance memory balance);
|
||||
}
|
169
contracts/treasury/contracts/src/IZrxTreasury.sol
Normal file
169
contracts/treasury/contracts/src/IZrxTreasury.sol
Normal file
@@ -0,0 +1,169 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
/*
|
||||
|
||||
Copyright 2021 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.12;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "./DefaultPoolOperator.sol";
|
||||
import "./IStaking.sol";
|
||||
|
||||
|
||||
interface IZrxTreasury {
|
||||
|
||||
struct TreasuryParameters {
|
||||
uint256 votingPeriod;
|
||||
uint256 proposalThreshold;
|
||||
uint256 quorumThreshold;
|
||||
}
|
||||
|
||||
struct ProposedAction {
|
||||
address target;
|
||||
bytes data;
|
||||
uint256 value;
|
||||
}
|
||||
|
||||
struct Proposal {
|
||||
bytes32 actionsHash;
|
||||
uint256 executionEpoch;
|
||||
uint256 voteEpoch;
|
||||
uint256 votesFor;
|
||||
uint256 votesAgainst;
|
||||
bool executed;
|
||||
}
|
||||
|
||||
event ProposalCreated(
|
||||
address proposer,
|
||||
bytes32[] operatedPoolIds,
|
||||
uint256 proposalId,
|
||||
ProposedAction[] actions,
|
||||
uint256 executionEpoch,
|
||||
string description
|
||||
);
|
||||
|
||||
event VoteCast(
|
||||
address voter,
|
||||
bytes32[] operatedPoolIds,
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
uint256 votingPower
|
||||
);
|
||||
|
||||
event ProposalExecuted(uint256 proposalId);
|
||||
|
||||
function stakingProxy()
|
||||
external
|
||||
view
|
||||
returns (IStaking);
|
||||
|
||||
function defaultPoolOperator()
|
||||
external
|
||||
view
|
||||
returns (DefaultPoolOperator);
|
||||
|
||||
function defaultPoolId()
|
||||
external
|
||||
view
|
||||
returns (bytes32);
|
||||
|
||||
function votingPeriod()
|
||||
external
|
||||
view
|
||||
returns (uint256);
|
||||
|
||||
function proposalThreshold()
|
||||
external
|
||||
view
|
||||
returns (uint256);
|
||||
|
||||
function quorumThreshold()
|
||||
external
|
||||
view
|
||||
returns (uint256);
|
||||
|
||||
/// @dev Creates a proposal to send ZRX from this treasury on the
|
||||
/// the given actions. Must have at least `proposalThreshold`
|
||||
/// of voting power to call this function. See `getVotingPower`
|
||||
/// for how voting power is computed. If a proposal is successfully
|
||||
/// created, voting starts at the epoch after next (currentEpoch + 2).
|
||||
/// If the vote passes, the proposal is executable during the
|
||||
/// `executionEpoch`. See `hasProposalPassed` for the passing criteria.
|
||||
/// @param actions The proposed ZRX actions. An action specifies a
|
||||
/// contract call.
|
||||
/// @param executionEpoch The epoch during which the proposal is to
|
||||
/// be executed if it passes. Must be at least two epochs
|
||||
/// from the current epoch.
|
||||
/// @param description A text description for the proposal.
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return proposalId The ID of the newly created proposal.
|
||||
function propose(
|
||||
ProposedAction[] calldata actions,
|
||||
uint256 executionEpoch,
|
||||
string calldata description,
|
||||
bytes32[] calldata operatedPoolIds
|
||||
)
|
||||
external
|
||||
returns (uint256 proposalId);
|
||||
|
||||
/// @dev Casts a vote for the given proposal. Only callable
|
||||
/// during the voting period for that proposal. See
|
||||
/// `getVotingPower` for how voting power is computed.
|
||||
/// @param proposalId The ID of the proposal to vote on.
|
||||
/// @param support Whether to support the proposal or not.
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
function castVote(
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
bytes32[] calldata operatedPoolIds
|
||||
)
|
||||
external;
|
||||
|
||||
/// @dev Executes a proposal that has passed and is
|
||||
/// currently executable.
|
||||
/// @param proposalId The ID of the proposal to execute.
|
||||
/// @param actions Actions associated with the proposal to execute.
|
||||
function execute(uint256 proposalId, ProposedAction[] memory actions)
|
||||
external
|
||||
payable;
|
||||
|
||||
/// @dev Returns the total number of proposals.
|
||||
/// @return count The number of proposals.
|
||||
function proposalCount()
|
||||
external
|
||||
view
|
||||
returns (uint256 count);
|
||||
|
||||
/// @dev Computes the current voting power of the given account.
|
||||
/// Voting power is equal to:
|
||||
/// (ZRX delegated to the default pool) +
|
||||
/// 0.5 * (ZRX delegated to other pools) +
|
||||
/// 0.5 * (ZRX delegated to pools operated by account)
|
||||
/// @param account The address of the account.
|
||||
/// @param operatedPoolIds The pools operated by `account`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return votingPower The current voting power of the given account.
|
||||
function getVotingPower(address account, bytes32[] calldata operatedPoolIds)
|
||||
external
|
||||
view
|
||||
returns (uint256 votingPower);
|
||||
}
|
360
contracts/treasury/contracts/src/ZrxTreasury.sol
Normal file
360
contracts/treasury/contracts/src/ZrxTreasury.sol
Normal file
@@ -0,0 +1,360 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
/*
|
||||
|
||||
Copyright 2021 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.12;
|
||||
pragma experimental ABIEncoderV2;
|
||||
|
||||
import "@0x/contracts-erc20/contracts/src/v06/IERC20TokenV06.sol";
|
||||
import "@0x/contracts-erc20/contracts/src/v06/LibERC20TokenV06.sol";
|
||||
import "@0x/contracts-utils/contracts/src/v06/LibBytesV06.sol";
|
||||
import "@0x/contracts-utils/contracts/src/v06/LibSafeMathV06.sol";
|
||||
import "@0x/contracts-utils/contracts/src/v06/errors/LibRichErrorsV06.sol";
|
||||
import "@0x/contracts-zero-ex/contracts/src/features/libs/LibSignature.sol";
|
||||
import "./IZrxTreasury.sol";
|
||||
|
||||
|
||||
contract ZrxTreasury is
|
||||
IZrxTreasury
|
||||
{
|
||||
using LibERC20TokenV06 for IERC20TokenV06;
|
||||
using LibSafeMathV06 for uint256;
|
||||
using LibRichErrorsV06 for bytes;
|
||||
using LibBytesV06 for bytes;
|
||||
|
||||
// Immutables
|
||||
IStaking public immutable override stakingProxy;
|
||||
DefaultPoolOperator public immutable override defaultPoolOperator;
|
||||
bytes32 public immutable override defaultPoolId;
|
||||
uint256 public immutable override votingPeriod;
|
||||
uint256 public immutable override proposalThreshold;
|
||||
uint256 public immutable override quorumThreshold;
|
||||
|
||||
// Storage
|
||||
Proposal[] public proposals;
|
||||
mapping (uint256 => mapping (address => bool)) public hasVoted;
|
||||
|
||||
/// @dev Initializes the ZRX treasury and creates the default
|
||||
/// staking pool.
|
||||
/// @param stakingProxy_ The 0x staking proxy contract.
|
||||
/// @param weth_ The WETH token contract.
|
||||
/// @param params Immutable treasury parameters.
|
||||
constructor(
|
||||
IStaking stakingProxy_,
|
||||
IERC20TokenV06 weth_,
|
||||
TreasuryParameters memory params
|
||||
)
|
||||
public
|
||||
{
|
||||
require(
|
||||
params.votingPeriod < stakingProxy_.epochDurationInSeconds(),
|
||||
"VOTING_PERIOD_TOO_LONG"
|
||||
);
|
||||
stakingProxy = stakingProxy_;
|
||||
DefaultPoolOperator defaultPoolOperator_ = new DefaultPoolOperator(
|
||||
stakingProxy_,
|
||||
weth_
|
||||
);
|
||||
defaultPoolOperator = defaultPoolOperator_;
|
||||
defaultPoolId = defaultPoolOperator_.poolId();
|
||||
votingPeriod = params.votingPeriod;
|
||||
proposalThreshold = params.proposalThreshold;
|
||||
quorumThreshold = params.quorumThreshold;
|
||||
}
|
||||
|
||||
// solhint-disable
|
||||
/// @dev Allows this contract to receive ether.
|
||||
receive() external payable {}
|
||||
// solhint-enable
|
||||
|
||||
/// @dev Creates a proposal to send ZRX from this treasury on the
|
||||
/// the given actions. Must have at least `proposalThreshold`
|
||||
/// of voting power to call this function. See `getVotingPower`
|
||||
/// for how voting power is computed. If a proposal is successfully
|
||||
/// created, voting starts at the epoch after next (currentEpoch + 2).
|
||||
/// If the vote passes, the proposal is executable during the
|
||||
/// `executionEpoch`. See `hasProposalPassed` for the passing criteria.
|
||||
/// @param actions The proposed ZRX actions. An action specifies a
|
||||
/// contract call.
|
||||
/// @param executionEpoch The epoch during which the proposal is to
|
||||
/// be executed if it passes. Must be at least two epochs
|
||||
/// from the current epoch.
|
||||
/// @param description A text description for the proposal.
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return proposalId The ID of the newly created proposal.
|
||||
function propose(
|
||||
ProposedAction[] memory actions,
|
||||
uint256 executionEpoch,
|
||||
string memory description,
|
||||
bytes32[] memory operatedPoolIds
|
||||
)
|
||||
public
|
||||
override
|
||||
returns (uint256 proposalId)
|
||||
{
|
||||
require(
|
||||
getVotingPower(msg.sender, operatedPoolIds) >= proposalThreshold,
|
||||
"propose/INSUFFICIENT_VOTING_POWER"
|
||||
);
|
||||
require(
|
||||
actions.length > 0,
|
||||
"propose/NO_ACTIONS_PROPOSED"
|
||||
);
|
||||
uint256 currentEpoch = stakingProxy.currentEpoch();
|
||||
require(
|
||||
executionEpoch >= currentEpoch + 2,
|
||||
"propose/INVALID_EXECUTION_EPOCH"
|
||||
);
|
||||
|
||||
proposalId = proposalCount();
|
||||
Proposal storage newProposal = proposals.push();
|
||||
newProposal.actionsHash = keccak256(abi.encode(actions));
|
||||
newProposal.executionEpoch = executionEpoch;
|
||||
newProposal.voteEpoch = currentEpoch + 2;
|
||||
|
||||
emit ProposalCreated(
|
||||
msg.sender,
|
||||
operatedPoolIds,
|
||||
proposalId,
|
||||
actions,
|
||||
executionEpoch,
|
||||
description
|
||||
);
|
||||
}
|
||||
|
||||
/// @dev Casts a vote for the given proposal. Only callable
|
||||
/// during the voting period for that proposal. See
|
||||
/// `getVotingPower` for how voting power is computed.
|
||||
/// @param proposalId The ID of the proposal to vote on.
|
||||
/// @param support Whether to support the proposal or not.
|
||||
/// @param operatedPoolIds The pools operated by `msg.sender`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
function castVote(
|
||||
uint256 proposalId,
|
||||
bool support,
|
||||
bytes32[] memory operatedPoolIds
|
||||
)
|
||||
public
|
||||
override
|
||||
{
|
||||
if (proposalId >= proposalCount()) {
|
||||
revert("castVote/INVALID_PROPOSAL_ID");
|
||||
}
|
||||
if (hasVoted[proposalId][msg.sender]) {
|
||||
revert("castVote/ALREADY_VOTED");
|
||||
}
|
||||
|
||||
Proposal memory proposal = proposals[proposalId];
|
||||
if (
|
||||
proposal.voteEpoch != stakingProxy.currentEpoch() ||
|
||||
_hasVoteEnded(proposal.voteEpoch)
|
||||
) {
|
||||
revert("castVote/VOTING_IS_CLOSED");
|
||||
}
|
||||
|
||||
uint256 votingPower = getVotingPower(msg.sender, operatedPoolIds);
|
||||
if (votingPower == 0) {
|
||||
revert("castVote/NO_VOTING_POWER");
|
||||
}
|
||||
|
||||
if (support) {
|
||||
proposals[proposalId].votesFor = proposals[proposalId].votesFor
|
||||
.safeAdd(votingPower);
|
||||
hasVoted[proposalId][msg.sender] = true;
|
||||
} else {
|
||||
proposals[proposalId].votesAgainst = proposals[proposalId].votesAgainst
|
||||
.safeAdd(votingPower);
|
||||
hasVoted[proposalId][msg.sender] = true;
|
||||
}
|
||||
|
||||
emit VoteCast(
|
||||
msg.sender,
|
||||
operatedPoolIds,
|
||||
proposalId,
|
||||
support,
|
||||
votingPower
|
||||
);
|
||||
}
|
||||
|
||||
/// @dev Executes a proposal that has passed and is
|
||||
/// currently executable.
|
||||
/// @param proposalId The ID of the proposal to execute.
|
||||
/// @param actions Actions associated with the proposal to execute.
|
||||
function execute(uint256 proposalId, ProposedAction[] memory actions)
|
||||
public
|
||||
payable
|
||||
override
|
||||
{
|
||||
if (proposalId >= proposalCount()) {
|
||||
revert("execute/INVALID_PROPOSAL_ID");
|
||||
}
|
||||
Proposal memory proposal = proposals[proposalId];
|
||||
_assertProposalExecutable(proposal, actions);
|
||||
|
||||
proposals[proposalId].executed = true;
|
||||
|
||||
for (uint256 i = 0; i != actions.length; i++) {
|
||||
ProposedAction memory action = actions[i];
|
||||
(bool didSucceed, ) = action.target.call{value: action.value}(action.data);
|
||||
require(
|
||||
didSucceed,
|
||||
"execute/ACTION_EXECUTION_FAILED"
|
||||
);
|
||||
}
|
||||
|
||||
emit ProposalExecuted(proposalId);
|
||||
}
|
||||
|
||||
/// @dev Returns the total number of proposals.
|
||||
/// @return count The number of proposals.
|
||||
function proposalCount()
|
||||
public
|
||||
override
|
||||
view
|
||||
returns (uint256 count)
|
||||
{
|
||||
return proposals.length;
|
||||
}
|
||||
|
||||
/// @dev Computes the current voting power of the given account.
|
||||
/// Voting power is equal to:
|
||||
/// (ZRX delegated to the default pool) +
|
||||
/// 0.5 * (ZRX delegated to other pools) +
|
||||
/// 0.5 * (ZRX delegated to pools operated by account)
|
||||
/// @param account The address of the account.
|
||||
/// @param operatedPoolIds The pools operated by `account`. The
|
||||
/// ZRX currently delegated to those pools will be accounted
|
||||
/// for in the voting power.
|
||||
/// @return votingPower The current voting power of the given account.
|
||||
function getVotingPower(address account, bytes32[] memory operatedPoolIds)
|
||||
public
|
||||
override
|
||||
view
|
||||
returns (uint256 votingPower)
|
||||
{
|
||||
uint256 delegatedBalance = stakingProxy.getOwnerStakeByStatus(
|
||||
account,
|
||||
IStaking.StakeStatus.DELEGATED
|
||||
).currentEpochBalance;
|
||||
uint256 balanceDelegatedToDefaultPool = stakingProxy.getStakeDelegatedToPoolByOwner(
|
||||
account,
|
||||
defaultPoolId
|
||||
).currentEpochBalance;
|
||||
|
||||
// Voting power for ZRX delegated to the default pool is not diluted,
|
||||
// so we double-count the balance delegated to the default pool before
|
||||
// dividing by 2.
|
||||
votingPower = delegatedBalance
|
||||
.safeAdd(balanceDelegatedToDefaultPool)
|
||||
.safeDiv(2);
|
||||
|
||||
// Add voting power for operated staking pools.
|
||||
for (uint256 i = 0; i != operatedPoolIds.length; i++) {
|
||||
IStaking.Pool memory pool = stakingProxy.getStakingPool(operatedPoolIds[i]);
|
||||
require(
|
||||
pool.operator == account,
|
||||
"getVotingPower/POOL_NOT_OPERATED_BY_ACCOUNT"
|
||||
);
|
||||
uint96 stakeDelegatedToPool = stakingProxy
|
||||
.getTotalStakeDelegatedToPool(operatedPoolIds[i])
|
||||
.currentEpochBalance;
|
||||
uint256 poolVotingPower = uint256(stakeDelegatedToPool).safeDiv(2);
|
||||
votingPower = votingPower.safeAdd(poolVotingPower);
|
||||
}
|
||||
|
||||
return votingPower;
|
||||
}
|
||||
|
||||
/// @dev Checks whether the given proposal is executable.
|
||||
/// Reverts if not.
|
||||
/// @param proposal The proposal to check.
|
||||
function _assertProposalExecutable(
|
||||
Proposal memory proposal,
|
||||
ProposedAction[] memory actions
|
||||
)
|
||||
private
|
||||
view
|
||||
{
|
||||
require(
|
||||
keccak256(abi.encode(actions)) == proposal.actionsHash,
|
||||
"_assertProposalExecutable/INVALID_ACTIONS"
|
||||
);
|
||||
require(
|
||||
_hasProposalPassed(proposal),
|
||||
"_assertProposalExecutable/PROPOSAL_HAS_NOT_PASSED"
|
||||
);
|
||||
require(
|
||||
!proposal.executed,
|
||||
"_assertProposalExecutable/PROPOSAL_ALREADY_EXECUTED"
|
||||
);
|
||||
require(
|
||||
stakingProxy.currentEpoch() == proposal.executionEpoch,
|
||||
"_assertProposalExecutable/CANNOT_EXECUTE_THIS_EPOCH"
|
||||
);
|
||||
}
|
||||
|
||||
/// @dev Checks whether the given proposal has passed or not.
|
||||
/// @param proposal The proposal to check.
|
||||
/// @return hasPassed Whether the proposal has passed.
|
||||
function _hasProposalPassed(Proposal memory proposal)
|
||||
private
|
||||
view
|
||||
returns (bool hasPassed)
|
||||
{
|
||||
// Proposal is not passed until the vote is over.
|
||||
if (!_hasVoteEnded(proposal.voteEpoch)) {
|
||||
return false;
|
||||
}
|
||||
// Must have >50% support.
|
||||
if (proposal.votesFor <= proposal.votesAgainst) {
|
||||
return false;
|
||||
}
|
||||
// Must reach quorum threshold.
|
||||
if (proposal.votesFor < quorumThreshold) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// @dev Checks whether a vote starting at the given
|
||||
/// epoch has ended or not.
|
||||
/// @param voteEpoch The epoch at which the vote started.
|
||||
/// @return hasEnded Whether the vote has ended.
|
||||
function _hasVoteEnded(uint256 voteEpoch)
|
||||
private
|
||||
view
|
||||
returns (bool hasEnded)
|
||||
{
|
||||
uint256 currentEpoch = stakingProxy.currentEpoch();
|
||||
if (currentEpoch < voteEpoch) {
|
||||
return false;
|
||||
}
|
||||
if (currentEpoch > voteEpoch) {
|
||||
return true;
|
||||
}
|
||||
// voteEpoch == currentEpoch
|
||||
// Vote ends at currentEpochStartTime + votingPeriod
|
||||
uint256 voteEndTime = stakingProxy
|
||||
.currentEpochStartTimeInSeconds()
|
||||
.safeAdd(votingPeriod);
|
||||
return block.timestamp > voteEndTime;
|
||||
}
|
||||
}
|
88
contracts/treasury/package.json
Normal file
88
contracts/treasury/package.json
Normal file
@@ -0,0 +1,88 @@
|
||||
{
|
||||
"name": "@0x/contracts-treasury",
|
||||
"version": "1.0.0",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
"description": "Smart contracts for governing the 0x ZRX treasury",
|
||||
"main": "lib/src/index.js",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "yarn pre_build && yarn build:ts",
|
||||
"build:ci": "yarn build",
|
||||
"build:ts": "tsc -b",
|
||||
"pre_build": "run-s compile contracts:gen generate_contract_wrappers contracts:copy",
|
||||
"test": "yarn run_mocha",
|
||||
"rebuild_and_test": "run-s build test",
|
||||
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||
"compile": "sol-compiler",
|
||||
"watch": "sol-compiler -w",
|
||||
"clean": "shx rm -rf lib test/generated-artifacts test/generated-wrappers generated-artifacts generated-wrappers",
|
||||
"generate_contract_wrappers": "abi-gen --debug --abis ${npm_package_config_abis} --output test/generated-wrappers --backend ethers",
|
||||
"lint": "tslint --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./test/generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude ./test/generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
|
||||
"fix": "tslint --fix --format stylish --project . --exclude ./generated-wrappers/**/* --exclude ./generated-artifacts/**/* --exclude ./test/generated-wrappers/**/* --exclude ./test/generated-artifacts/**/* --exclude **/lib/**/* && yarn lint-contracts",
|
||||
"test:circleci": "yarn test",
|
||||
"contracts:gen": "contracts-gen generate",
|
||||
"contracts:copy": "contracts-gen copy",
|
||||
"lint-contracts": "#solhint -c ../.solhint.json contracts/**/**/**/**/*.sol",
|
||||
"docs:md": "ts-doc-gen --sourceDir='$PROJECT_FILES' --output=$MD_FILE_DIR --fileExtension=mdx --tsconfig=./typedoc-tsconfig.json",
|
||||
"docs:json": "typedoc --excludePrivate --excludeExternals --excludeProtected --ignoreCompilerErrors --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES",
|
||||
"publish:private": "yarn build && gitpkg publish"
|
||||
},
|
||||
"config": {
|
||||
"publicInterfaceContracts": "ZrxTreasury,DefaultPoolOperator",
|
||||
"abis:comment": "This list is auto-generated by contracts-gen. Don't edit manually.",
|
||||
"abis": "./test/generated-artifacts/@(DefaultPoolOperator|IStaking|IZrxTreasury|ZrxTreasury).json"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/0xProject/protocol.git"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/0xProject/protocol/issues"
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/treasury",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contract-addresses": "^5.8.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.3",
|
||||
"@0x/contracts-erc20": "^3.3.0",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-staking": "^2.0.29",
|
||||
"@0x/contracts-test-utils": "^5.3.18",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@types/isomorphic-fetch": "^0.0.35",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"@types/prompts": "^2.0.9",
|
||||
"isomorphic-fetch": "^3.0.0",
|
||||
"lodash": "^4.17.11",
|
||||
"mocha": "^6.2.0",
|
||||
"npm-run-all": "^4.1.2",
|
||||
"prompts": "^2.4.0",
|
||||
"shx": "^0.2.2",
|
||||
"solhint": "^1.4.1",
|
||||
"tslint": "5.11.0",
|
||||
"typedoc": "~0.16.11",
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/protocol-utils": "^1.1.3",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethereumjs-util": "^5.1.1"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
}
|
||||
}
|
13
contracts/treasury/src/artifacts.ts
Normal file
13
contracts/treasury/src/artifacts.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
/*
|
||||
* -----------------------------------------------------------------------------
|
||||
* Warning: This file is auto-generated by contracts-gen. Don't edit manually.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
import { ContractArtifact } from 'ethereum-types';
|
||||
|
||||
import * as DefaultPoolOperator from '../generated-artifacts/DefaultPoolOperator.json';
|
||||
import * as ZrxTreasury from '../generated-artifacts/ZrxTreasury.json';
|
||||
export const artifacts = {
|
||||
ZrxTreasury: ZrxTreasury as ContractArtifact,
|
||||
DefaultPoolOperator: DefaultPoolOperator as ContractArtifact,
|
||||
};
|
2
contracts/treasury/src/index.ts
Normal file
2
contracts/treasury/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { artifacts } from './artifacts';
|
||||
export { DefaultPoolOperatorContract, ZrxTreasuryContract } from './wrappers';
|
7
contracts/treasury/src/wrappers.ts
Normal file
7
contracts/treasury/src/wrappers.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
* -----------------------------------------------------------------------------
|
||||
* Warning: This file is auto-generated by contracts-gen. Don't edit manually.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
export * from '../generated-wrappers/default_pool_operator';
|
||||
export * from '../generated-wrappers/zrx_treasury';
|
17
contracts/treasury/test/artifacts.ts
Normal file
17
contracts/treasury/test/artifacts.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* -----------------------------------------------------------------------------
|
||||
* Warning: This file is auto-generated by contracts-gen. Don't edit manually.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
import { ContractArtifact } from 'ethereum-types';
|
||||
|
||||
import * as DefaultPoolOperator from '../test/generated-artifacts/DefaultPoolOperator.json';
|
||||
import * as IStaking from '../test/generated-artifacts/IStaking.json';
|
||||
import * as IZrxTreasury from '../test/generated-artifacts/IZrxTreasury.json';
|
||||
import * as ZrxTreasury from '../test/generated-artifacts/ZrxTreasury.json';
|
||||
export const artifacts = {
|
||||
DefaultPoolOperator: DefaultPoolOperator as ContractArtifact,
|
||||
IStaking: IStaking as ContractArtifact,
|
||||
IZrxTreasury: IZrxTreasury as ContractArtifact,
|
||||
ZrxTreasury: ZrxTreasury as ContractArtifact,
|
||||
};
|
583
contracts/treasury/test/treasury_test.ts
Normal file
583
contracts/treasury/test/treasury_test.ts
Normal file
@@ -0,0 +1,583 @@
|
||||
import { artifacts as assetProxyArtifacts, ERC20ProxyContract } from '@0x/contracts-asset-proxy';
|
||||
import { artifacts as erc20Artifacts, DummyERC20TokenContract } from '@0x/contracts-erc20';
|
||||
import {
|
||||
artifacts as stakingArtifacts,
|
||||
constants as stakingConstants,
|
||||
StakeInfo,
|
||||
StakeStatus,
|
||||
StakingProxyContract,
|
||||
TestStakingContract,
|
||||
ZrxVaultContract,
|
||||
} from '@0x/contracts-staking';
|
||||
import {
|
||||
blockchainTests,
|
||||
constants,
|
||||
expect,
|
||||
getRandomInteger,
|
||||
randomAddress,
|
||||
verifyEventsFromLogs,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { artifacts } from './artifacts';
|
||||
import { DefaultPoolOperatorContract, ZrxTreasuryContract, ZrxTreasuryEvents } from './wrappers';
|
||||
|
||||
blockchainTests.resets('Treasury governance', env => {
|
||||
const TREASURY_PARAMS = {
|
||||
votingPeriod: new BigNumber(3).times(stakingConstants.ONE_DAY_IN_SECONDS),
|
||||
proposalThreshold: new BigNumber(100),
|
||||
quorumThreshold: new BigNumber(1000),
|
||||
};
|
||||
const PROPOSAL_DESCRIPTION = 'A very compelling proposal!';
|
||||
const TREASURY_BALANCE = constants.INITIAL_ERC20_BALANCE;
|
||||
const INVALID_PROPOSAL_ID = new BigNumber(999);
|
||||
const GRANT_PROPOSALS = [
|
||||
{ recipient: randomAddress(), amount: getRandomInteger(1, TREASURY_BALANCE.dividedToIntegerBy(2)) },
|
||||
{ recipient: randomAddress(), amount: getRandomInteger(1, TREASURY_BALANCE.dividedToIntegerBy(2)) },
|
||||
];
|
||||
|
||||
interface ProposedAction {
|
||||
target: string;
|
||||
data: string;
|
||||
value: BigNumber;
|
||||
}
|
||||
|
||||
let zrx: DummyERC20TokenContract;
|
||||
let weth: DummyERC20TokenContract;
|
||||
let erc20ProxyContract: ERC20ProxyContract;
|
||||
let staking: TestStakingContract;
|
||||
let treasury: ZrxTreasuryContract;
|
||||
let defaultPoolId: string;
|
||||
let defaultPoolOperator: DefaultPoolOperatorContract;
|
||||
let admin: string;
|
||||
let nonDefaultPoolId: string;
|
||||
let poolOperator: string;
|
||||
let delegator: string;
|
||||
let actions: ProposedAction[];
|
||||
|
||||
async function deployStakingAsync(): Promise<void> {
|
||||
erc20ProxyContract = await ERC20ProxyContract.deployFrom0xArtifactAsync(
|
||||
assetProxyArtifacts.ERC20Proxy,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
assetProxyArtifacts,
|
||||
);
|
||||
const zrxVaultContract = await ZrxVaultContract.deployFrom0xArtifactAsync(
|
||||
stakingArtifacts.ZrxVault,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
stakingArtifacts,
|
||||
erc20ProxyContract.address,
|
||||
zrx.address,
|
||||
);
|
||||
await erc20ProxyContract.addAuthorizedAddress(zrxVaultContract.address).awaitTransactionSuccessAsync();
|
||||
await zrxVaultContract.addAuthorizedAddress(admin).awaitTransactionSuccessAsync();
|
||||
const stakingLogic = await TestStakingContract.deployFrom0xArtifactAsync(
|
||||
stakingArtifacts.TestStaking,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
artifacts,
|
||||
weth.address,
|
||||
zrxVaultContract.address,
|
||||
);
|
||||
const stakingProxyContract = await StakingProxyContract.deployFrom0xArtifactAsync(
|
||||
stakingArtifacts.StakingProxy,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
artifacts,
|
||||
stakingLogic.address,
|
||||
);
|
||||
await stakingProxyContract.addAuthorizedAddress(admin).awaitTransactionSuccessAsync();
|
||||
await zrxVaultContract.setStakingProxy(stakingProxyContract.address).awaitTransactionSuccessAsync();
|
||||
staking = new TestStakingContract(stakingProxyContract.address, env.provider, env.txDefaults);
|
||||
}
|
||||
|
||||
async function fastForwardToNextEpochAsync(): Promise<void> {
|
||||
const epochEndTime = await staking.getCurrentEpochEarliestEndTimeInSeconds().callAsync();
|
||||
const lastBlockTime = await env.web3Wrapper.getBlockTimestampAsync('latest');
|
||||
const dt = Math.max(0, epochEndTime.minus(lastBlockTime).toNumber());
|
||||
await env.web3Wrapper.increaseTimeAsync(dt);
|
||||
// mine next block
|
||||
await env.web3Wrapper.mineBlockAsync();
|
||||
await staking.endEpoch().awaitTransactionSuccessAsync();
|
||||
}
|
||||
|
||||
before(async () => {
|
||||
[admin, poolOperator, delegator] = await env.getAccountAddressesAsync();
|
||||
zrx = await DummyERC20TokenContract.deployFrom0xArtifactAsync(
|
||||
erc20Artifacts.DummyERC20Token,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
erc20Artifacts,
|
||||
constants.DUMMY_TOKEN_NAME,
|
||||
constants.DUMMY_TOKEN_SYMBOL,
|
||||
constants.DUMMY_TOKEN_DECIMALS,
|
||||
constants.DUMMY_TOKEN_TOTAL_SUPPLY,
|
||||
);
|
||||
weth = await DummyERC20TokenContract.deployFrom0xArtifactAsync(
|
||||
erc20Artifacts.DummyERC20Token,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
erc20Artifacts,
|
||||
constants.DUMMY_TOKEN_NAME,
|
||||
constants.DUMMY_TOKEN_SYMBOL,
|
||||
constants.DUMMY_TOKEN_DECIMALS,
|
||||
constants.DUMMY_TOKEN_TOTAL_SUPPLY,
|
||||
);
|
||||
await deployStakingAsync();
|
||||
await zrx.mint(constants.INITIAL_ERC20_BALANCE).awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await zrx.mint(constants.INITIAL_ERC20_BALANCE).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await zrx
|
||||
.approve(erc20ProxyContract.address, constants.INITIAL_ERC20_ALLOWANCE)
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await zrx
|
||||
.approve(erc20ProxyContract.address, constants.INITIAL_ERC20_ALLOWANCE)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
|
||||
const createStakingPoolTx = staking.createStakingPool(stakingConstants.PPM, false);
|
||||
nonDefaultPoolId = await createStakingPoolTx.callAsync({ from: poolOperator });
|
||||
await createStakingPoolTx.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
|
||||
treasury = await ZrxTreasuryContract.deployFrom0xArtifactAsync(
|
||||
artifacts.ZrxTreasury,
|
||||
env.provider,
|
||||
env.txDefaults,
|
||||
{ ...artifacts, ...erc20Artifacts },
|
||||
staking.address,
|
||||
weth.address,
|
||||
TREASURY_PARAMS,
|
||||
);
|
||||
await zrx.mint(TREASURY_BALANCE).awaitTransactionSuccessAsync();
|
||||
await zrx.transfer(treasury.address, TREASURY_BALANCE).awaitTransactionSuccessAsync();
|
||||
actions = [
|
||||
{
|
||||
target: zrx.address,
|
||||
data: zrx
|
||||
.transfer(GRANT_PROPOSALS[0].recipient, GRANT_PROPOSALS[0].amount)
|
||||
.getABIEncodedTransactionData(),
|
||||
value: constants.ZERO_AMOUNT,
|
||||
},
|
||||
{
|
||||
target: zrx.address,
|
||||
data: zrx
|
||||
.transfer(GRANT_PROPOSALS[1].recipient, GRANT_PROPOSALS[1].amount)
|
||||
.getABIEncodedTransactionData(),
|
||||
value: constants.ZERO_AMOUNT,
|
||||
},
|
||||
];
|
||||
|
||||
defaultPoolId = await treasury.defaultPoolId().callAsync();
|
||||
const defaultPoolOperatorAddress = await treasury.defaultPoolOperator().callAsync();
|
||||
defaultPoolOperator = new DefaultPoolOperatorContract(defaultPoolOperatorAddress, env.provider, env.txDefaults);
|
||||
});
|
||||
describe('getVotingPower()', () => {
|
||||
it('Unstaked ZRX has no voting power', async () => {
|
||||
const votingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(votingPower).to.bignumber.equal(0);
|
||||
});
|
||||
it('Staked but undelegated ZRX has no voting power', async () => {
|
||||
await staking.stake(constants.INITIAL_ERC20_BALANCE).awaitTransactionSuccessAsync({ from: delegator });
|
||||
const votingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(votingPower).to.bignumber.equal(0);
|
||||
});
|
||||
it('ZRX delegated during epoch N has no voting power during Epoch N', async () => {
|
||||
await staking.stake(TREASURY_PARAMS.proposalThreshold).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
const votingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(votingPower).to.bignumber.equal(0);
|
||||
await fastForwardToNextEpochAsync();
|
||||
});
|
||||
it('ZRX delegated to the default pool retains full voting power', async () => {
|
||||
await staking.stake(TREASURY_PARAMS.proposalThreshold).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const votingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(votingPower).to.bignumber.equal(TREASURY_PARAMS.proposalThreshold);
|
||||
});
|
||||
it('ZRX delegated to a non-default pool splits voting power between delegator and pool operator', async () => {
|
||||
await staking.stake(TREASURY_PARAMS.proposalThreshold).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, nonDefaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const delegatorVotingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(delegatorVotingPower).to.bignumber.equal(TREASURY_PARAMS.proposalThreshold.dividedBy(2));
|
||||
const operatorVotingPower = await treasury.getVotingPower(poolOperator, [nonDefaultPoolId]).callAsync();
|
||||
expect(operatorVotingPower).to.bignumber.equal(TREASURY_PARAMS.proposalThreshold.dividedBy(2));
|
||||
});
|
||||
it('Correctly sums voting power delegated to multiple pools', async () => {
|
||||
await staking
|
||||
.stake(TREASURY_PARAMS.proposalThreshold.times(2))
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
// Delegate half of total stake to the default pool.
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
// Delegate the other half to a non-default pool.
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, nonDefaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const delegatorVotingPower = await treasury.getVotingPower(delegator, []).callAsync();
|
||||
expect(delegatorVotingPower).to.bignumber.equal(TREASURY_PARAMS.proposalThreshold.times(1.5));
|
||||
});
|
||||
it('Correctly sums voting power for operator with multiple pools', async () => {
|
||||
const createStakingPoolTx = staking.createStakingPool(stakingConstants.PPM, false);
|
||||
const firstPool = nonDefaultPoolId;
|
||||
const secondPool = await createStakingPoolTx.callAsync({ from: poolOperator });
|
||||
await createStakingPoolTx.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
|
||||
const amountDelegatedToDefaultPool = new BigNumber(1337);
|
||||
const amountSelfDelegatedToFirstPool = new BigNumber(420);
|
||||
const amountExternallyDelegatedToSecondPool = new BigNumber(2020);
|
||||
|
||||
await staking
|
||||
.stake(amountDelegatedToDefaultPool.plus(amountSelfDelegatedToFirstPool))
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
amountDelegatedToDefaultPool,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, firstPool),
|
||||
amountSelfDelegatedToFirstPool,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await staking
|
||||
.stake(amountExternallyDelegatedToSecondPool)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, secondPool),
|
||||
amountExternallyDelegatedToSecondPool,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
|
||||
await fastForwardToNextEpochAsync();
|
||||
const votingPower = await treasury.getVotingPower(poolOperator, [firstPool, secondPool]).callAsync();
|
||||
expect(votingPower).to.bignumber.equal(
|
||||
amountDelegatedToDefaultPool
|
||||
.plus(amountSelfDelegatedToFirstPool)
|
||||
.plus(amountExternallyDelegatedToSecondPool.dividedToIntegerBy(2)),
|
||||
);
|
||||
});
|
||||
});
|
||||
describe('propose()', () => {
|
||||
it('Cannot create proposal without sufficient voting power', async () => {
|
||||
const votingPower = TREASURY_PARAMS.proposalThreshold.minus(1);
|
||||
await staking.stake(votingPower).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
votingPower,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
const tx = treasury
|
||||
.propose(actions, currentEpoch.plus(2), PROPOSAL_DESCRIPTION, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('propose/INSUFFICIENT_VOTING_POWER');
|
||||
});
|
||||
it('Cannot create proposal with no actions', async () => {
|
||||
const votingPower = TREASURY_PARAMS.proposalThreshold;
|
||||
await staking.stake(votingPower).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
votingPower,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
const tx = treasury
|
||||
.propose([], currentEpoch.plus(2), PROPOSAL_DESCRIPTION, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('propose/NO_ACTIONS_PROPOSED');
|
||||
});
|
||||
it('Cannot create proposal with an invalid execution epoch', async () => {
|
||||
const votingPower = TREASURY_PARAMS.proposalThreshold;
|
||||
await staking.stake(votingPower).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
votingPower,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
const tx = treasury
|
||||
.propose(actions, currentEpoch.plus(1), PROPOSAL_DESCRIPTION, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('propose/INVALID_EXECUTION_EPOCH');
|
||||
});
|
||||
it('Can create a valid proposal', async () => {
|
||||
const votingPower = TREASURY_PARAMS.proposalThreshold;
|
||||
await staking.stake(votingPower).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
votingPower,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
const executionEpoch = currentEpoch.plus(2);
|
||||
const tx = await treasury
|
||||
.propose(actions, executionEpoch, PROPOSAL_DESCRIPTION, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
const proposalId = new BigNumber(0);
|
||||
verifyEventsFromLogs(
|
||||
tx.logs,
|
||||
[
|
||||
{
|
||||
proposer: delegator,
|
||||
operatedPoolIds: [],
|
||||
proposalId,
|
||||
actions,
|
||||
executionEpoch,
|
||||
description: PROPOSAL_DESCRIPTION,
|
||||
},
|
||||
],
|
||||
ZrxTreasuryEvents.ProposalCreated,
|
||||
);
|
||||
expect(await treasury.proposalCount().callAsync()).to.bignumber.equal(1);
|
||||
});
|
||||
});
|
||||
describe('castVote()', () => {
|
||||
const VOTE_PROPOSAL_ID = new BigNumber(0);
|
||||
const DELEGATOR_VOTING_POWER = new BigNumber(420);
|
||||
|
||||
before(async () => {
|
||||
await staking.stake(DELEGATOR_VOTING_POWER).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
DELEGATOR_VOTING_POWER,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
await treasury
|
||||
.propose(actions, currentEpoch.plus(2), PROPOSAL_DESCRIPTION, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
});
|
||||
it('Cannot vote on invalid proposalId', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
await fastForwardToNextEpochAsync();
|
||||
const tx = treasury
|
||||
.castVote(INVALID_PROPOSAL_ID, true, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('castVote/INVALID_PROPOSAL_ID');
|
||||
});
|
||||
it('Cannot vote before voting period starts', async () => {
|
||||
const tx = treasury.castVote(VOTE_PROPOSAL_ID, true, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('castVote/VOTING_IS_CLOSED');
|
||||
});
|
||||
it('Cannot vote after voting period ends', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
await fastForwardToNextEpochAsync();
|
||||
await env.web3Wrapper.increaseTimeAsync(TREASURY_PARAMS.votingPeriod.plus(1).toNumber());
|
||||
await env.web3Wrapper.mineBlockAsync();
|
||||
const tx = treasury.castVote(VOTE_PROPOSAL_ID, true, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('castVote/VOTING_IS_CLOSED');
|
||||
});
|
||||
it('Cannot vote twice on same proposal', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
await fastForwardToNextEpochAsync();
|
||||
await treasury.castVote(VOTE_PROPOSAL_ID, true, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
const tx = treasury.castVote(VOTE_PROPOSAL_ID, false, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
return expect(tx).to.revertWith('castVote/ALREADY_VOTED');
|
||||
});
|
||||
it('Can cast a valid vote', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
await fastForwardToNextEpochAsync();
|
||||
const tx = await treasury
|
||||
.castVote(VOTE_PROPOSAL_ID, true, [])
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
verifyEventsFromLogs(
|
||||
tx.logs,
|
||||
[
|
||||
{
|
||||
voter: delegator,
|
||||
operatedPoolIds: [],
|
||||
proposalId: VOTE_PROPOSAL_ID,
|
||||
support: true,
|
||||
votingPower: DELEGATOR_VOTING_POWER,
|
||||
},
|
||||
],
|
||||
ZrxTreasuryEvents.VoteCast,
|
||||
);
|
||||
});
|
||||
});
|
||||
describe('execute()', () => {
|
||||
let passedProposalId: BigNumber;
|
||||
let failedProposalId: BigNumber;
|
||||
let defeatedProposalId: BigNumber;
|
||||
let ongoingVoteProposalId: BigNumber;
|
||||
|
||||
before(async () => {
|
||||
// OPerator has enough ZRX to create and pass a proposal
|
||||
await staking.stake(TREASURY_PARAMS.quorumThreshold).awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
TREASURY_PARAMS.quorumThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
// Delegator only has enough ZRX to create a proposal
|
||||
await staking.stake(TREASURY_PARAMS.proposalThreshold).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await staking
|
||||
.moveStake(
|
||||
new StakeInfo(StakeStatus.Undelegated),
|
||||
new StakeInfo(StakeStatus.Delegated, defaultPoolId),
|
||||
TREASURY_PARAMS.proposalThreshold,
|
||||
)
|
||||
.awaitTransactionSuccessAsync({ from: delegator });
|
||||
await fastForwardToNextEpochAsync();
|
||||
const currentEpoch = await staking.currentEpoch().callAsync();
|
||||
// Proposal 0
|
||||
let tx = treasury.propose(actions, currentEpoch.plus(4), PROPOSAL_DESCRIPTION, []);
|
||||
passedProposalId = await tx.callAsync({ from: delegator });
|
||||
await tx.awaitTransactionSuccessAsync({ from: delegator });
|
||||
// Proposal 1
|
||||
tx = treasury.propose(actions, currentEpoch.plus(3), PROPOSAL_DESCRIPTION, []);
|
||||
failedProposalId = await tx.callAsync({ from: delegator });
|
||||
await tx.awaitTransactionSuccessAsync({ from: delegator });
|
||||
// Proposal 2
|
||||
tx = treasury.propose(actions, currentEpoch.plus(3), PROPOSAL_DESCRIPTION, []);
|
||||
defeatedProposalId = await tx.callAsync({ from: delegator });
|
||||
await tx.awaitTransactionSuccessAsync({ from: delegator });
|
||||
|
||||
await fastForwardToNextEpochAsync();
|
||||
// Proposal 3
|
||||
tx = treasury.propose(actions, currentEpoch.plus(3), PROPOSAL_DESCRIPTION, []);
|
||||
ongoingVoteProposalId = await tx.callAsync({ from: delegator });
|
||||
await tx.awaitTransactionSuccessAsync({ from: delegator });
|
||||
|
||||
await fastForwardToNextEpochAsync();
|
||||
/********** Start Vote Epoch for Proposals 0, 1, 2 **********/
|
||||
// Proposal 0 passes
|
||||
await treasury.castVote(passedProposalId, true, []).awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
// Proposal 1 fails to reach quorum
|
||||
await treasury.castVote(failedProposalId, true, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
// Proposal 2 is voted down
|
||||
await treasury.castVote(defeatedProposalId, true, []).awaitTransactionSuccessAsync({ from: delegator });
|
||||
await treasury.castVote(defeatedProposalId, false, []).awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
/********** End Vote Epoch for Proposals 0, 1, 2 **********/
|
||||
|
||||
await fastForwardToNextEpochAsync();
|
||||
/********** Start Execution Epoch for Proposals 1, 2, 3 **********/
|
||||
/********** Start Vote Epoch for Proposal 3 **********************/
|
||||
// Proposal 3 has enough votes to pass, but the vote is ongoing
|
||||
await treasury
|
||||
.castVote(ongoingVoteProposalId, true, [])
|
||||
.awaitTransactionSuccessAsync({ from: poolOperator });
|
||||
});
|
||||
it('Cannot execute an invalid proposalId', async () => {
|
||||
const tx = treasury.execute(INVALID_PROPOSAL_ID, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('execute/INVALID_PROPOSAL_ID');
|
||||
});
|
||||
it('Cannot execute a proposal whose vote is ongoing', async () => {
|
||||
const tx = treasury.execute(ongoingVoteProposalId, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('_assertProposalExecutable/PROPOSAL_HAS_NOT_PASSED');
|
||||
});
|
||||
it('Cannot execute a proposal that failed to reach quorum', async () => {
|
||||
const tx = treasury.execute(failedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('_assertProposalExecutable/PROPOSAL_HAS_NOT_PASSED');
|
||||
});
|
||||
it('Cannot execute a proposal that was defeated in its vote', async () => {
|
||||
const tx = treasury.execute(defeatedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('_assertProposalExecutable/PROPOSAL_HAS_NOT_PASSED');
|
||||
});
|
||||
it('Cannot execute before or after the execution epoch', async () => {
|
||||
const tooEarly = treasury.execute(passedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
expect(tooEarly).to.revertWith('_assertProposalExecutable/CANNOT_EXECUTE_THIS_EPOCH');
|
||||
await fastForwardToNextEpochAsync();
|
||||
// Proposal 0 is executable here
|
||||
await fastForwardToNextEpochAsync();
|
||||
const tooLate = treasury.execute(passedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tooLate).to.revertWith('_assertProposalExecutable/CANNOT_EXECUTE_THIS_EPOCH');
|
||||
});
|
||||
it('Cannot execute the same proposal twice', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
await treasury.execute(passedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
const tx = treasury.execute(passedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('_assertProposalExecutable/PROPOSAL_ALREADY_EXECUTED');
|
||||
});
|
||||
it('Cannot execute actions that do not match the proposal `actionsHash`', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
const tx = treasury
|
||||
.execute(passedProposalId, [
|
||||
{
|
||||
target: zrx.address,
|
||||
data: zrx.transfer(randomAddress(), GRANT_PROPOSALS[0].amount).getABIEncodedTransactionData(),
|
||||
value: constants.ZERO_AMOUNT,
|
||||
},
|
||||
])
|
||||
.awaitTransactionSuccessAsync();
|
||||
return expect(tx).to.revertWith('_assertProposalExecutable/INVALID_ACTIONS');
|
||||
});
|
||||
it('Can execute a valid proposal', async () => {
|
||||
await fastForwardToNextEpochAsync();
|
||||
const tx = await treasury.execute(passedProposalId, actions).awaitTransactionSuccessAsync();
|
||||
verifyEventsFromLogs(tx.logs, [{ proposalId: passedProposalId }], ZrxTreasuryEvents.ProposalExecuted);
|
||||
expect(await zrx.balanceOf(GRANT_PROPOSALS[0].recipient).callAsync()).to.bignumber.equal(
|
||||
GRANT_PROPOSALS[0].amount,
|
||||
);
|
||||
expect(await zrx.balanceOf(GRANT_PROPOSALS[1].recipient).callAsync()).to.bignumber.equal(
|
||||
GRANT_PROPOSALS[1].amount,
|
||||
);
|
||||
});
|
||||
});
|
||||
describe('Default pool operator contract', () => {
|
||||
it('Returns WETH to the staking proxy', async () => {
|
||||
const wethAmount = new BigNumber(1337);
|
||||
await weth.mint(wethAmount).awaitTransactionSuccessAsync();
|
||||
// Some amount of WETH ends up in the default pool operator
|
||||
// contract, e.g. from errant staking rewards.
|
||||
await weth.transfer(defaultPoolOperator.address, wethAmount).awaitTransactionSuccessAsync();
|
||||
// This function should send all the WETH to the staking proxy.
|
||||
await defaultPoolOperator.returnStakingRewards().awaitTransactionSuccessAsync();
|
||||
expect(await weth.balanceOf(defaultPoolOperator.address).callAsync()).to.bignumber.equal(0);
|
||||
expect(await weth.balanceOf(staking.address).callAsync()).to.bignumber.equal(wethAmount);
|
||||
});
|
||||
});
|
||||
});
|
9
contracts/treasury/test/wrappers.ts
Normal file
9
contracts/treasury/test/wrappers.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* -----------------------------------------------------------------------------
|
||||
* Warning: This file is auto-generated by contracts-gen. Don't edit manually.
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
export * from '../test/generated-wrappers/default_pool_operator';
|
||||
export * from '../test/generated-wrappers/i_staking';
|
||||
export * from '../test/generated-wrappers/i_zrx_treasury';
|
||||
export * from '../test/generated-wrappers/zrx_treasury';
|
14
contracts/treasury/tsconfig.json
Normal file
14
contracts/treasury/tsconfig.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"extends": "../../tsconfig",
|
||||
"compilerOptions": { "outDir": "lib", "rootDir": ".", "resolveJsonModule": true },
|
||||
"include": ["./src/**/*", "./test/**/*", "./generated-wrappers/**/*"],
|
||||
"files": [
|
||||
"generated-artifacts/DefaultPoolOperator.json",
|
||||
"generated-artifacts/ZrxTreasury.json",
|
||||
"test/generated-artifacts/DefaultPoolOperator.json",
|
||||
"test/generated-artifacts/IStaking.json",
|
||||
"test/generated-artifacts/IZrxTreasury.json",
|
||||
"test/generated-artifacts/ZrxTreasury.json"
|
||||
],
|
||||
"exclude": ["./deploy/solc/solc_bin"]
|
||||
}
|
13
contracts/treasury/tslint.json
Normal file
13
contracts/treasury/tslint.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"extends": ["@0x/tslint-config"],
|
||||
"rules": {
|
||||
"custom-no-magic-numbers": false,
|
||||
"max-file-line-count": false,
|
||||
"no-non-null-assertion": false,
|
||||
"no-unnecessary-type-assertion": false,
|
||||
"number-literal-format": false
|
||||
},
|
||||
"linterOptions": {
|
||||
"exclude": ["src/artifacts.ts", "test/artifacts.ts"]
|
||||
}
|
||||
}
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "4.7.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "4.7.1",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v4.7.2 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v4.7.1 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-utils",
|
||||
"version": "4.7.1",
|
||||
"version": "4.7.2",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -50,15 +50,15 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/utils",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/bn.js": "^4.11.0",
|
||||
"@types/lodash": "4.14.104",
|
||||
"@types/mocha": "^5.2.7",
|
||||
@@ -79,9 +79,9 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"bn.js": "^4.11.8",
|
||||
"ethereum-types": "^3.4.0"
|
||||
},
|
||||
|
@@ -1,4 +1,14 @@
|
||||
[
|
||||
{
|
||||
"version": "0.18.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Swallow reverts in `batchGetLimitOrderRelevantStates()` and `batchGetRfqOrderRelevantStates()`",
|
||||
"pr": 117
|
||||
}
|
||||
],
|
||||
"timestamp": 1611648096
|
||||
},
|
||||
{
|
||||
"version": "0.18.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v0.18.1 - _January 26, 2021_
|
||||
|
||||
* Swallow reverts in `batchGetLimitOrderRelevantStates()` and `batchGetRfqOrderRelevantStates()` (#117)
|
||||
|
||||
## v0.18.0 - _January 13, 2021_
|
||||
|
||||
* Use consistent returndatasize checks in UniswapFeature (#96)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
## ERC20BridgeSampler
|
||||
## ZeroEx (ExchangeProxy)
|
||||
|
||||
This package contains contracts contracts for the ZeroEx extensible contract architecture.
|
||||
This package contains contracts for the ZeroEx extensible contract architecture.
|
||||
|
||||
## Installation
|
||||
|
||||
|
@@ -387,7 +387,9 @@ interface INativeOrdersFeature {
|
||||
bool isSignatureValid
|
||||
);
|
||||
|
||||
/// @dev Batch version of `getLimitOrderRelevantState()`.
|
||||
/// @dev Batch version of `getLimitOrderRelevantState()`, without reverting.
|
||||
/// Orders that would normally cause `getLimitOrderRelevantState()`
|
||||
/// to revert will have empty results.
|
||||
/// @param orders The limit orders.
|
||||
/// @param signatures The order signatures.
|
||||
/// @return orderInfos Info about the orders.
|
||||
@@ -406,7 +408,9 @@ interface INativeOrdersFeature {
|
||||
bool[] memory isSignatureValids
|
||||
);
|
||||
|
||||
/// @dev Batch version of `getRfqOrderRelevantState()`.
|
||||
/// @dev Batch version of `getRfqOrderRelevantState()`, without reverting.
|
||||
/// Orders that would normally cause `getRfqOrderRelevantState()`
|
||||
/// to revert will have empty results.
|
||||
/// @param orders The RFQ orders.
|
||||
/// @param signatures The order signatures.
|
||||
/// @return orderInfos Info about the orders.
|
||||
|
@@ -111,7 +111,7 @@ contract NativeOrdersFeature is
|
||||
/// @dev Name of this feature.
|
||||
string public constant override FEATURE_NAME = "LimitOrders";
|
||||
/// @dev Version of this feature.
|
||||
uint256 public immutable override FEATURE_VERSION = _encodeVersion(1, 0, 0);
|
||||
uint256 public immutable override FEATURE_VERSION = _encodeVersion(1, 0, 1);
|
||||
/// @dev Highest bit of a uint256, used to flag cancelled orders.
|
||||
uint256 private constant HIGH_BIT = 1 << 255;
|
||||
|
||||
@@ -772,7 +772,9 @@ contract NativeOrdersFeature is
|
||||
LibSignature.getSignerOfHash(orderInfo.orderHash, signature);
|
||||
}
|
||||
|
||||
/// @dev Batch version of `getLimitOrderRelevantState()`.
|
||||
/// @dev Batch version of `getLimitOrderRelevantState()`, without reverting.
|
||||
/// Orders that would normally cause `getLimitOrderRelevantState()`
|
||||
/// to revert will have empty results.
|
||||
/// @param orders The limit orders.
|
||||
/// @param signatures The order signatures.
|
||||
/// @return orderInfos Info about the orders.
|
||||
@@ -800,15 +802,25 @@ contract NativeOrdersFeature is
|
||||
actualFillableTakerTokenAmounts = new uint128[](orders.length);
|
||||
isSignatureValids = new bool[](orders.length);
|
||||
for (uint256 i = 0; i < orders.length; ++i) {
|
||||
(
|
||||
orderInfos[i],
|
||||
actualFillableTakerTokenAmounts[i],
|
||||
isSignatureValids[i]
|
||||
) = getLimitOrderRelevantState(orders[i], signatures[i]);
|
||||
try
|
||||
this.getLimitOrderRelevantState(orders[i], signatures[i])
|
||||
returns (
|
||||
LibNativeOrder.OrderInfo memory orderInfo,
|
||||
uint128 actualFillableTakerTokenAmount,
|
||||
bool isSignatureValid
|
||||
)
|
||||
{
|
||||
orderInfos[i] = orderInfo;
|
||||
actualFillableTakerTokenAmounts[i] = actualFillableTakerTokenAmount;
|
||||
isSignatureValids[i] = isSignatureValid;
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
}
|
||||
|
||||
/// @dev Batch version of `getRfqOrderRelevantState()`.
|
||||
/// @dev Batch version of `getRfqOrderRelevantState()`, without reverting.
|
||||
/// Orders that would normally cause `getRfqOrderRelevantState()`
|
||||
/// to revert will have empty results.
|
||||
/// @param orders The RFQ orders.
|
||||
/// @param signatures The order signatures.
|
||||
/// @return orderInfos Info about the orders.
|
||||
@@ -836,11 +848,19 @@ contract NativeOrdersFeature is
|
||||
actualFillableTakerTokenAmounts = new uint128[](orders.length);
|
||||
isSignatureValids = new bool[](orders.length);
|
||||
for (uint256 i = 0; i < orders.length; ++i) {
|
||||
(
|
||||
orderInfos[i],
|
||||
actualFillableTakerTokenAmounts[i],
|
||||
isSignatureValids[i]
|
||||
) = getRfqOrderRelevantState(orders[i], signatures[i]);
|
||||
try
|
||||
this.getRfqOrderRelevantState(orders[i], signatures[i])
|
||||
returns (
|
||||
LibNativeOrder.OrderInfo memory orderInfo,
|
||||
uint128 actualFillableTakerTokenAmount,
|
||||
bool isSignatureValid
|
||||
)
|
||||
{
|
||||
orderInfos[i] = orderInfo;
|
||||
actualFillableTakerTokenAmounts[i] = actualFillableTakerTokenAmount;
|
||||
isSignatureValids[i] = isSignatureValid;
|
||||
}
|
||||
catch {}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -103,8 +103,8 @@ library LibNativeOrder {
|
||||
// "uint128 makerAmount,",
|
||||
// "uint128 takerAmount,",
|
||||
// "address maker,",
|
||||
// "address txOrigin,",
|
||||
// "address taker,",
|
||||
// "address txOrigin,",
|
||||
// "bytes32 pool,",
|
||||
// "uint64 expiry,",
|
||||
// "uint256 salt"
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contracts-zero-ex",
|
||||
"version": "0.18.0",
|
||||
"version": "0.18.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -55,14 +55,14 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/contracts/zero-ex",
|
||||
"devDependencies": {
|
||||
"@0x/abi-gen": "^5.4.13",
|
||||
"@0x/abi-gen": "^5.4.19",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@types/isomorphic-fetch": "^0.0.35",
|
||||
@@ -82,13 +82,13 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/protocol-utils": "^1.1.4",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/protocol-utils": "^1.1.5",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethereumjs-util": "^5.1.1"
|
||||
},
|
||||
|
@@ -94,7 +94,7 @@ blockchainTests.resets('MetaTransactions feature', env => {
|
||||
value: getRandomInteger(1, '1e18'),
|
||||
feeToken: feeToken.address,
|
||||
feeAmount: getRandomInteger(1, MAX_FEE_AMOUNT),
|
||||
chainId: 1, // Ganache's `chainid` opcode is hardcoded as 1
|
||||
chainId: 1337,
|
||||
verifyingContract: zeroEx.address,
|
||||
...fields,
|
||||
});
|
||||
|
@@ -1,4 +1,11 @@
|
||||
import { blockchainTests, constants, describe, expect, verifyEventsFromLogs } from '@0x/contracts-test-utils';
|
||||
import {
|
||||
blockchainTests,
|
||||
constants,
|
||||
describe,
|
||||
expect,
|
||||
randomAddress,
|
||||
verifyEventsFromLogs,
|
||||
} from '@0x/contracts-test-utils';
|
||||
import {
|
||||
LimitOrder,
|
||||
LimitOrderFields,
|
||||
@@ -18,7 +25,7 @@ import { getRandomLimitOrder, getRandomRfqOrder } from '../utils/orders';
|
||||
import { TestMintableERC20TokenContract, TestRfqOriginRegistrationContract } from '../wrappers';
|
||||
|
||||
blockchainTests.resets('NativeOrdersFeature', env => {
|
||||
const { NULL_ADDRESS, MAX_UINT256, ZERO_AMOUNT } = constants;
|
||||
const { NULL_ADDRESS, MAX_UINT256, NULL_BYTES32, ZERO_AMOUNT } = constants;
|
||||
const GAS_PRICE = new BigNumber('123e9');
|
||||
const PROTOCOL_FEE_MULTIPLIER = 1337e3;
|
||||
const SINGLE_PROTOCOL_FEE = GAS_PRICE.times(PROTOCOL_FEE_MULTIPLIER);
|
||||
@@ -77,6 +84,7 @@ blockchainTests.resets('NativeOrdersFeature', env => {
|
||||
return getRandomLimitOrder({
|
||||
maker,
|
||||
verifyingContract,
|
||||
chainId: 1337,
|
||||
takerToken: takerToken.address,
|
||||
makerToken: makerToken.address,
|
||||
taker: NULL_ADDRESS,
|
||||
@@ -89,6 +97,7 @@ blockchainTests.resets('NativeOrdersFeature', env => {
|
||||
return getRandomRfqOrder({
|
||||
maker,
|
||||
verifyingContract,
|
||||
chainId: 1337,
|
||||
takerToken: takerToken.address,
|
||||
makerToken: makerToken.address,
|
||||
txOrigin: taker,
|
||||
@@ -1668,6 +1677,30 @@ blockchainTests.resets('NativeOrdersFeature', env => {
|
||||
expect(isSignatureValids[i]).to.eq(true);
|
||||
}
|
||||
});
|
||||
it('swallows reverts', async () => {
|
||||
const orders = new Array(3).fill(0).map(() => getTestLimitOrder());
|
||||
// The second order will revert because its maker token is not valid.
|
||||
orders[1].makerToken = randomAddress();
|
||||
await batchFundOrderMakerAsync(orders);
|
||||
const [orderInfos, fillableTakerAmounts, isSignatureValids] = await zeroEx
|
||||
.batchGetLimitOrderRelevantStates(
|
||||
orders,
|
||||
await Promise.all(orders.map(async o => o.getSignatureWithProviderAsync(env.provider))),
|
||||
)
|
||||
.callAsync();
|
||||
expect(orderInfos).to.be.length(orders.length);
|
||||
expect(fillableTakerAmounts).to.be.length(orders.length);
|
||||
expect(isSignatureValids).to.be.length(orders.length);
|
||||
for (let i = 0; i < orders.length; ++i) {
|
||||
expect(orderInfos[i]).to.deep.eq({
|
||||
orderHash: i === 1 ? NULL_BYTES32 : orders[i].getHash(),
|
||||
status: i === 1 ? OrderStatus.Invalid : OrderStatus.Fillable,
|
||||
takerTokenFilledAmount: ZERO_AMOUNT,
|
||||
});
|
||||
expect(fillableTakerAmounts[i]).to.bignumber.eq(i === 1 ? ZERO_AMOUNT : orders[i].takerAmount);
|
||||
expect(isSignatureValids[i]).to.eq(i !== 1);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
describe('batchGetRfqOrderRelevantStates()', () => {
|
||||
|
@@ -17,9 +17,11 @@ This page outlines upcoming releases and expected changes.
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
| **Name** | **Overview** | **Est Release Date** | **Status** | **Additional** |
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
| `big-pantsuit-energy`_ | Patch batch ```getOrderRelevantState()``` functions | 01/25/21 | Timelock | |
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
| `Squire`_ | Aggregation for `V4 Orders <../basics/orders.html>`_ | TBA | Development | Depends on AssetSwapper / 0x API Upgrade |
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
| `Babooshka`_ | Connect Exchange Proxy to Staking | 01/24/21 | Vote | Requires community vote |
|
||||
| `Babooshka`_ | Connect Exchange Proxy to Staking | 02/08/21 | Vote | Requires community vote |
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
| *The following releases have been deployed* | | | | |
|
||||
+---------------------------------------------+---------------------------------------------------------------+----------------------+-------------+-----------------------------------------------------------------------------------------------------------------------------+
|
||||
@@ -38,6 +40,12 @@ This page outlines upcoming releases and expected changes.
|
||||
Upcoming
|
||||
========
|
||||
|
||||
big-pantsuit-energy
|
||||
-------------------
|
||||
|
||||
- Swallow reverts in `batchGetRfqOrderRelevantStates()` and `batchGetLimitOrderRelevantStates()` functions.
|
||||
|
||||
|
||||
Squire
|
||||
-------
|
||||
|
||||
|
@@ -57,7 +57,7 @@
|
||||
"verdaccio": "docker run --rm -i -p 4873:4873 0xorg/verdaccio"
|
||||
},
|
||||
"config": {
|
||||
"contractsPackages": "@0x/contracts-asset-proxy @0x/contracts-dev-utils @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-exchange @0x/contracts-exchange-forwarder @0x/contracts-exchange-libs @0x/contracts-integrations @0x/contracts-multisig @0x/contracts-staking @0x/contracts-test-utils @0x/contracts-utils @0x/contracts-coordinator @0x/contracts-broker @0x/contracts-zero-ex",
|
||||
"contractsPackages": "@0x/contracts-asset-proxy @0x/contracts-dev-utils @0x/contracts-erc20 @0x/contracts-erc721 @0x/contracts-erc1155 @0x/contracts-exchange @0x/contracts-exchange-forwarder @0x/contracts-exchange-libs @0x/contracts-integrations @0x/contracts-multisig @0x/contracts-staking @0x/contracts-test-utils @0x/contracts-utils @0x/contracts-coordinator @0x/contracts-broker @0x/contracts-zero-ex @0x/contracts-treasury",
|
||||
"nonContractPackages": "@0x/order-utils @0x/migrations @0x/contract-wrappers @0x/contract-addresses @0x/contract-artifacts @0x/contract-wrappers-test @0x/asset-swapper",
|
||||
"ignoreTestsForPackages": "@0x/contracts-integrations @0x/contracts-staking @0x/contracts-exchange @0x/contracts-exchange-forwarder @0x/contracts-coordinator",
|
||||
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic",
|
||||
@@ -66,7 +66,7 @@
|
||||
"ignoreDependencyVersionsForPackage": "contract-wrappers"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0x/monorepo-scripts": "^3.0.4",
|
||||
"@0x/monorepo-scripts": "^3.0.5",
|
||||
"@0x-lerna-fork/lerna": "3.16.10",
|
||||
"@0xproject/npm-cli-login": "^0.0.11",
|
||||
"async-child-process": "^1.1.1",
|
||||
|
@@ -1,4 +1,23 @@
|
||||
[
|
||||
{
|
||||
"version": "5.8.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Fix error when Multihop data is not present",
|
||||
"pr": 80
|
||||
}
|
||||
],
|
||||
"timestamp": 1611869778
|
||||
},
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "5.8.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "5.8.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,14 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v5.8.2 - _January 28, 2021_
|
||||
|
||||
* Fix error when Multihop data is not present (#80)
|
||||
|
||||
## v5.8.1 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v5.8.0 - _January 13, 2021_
|
||||
|
||||
* Automatically Discover Kyber reserves for tokens using `getTradingReserves` (#111)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/asset-swapper",
|
||||
"version": "5.8.0",
|
||||
"version": "5.8.2",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -57,19 +57,19 @@
|
||||
"registry": "git@github.com:0xProject/gitpkg-registry.git"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/assert": "^3.0.21",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/contract-wrappers": "^13.12.1",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/contract-wrappers": "^13.12.2",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/json-schemas": "^5.4.1",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/orderbook": "0xProject/gitpkg-registry#0x-orderbook-v2.2.7-e10a81023",
|
||||
"@0x/quote-server": "^3.1.0",
|
||||
"@0x/quote-server": "^4.0.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@balancer-labs/sor": "0.3.2",
|
||||
"@bancor/sdk": "0.2.9",
|
||||
"@ethersproject/abi": "^5.0.1",
|
||||
@@ -86,19 +86,19 @@
|
||||
"lodash": "^4.17.11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-exchange-libs": "^4.3.22",
|
||||
"@0x/contracts-gen": "^2.0.24",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/contracts-zero-ex": "^0.18.0",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-exchange-libs": "^4.3.23",
|
||||
"@0x/contracts-gen": "^2.0.30",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/contracts-zero-ex": "^0.18.1",
|
||||
"@0x/mesh-rpc-client": "^9.4.2",
|
||||
"@0x/migrations": "^6.5.10",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/migrations": "^6.5.11",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
|
@@ -18,7 +18,7 @@ export {
|
||||
SRAPollingOrderProviderOpts,
|
||||
SRAWebsocketOrderProviderOpts,
|
||||
} from '@0x/orderbook';
|
||||
export { RFQTFirmQuote, RFQTIndicativeQuote, TakerRequestQueryParams } from '@0x/quote-server';
|
||||
export { V3RFQFirmQuote, V3RFQIndicativeQuote, TakerRequestQueryParams } from '@0x/quote-server';
|
||||
export {
|
||||
APIOrder,
|
||||
Asset,
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { RFQTIndicativeQuote } from '@0x/quote-server';
|
||||
import { V3RFQIndicativeQuote } from '@0x/quote-server';
|
||||
import { SignedOrder } from '@0x/types';
|
||||
import { BigNumber, NULL_ADDRESS } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
@@ -59,7 +59,7 @@ export async function getRfqtIndicativeQuotesAsync(
|
||||
assetFillAmount: BigNumber,
|
||||
comparisonPrice: BigNumber | undefined,
|
||||
opts: Partial<GetMarketOrdersOpts>,
|
||||
): Promise<RFQTIndicativeQuote[]> {
|
||||
): Promise<V3RFQIndicativeQuote[]> {
|
||||
if (opts.rfqt && opts.rfqt.isIndicative === true && opts.rfqt.quoteRequestor) {
|
||||
return opts.rfqt.quoteRequestor.requestRfqtIndicativeQuotesAsync(
|
||||
makerAssetData,
|
||||
@@ -70,7 +70,7 @@ export async function getRfqtIndicativeQuotesAsync(
|
||||
opts.rfqt,
|
||||
);
|
||||
} else {
|
||||
return Promise.resolve<RFQTIndicativeQuote[]>([]);
|
||||
return Promise.resolve<V3RFQIndicativeQuote[]>([]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,12 +204,15 @@ export class MarketOperationUtils {
|
||||
: Promise.resolve([]);
|
||||
|
||||
const [
|
||||
[tokenDecimals, orderFillableAmounts, ethToMakerAssetRate, ethToTakerAssetRate, dexQuotes, twoHopQuotes],
|
||||
[tokenDecimals, orderFillableAmounts, ethToMakerAssetRate, ethToTakerAssetRate, dexQuotes, rawTwoHopQuotes],
|
||||
rfqtIndicativeQuotes,
|
||||
offChainBalancerQuotes,
|
||||
offChainCreamQuotes,
|
||||
] = await Promise.all([samplerPromise, rfqtPromise, offChainBalancerPromise, offChainCreamPromise]);
|
||||
|
||||
// Filter out any invalid two hop quotes where we couldn't find a route
|
||||
const twoHopQuotes = rawTwoHopQuotes.filter(q => q && q.fillData && q.fillData.firstHopSource);
|
||||
|
||||
const [makerTokenDecimals, takerTokenDecimals] = tokenDecimals;
|
||||
return {
|
||||
side: MarketOperation.Sell,
|
||||
@@ -321,11 +324,15 @@ export class MarketOperationUtils {
|
||||
: Promise.resolve([]);
|
||||
|
||||
const [
|
||||
[tokenDecimals, orderFillableAmounts, ethToMakerAssetRate, ethToTakerAssetRate, dexQuotes, twoHopQuotes],
|
||||
[tokenDecimals, orderFillableAmounts, ethToMakerAssetRate, ethToTakerAssetRate, dexQuotes, rawTwoHopQuotes],
|
||||
rfqtIndicativeQuotes,
|
||||
offChainBalancerQuotes,
|
||||
offChainCreamQuotes,
|
||||
] = await Promise.all([samplerPromise, rfqtPromise, offChainBalancerPromise, offChainCreamPromise]);
|
||||
|
||||
// Filter out any invalid two hop quotes where we couldn't find a route
|
||||
const twoHopQuotes = rawTwoHopQuotes.filter(q => q && q.fillData && q.fillData.firstHopSource);
|
||||
|
||||
const [makerTokenDecimals, takerTokenDecimals] = tokenDecimals;
|
||||
return {
|
||||
side: MarketOperation.Buy,
|
||||
|
@@ -1,5 +1,5 @@
|
||||
import { assetDataUtils, ERC20AssetData, generatePseudoRandomSalt, orderCalculationUtils } from '@0x/order-utils';
|
||||
import { RFQTIndicativeQuote } from '@0x/quote-server';
|
||||
import { V3RFQIndicativeQuote } from '@0x/quote-server';
|
||||
import { SignedOrder } from '@0x/types';
|
||||
import { AbiEncoder, BigNumber } from '@0x/utils';
|
||||
|
||||
@@ -498,7 +498,7 @@ export function createNativeOrder(fill: NativeCollapsedFill): OptimizedMarketOrd
|
||||
}
|
||||
|
||||
export function createSignedOrdersFromRfqtIndicativeQuotes(
|
||||
quotes: RFQTIndicativeQuote[],
|
||||
quotes: V3RFQIndicativeQuote[],
|
||||
): SignedOrderWithFillableAmounts[] {
|
||||
return quotes.map(quote => {
|
||||
return {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
import { RFQTIndicativeQuote } from '@0x/quote-server';
|
||||
import { V3RFQIndicativeQuote } from '@0x/quote-server';
|
||||
import { MarketOperation, SignedOrder } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
|
||||
@@ -374,7 +374,7 @@ export interface MarketSideLiquidity {
|
||||
orderFillableAmounts: BigNumber[];
|
||||
ethToOutputRate: BigNumber;
|
||||
ethToInputRate: BigNumber;
|
||||
rfqtIndicativeQuotes: RFQTIndicativeQuote[];
|
||||
rfqtIndicativeQuotes: V3RFQIndicativeQuote[];
|
||||
twoHopQuotes: Array<DexSample<MultiHopFillData>>;
|
||||
quoteSourceFilters: SourceFilters;
|
||||
makerTokenDecimals: number;
|
||||
|
@@ -1,6 +1,5 @@
|
||||
import { SignedOrder } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import * as _ from 'lodash';
|
||||
|
||||
import { MarketOperation } from '../types';
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import { schemas, SchemaValidator } from '@0x/json-schemas';
|
||||
import { assetDataUtils, orderCalculationUtils, SignedOrder } from '@0x/order-utils';
|
||||
import { RFQTFirmQuote, RFQTIndicativeQuote, TakerRequestQueryParams } from '@0x/quote-server';
|
||||
import { TakerRequestQueryParams, V3RFQFirmQuote, V3RFQIndicativeQuote } from '@0x/quote-server';
|
||||
import { ERC20AssetData } from '@0x/types';
|
||||
import { BigNumber } from '@0x/utils';
|
||||
import Axios, { AxiosInstance } from 'axios';
|
||||
@@ -111,12 +111,15 @@ export class QuoteRequestor {
|
||||
|
||||
const requestParamsWithBigNumbers: Pick<
|
||||
TakerRequestQueryParams,
|
||||
'buyTokenAddress' | 'sellTokenAddress' | 'takerAddress' | 'comparisonPrice'
|
||||
'buyTokenAddress' | 'sellTokenAddress' | 'takerAddress' | 'comparisonPrice' | 'protocolVersion'
|
||||
> = {
|
||||
takerAddress,
|
||||
comparisonPrice: comparisonPrice === undefined ? undefined : comparisonPrice.toString(),
|
||||
buyTokenAddress,
|
||||
sellTokenAddress,
|
||||
|
||||
// The request parameter below defines what protocol version the RFQ servers should be returning.
|
||||
protocolVersion: '3',
|
||||
};
|
||||
|
||||
// convert BigNumbers to strings
|
||||
@@ -152,7 +155,7 @@ export class QuoteRequestor {
|
||||
marketOperation: MarketOperation,
|
||||
comparisonPrice: BigNumber | undefined,
|
||||
options: RfqtRequestOpts,
|
||||
): Promise<RFQTFirmQuote[]> {
|
||||
): Promise<V3RFQFirmQuote[]> {
|
||||
const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options };
|
||||
if (
|
||||
_opts.takerAddress === undefined ||
|
||||
@@ -164,7 +167,7 @@ export class QuoteRequestor {
|
||||
throw new Error('RFQ-T firm quotes require the presence of a taker address');
|
||||
}
|
||||
|
||||
const firmQuoteResponses = await this._getQuotesAsync<RFQTFirmQuote>( // not yet BigNumber
|
||||
const firmQuoteResponses = await this._getQuotesAsync<V3RFQFirmQuote>( // not yet BigNumber
|
||||
makerAssetData,
|
||||
takerAssetData,
|
||||
assetFillAmount,
|
||||
@@ -174,7 +177,7 @@ export class QuoteRequestor {
|
||||
'firm',
|
||||
);
|
||||
|
||||
const result: RFQTFirmQuote[] = [];
|
||||
const result: V3RFQFirmQuote[] = [];
|
||||
firmQuoteResponses.forEach(firmQuoteResponse => {
|
||||
const orderWithStringInts = firmQuoteResponse.response.signedOrder;
|
||||
|
||||
@@ -242,7 +245,7 @@ export class QuoteRequestor {
|
||||
marketOperation: MarketOperation,
|
||||
comparisonPrice: BigNumber | undefined,
|
||||
options: RfqtRequestOpts,
|
||||
): Promise<RFQTIndicativeQuote[]> {
|
||||
): Promise<V3RFQIndicativeQuote[]> {
|
||||
const _opts: RfqtRequestOpts = { ...constants.DEFAULT_RFQT_REQUEST_OPTS, ...options };
|
||||
|
||||
// Originally a takerAddress was required for indicative quotes, but
|
||||
@@ -254,7 +257,7 @@ export class QuoteRequestor {
|
||||
_opts.takerAddress = constants.NULL_ADDRESS;
|
||||
}
|
||||
|
||||
const responsesWithStringInts = await this._getQuotesAsync<RFQTIndicativeQuote>( // not yet BigNumber
|
||||
const responsesWithStringInts = await this._getQuotesAsync<V3RFQIndicativeQuote>( // not yet BigNumber
|
||||
makerAssetData,
|
||||
takerAssetData,
|
||||
assetFillAmount,
|
||||
@@ -307,7 +310,7 @@ export class QuoteRequestor {
|
||||
return this._orderSignatureToMakerUri[orderSignature];
|
||||
}
|
||||
|
||||
private _isValidRfqtIndicativeQuoteResponse(response: RFQTIndicativeQuote): boolean {
|
||||
private _isValidRfqtIndicativeQuoteResponse(response: V3RFQIndicativeQuote): boolean {
|
||||
const hasValidMakerAssetAmount =
|
||||
response.makerAssetAmount !== undefined &&
|
||||
this._schemaValidator.isValid(response.makerAssetAmount, schemas.wholeNumberSchema);
|
||||
|
@@ -42,6 +42,7 @@ describe('QuoteRequestor', async () => {
|
||||
sellAmountBaseUnits: '10000',
|
||||
comparisonPrice: undefined,
|
||||
takerAddress,
|
||||
protocolVersion: '3',
|
||||
};
|
||||
// Successful response
|
||||
const successfulOrder1 = testOrderFactory.generateTestSignedOrder({
|
||||
@@ -214,6 +215,7 @@ describe('QuoteRequestor', async () => {
|
||||
buyTokenAddress: makerToken,
|
||||
sellAmountBaseUnits: '10000',
|
||||
comparisonPrice: undefined,
|
||||
protocolVersion: '3',
|
||||
takerAddress,
|
||||
};
|
||||
// Successful response
|
||||
@@ -313,6 +315,7 @@ describe('QuoteRequestor', async () => {
|
||||
buyTokenAddress: makerToken,
|
||||
buyAmountBaseUnits: '10000',
|
||||
comparisonPrice: undefined,
|
||||
protocolVersion: '3',
|
||||
takerAddress,
|
||||
};
|
||||
// Successful response
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "3.11.1",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "3.11.0",
|
||||
"changes": [
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v3.11.1 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v3.11.0 - _January 4, 2021_
|
||||
|
||||
* Update IZeroEx artifact (#97)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-artifacts",
|
||||
"version": "3.11.0",
|
||||
"version": "3.11.1",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -30,7 +30,7 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/packages/contract-artifacts",
|
||||
"devDependencies": {
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@types/mocha": "^5.2.7",
|
||||
"chai": "^4.0.1",
|
||||
"lodash": "^4.17.11",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-wrappers-test",
|
||||
"version": "12.2.34",
|
||||
"version": "12.2.35",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -31,17 +31,17 @@
|
||||
},
|
||||
"homepage": "https://github.com/0xProject/protocol/tree/main/packages/contract-wrappers-test",
|
||||
"devDependencies": {
|
||||
"@0x/contract-wrappers": "^13.12.1",
|
||||
"@0x/contracts-test-utils": "^5.3.19",
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/migrations": "^6.5.10",
|
||||
"@0x/order-utils": "^10.4.14",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/contract-wrappers": "^13.12.2",
|
||||
"@0x/contracts-test-utils": "^5.3.20",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/migrations": "^6.5.11",
|
||||
"@0x/order-utils": "^10.4.15",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@types/nock": "^10.0.3",
|
||||
"chai": "^4.0.1",
|
||||
"dirty-chai": "^2.0.1",
|
||||
|
@@ -1,4 +1,13 @@
|
||||
[
|
||||
{
|
||||
"timestamp": 1611648096,
|
||||
"version": "13.12.2",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Dependencies updated"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "13.12.1",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v13.12.2 - _January 26, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
||||
## v13.12.1 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/contract-wrappers",
|
||||
"version": "13.12.1",
|
||||
"version": "13.12.2",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -55,13 +55,13 @@
|
||||
"typescript": "3.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/assert": "^3.0.19",
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/assert": "^3.0.21",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/json-schemas": "^5.3.4",
|
||||
"@0x/json-schemas": "^5.4.1",
|
||||
"@0x/types": "^3.3.1",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"ethereum-types": "^3.4.0",
|
||||
"ethers": "~4.0.4"
|
||||
},
|
||||
|
@@ -1,4 +1,14 @@
|
||||
[
|
||||
{
|
||||
"version": "6.5.11",
|
||||
"changes": [
|
||||
{
|
||||
"note": "Set BOTH networkId and chainId to 1337 in dockerfile",
|
||||
"pr": 118
|
||||
}
|
||||
],
|
||||
"timestamp": 1611648096
|
||||
},
|
||||
{
|
||||
"timestamp": 1610510890,
|
||||
"version": "6.5.10",
|
||||
|
@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
|
||||
|
||||
CHANGELOG
|
||||
|
||||
## v6.5.11 - _January 26, 2021_
|
||||
|
||||
* Set BOTH networkId and chainId to 1337 in dockerfile (#118)
|
||||
|
||||
## v6.5.10 - _January 13, 2021_
|
||||
|
||||
* Dependencies updated
|
||||
|
@@ -1,15 +1,15 @@
|
||||
FROM mhart/alpine-node:10
|
||||
FROM mhart/alpine-node:12
|
||||
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
RUN npm install -g ganache-cli@6.8.2
|
||||
RUN npm install -g ganache-cli@6.12.1
|
||||
|
||||
ENV MNEMONIC "concert load couple harbor equip island argue ramp clarify fence smart topic"
|
||||
ENV NETWORK_ID 50
|
||||
ENV NETWORK_ID 1337
|
||||
ENV CHAIN_ID 1337
|
||||
ENV VERSION "latest"
|
||||
ENV SNAPSHOT_HOST "http://ganache-snapshots.0x.org.s3-website.us-east-2.amazonaws.com"
|
||||
ENV SNAPSHOT_NAME "0x_ganache_snapshot"
|
||||
EXPOSE 8545
|
||||
|
||||
CMD [ "sh", "-c", "echo downloading snapshot version: $VERSION; wget $SNAPSHOT_HOST/$SNAPSHOT_NAME-$VERSION.zip -O snapshot.zip && unzip -o snapshot.zip && ganache-cli --gasLimit 12000000 --allowUnlimitedContractSize=true --db $SNAPSHOT_NAME --noVMErrorsOnRPCResponse -p 8545 --keepAliveTimeout=40000 --networkId \"$NETWORK_ID\" -m \"$MNEMONIC\" -h 0.0.0.0"]
|
||||
|
||||
CMD [ "sh", "-c", "echo downloading snapshot version: $VERSION; wget $SNAPSHOT_HOST/$SNAPSHOT_NAME-$VERSION.zip -O snapshot.zip && unzip -o snapshot.zip && ganache-cli --gasLimit 12000000 --allowUnlimitedContractSize=true --db $SNAPSHOT_NAME --noVMErrorsOnRPCResponse -p 8545 --keepAliveTimeout=40000 --networkId \"$NETWORK_ID\" --chainId \"$CHAIN_ID\" -m \"$MNEMONIC\" -h 0.0.0.0"]
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@0x/migrations",
|
||||
"version": "6.5.10",
|
||||
"version": "6.5.11",
|
||||
"engines": {
|
||||
"node": ">=6.12"
|
||||
},
|
||||
@@ -48,7 +48,7 @@
|
||||
"registry": "git@github.com:0xProject/gitpkg-registry.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@0x/dev-utils": "^4.1.3",
|
||||
"@0x/dev-utils": "^4.2.1",
|
||||
"@0x/ts-doc-gen": "^0.0.28",
|
||||
"@0x/tslint-config": "^4.1.3",
|
||||
"@0x/types": "^3.3.1",
|
||||
@@ -67,26 +67,26 @@
|
||||
"yargs": "^10.0.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"@0x/base-contract": "^6.2.14",
|
||||
"@0x/base-contract": "^6.2.18",
|
||||
"@0x/contract-addresses": "^5.9.0",
|
||||
"@0x/contracts-asset-proxy": "^3.7.4",
|
||||
"@0x/contracts-coordinator": "^3.1.23",
|
||||
"@0x/contracts-dev-utils": "^1.3.21",
|
||||
"@0x/contracts-erc1155": "^2.1.22",
|
||||
"@0x/contracts-erc20": "^3.3.1",
|
||||
"@0x/contracts-erc721": "^3.1.22",
|
||||
"@0x/contracts-exchange": "^3.2.23",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.23",
|
||||
"@0x/contracts-extensions": "^6.2.17",
|
||||
"@0x/contracts-multisig": "^4.1.23",
|
||||
"@0x/contracts-staking": "^2.0.30",
|
||||
"@0x/contracts-utils": "^4.7.1",
|
||||
"@0x/contracts-zero-ex": "^0.18.0",
|
||||
"@0x/sol-compiler": "^4.4.1",
|
||||
"@0x/subproviders": "^6.2.3",
|
||||
"@0x/contracts-asset-proxy": "^3.7.5",
|
||||
"@0x/contracts-coordinator": "^3.1.24",
|
||||
"@0x/contracts-dev-utils": "^1.3.22",
|
||||
"@0x/contracts-erc1155": "^2.1.23",
|
||||
"@0x/contracts-erc20": "^3.3.2",
|
||||
"@0x/contracts-erc721": "^3.1.23",
|
||||
"@0x/contracts-exchange": "^3.2.24",
|
||||
"@0x/contracts-exchange-forwarder": "^4.2.24",
|
||||
"@0x/contracts-extensions": "^6.2.18",
|
||||
"@0x/contracts-multisig": "^4.1.24",
|
||||
"@0x/contracts-staking": "^2.0.31",
|
||||
"@0x/contracts-utils": "^4.7.2",
|
||||
"@0x/contracts-zero-ex": "^0.18.1",
|
||||
"@0x/sol-compiler": "^4.5.2",
|
||||
"@0x/subproviders": "^6.4.1",
|
||||
"@0x/typescript-typings": "^5.1.6",
|
||||
"@0x/utils": "^6.1.1",
|
||||
"@0x/web3-wrapper": "^7.3.0",
|
||||
"@0x/utils": "^6.2.0",
|
||||
"@0x/web3-wrapper": "^7.4.1",
|
||||
"@ledgerhq/hw-app-eth": "^4.3.0",
|
||||
"@types/web3-provider-engine": "^14.0.0",
|
||||
"ethereum-types": "^3.4.0",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user