Compare commits
209 Commits
@0xproject
...
@0xproject
Author | SHA1 | Date | |
---|---|---|---|
|
3ba78553f0 | ||
|
4d485fc424 | ||
|
85f28ade86 | ||
|
f6f2991a44 | ||
|
4ea222bbff | ||
|
f9f5e04b41 | ||
|
ea6706a2af | ||
|
64c5c5eb40 | ||
|
823f2db09f | ||
|
a71e511f82 | ||
|
12d5c35d14 | ||
|
1a161cc02e | ||
|
96f19ba8da | ||
|
a63dfb7995 | ||
|
97ea1e300a | ||
|
d87d93dfac | ||
|
3ffcb03d87 | ||
|
33b08b90a3 | ||
|
cbca2061f7 | ||
|
bf4873e519 | ||
|
8fc1b38ff2 | ||
|
7d957538b4 | ||
|
7a8edb5018 | ||
|
2193d9ae6e | ||
|
79d01fe2d7 | ||
|
0d02037a12 | ||
|
d263f7783f | ||
|
d8ef76fd5e | ||
|
bc3c7a30c4 | ||
|
7b318b3cc2 | ||
|
e5cf41b313 | ||
|
74012ad584 | ||
|
06b4f007f8 | ||
|
a9cf425410 | ||
|
5355da6cad | ||
|
38f7c4a0d2 | ||
|
1fcf3c5dc4 | ||
|
20b0afacf5 | ||
|
6dbe8dbc50 | ||
|
73e23996a6 | ||
|
e40bce253c | ||
|
74c279ea3a | ||
|
6c13b792f9 | ||
|
6be7466c4a | ||
|
1dbdd7ee1f | ||
|
eb89926cee | ||
|
7923ff4ac6 | ||
|
783314c037 | ||
|
15cf64318c | ||
|
442017f93a | ||
|
4dd9f29769 | ||
|
f2f9bd2e7a | ||
|
d95b8ef3e1 | ||
|
ed0c64fdcf | ||
|
9a91e39b3f | ||
|
ce3f25d48f | ||
|
b669508c34 | ||
|
364d8824af | ||
|
749354b1c0 | ||
|
be73084e04 | ||
|
5eb90697c8 | ||
|
faedd2fa0b | ||
|
c47fb8f9a8 | ||
|
27b915789e | ||
|
ddc6dca98c | ||
|
72aa3d3005 | ||
|
e8d4f6d532 | ||
|
631e7e9c58 | ||
|
3c84ce2050 | ||
|
9db1ce7ceb | ||
|
e472f7899f | ||
|
b053781453 | ||
|
f892b7dbf6 | ||
|
b146acc69e | ||
|
63b941fbaf | ||
|
29dc22e208 | ||
|
c44f9e56ad | ||
|
2fe209d5ff | ||
|
41bd0e30d6 | ||
|
40f4dd91e9 | ||
|
5bf43a3560 | ||
|
f0afc0ae45 | ||
|
916b4d3a26 | ||
|
6d1a587c5c | ||
|
bce97c2543 | ||
|
34446cf569 | ||
|
1e13e927d0 | ||
|
3c0fa0b7e6 | ||
|
ad894fbdbb | ||
|
7d9c6eafbf | ||
|
de6f757ec8 | ||
|
3eeb8f4d6d | ||
|
f44ef7ce59 | ||
|
b08c616713 | ||
|
3ad693d334 | ||
|
7d8badc86e | ||
|
854d65b51b | ||
|
4aa67e2925 | ||
|
260ab2d413 | ||
|
a824957de7 | ||
|
4017c172a2 | ||
|
65b2c936ab | ||
|
eee190826a | ||
|
20a1deb187 | ||
|
9169913a2c | ||
|
df773d07f3 | ||
|
bf0ef055fb | ||
|
4e4842a62f | ||
|
a34c9095c3 | ||
|
efdbc1ff6c | ||
|
84a4b7d1c1 | ||
|
a9b5faa787 | ||
|
49a54c0ff6 | ||
|
70d403e6f8 | ||
|
eecf09f515 | ||
|
5b69cd4a22 | ||
|
61fc3346c2 | ||
|
c80b42712a | ||
|
8d76d74a17 | ||
|
b7e98abc43 | ||
|
6f72fed8b5 | ||
|
27575e9866 | ||
|
986ba175ce | ||
|
919b327fc5 | ||
|
e05b55d4a5 | ||
|
073bf738dd | ||
|
68e8d6f304 | ||
|
6f24337a53 | ||
|
0e8f5004d6 | ||
|
524e4707d2 | ||
|
22fa5a57a5 | ||
|
e30c76b743 | ||
|
a0fac663f7 | ||
|
277e58c2e5 | ||
|
75a51af006 | ||
|
24454938e5 | ||
|
774ab8a8ef | ||
|
21dc94b709 | ||
|
d6176872f7 | ||
|
c396be42b9 | ||
|
89a72ebf0d | ||
|
7f7ddee0f9 | ||
|
b99c797945 | ||
|
59edca4166 | ||
|
fbba5e054a | ||
|
ea47613d90 | ||
|
9d18f751c8 | ||
|
9745dfe2f4 | ||
|
29d38593d6 | ||
|
d76bc18bb7 | ||
|
cbe61ac315 | ||
|
250d97a7c4 | ||
|
249bf0163d | ||
|
20aaab0847 | ||
|
3e648cfb7e | ||
|
2106d7476d | ||
|
43e07e7ce3 | ||
|
5e4e27fed5 | ||
|
6c02722f56 | ||
|
5cfebd2680 | ||
|
bd20b1747d | ||
|
674e56cea6 | ||
|
61809130a6 | ||
|
f5e6e0eaf7 | ||
|
b2c423dd84 | ||
|
4a9752d7cd | ||
|
7db9a01639 | ||
|
e9cb5c069a | ||
|
03e4205700 | ||
|
fd9278ac02 | ||
|
1b7c7037b8 | ||
|
913264c811 | ||
|
e70b6630f9 | ||
|
6d53947fd8 | ||
|
1c0d982398 | ||
|
a88b4040ff | ||
|
e8073cd6f2 | ||
|
8281be235c | ||
|
9ce03e3515 | ||
|
667938696d | ||
|
a165281dcf | ||
|
185f70f2dd | ||
|
cd3e14f45a | ||
|
dd87588dfe | ||
|
29042e1939 | ||
|
4dbf6559aa | ||
|
b987b5988d | ||
|
6ba6bec105 | ||
|
d95b1e2db4 | ||
|
c1d6c7ff66 | ||
|
6e12794765 | ||
|
0f4b05e374 | ||
|
695b697cdf | ||
|
3aea0e3b2f | ||
|
c0e92d511e | ||
|
51f2a20b2a | ||
|
333a23f222 | ||
|
3bf3f479f5 | ||
|
6241d06f27 | ||
|
9e81d3c87b | ||
|
a9b2838c5f | ||
|
fbc39614c0 | ||
|
b2d6ac8dba | ||
|
b090b7b1f2 | ||
|
ba0696a0d7 | ||
|
b57850a225 | ||
|
4d9029bb0e | ||
|
bc49dde4d5 | ||
|
afe07b2926 |
@@ -124,6 +124,10 @@ jobs:
|
|||||||
key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
paths:
|
paths:
|
||||||
- ~/repo/packages/sol-cov/coverage/lcov.info
|
- ~/repo/packages/sol-cov/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/metacoin/coverage/lcov.info
|
||||||
lint:
|
lint:
|
||||||
working_directory: ~/repo
|
working_directory: ~/repo
|
||||||
docker:
|
docker:
|
||||||
@@ -177,6 +181,9 @@ jobs:
|
|||||||
- restore_cache:
|
- restore_cache:
|
||||||
keys:
|
keys:
|
||||||
- coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
|
- coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
- run: yarn report_coverage
|
- run: yarn report_coverage
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
|
6
.gitignore
vendored
6
.gitignore
vendored
@@ -74,11 +74,15 @@ packages/react-docs/example/public/bundle*
|
|||||||
bin/
|
bin/
|
||||||
|
|
||||||
# generated contract artifacts
|
# generated contract artifacts
|
||||||
packages/contracts/src/artifacts
|
packages/sol-cov/test/fixtures/artifacts
|
||||||
|
packages/metacoin/artifacts
|
||||||
|
packages/0x.js/test/artifacts
|
||||||
|
packages/migrations/src/artifacts
|
||||||
|
|
||||||
# generated contract wrappers
|
# generated contract wrappers
|
||||||
packages/0x.js/src/contract_wrappers/generated/
|
packages/0x.js/src/contract_wrappers/generated/
|
||||||
packages/contracts/src/contract_wrappers/generated/
|
packages/contracts/src/contract_wrappers/generated/
|
||||||
|
packages/metacoin/src/contract_wrappers
|
||||||
|
|
||||||
# solc-bin in deployer
|
# solc-bin in deployer
|
||||||
packages/deployer/solc_bin/
|
packages/deployer/solc_bin/
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
lib
|
lib
|
||||||
.nyc_output
|
.nyc_output
|
||||||
/packages/contracts/src/artifacts
|
/packages/contracts/src/artifacts
|
||||||
|
/packages/metacoin/artifacts
|
||||||
|
/packages/migrations/src/artifacts
|
||||||
package.json
|
package.json
|
||||||
scripts/postpublish_utils.js
|
scripts/postpublish_utils.js
|
||||||
|
@@ -36,7 +36,6 @@
|
|||||||
|
|
||||||
* [ ] Change requires a change to the documentation.
|
* [ ] Change requires a change to the documentation.
|
||||||
* [ ] Added tests to cover my changes.
|
* [ ] Added tests to cover my changes.
|
||||||
* [ ] Added new entries to the relevant CHANGELOGs.
|
* [ ] Added new entries to the relevant CHANGELOG.jsons.
|
||||||
* [ ] Updated the new versions of the changed packages in the relevant CHANGELOGs.
|
|
||||||
* [ ] Labeled this PR with the 'WIP' label if it is a work in progress.
|
* [ ] Labeled this PR with the 'WIP' label if it is a work in progress.
|
||||||
* [ ] Labeled this PR with the labels corresponding to the changed package.
|
* [ ] Labeled this PR with the labels corresponding to the changed package.
|
||||||
|
34
README.md
34
README.md
@@ -14,7 +14,6 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
|
|||||||
[](https://chat.0xproject.com)
|
[](https://chat.0xproject.com)
|
||||||
[](https://gitter.im/0xProject/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/0xProject/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
[](https://opensource.org/licenses/Apache-2.0)
|
[](https://opensource.org/licenses/Apache-2.0)
|
||||||
[](https://greenkeeper.io/)
|
|
||||||
|
|
||||||
### Published Packages
|
### Published Packages
|
||||||
|
|
||||||
@@ -32,7 +31,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
|
|||||||
| [`@0xproject/react-docs`](/packages/react-docs) | [](https://www.npmjs.com/package/@0xproject/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON |
|
| [`@0xproject/react-docs`](/packages/react-docs) | [](https://www.npmjs.com/package/@0xproject/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON |
|
||||||
| [`@0xproject/react-shared`](/packages/react-shared) | [](https://www.npmjs.com/package/@0xproject/react-shared) | 0x shared react components |
|
| [`@0xproject/react-shared`](/packages/react-shared) | [](https://www.npmjs.com/package/@0xproject/react-shared) | 0x shared react components |
|
||||||
| [`@0xproject/sra-report`](/packages/sra-report) | [](https://www.npmjs.com/package/@0xproject/sra-report) | Generate reports for standard relayer API compliance |
|
| [`@0xproject/sra-report`](/packages/sra-report) | [](https://www.npmjs.com/package/@0xproject/sra-report) | Generate reports for standard relayer API compliance |
|
||||||
| [`@0xproject/sol-cov`](/packages/sol-cov) | [](https://www.npmjs.com/package/@0xproject/sol-cov) | Solidity test coverage tool tool |
|
| [`@0xproject/sol-cov`](/packages/sol-cov) | [](https://www.npmjs.com/package/@0xproject/sol-cov) | Solidity test coverage tool |
|
||||||
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
||||||
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
||||||
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
||||||
@@ -56,6 +55,11 @@ Dedicated documentation pages:
|
|||||||
* [0x.js Library](https://0xproject.com/docs/0xjs)
|
* [0x.js Library](https://0xproject.com/docs/0xjs)
|
||||||
* [0x Connect](https://0xproject.com/docs/connect)
|
* [0x Connect](https://0xproject.com/docs/connect)
|
||||||
* [Smart contracts](https://0xproject.com/docs/contracts)
|
* [Smart contracts](https://0xproject.com/docs/contracts)
|
||||||
|
* [Subproviders](https://0xproject.com/docs/subproviders)
|
||||||
|
* [Deployer](https://0xproject.com/docs/deployer)
|
||||||
|
* [Web3-wrapper](https://0xproject.com/docs/web3-wrapper)
|
||||||
|
* [JSON-schemas](https://0xproject.com/docs/json-schemas)
|
||||||
|
* [Sol-cov](https://0xproject.com/docs/sol-cov)
|
||||||
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
|
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
|
||||||
|
|
||||||
Most of the packages require additional typings for external dependencies.
|
Most of the packages require additional typings for external dependencies.
|
||||||
@@ -69,7 +73,7 @@ You can include those by prepending @0xproject/typescript-typings package to you
|
|||||||
|
|
||||||
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.
|
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.
|
||||||
|
|
||||||
Please read our [contribution guidelines](./CONTRIBUTING.md) before getting started.
|
#### Read our [contribution guidelines](./CONTRIBUTING.md).
|
||||||
|
|
||||||
### Install dependencies
|
### Install dependencies
|
||||||
|
|
||||||
@@ -90,14 +94,14 @@ yarn install
|
|||||||
Build all packages. You need to do this before working on any given package. Although these packages
|
Build all packages. You need to do this before working on any given package. Although these packages
|
||||||
as independent, when run from within the monorepo, they are internally symlinked, to make development
|
as independent, when run from within the monorepo, they are internally symlinked, to make development
|
||||||
easier. You can change several packages and run the changes without publishing them first to NPM. When
|
easier. You can change several packages and run the changes without publishing them first to NPM. When
|
||||||
running `rebuild`, Lerna will figure out the dependency order of all the packages, and built them in
|
running `rebuild`, Lerna will figure out the dependency order of all the packages, and build them in
|
||||||
this order.
|
this order.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn lerna:rebuild
|
yarn lerna:rebuild
|
||||||
```
|
```
|
||||||
|
|
||||||
Continuously rebuild on change
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn dev
|
yarn dev
|
||||||
@@ -113,24 +117,6 @@ yarn lerna:run lint
|
|||||||
|
|
||||||
### Run Tests
|
### Run Tests
|
||||||
|
|
||||||
Before running the tests, you will need to spin up a [TestRPC](https://www.npmjs.com/package/ethereumjs-testrpc) instance and deploy all the 0x smart contracts.
|
|
||||||
|
|
||||||
In a separate terminal, start TestRPC (a convenience command is provided as part of this repo)
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn testrpc
|
yarn lerna:test
|
||||||
```
|
|
||||||
|
|
||||||
Then in your main terminal run
|
|
||||||
|
|
||||||
```
|
|
||||||
cd packages/contracts
|
|
||||||
yarn migrate
|
|
||||||
cd ..
|
|
||||||
```
|
|
||||||
|
|
||||||
And finally from the root project directory run
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn lerna:run test
|
|
||||||
```
|
```
|
||||||
|
@@ -13,11 +13,13 @@
|
|||||||
"test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js",
|
"test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js",
|
||||||
"lerna:install": "yarn install",
|
"lerna:install": "yarn install",
|
||||||
"lerna:run": "lerna run",
|
"lerna:run": "lerna run",
|
||||||
|
"lerna:test": "lerna run test",
|
||||||
"lerna:clean": "lerna run clean",
|
"lerna:clean": "lerna run clean",
|
||||||
"lerna:build": "lerna run build",
|
"lerna:build": "lerna run build",
|
||||||
"lerna:rebuild": "run-s lerna:clean lerna:build",
|
"lerna:rebuild": "run-s lerna:clean lerna:build",
|
||||||
"lerna:publish": "run-s lerna:install lerna:rebuild script:publish",
|
"lerna:publish": "run-s lerna:install lerna:rebuild script:publish",
|
||||||
"lerna:publish:dry": "run-s lerna:install lerna:rebuild script:publish:dry",
|
"lerna:publish:dry": "run-s lerna:install lerna:rebuild script:publish:dry",
|
||||||
|
"lerna:stage_docs": "lerna run docs:stage",
|
||||||
"script:publish": "node ./packages/monorepo-scripts/lib/publish.js",
|
"script:publish": "node ./packages/monorepo-scripts/lib/publish.js",
|
||||||
"script:publish:dry": "IS_DRY_RUN=true yarn script:publish"
|
"script:publish:dry": "IS_DRY_RUN=true yarn script:publish"
|
||||||
},
|
},
|
||||||
|
@@ -1,4 +1,43 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.36.1",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Internal changes and refactoring"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Fix redundant expired order removal bug",
|
||||||
|
"pr": 527
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1524044013
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.36.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Moved Web3.Provider to `@0xproject/types:Provider`",
|
||||||
|
"pr": 501
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Add `zeroEx.exchange.getOrderStateAsync` to allow obtaining current OrderState for a signedOrder",
|
||||||
|
"pr": 510
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1523462196
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.35.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Removed `ZeroExError.TransactionMiningTimeout` and moved it to '@0xproject/web3-wrapper' `Web3WrapperErrors.TransactionMiningTimeout`",
|
||||||
|
"pr": 485
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1522673609
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.34.0",
|
"version": "0.34.0",
|
||||||
"changes": [
|
"changes": [
|
||||||
@@ -35,8 +74,7 @@
|
|||||||
"pr": 456
|
"pr": 456
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1521298800,
|
"timestamp": 1521298800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.33.1",
|
"version": "0.33.1",
|
||||||
@@ -45,8 +83,7 @@
|
|||||||
"note": "Add missing EthersJs typescript typings as dependency"
|
"note": "Add missing EthersJs typescript typings as dependency"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520434800,
|
"timestamp": 1520434800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.33.0",
|
"version": "0.33.0",
|
||||||
@@ -72,8 +109,7 @@
|
|||||||
"pr": 429
|
"pr": 429
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520089200,
|
"timestamp": 1520089200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.32.2",
|
"version": "0.32.2",
|
||||||
@@ -83,8 +119,7 @@
|
|||||||
"pr": 389
|
"pr": 389
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1518102000,
|
"timestamp": 1518102000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.32.1",
|
"version": "0.32.1",
|
||||||
@@ -98,8 +133,7 @@
|
|||||||
"pr": 371
|
"pr": 371
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517929200,
|
"timestamp": 1517929200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.32.0",
|
"version": "0.32.0",
|
||||||
@@ -114,8 +148,7 @@
|
|||||||
"pr": 366
|
"pr": 366
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517756400,
|
"timestamp": 1517756400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.31.1",
|
"version": "0.31.1",
|
||||||
@@ -125,8 +158,7 @@
|
|||||||
"pr": 357
|
"pr": 357
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517410800,
|
"timestamp": 1517410800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.31.0",
|
"version": "0.31.0",
|
||||||
@@ -137,8 +169,7 @@
|
|||||||
"pr": 349
|
"pr": 349
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517238000,
|
"timestamp": 1517238000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.30.2",
|
"version": "0.30.2",
|
||||||
@@ -151,8 +182,7 @@
|
|||||||
"note": "Move @0xproject/types to dependencies from devDependencies fixing missing type errors"
|
"note": "Move @0xproject/types to dependencies from devDependencies fixing missing type errors"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517151600,
|
"timestamp": 1517151600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.30.1",
|
"version": "0.30.1",
|
||||||
@@ -166,8 +196,7 @@
|
|||||||
"pr": 341
|
"pr": 341
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1516719600,
|
"timestamp": 1516719600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.30.0",
|
"version": "0.30.0",
|
||||||
@@ -186,8 +215,7 @@
|
|||||||
"pr": 321
|
"pr": 321
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1516114800,
|
"timestamp": 1516114800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.29.1",
|
"version": "0.29.1",
|
||||||
@@ -197,8 +225,7 @@
|
|||||||
"pr": 305
|
"pr": 305
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1515596400,
|
"timestamp": 1515596400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.29.0",
|
"version": "0.29.0",
|
||||||
@@ -212,8 +239,7 @@
|
|||||||
"pr": 287
|
"pr": 287
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1514386800,
|
"timestamp": 1514386800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.28.0",
|
"version": "0.28.0",
|
||||||
@@ -259,8 +285,7 @@
|
|||||||
"pr": 278
|
"pr": 278
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1513695600,
|
"timestamp": 1513695600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.27.1",
|
"version": "0.27.1",
|
||||||
@@ -269,8 +294,7 @@
|
|||||||
"note": "Export `TransactionOpts` type"
|
"note": "Export `TransactionOpts` type"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1511794800,
|
"timestamp": 1511794800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.27.0",
|
"version": "0.27.0",
|
||||||
@@ -315,8 +339,7 @@
|
|||||||
"pr": 236
|
"pr": 236
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1511794800,
|
"timestamp": 1511794800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.26.0",
|
"version": "0.26.0",
|
||||||
@@ -336,8 +359,7 @@
|
|||||||
"pr": 225
|
"pr": 225
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1511190000,
|
"timestamp": 1511190000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.25.1",
|
"version": "0.25.1",
|
||||||
@@ -356,8 +378,7 @@
|
|||||||
"pr": 200
|
"pr": 200
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1510498800,
|
"timestamp": 1510498800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.23.0",
|
"version": "0.23.0",
|
||||||
@@ -370,8 +391,7 @@
|
|||||||
"note": "Subscribe callbacks now receive an error object as their first argument"
|
"note": "Subscribe callbacks now receive an error object as their first argument"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1510412400,
|
"timestamp": 1510412400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.6",
|
"version": "0.22.6",
|
||||||
@@ -381,8 +401,7 @@
|
|||||||
"pr": 206
|
"pr": 206
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1510239600,
|
"timestamp": 1510239600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.5",
|
"version": "0.22.5",
|
||||||
@@ -391,8 +410,7 @@
|
|||||||
"note": "Re-publish v0.22.4 to fix publishing issue"
|
"note": "Re-publish v0.22.4 to fix publishing issue"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1509980400,
|
"timestamp": 1509980400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.4",
|
"version": "0.22.4",
|
||||||
@@ -401,8 +419,7 @@
|
|||||||
"note": "Upgraded bignumber.js to a new version that ships with native typings"
|
"note": "Upgraded bignumber.js to a new version that ships with native typings"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1508857200,
|
"timestamp": 1508857200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.3",
|
"version": "0.22.3",
|
||||||
@@ -412,8 +429,7 @@
|
|||||||
"pr": 199
|
"pr": 199
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1508857200,
|
"timestamp": 1508857200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.2",
|
"version": "0.22.2",
|
||||||
@@ -423,8 +439,7 @@
|
|||||||
"pr": 197
|
"pr": 197
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1508770800,
|
"timestamp": 1508770800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.22.0",
|
"version": "0.22.0",
|
||||||
@@ -439,8 +454,7 @@
|
|||||||
"pr": 187
|
"pr": 187
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1508079600,
|
"timestamp": 1508079600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.21.4",
|
"version": "0.21.4",
|
||||||
@@ -451,8 +465,7 @@
|
|||||||
"pr": 194
|
"pr": 194
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507820400,
|
"timestamp": 1507820400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.21.3",
|
"version": "0.21.3",
|
||||||
@@ -462,8 +475,7 @@
|
|||||||
"pr": 193
|
"pr": 193
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507734000,
|
"timestamp": 1507734000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.21.2",
|
"version": "0.21.2",
|
||||||
@@ -473,8 +485,7 @@
|
|||||||
"pr": 190
|
"pr": 190
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507647600,
|
"timestamp": 1507647600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.21.1",
|
"version": "0.21.1",
|
||||||
@@ -484,8 +495,7 @@
|
|||||||
"pr": 189
|
"pr": 189
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507647600,
|
"timestamp": 1507647600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.21.0",
|
"version": "0.21.0",
|
||||||
@@ -531,8 +541,7 @@
|
|||||||
"pr": 185
|
"pr": 185
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507561200,
|
"timestamp": 1507561200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.20.0",
|
"version": "0.20.0",
|
||||||
@@ -550,8 +559,7 @@
|
|||||||
"pr": 181
|
"pr": 181
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1507129200,
|
"timestamp": 1507129200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.19.0",
|
"version": "0.19.0",
|
||||||
@@ -569,8 +577,7 @@
|
|||||||
"pr": 175
|
"pr": 175
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1506610800,
|
"timestamp": 1506610800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.18.0",
|
"version": "0.18.0",
|
||||||
@@ -580,8 +587,7 @@
|
|||||||
"pr": 170
|
"pr": 170
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1506351600,
|
"timestamp": 1506351600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.17.0",
|
"version": "0.17.0",
|
||||||
@@ -591,8 +597,7 @@
|
|||||||
"pr": 171
|
"pr": 171
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1506351600,
|
"timestamp": 1506351600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.16.0",
|
"version": "0.16.0",
|
||||||
@@ -615,8 +620,7 @@
|
|||||||
"pr": 165
|
"pr": 165
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1505833200,
|
"timestamp": 1505833200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.15.0",
|
"version": "0.15.0",
|
||||||
@@ -627,8 +631,7 @@
|
|||||||
"pr": 161
|
"pr": 161
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504796400,
|
"timestamp": 1504796400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.14.2",
|
"version": "0.14.2",
|
||||||
@@ -638,8 +641,7 @@
|
|||||||
"pr": 160
|
"pr": 160
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504710000,
|
"timestamp": 1504710000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.14.1",
|
"version": "0.14.1",
|
||||||
@@ -649,8 +651,7 @@
|
|||||||
"pr": 159
|
"pr": 159
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504710000,
|
"timestamp": 1504710000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.14.0",
|
"version": "0.14.0",
|
||||||
@@ -668,8 +669,7 @@
|
|||||||
"pr": 157
|
"pr": 157
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504623600,
|
"timestamp": 1504623600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.13.0",
|
"version": "0.13.0",
|
||||||
@@ -693,8 +693,7 @@
|
|||||||
"pr": 152
|
"pr": 152
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504623600,
|
"timestamp": 1504623600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.12.1",
|
"version": "0.12.1",
|
||||||
@@ -712,8 +711,7 @@
|
|||||||
"pr": 139
|
"pr": 139
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1504278000,
|
"timestamp": 1504278000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.11.0",
|
"version": "0.11.0",
|
||||||
@@ -731,8 +729,7 @@
|
|||||||
"pr": 137
|
"pr": 137
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1503500400,
|
"timestamp": 1503500400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.10.4",
|
"version": "0.10.4",
|
||||||
@@ -742,8 +739,7 @@
|
|||||||
"pr": 135
|
"pr": 135
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1503500400,
|
"timestamp": 1503500400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.10.1",
|
"version": "0.10.1",
|
||||||
@@ -797,8 +793,7 @@
|
|||||||
"pr": 127
|
"pr": 127
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1503500400,
|
"timestamp": 1503500400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.9.3",
|
"version": "0.9.3",
|
||||||
@@ -808,8 +803,7 @@
|
|||||||
"pr": 118
|
"pr": 118
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1503327600,
|
"timestamp": 1503327600
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.9.2",
|
"version": "0.9.2",
|
||||||
@@ -822,8 +816,7 @@
|
|||||||
"pr": 118
|
"pr": 118
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1503241200,
|
"timestamp": 1503241200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.9.1",
|
"version": "0.9.1",
|
||||||
@@ -833,8 +826,7 @@
|
|||||||
"pr": 120
|
"pr": 120
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1502809200,
|
"timestamp": 1502809200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.9.0",
|
"version": "0.9.0",
|
||||||
@@ -871,8 +863,7 @@
|
|||||||
"pr": 109
|
"pr": 109
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1500994800,
|
"timestamp": 1500994800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.8.0",
|
"version": "0.8.0",
|
||||||
@@ -914,8 +905,7 @@
|
|||||||
"note": "Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance"
|
"note": "Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1499094000,
|
"timestamp": 1499094000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.7.1",
|
"version": "0.7.1",
|
||||||
@@ -926,8 +916,7 @@
|
|||||||
"pr": 81
|
"pr": 81
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1498402800,
|
"timestamp": 1498402800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.7.0",
|
"version": "0.7.0",
|
||||||
@@ -949,8 +938,7 @@
|
|||||||
"Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`"
|
"Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1498057200,
|
"timestamp": 1498057200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.6.2",
|
"version": "0.6.2",
|
||||||
@@ -962,8 +950,7 @@
|
|||||||
"note": "Improved documentation"
|
"note": "Improved documentation"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1497970800,
|
"timestamp": 1497970800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
@@ -972,8 +959,7 @@
|
|||||||
"note": "Improved documentation"
|
"note": "Improved documentation"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1497798000,
|
"timestamp": 1497798000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.6.0",
|
"version": "0.6.0",
|
||||||
@@ -985,8 +971,7 @@
|
|||||||
"note": "Added types for contract event arguments"
|
"note": "Added types for contract event arguments"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1497798000,
|
"timestamp": 1497798000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.5.2",
|
"version": "0.5.2",
|
||||||
@@ -996,8 +981,7 @@
|
|||||||
"Fixed the bug in `postpublish` script that caused that only unminified UMD bundle was uploaded to release page"
|
"Fixed the bug in `postpublish` script that caused that only unminified UMD bundle was uploaded to release page"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1497452400,
|
"timestamp": 1497452400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
@@ -1006,7 +990,6 @@
|
|||||||
"note": "Added `postpublish` script to publish to Github Releases with assets."
|
"note": "Added `postpublish` script to publish to Github Releases with assets."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1497452400,
|
"timestamp": 1497452400
|
||||||
"isPublished": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -5,6 +5,20 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.36.1 - _April 18, 2018_
|
||||||
|
|
||||||
|
* Internal changes and refactoring
|
||||||
|
* Fix redundant expired order removal bug (#527)
|
||||||
|
|
||||||
|
## v0.36.0 - _April 12, 2018_
|
||||||
|
|
||||||
|
* Moved Web3.Provider to `@0xproject/types:Provider` (#501)
|
||||||
|
* Add `zeroEx.exchange.getOrderStateAsync` to allow obtaining current OrderState for a signedOrder (#510)
|
||||||
|
|
||||||
|
## v0.35.0 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Removed `ZeroExError.TransactionMiningTimeout` and moved it to '@0xproject/web3-wrapper' `Web3WrapperErrors.TransactionMiningTimeout` (#485)
|
||||||
|
|
||||||
## v0.34.0 - _April 2, 2018_
|
## v0.34.0 - _April 2, 2018_
|
||||||
|
|
||||||
* Fix the bug causing `zeroEx.exchange.fillOrdersUpToAsync` validation to fail if there were some extra orders passed (#470)
|
* Fix the bug causing `zeroEx.exchange.fillOrdersUpToAsync` validation to fail if there were some extra orders passed (#470)
|
||||||
|
@@ -1,5 +1,9 @@
|
|||||||
## 0x.js
|
## 0x.js
|
||||||
|
|
||||||
|
A TypeScript/Javascript library for interacting with the 0x protocol.
|
||||||
|
|
||||||
|
### Read the [Documentation](https://0xproject.com/docs/0x.js).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package.
|
0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package.
|
||||||
@@ -38,10 +42,66 @@ Download the UMD module from our [releases page](https://github.com/0xProject/0x
|
|||||||
<script type="text/javascript" src="0x.js"></script>
|
<script type="text/javascript" src="0x.js"></script>
|
||||||
```
|
```
|
||||||
|
|
||||||
## Documentation
|
## Contributing
|
||||||
|
|
||||||
Extensive documentation of 0x.js can be found on [our website][docs-url].
|
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.
|
||||||
|
|
||||||
[website-url]: https://0xproject.com/
|
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||||
[whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf
|
|
||||||
[docs-url]: https://0xproject.com/docs/0xjs
|
### 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
|
||||||
|
|
||||||
|
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lerna:rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also build this specific package by running the following from within its directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build:watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clean
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn clean
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lint
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### Run Tests
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn test
|
||||||
|
```
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "0x.js",
|
"name": "0x.js",
|
||||||
"version": "0.34.0",
|
"version": "0.36.1",
|
||||||
"description": "A javascript library for interacting with the 0x protocol",
|
"description": "A javascript library for interacting with the 0x protocol",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"0x.js",
|
"0x.js",
|
||||||
@@ -15,24 +15,26 @@
|
|||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"prebuild": "run-s clean generate_contract_wrappers",
|
"prebuild": "run-s clean generate_contract_wrappers",
|
||||||
"build": "run-p build:umd:prod build:commonjs; exit 0;",
|
"build": "run-p build:umd:prod build:commonjs; exit 0;",
|
||||||
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
||||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||||
"test:circleci": "run-s test:coverage",
|
"test:circleci": "run-s test:coverage",
|
||||||
"test": "run-s clean test:commonjs",
|
"test": "run-s clean test:commonjs",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"update_contracts": "for i in ${npm_package_config_artifacts}; do copyfiles -u 4 ../contracts/build/contracts/$i.json ../0x.js/src/artifacts; done;",
|
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/src/artifacts/$i.json test/artifacts; done;",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp scripts",
|
"clean": "shx rm -rf _bundles lib test_temp scripts",
|
||||||
"build:umd:prod": "NODE_ENV=production webpack",
|
"build:umd:prod": "NODE_ENV=production webpack",
|
||||||
"build:commonjs": "tsc && copyfiles -u 2 './src/artifacts/**/*.json' ./lib/src/artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build:commonjs": "tsc && yarn update_artifacts && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"test:commonjs": "run-s build:commonjs run_mocha",
|
"test:commonjs": "run-s build:commonjs run_mocha",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit",
|
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit",
|
||||||
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
|
||||||
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
||||||
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
|
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
|
||||||
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
|
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"artifacts": "TokenTransferProxy Exchange TokenRegistry Token EtherToken",
|
"compact_artifacts": "Exchange DummyToken ZRXToken Token EtherToken TokenTransferProxy TokenRegistry",
|
||||||
|
"contracts": "Exchange DummyToken ZRXToken Token WETH9 TokenTransferProxy MultiSigWallet MultiSigWalletWithTimeLock MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress MaliciousToken TokenRegistry Arbitrage EtherDelta AccountLevels",
|
||||||
"postpublish": {
|
"postpublish": {
|
||||||
"assets": [
|
"assets": [
|
||||||
"packages/0x.js/_bundles/index.js",
|
"packages/0x.js/_bundles/index.js",
|
||||||
@@ -59,15 +61,16 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/abi-gen": "^0.2.8",
|
"@0xproject/deployer": "^0.4.1",
|
||||||
"@0xproject/dev-utils": "^0.3.3",
|
"@0xproject/dev-utils": "^0.3.6",
|
||||||
"@0xproject/monorepo-scripts": "^0.1.15",
|
"@0xproject/monorepo-scripts": "^0.1.18",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/subproviders": "^0.9.0",
|
||||||
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/bintrees": "^1.0.2",
|
"@types/bintrees": "^1.0.2",
|
||||||
"@types/jsonschema": "^1.1.1",
|
|
||||||
"@types/lodash": "4.14.104",
|
"@types/lodash": "4.14.104",
|
||||||
"@types/mocha": "^2.2.42",
|
"@types/mocha": "^2.2.42",
|
||||||
"@types/node": "^8.0.53",
|
"@types/node": "^8.0.53",
|
||||||
|
"@types/request": "2.47.0",
|
||||||
"@types/sinon": "^2.2.2",
|
"@types/sinon": "^2.2.2",
|
||||||
"@types/uuid": "^3.4.2",
|
"@types/uuid": "^3.4.2",
|
||||||
"awesome-typescript-loader": "^3.1.3",
|
"awesome-typescript-loader": "^3.1.3",
|
||||||
@@ -83,26 +86,23 @@
|
|||||||
"opn-cli": "^3.1.0",
|
"opn-cli": "^3.1.0",
|
||||||
"prettier": "^1.11.1",
|
"prettier": "^1.11.1",
|
||||||
"request": "^2.81.0",
|
"request": "^2.81.0",
|
||||||
"request-promise-native": "^1.0.5",
|
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"sinon": "^4.0.0",
|
"sinon": "^4.0.0",
|
||||||
"source-map-support": "^0.5.0",
|
"source-map-support": "^0.5.0",
|
||||||
"truffle-hdwallet-provider": "^0.0.3",
|
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"typedoc": "0xProject/typedoc",
|
"typedoc": "0xProject/typedoc",
|
||||||
"types-bn": "^0.0.1",
|
|
||||||
"typescript": "2.7.1",
|
"typescript": "2.7.1",
|
||||||
"web3-provider-engine": "^13.0.1",
|
"web3-provider-engine": "^13.0.1",
|
||||||
"webpack": "^3.1.0"
|
"webpack": "^3.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.2.4",
|
"@0xproject/assert": "^0.2.7",
|
||||||
"@0xproject/base-contract": "^0.0.6",
|
"@0xproject/base-contract": "^0.2.1",
|
||||||
"@0xproject/json-schemas": "^0.7.18",
|
"@0xproject/json-schemas": "^0.7.21",
|
||||||
"@0xproject/types": "^0.4.2",
|
"@0xproject/types": "^0.6.1",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/utils": "^0.4.4",
|
"@0xproject/utils": "^0.5.2",
|
||||||
"@0xproject/web3-wrapper": "^0.4.0",
|
"@0xproject/web3-wrapper": "^0.6.1",
|
||||||
"bintrees": "^1.0.2",
|
"bintrees": "^1.0.2",
|
||||||
"bn.js": "^4.11.8",
|
"bn.js": "^4.11.8",
|
||||||
"ethereumjs-abi": "^0.6.4",
|
"ethereumjs-abi": "^0.6.4",
|
||||||
@@ -114,6 +114,9 @@
|
|||||||
"uuid": "^3.1.0",
|
"uuid": "^3.1.0",
|
||||||
"web3": "^0.20.0"
|
"web3": "^0.20.0"
|
||||||
},
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@0xproject/migrations": "^0.0.1"
|
||||||
|
},
|
||||||
"publishConfig": {
|
"publishConfig": {
|
||||||
"access": "public"
|
"access": "public"
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
||||||
import { ECSignature, Order, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
|
import { ECSignature, Order, Provider, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
|
||||||
import { AbiDecoder, BigNumber, intervalUtils } from '@0xproject/utils';
|
import { AbiDecoder, BigNumber, intervalUtils } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as ethUtil from 'ethereumjs-util';
|
import * as ethUtil from 'ethereumjs-util';
|
||||||
@@ -15,7 +15,7 @@ import { OrderStateWatcher } from './order_watcher/order_state_watcher';
|
|||||||
import { zeroExConfigSchema } from './schemas/zero_ex_config_schema';
|
import { zeroExConfigSchema } from './schemas/zero_ex_config_schema';
|
||||||
import { zeroExPrivateNetworkConfigSchema } from './schemas/zero_ex_private_network_config_schema';
|
import { zeroExPrivateNetworkConfigSchema } from './schemas/zero_ex_private_network_config_schema';
|
||||||
import { zeroExPublicNetworkConfigSchema } from './schemas/zero_ex_public_network_config_schema';
|
import { zeroExPublicNetworkConfigSchema } from './schemas/zero_ex_public_network_config_schema';
|
||||||
import { OrderStateWatcherConfig, Web3Provider, ZeroExConfig, ZeroExError } from './types';
|
import { OrderStateWatcherConfig, ZeroExConfig, ZeroExError } from './types';
|
||||||
import { assert } from './utils/assert';
|
import { assert } from './utils/assert';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { decorators } from './utils/decorators';
|
import { decorators } from './utils/decorators';
|
||||||
@@ -58,7 +58,6 @@ export class ZeroEx {
|
|||||||
*/
|
*/
|
||||||
public proxy: TokenTransferProxyWrapper;
|
public proxy: TokenTransferProxyWrapper;
|
||||||
private _web3Wrapper: Web3Wrapper;
|
private _web3Wrapper: Web3Wrapper;
|
||||||
private _abiDecoder: AbiDecoder;
|
|
||||||
/**
|
/**
|
||||||
* Verifies that the elliptic curve signature `signature` was generated
|
* Verifies that the elliptic curve signature `signature` was generated
|
||||||
* by signing `data` with the private key corresponding to the `signerAddress` address.
|
* by signing `data` with the private key corresponding to the `signerAddress` address.
|
||||||
@@ -116,10 +115,8 @@ export class ZeroEx {
|
|||||||
public static toUnitAmount(amount: BigNumber, decimals: number): BigNumber {
|
public static toUnitAmount(amount: BigNumber, decimals: number): BigNumber {
|
||||||
assert.isValidBaseUnitAmount('amount', amount);
|
assert.isValidBaseUnitAmount('amount', amount);
|
||||||
assert.isNumber('decimals', decimals);
|
assert.isNumber('decimals', decimals);
|
||||||
|
const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals);
|
||||||
const aUnit = new BigNumber(10).pow(decimals);
|
return unitAmount;
|
||||||
const unit = amount.div(aUnit);
|
|
||||||
return unit;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* A baseUnit is defined as the smallest denomination of a token. An amount expressed in baseUnits
|
* A baseUnit is defined as the smallest denomination of a token. An amount expressed in baseUnits
|
||||||
@@ -132,13 +129,7 @@ export class ZeroEx {
|
|||||||
public static toBaseUnitAmount(amount: BigNumber, decimals: number): BigNumber {
|
public static toBaseUnitAmount(amount: BigNumber, decimals: number): BigNumber {
|
||||||
assert.isBigNumber('amount', amount);
|
assert.isBigNumber('amount', amount);
|
||||||
assert.isNumber('decimals', decimals);
|
assert.isNumber('decimals', decimals);
|
||||||
|
const baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amount, decimals);
|
||||||
const unit = new BigNumber(10).pow(decimals);
|
|
||||||
const baseUnitAmount = amount.times(unit);
|
|
||||||
const hasDecimals = baseUnitAmount.decimalPlaces() !== 0;
|
|
||||||
if (hasDecimals) {
|
|
||||||
throw new Error(`Invalid unit amount: ${amount.toString()} - Too many decimal places`);
|
|
||||||
}
|
|
||||||
return baseUnitAmount;
|
return baseUnitAmount;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -154,12 +145,12 @@ export class ZeroEx {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Instantiates a new ZeroEx instance that provides the public interface to the 0x.js library.
|
* Instantiates a new ZeroEx instance that provides the public interface to the 0x.js library.
|
||||||
* @param provider The Web3.js Provider instance you would like the 0x.js library to use for interacting with
|
* @param provider The Provider instance you would like the 0x.js library to use for interacting with
|
||||||
* the Ethereum network.
|
* the Ethereum network.
|
||||||
* @param config The configuration object. Look up the type for the description.
|
* @param config The configuration object. Look up the type for the description.
|
||||||
* @return An instance of the 0x.js ZeroEx class.
|
* @return An instance of the 0x.js ZeroEx class.
|
||||||
*/
|
*/
|
||||||
constructor(provider: Web3Provider, config: ZeroExConfig) {
|
constructor(provider: Provider, config: ZeroExConfig) {
|
||||||
assert.isWeb3Provider('provider', provider);
|
assert.isWeb3Provider('provider', provider);
|
||||||
assert.doesConformToSchema('config', config, zeroExConfigSchema, [
|
assert.doesConformToSchema('config', config, zeroExConfigSchema, [
|
||||||
zeroExPrivateNetworkConfigSchema,
|
zeroExPrivateNetworkConfigSchema,
|
||||||
@@ -167,21 +158,22 @@ export class ZeroEx {
|
|||||||
]);
|
]);
|
||||||
const artifactJSONs = _.values(artifacts);
|
const artifactJSONs = _.values(artifacts);
|
||||||
const abiArrays = _.map(artifactJSONs, artifact => artifact.abi);
|
const abiArrays = _.map(artifactJSONs, artifact => artifact.abi);
|
||||||
this._abiDecoder = new AbiDecoder(abiArrays);
|
|
||||||
const defaults = {
|
const defaults = {
|
||||||
gasPrice: config.gasPrice,
|
gasPrice: config.gasPrice,
|
||||||
};
|
};
|
||||||
this._web3Wrapper = new Web3Wrapper(provider, defaults);
|
this._web3Wrapper = new Web3Wrapper(provider, defaults);
|
||||||
|
_.forEach(abiArrays, abi => {
|
||||||
|
this._web3Wrapper.abiDecoder.addABI(abi);
|
||||||
|
});
|
||||||
this.proxy = new TokenTransferProxyWrapper(
|
this.proxy = new TokenTransferProxyWrapper(
|
||||||
this._web3Wrapper,
|
this._web3Wrapper,
|
||||||
config.networkId,
|
config.networkId,
|
||||||
config.tokenTransferProxyContractAddress,
|
config.tokenTransferProxyContractAddress,
|
||||||
);
|
);
|
||||||
this.token = new TokenWrapper(this._web3Wrapper, config.networkId, this._abiDecoder, this.proxy);
|
this.token = new TokenWrapper(this._web3Wrapper, config.networkId, this.proxy);
|
||||||
this.exchange = new ExchangeWrapper(
|
this.exchange = new ExchangeWrapper(
|
||||||
this._web3Wrapper,
|
this._web3Wrapper,
|
||||||
config.networkId,
|
config.networkId,
|
||||||
this._abiDecoder,
|
|
||||||
this.token,
|
this.token,
|
||||||
config.exchangeContractAddress,
|
config.exchangeContractAddress,
|
||||||
config.zrxContractAddress,
|
config.zrxContractAddress,
|
||||||
@@ -191,7 +183,7 @@ export class ZeroEx {
|
|||||||
config.networkId,
|
config.networkId,
|
||||||
config.tokenRegistryContractAddress,
|
config.tokenRegistryContractAddress,
|
||||||
);
|
);
|
||||||
this.etherToken = new EtherTokenWrapper(this._web3Wrapper, config.networkId, this._abiDecoder, this.token);
|
this.etherToken = new EtherTokenWrapper(this._web3Wrapper, config.networkId, this.token);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Sets a new web3 provider for 0x.js. Updating the provider will stop all
|
* Sets a new web3 provider for 0x.js. Updating the provider will stop all
|
||||||
@@ -199,7 +191,7 @@ export class ZeroEx {
|
|||||||
* @param provider The Web3Provider you would like the 0x.js library to use from now on.
|
* @param provider The Web3Provider you would like the 0x.js library to use from now on.
|
||||||
* @param networkId The id of the network your provider is connected to
|
* @param networkId The id of the network your provider is connected to
|
||||||
*/
|
*/
|
||||||
public setProvider(provider: Web3Provider, networkId: number): void {
|
public setProvider(provider: Provider, networkId: number): void {
|
||||||
this._web3Wrapper.setProvider(provider);
|
this._web3Wrapper.setProvider(provider);
|
||||||
(this.exchange as any)._invalidateContractInstances();
|
(this.exchange as any)._invalidateContractInstances();
|
||||||
(this.exchange as any)._setNetworkId(networkId);
|
(this.exchange as any)._setNetworkId(networkId);
|
||||||
@@ -225,7 +217,7 @@ export class ZeroEx {
|
|||||||
* This method currently supports TestRPC, Geth and Parity above and below V1.6.6
|
* This method currently supports TestRPC, Geth and Parity above and below V1.6.6
|
||||||
* @param orderHash Hex encoded orderHash to sign.
|
* @param orderHash Hex encoded orderHash to sign.
|
||||||
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
|
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
|
||||||
* must be available via the Web3.Provider supplied to 0x.js.
|
* must be available via the Provider supplied to 0x.js.
|
||||||
* @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message`
|
* @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message`
|
||||||
* themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client
|
* themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client
|
||||||
* (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix
|
* (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix
|
||||||
@@ -285,44 +277,12 @@ export class ZeroEx {
|
|||||||
pollingIntervalMs = 1000,
|
pollingIntervalMs = 1000,
|
||||||
timeoutMs?: number,
|
timeoutMs?: number,
|
||||||
): Promise<TransactionReceiptWithDecodedLogs> {
|
): Promise<TransactionReceiptWithDecodedLogs> {
|
||||||
let timeoutExceeded = false;
|
const transactionReceiptWithDecodedLogs = await this._web3Wrapper.awaitTransactionMinedAsync(
|
||||||
if (timeoutMs) {
|
txHash,
|
||||||
setTimeout(() => (timeoutExceeded = true), timeoutMs);
|
pollingIntervalMs,
|
||||||
}
|
timeoutMs,
|
||||||
|
|
||||||
const txReceiptPromise = new Promise(
|
|
||||||
(resolve: (receipt: TransactionReceiptWithDecodedLogs) => void, reject) => {
|
|
||||||
const intervalId = intervalUtils.setAsyncExcludingInterval(
|
|
||||||
async () => {
|
|
||||||
if (timeoutExceeded) {
|
|
||||||
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
|
||||||
return reject(ZeroExError.TransactionMiningTimeout);
|
|
||||||
}
|
|
||||||
|
|
||||||
const transactionReceipt = await this._web3Wrapper.getTransactionReceiptAsync(txHash);
|
|
||||||
if (!_.isNull(transactionReceipt)) {
|
|
||||||
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
|
||||||
const logsWithDecodedArgs = _.map(
|
|
||||||
transactionReceipt.logs,
|
|
||||||
this._abiDecoder.tryToDecodeLogOrNoop.bind(this._abiDecoder),
|
|
||||||
);
|
|
||||||
const transactionReceiptWithDecodedLogArgs: TransactionReceiptWithDecodedLogs = {
|
|
||||||
...transactionReceipt,
|
|
||||||
logs: logsWithDecodedArgs,
|
|
||||||
};
|
|
||||||
resolve(transactionReceiptWithDecodedLogArgs);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
pollingIntervalMs,
|
|
||||||
(err: Error) => {
|
|
||||||
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
|
||||||
reject(err);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
const txReceipt = await txReceiptPromise;
|
return transactionReceiptWithDecodedLogs;
|
||||||
return txReceipt;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Instantiates and returns a new OrderStateWatcher instance.
|
* Instantiates and returns a new OrderStateWatcher instance.
|
||||||
@@ -331,7 +291,7 @@ export class ZeroEx {
|
|||||||
* @return An instance of the 0x.js OrderStateWatcher class.
|
* @return An instance of the 0x.js OrderStateWatcher class.
|
||||||
*/
|
*/
|
||||||
public createOrderStateWatcher(config?: OrderStateWatcherConfig) {
|
public createOrderStateWatcher(config?: OrderStateWatcherConfig) {
|
||||||
return new OrderStateWatcher(this._web3Wrapper, this._abiDecoder, this.token, this.exchange, config);
|
return new OrderStateWatcher(this._web3Wrapper, this.token, this.exchange, config);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* HACK: `TokenWrapper` needs a token transfer proxy address. `TokenTransferProxy` address is fetched from
|
* HACK: `TokenWrapper` needs a token transfer proxy address. `TokenTransferProxy` address is fetched from
|
||||||
|
@@ -0,0 +1,6 @@
|
|||||||
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
|
export abstract class BalanceAndProxyAllowanceFetcher {
|
||||||
|
public abstract async getBalanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber>;
|
||||||
|
public abstract async getProxyAllowanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber>;
|
||||||
|
}
|
@@ -0,0 +1,6 @@
|
|||||||
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
|
export abstract class OrderFilledCancelledFetcher {
|
||||||
|
public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
|
||||||
|
public abstract async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
|
||||||
|
}
|
@@ -1,10 +1,10 @@
|
|||||||
import * as DummyTokenArtifact from './artifacts/DummyToken.json';
|
import * as DummyTokenArtifact from './compact_artifacts/DummyToken.json';
|
||||||
import * as EtherTokenArtifact from './artifacts/EtherToken.json';
|
import * as EtherTokenArtifact from './compact_artifacts/EtherToken.json';
|
||||||
import * as ExchangeArtifact from './artifacts/Exchange.json';
|
import * as ExchangeArtifact from './compact_artifacts/Exchange.json';
|
||||||
import * as TokenArtifact from './artifacts/Token.json';
|
import * as TokenArtifact from './compact_artifacts/Token.json';
|
||||||
import * as TokenRegistryArtifact from './artifacts/TokenRegistry.json';
|
import * as TokenRegistryArtifact from './compact_artifacts/TokenRegistry.json';
|
||||||
import * as TokenTransferProxyArtifact from './artifacts/TokenTransferProxy.json';
|
import * as TokenTransferProxyArtifact from './compact_artifacts/TokenTransferProxy.json';
|
||||||
import * as ZRXArtifact from './artifacts/ZRX.json';
|
import * as ZRXArtifact from './compact_artifacts/ZRX.json';
|
||||||
import { Artifact } from './types';
|
import { Artifact } from './types';
|
||||||
|
|
||||||
export const artifacts = {
|
export const artifacts = {
|
||||||
|
@@ -32,7 +32,6 @@ const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {
|
|||||||
export class ContractWrapper {
|
export class ContractWrapper {
|
||||||
protected _web3Wrapper: Web3Wrapper;
|
protected _web3Wrapper: Web3Wrapper;
|
||||||
protected _networkId: number;
|
protected _networkId: number;
|
||||||
private _abiDecoder?: AbiDecoder;
|
|
||||||
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
|
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
|
||||||
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
|
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
|
||||||
private _filters: { [filterToken: string]: FilterObject };
|
private _filters: { [filterToken: string]: FilterObject };
|
||||||
@@ -41,10 +40,9 @@ export class ContractWrapper {
|
|||||||
};
|
};
|
||||||
private _onLogAddedSubscriptionToken: string | undefined;
|
private _onLogAddedSubscriptionToken: string | undefined;
|
||||||
private _onLogRemovedSubscriptionToken: string | undefined;
|
private _onLogRemovedSubscriptionToken: string | undefined;
|
||||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder?: AbiDecoder) {
|
constructor(web3Wrapper: Web3Wrapper, networkId: number) {
|
||||||
this._web3Wrapper = web3Wrapper;
|
this._web3Wrapper = web3Wrapper;
|
||||||
this._networkId = networkId;
|
this._networkId = networkId;
|
||||||
this._abiDecoder = abiDecoder;
|
|
||||||
this._filters = {};
|
this._filters = {};
|
||||||
this._filterCallbacks = {};
|
this._filterCallbacks = {};
|
||||||
this._blockAndLogStreamerIfExists = undefined;
|
this._blockAndLogStreamerIfExists = undefined;
|
||||||
@@ -102,10 +100,10 @@ export class ContractWrapper {
|
|||||||
protected _tryToDecodeLogOrNoop<ArgsType extends ContractEventArgs>(
|
protected _tryToDecodeLogOrNoop<ArgsType extends ContractEventArgs>(
|
||||||
log: LogEntry,
|
log: LogEntry,
|
||||||
): LogWithDecodedArgs<ArgsType> | RawLog {
|
): LogWithDecodedArgs<ArgsType> | RawLog {
|
||||||
if (_.isUndefined(this._abiDecoder)) {
|
if (_.isUndefined(this._web3Wrapper.abiDecoder)) {
|
||||||
throw new Error(InternalZeroExError.NoAbiDecoder);
|
throw new Error(InternalZeroExError.NoAbiDecoder);
|
||||||
}
|
}
|
||||||
const logWithDecodedArgs = this._abiDecoder.tryToDecodeLogOrNoop(log);
|
const logWithDecodedArgs = this._web3Wrapper.abiDecoder.tryToDecodeLogOrNoop(log);
|
||||||
return logWithDecodedArgs;
|
return logWithDecodedArgs;
|
||||||
}
|
}
|
||||||
protected async _getContractAbiAndAddressFromArtifactsAsync(
|
protected async _getContractAbiAndAddressFromArtifactsAsync(
|
||||||
|
@@ -21,8 +21,8 @@ export class EtherTokenWrapper extends ContractWrapper {
|
|||||||
[address: string]: EtherTokenContract;
|
[address: string]: EtherTokenContract;
|
||||||
} = {};
|
} = {};
|
||||||
private _tokenWrapper: TokenWrapper;
|
private _tokenWrapper: TokenWrapper;
|
||||||
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder: AbiDecoder, tokenWrapper: TokenWrapper) {
|
constructor(web3Wrapper: Web3Wrapper, networkId: number, tokenWrapper: TokenWrapper) {
|
||||||
super(web3Wrapper, networkId, abiDecoder);
|
super(web3Wrapper, networkId);
|
||||||
this._tokenWrapper = tokenWrapper;
|
this._tokenWrapper = tokenWrapper;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -191,7 +191,12 @@ export class EtherTokenWrapper extends ContractWrapper {
|
|||||||
artifacts.EtherTokenArtifact,
|
artifacts.EtherTokenArtifact,
|
||||||
etherTokenAddress,
|
etherTokenAddress,
|
||||||
);
|
);
|
||||||
const contractInstance = new EtherTokenContract(this._web3Wrapper, abi, address);
|
const contractInstance = new EtherTokenContract(
|
||||||
|
abi,
|
||||||
|
address,
|
||||||
|
this._web3Wrapper.getProvider(),
|
||||||
|
this._web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
etherTokenContract = contractInstance;
|
etherTokenContract = contractInstance;
|
||||||
this._etherTokenContractsByAddress[etherTokenAddress] = etherTokenContract;
|
this._etherTokenContractsByAddress[etherTokenAddress] = etherTokenContract;
|
||||||
return etherTokenContract;
|
return etherTokenContract;
|
||||||
|
@@ -13,6 +13,8 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
|
import { SimpleBalanceAndProxyAllowanceFetcher } from '../fetchers/simple_balance_and_proxy_allowance_fetcher';
|
||||||
|
import { SimpleOrderFilledCancelledFetcher } from '../fetchers/simple_order_filled_cancelled_fetcher';
|
||||||
import {
|
import {
|
||||||
BlockRange,
|
BlockRange,
|
||||||
EventCallback,
|
EventCallback,
|
||||||
@@ -23,6 +25,7 @@ import {
|
|||||||
OrderAddresses,
|
OrderAddresses,
|
||||||
OrderCancellationRequest,
|
OrderCancellationRequest,
|
||||||
OrderFillRequest,
|
OrderFillRequest,
|
||||||
|
OrderState,
|
||||||
OrderTransactionOpts,
|
OrderTransactionOpts,
|
||||||
OrderValues,
|
OrderValues,
|
||||||
ValidateOrderFillableOpts,
|
ValidateOrderFillableOpts,
|
||||||
@@ -30,6 +33,7 @@ import {
|
|||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
import { decorators } from '../utils/decorators';
|
import { decorators } from '../utils/decorators';
|
||||||
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
|
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
|
||||||
|
import { OrderStateUtils } from '../utils/order_state_utils';
|
||||||
import { OrderValidationUtils } from '../utils/order_validation_utils';
|
import { OrderValidationUtils } from '../utils/order_validation_utils';
|
||||||
import { utils } from '../utils/utils';
|
import { utils } from '../utils/utils';
|
||||||
|
|
||||||
@@ -41,7 +45,6 @@ import {
|
|||||||
LogErrorContractEventArgs,
|
LogErrorContractEventArgs,
|
||||||
} from './generated/exchange';
|
} from './generated/exchange';
|
||||||
import { TokenWrapper } from './token_wrapper';
|
import { TokenWrapper } from './token_wrapper';
|
||||||
|
|
||||||
const SHOULD_VALIDATE_BY_DEFAULT = true;
|
const SHOULD_VALIDATE_BY_DEFAULT = true;
|
||||||
|
|
||||||
interface ExchangeContractErrCodesToMsgs {
|
interface ExchangeContractErrCodesToMsgs {
|
||||||
@@ -87,12 +90,11 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
constructor(
|
constructor(
|
||||||
web3Wrapper: Web3Wrapper,
|
web3Wrapper: Web3Wrapper,
|
||||||
networkId: number,
|
networkId: number,
|
||||||
abiDecoder: AbiDecoder,
|
|
||||||
tokenWrapper: TokenWrapper,
|
tokenWrapper: TokenWrapper,
|
||||||
contractAddressIfExists?: string,
|
contractAddressIfExists?: string,
|
||||||
zrxContractAddressIfExists?: string,
|
zrxContractAddressIfExists?: string,
|
||||||
) {
|
) {
|
||||||
super(web3Wrapper, networkId, abiDecoder);
|
super(web3Wrapper, networkId);
|
||||||
this._tokenWrapper = tokenWrapper;
|
this._tokenWrapper = tokenWrapper;
|
||||||
this._orderValidationUtils = new OrderValidationUtils(this);
|
this._orderValidationUtils = new OrderValidationUtils(this);
|
||||||
this._contractAddressIfExists = contractAddressIfExists;
|
this._contractAddressIfExists = contractAddressIfExists;
|
||||||
@@ -171,7 +173,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw
|
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw
|
||||||
* if upon execution the tokens cannot be transferred.
|
* if upon execution the tokens cannot be transferred.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||||
* Must be available via the supplied Web3.Provider
|
* Must be available via the supplied Provider
|
||||||
* passed to 0x.js.
|
* passed to 0x.js.
|
||||||
* @param orderTransactionOpts Optional arguments this method accepts.
|
* @param orderTransactionOpts Optional arguments this method accepts.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
@@ -236,7 +238,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* If set to false, the call will continue to fill subsequent
|
* If set to false, the call will continue to fill subsequent
|
||||||
* signedOrders even when some cannot be filled.
|
* signedOrders even when some cannot be filled.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill these
|
* @param takerAddress The user Ethereum address who would like to fill these
|
||||||
* orders. Must be available via the supplied Web3.Provider
|
* orders. Must be available via the supplied Provider
|
||||||
* passed to 0x.js.
|
* passed to 0x.js.
|
||||||
* @param orderTransactionOpts Optional arguments this method accepts.
|
* @param orderTransactionOpts Optional arguments this method accepts.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
@@ -336,7 +338,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* cannot be filled.
|
* cannot be filled.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill
|
* @param takerAddress The user Ethereum address who would like to fill
|
||||||
* these orders. Must be available via the supplied
|
* these orders. Must be available via the supplied
|
||||||
* Web3.Provider passed to 0x.js.
|
* Provider passed to 0x.js.
|
||||||
* @param orderTransactionOpts Optional arguments this method accepts.
|
* @param orderTransactionOpts Optional arguments this method accepts.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
*/
|
*/
|
||||||
@@ -417,7 +419,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* signedOrder you wish to fill.
|
* signedOrder you wish to fill.
|
||||||
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
* Must be available via the supplied Provider passed to 0x.js.
|
||||||
* @param orderTransactionOpts Optional arguments this method accepts.
|
* @param orderTransactionOpts Optional arguments this method accepts.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
*/
|
*/
|
||||||
@@ -471,7 +473,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* filled (each to the specified fillAmount) or aborted.
|
* filled (each to the specified fillAmount) or aborted.
|
||||||
* @param orderFillRequests An array of objects that conform to the OrderFillRequest interface.
|
* @param orderFillRequests An array of objects that conform to the OrderFillRequest interface.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill there orders.
|
* @param takerAddress The user Ethereum address who would like to fill there orders.
|
||||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
* Must be available via the supplied Provider passed to 0x.js.
|
||||||
* @param orderTransactionOpts Optional arguments this method accepts.
|
* @param orderTransactionOpts Optional arguments this method accepts.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
*/
|
*/
|
||||||
@@ -766,7 +768,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* signedOrder you wish to fill.
|
* signedOrder you wish to fill.
|
||||||
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
* Must be available via the supplied Provider passed to 0x.js.
|
||||||
*/
|
*/
|
||||||
public async validateFillOrderThrowIfInvalidAsync(
|
public async validateFillOrderThrowIfInvalidAsync(
|
||||||
signedOrder: SignedOrder,
|
signedOrder: SignedOrder,
|
||||||
@@ -813,7 +815,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
* signedOrder you wish to fill.
|
* signedOrder you wish to fill.
|
||||||
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
|
||||||
* @param takerAddress The user Ethereum address who would like to fill this order.
|
* @param takerAddress The user Ethereum address who would like to fill this order.
|
||||||
* Must be available via the supplied Web3.Provider passed to 0x.js.
|
* Must be available via the supplied Provider passed to 0x.js.
|
||||||
*/
|
*/
|
||||||
public async validateFillOrKillOrderThrowIfInvalidAsync(
|
public async validateFillOrKillOrderThrowIfInvalidAsync(
|
||||||
signedOrder: SignedOrder,
|
signedOrder: SignedOrder,
|
||||||
@@ -874,6 +876,28 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
throw new Error(errMessage);
|
throw new Error(errMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Gets the latest OrderState of a signedOrder
|
||||||
|
* @param signedOrder The signedOrder
|
||||||
|
* @param stateLayer Optional, desired blockchain state layer (defaults to latest).
|
||||||
|
* @return OrderState of the signedOrder
|
||||||
|
*/
|
||||||
|
public async getOrderStateAsync(
|
||||||
|
signedOrder: SignedOrder,
|
||||||
|
stateLayer: BlockParamLiteral = BlockParamLiteral.Latest,
|
||||||
|
): Promise<OrderState> {
|
||||||
|
const simpleBalanceAndProxyAllowanceFetcher = new SimpleBalanceAndProxyAllowanceFetcher(
|
||||||
|
this._tokenWrapper,
|
||||||
|
stateLayer,
|
||||||
|
);
|
||||||
|
const simpleOrderFilledCancelledFetcher = new SimpleOrderFilledCancelledFetcher(this, stateLayer);
|
||||||
|
const orderStateUtils = new OrderStateUtils(
|
||||||
|
simpleBalanceAndProxyAllowanceFetcher,
|
||||||
|
simpleOrderFilledCancelledFetcher,
|
||||||
|
);
|
||||||
|
const orderState = orderStateUtils.getOrderStateAsync(signedOrder);
|
||||||
|
return orderState;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Returns the ZRX token address used by the exchange contract.
|
* Returns the ZRX token address used by the exchange contract.
|
||||||
* @return Address of ZRX token
|
* @return Address of ZRX token
|
||||||
@@ -921,7 +945,12 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
artifacts.ExchangeArtifact,
|
artifacts.ExchangeArtifact,
|
||||||
this._contractAddressIfExists,
|
this._contractAddressIfExists,
|
||||||
);
|
);
|
||||||
const contractInstance = new ExchangeContract(this._web3Wrapper, abi, address);
|
const contractInstance = new ExchangeContract(
|
||||||
|
abi,
|
||||||
|
address,
|
||||||
|
this._web3Wrapper.getProvider(),
|
||||||
|
this._web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
this._exchangeContractIfExists = contractInstance;
|
this._exchangeContractIfExists = contractInstance;
|
||||||
return this._exchangeContractIfExists;
|
return this._exchangeContractIfExists;
|
||||||
}
|
}
|
||||||
|
@@ -121,7 +121,12 @@ export class TokenRegistryWrapper extends ContractWrapper {
|
|||||||
artifacts.TokenRegistryArtifact,
|
artifacts.TokenRegistryArtifact,
|
||||||
this._contractAddressIfExists,
|
this._contractAddressIfExists,
|
||||||
);
|
);
|
||||||
const contractInstance = new TokenRegistryContract(this._web3Wrapper, abi, address);
|
const contractInstance = new TokenRegistryContract(
|
||||||
|
abi,
|
||||||
|
address,
|
||||||
|
this._web3Wrapper.getProvider(),
|
||||||
|
this._web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
this._tokenRegistryContractIfExists = contractInstance;
|
this._tokenRegistryContractIfExists = contractInstance;
|
||||||
return this._tokenRegistryContractIfExists;
|
return this._tokenRegistryContractIfExists;
|
||||||
}
|
}
|
||||||
|
@@ -63,7 +63,12 @@ export class TokenTransferProxyWrapper extends ContractWrapper {
|
|||||||
artifacts.TokenTransferProxyArtifact,
|
artifacts.TokenTransferProxyArtifact,
|
||||||
this._contractAddressIfExists,
|
this._contractAddressIfExists,
|
||||||
);
|
);
|
||||||
const contractInstance = new TokenTransferProxyContract(this._web3Wrapper, abi, address);
|
const contractInstance = new TokenTransferProxyContract(
|
||||||
|
abi,
|
||||||
|
address,
|
||||||
|
this._web3Wrapper.getProvider(),
|
||||||
|
this._web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
this._tokenTransferProxyContractIfExists = contractInstance;
|
this._tokenTransferProxyContractIfExists = contractInstance;
|
||||||
return this._tokenTransferProxyContractIfExists;
|
return this._tokenTransferProxyContractIfExists;
|
||||||
}
|
}
|
||||||
|
@@ -22,13 +22,8 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
public UNLIMITED_ALLOWANCE_IN_BASE_UNITS = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
|
public UNLIMITED_ALLOWANCE_IN_BASE_UNITS = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
|
||||||
private _tokenContractsByAddress: { [address: string]: TokenContract };
|
private _tokenContractsByAddress: { [address: string]: TokenContract };
|
||||||
private _tokenTransferProxyWrapper: TokenTransferProxyWrapper;
|
private _tokenTransferProxyWrapper: TokenTransferProxyWrapper;
|
||||||
constructor(
|
constructor(web3Wrapper: Web3Wrapper, networkId: number, tokenTransferProxyWrapper: TokenTransferProxyWrapper) {
|
||||||
web3Wrapper: Web3Wrapper,
|
super(web3Wrapper, networkId);
|
||||||
networkId: number,
|
|
||||||
abiDecoder: AbiDecoder,
|
|
||||||
tokenTransferProxyWrapper: TokenTransferProxyWrapper,
|
|
||||||
) {
|
|
||||||
super(web3Wrapper, networkId, abiDecoder);
|
|
||||||
this._tokenContractsByAddress = {};
|
this._tokenContractsByAddress = {};
|
||||||
this._tokenTransferProxyWrapper = tokenTransferProxyWrapper;
|
this._tokenTransferProxyWrapper = tokenTransferProxyWrapper;
|
||||||
}
|
}
|
||||||
@@ -426,7 +421,12 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
artifacts.TokenArtifact,
|
artifacts.TokenArtifact,
|
||||||
normalizedTokenAddress,
|
normalizedTokenAddress,
|
||||||
);
|
);
|
||||||
const contractInstance = new TokenContract(this._web3Wrapper, abi, address);
|
const contractInstance = new TokenContract(
|
||||||
|
abi,
|
||||||
|
address,
|
||||||
|
this._web3Wrapper.getProvider(),
|
||||||
|
this._web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
tokenContract = contractInstance;
|
tokenContract = contractInstance;
|
||||||
this._tokenContractsByAddress[normalizedTokenAddress] = tokenContract;
|
this._tokenContractsByAddress[normalizedTokenAddress] = tokenContract;
|
||||||
return tokenContract;
|
return tokenContract;
|
||||||
|
@@ -0,0 +1,28 @@
|
|||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
|
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
|
||||||
|
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
||||||
|
|
||||||
|
export class SimpleBalanceAndProxyAllowanceFetcher implements BalanceAndProxyAllowanceFetcher {
|
||||||
|
private _tokenWrapper: TokenWrapper;
|
||||||
|
private _defaultBlock: BlockParamLiteral;
|
||||||
|
constructor(token: TokenWrapper, defaultBlock: BlockParamLiteral) {
|
||||||
|
this._tokenWrapper = token;
|
||||||
|
this._defaultBlock = defaultBlock;
|
||||||
|
}
|
||||||
|
public async getBalanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber> {
|
||||||
|
const methodOpts = {
|
||||||
|
defaultBlock: this._defaultBlock,
|
||||||
|
};
|
||||||
|
const balance = this._tokenWrapper.getBalanceAsync(tokenAddress, userAddress, methodOpts);
|
||||||
|
return balance;
|
||||||
|
}
|
||||||
|
public async getProxyAllowanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber> {
|
||||||
|
const methodOpts = {
|
||||||
|
defaultBlock: this._defaultBlock,
|
||||||
|
};
|
||||||
|
const proxyAllowance = this._tokenWrapper.getProxyAllowanceAsync(tokenAddress, userAddress, methodOpts);
|
||||||
|
return proxyAllowance;
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,28 @@
|
|||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
|
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
|
||||||
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
|
|
||||||
|
export class SimpleOrderFilledCancelledFetcher implements OrderFilledCancelledFetcher {
|
||||||
|
private _exchangeWrapper: ExchangeWrapper;
|
||||||
|
private _defaultBlock: BlockParamLiteral;
|
||||||
|
constructor(exchange: ExchangeWrapper, defaultBlock: BlockParamLiteral) {
|
||||||
|
this._exchangeWrapper = exchange;
|
||||||
|
this._defaultBlock = defaultBlock;
|
||||||
|
}
|
||||||
|
public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
||||||
|
const methodOpts = {
|
||||||
|
defaultBlock: this._defaultBlock,
|
||||||
|
};
|
||||||
|
const filledTakerAmount = this._exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
|
||||||
|
return filledTakerAmount;
|
||||||
|
}
|
||||||
|
public async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
||||||
|
const methodOpts = {
|
||||||
|
defaultBlock: this._defaultBlock,
|
||||||
|
};
|
||||||
|
const cancelledTakerAmount = this._exchangeWrapper.getCancelledTakerAmountAsync(orderHash, methodOpts);
|
||||||
|
return cancelledTakerAmount;
|
||||||
|
}
|
||||||
|
}
|
44
packages/0x.js/src/globals.d.ts
vendored
44
packages/0x.js/src/globals.d.ts
vendored
@@ -1,50 +1,6 @@
|
|||||||
declare module 'web3_beta';
|
|
||||||
declare module 'chai-bignumber';
|
|
||||||
declare module 'dirty-chai';
|
|
||||||
declare module 'request-promise-native';
|
|
||||||
declare module 'web3-provider-engine';
|
|
||||||
declare module 'web3-provider-engine/subproviders/rpc';
|
|
||||||
declare module 'publish-release';
|
|
||||||
|
|
||||||
// semver-sort declarations
|
|
||||||
declare module 'semver-sort' {
|
|
||||||
const desc: (versions: string[]) => string[];
|
|
||||||
}
|
|
||||||
|
|
||||||
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
|
|
||||||
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
|
|
||||||
// disallow `namespace`, we disable tslint for the following.
|
|
||||||
/* tslint:disable */
|
|
||||||
declare namespace Chai {
|
|
||||||
interface Assertion {
|
|
||||||
bignumber: Assertion;
|
|
||||||
// HACK: In order to comply with chai-as-promised we make eventually a `PromisedAssertion` not an `Assertion`
|
|
||||||
eventually: PromisedAssertion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* tslint:enable */
|
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
const json: any;
|
const json: any;
|
||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
export default json;
|
export default json;
|
||||||
/* tslint:enable */
|
/* tslint:enable */
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module 'ethereumjs-abi' {
|
|
||||||
const soliditySHA3: (argTypes: string[], args: any[]) => Buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
// truffle-hdwallet-provider declarations
|
|
||||||
declare module 'truffle-hdwallet-provider' {
|
|
||||||
import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types';
|
|
||||||
import * as Web3 from 'web3';
|
|
||||||
class HDWalletProvider implements Web3.Provider {
|
|
||||||
constructor(mnemonic: string, rpcUrl: string);
|
|
||||||
public sendAsync(
|
|
||||||
payload: JSONRPCRequestPayload,
|
|
||||||
callback: (err: Error, result: JSONRPCResponsePayload) => void,
|
|
||||||
): void;
|
|
||||||
}
|
|
||||||
export = HDWalletProvider;
|
|
||||||
}
|
|
||||||
|
23
packages/0x.js/src/globalsAugment.d.ts
vendored
23
packages/0x.js/src/globalsAugment.d.ts
vendored
@@ -1,23 +0,0 @@
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
|
||||||
|
|
||||||
// HACK: This module overrides the Chai namespace so that we can use BigNumber types inside.
|
|
||||||
// Source: https://github.com/Microsoft/TypeScript/issues/7352#issuecomment-191547232
|
|
||||||
declare global {
|
|
||||||
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
|
|
||||||
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
|
|
||||||
// disallow `namespace`, we disable tslint for the following.
|
|
||||||
/* tslint:disable */
|
|
||||||
namespace Chai {
|
|
||||||
interface NumberComparer {
|
|
||||||
(value: number | BigNumber, message?: string): Assertion;
|
|
||||||
}
|
|
||||||
interface NumericComparison {
|
|
||||||
greaterThan: NumberComparer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* tslint:enable */
|
|
||||||
interface DecodedLogArg {
|
|
||||||
name: string;
|
|
||||||
value: string | BigNumber;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -11,7 +11,6 @@ export {
|
|||||||
OrderCancellationRequest,
|
OrderCancellationRequest,
|
||||||
OrderFillRequest,
|
OrderFillRequest,
|
||||||
ContractEventArgs,
|
ContractEventArgs,
|
||||||
Web3Provider,
|
|
||||||
ZeroExConfig,
|
ZeroExConfig,
|
||||||
MethodOpts,
|
MethodOpts,
|
||||||
OrderTransactionOpts,
|
OrderTransactionOpts,
|
||||||
@@ -32,6 +31,7 @@ export {
|
|||||||
ContractEventArg,
|
ContractEventArg,
|
||||||
LogWithDecodedArgs,
|
LogWithDecodedArgs,
|
||||||
Order,
|
Order,
|
||||||
|
Provider,
|
||||||
SignedOrder,
|
SignedOrder,
|
||||||
ECSignature,
|
ECSignature,
|
||||||
TransactionReceipt,
|
TransactionReceipt,
|
||||||
|
@@ -13,7 +13,7 @@ enum LogEventState {
|
|||||||
Added,
|
Added,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* The EventWatcher watches for blockchain events at the specified block confirmation
|
* The EventWatcher watches for blockchain events at the specified block confirmation
|
||||||
* depth.
|
* depth.
|
||||||
*/
|
*/
|
||||||
|
@@ -48,6 +48,9 @@ export class ExpirationWatcher {
|
|||||||
this._orderHashByExpirationRBTree.insert(orderHash);
|
this._orderHashByExpirationRBTree.insert(orderHash);
|
||||||
}
|
}
|
||||||
public removeOrder(orderHash: string): void {
|
public removeOrder(orderHash: string): void {
|
||||||
|
if (_.isUndefined(this._expiration[orderHash])) {
|
||||||
|
return; // noop since order already removed
|
||||||
|
}
|
||||||
this._orderHashByExpirationRBTree.remove(orderHash);
|
this._orderHashByExpirationRBTree.remove(orderHash);
|
||||||
delete this._expiration[orderHash];
|
delete this._expiration[orderHash];
|
||||||
}
|
}
|
||||||
|
@@ -69,7 +69,6 @@ export class OrderStateWatcher {
|
|||||||
private _callbackIfExists?: OnOrderStateChangeCallback;
|
private _callbackIfExists?: OnOrderStateChangeCallback;
|
||||||
private _eventWatcher: EventWatcher;
|
private _eventWatcher: EventWatcher;
|
||||||
private _web3Wrapper: Web3Wrapper;
|
private _web3Wrapper: Web3Wrapper;
|
||||||
private _abiDecoder: AbiDecoder;
|
|
||||||
private _expirationWatcher: ExpirationWatcher;
|
private _expirationWatcher: ExpirationWatcher;
|
||||||
private _orderStateUtils: OrderStateUtils;
|
private _orderStateUtils: OrderStateUtils;
|
||||||
private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
|
private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
|
||||||
@@ -78,19 +77,17 @@ export class OrderStateWatcher {
|
|||||||
private _cleanupJobIntervalIdIfExists?: NodeJS.Timer;
|
private _cleanupJobIntervalIdIfExists?: NodeJS.Timer;
|
||||||
constructor(
|
constructor(
|
||||||
web3Wrapper: Web3Wrapper,
|
web3Wrapper: Web3Wrapper,
|
||||||
abiDecoder: AbiDecoder,
|
|
||||||
token: TokenWrapper,
|
token: TokenWrapper,
|
||||||
exchange: ExchangeWrapper,
|
exchange: ExchangeWrapper,
|
||||||
config?: OrderStateWatcherConfig,
|
config?: OrderStateWatcherConfig,
|
||||||
) {
|
) {
|
||||||
this._abiDecoder = abiDecoder;
|
|
||||||
this._web3Wrapper = web3Wrapper;
|
this._web3Wrapper = web3Wrapper;
|
||||||
const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
|
const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
|
||||||
const stateLayer =
|
const stateLayer =
|
||||||
_.isUndefined(config) || _.isUndefined(config.stateLayer) ? BlockParamLiteral.Latest : config.stateLayer;
|
_.isUndefined(config) || _.isUndefined(config.stateLayer) ? BlockParamLiteral.Latest : config.stateLayer;
|
||||||
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs, stateLayer);
|
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs, stateLayer);
|
||||||
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(token, stateLayer);
|
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(token, stateLayer);
|
||||||
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange);
|
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange, stateLayer);
|
||||||
this._orderStateUtils = new OrderStateUtils(
|
this._orderStateUtils = new OrderStateUtils(
|
||||||
this._balanceAndProxyAllowanceLazyStore,
|
this._balanceAndProxyAllowanceLazyStore,
|
||||||
this._orderFilledCancelledLazyStore,
|
this._orderFilledCancelledLazyStore,
|
||||||
@@ -134,7 +131,7 @@ export class OrderStateWatcher {
|
|||||||
}
|
}
|
||||||
delete this._orderByOrderHash[orderHash];
|
delete this._orderByOrderHash[orderHash];
|
||||||
delete this._orderStateByOrderHashCache[orderHash];
|
delete this._orderStateByOrderHashCache[orderHash];
|
||||||
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
|
const exchange = (this._orderFilledCancelledLazyStore as any)._exchangeWrapper as ExchangeWrapper;
|
||||||
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
||||||
|
|
||||||
this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
|
this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
|
||||||
@@ -230,7 +227,7 @@ export class OrderStateWatcher {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const log = logIfExists as LogEvent; // At this moment we are sure that no error occured and log is defined.
|
const log = logIfExists as LogEvent; // At this moment we are sure that no error occured and log is defined.
|
||||||
const maybeDecodedLog = this._abiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(log);
|
const maybeDecodedLog = this._web3Wrapper.abiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(log);
|
||||||
const isLogDecoded = !_.isUndefined(((maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>).event);
|
const isLogDecoded = !_.isUndefined(((maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>).event);
|
||||||
if (!isLogDecoded) {
|
if (!isLogDecoded) {
|
||||||
return; // noop
|
return; // noop
|
||||||
@@ -377,7 +374,7 @@ export class OrderStateWatcher {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
private _getZRXTokenAddress(): string {
|
private _getZRXTokenAddress(): string {
|
||||||
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
|
const exchange = (this._orderFilledCancelledLazyStore as any)._exchangeWrapper as ExchangeWrapper;
|
||||||
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
||||||
return zrxTokenAddress;
|
return zrxTokenAddress;
|
||||||
}
|
}
|
||||||
|
@@ -2,13 +2,14 @@ import { BlockParamLiteral } from '@0xproject/types';
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
|
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
|
||||||
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy on read store for balances/proxyAllowances of tokens/accounts
|
* Copy on read store for balances/proxyAllowances of tokens/accounts
|
||||||
*/
|
*/
|
||||||
export class BalanceAndProxyAllowanceLazyStore {
|
export class BalanceAndProxyAllowanceLazyStore implements BalanceAndProxyAllowanceFetcher {
|
||||||
private _token: TokenWrapper;
|
private _tokenWrapper: TokenWrapper;
|
||||||
private _defaultBlock: BlockParamLiteral;
|
private _defaultBlock: BlockParamLiteral;
|
||||||
private _balance: {
|
private _balance: {
|
||||||
[tokenAddress: string]: {
|
[tokenAddress: string]: {
|
||||||
@@ -21,7 +22,7 @@ export class BalanceAndProxyAllowanceLazyStore {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
constructor(token: TokenWrapper, defaultBlock: BlockParamLiteral) {
|
constructor(token: TokenWrapper, defaultBlock: BlockParamLiteral) {
|
||||||
this._token = token;
|
this._tokenWrapper = token;
|
||||||
this._defaultBlock = defaultBlock;
|
this._defaultBlock = defaultBlock;
|
||||||
this._balance = {};
|
this._balance = {};
|
||||||
this._proxyAllowance = {};
|
this._proxyAllowance = {};
|
||||||
@@ -31,7 +32,7 @@ export class BalanceAndProxyAllowanceLazyStore {
|
|||||||
const methodOpts = {
|
const methodOpts = {
|
||||||
defaultBlock: this._defaultBlock,
|
defaultBlock: this._defaultBlock,
|
||||||
};
|
};
|
||||||
const balance = await this._token.getBalanceAsync(tokenAddress, userAddress, methodOpts);
|
const balance = await this._tokenWrapper.getBalanceAsync(tokenAddress, userAddress, methodOpts);
|
||||||
this.setBalance(tokenAddress, userAddress, balance);
|
this.setBalance(tokenAddress, userAddress, balance);
|
||||||
}
|
}
|
||||||
const cachedBalance = this._balance[tokenAddress][userAddress];
|
const cachedBalance = this._balance[tokenAddress][userAddress];
|
||||||
@@ -59,7 +60,11 @@ export class BalanceAndProxyAllowanceLazyStore {
|
|||||||
const methodOpts = {
|
const methodOpts = {
|
||||||
defaultBlock: this._defaultBlock,
|
defaultBlock: this._defaultBlock,
|
||||||
};
|
};
|
||||||
const proxyAllowance = await this._token.getProxyAllowanceAsync(tokenAddress, userAddress, methodOpts);
|
const proxyAllowance = await this._tokenWrapper.getProxyAllowanceAsync(
|
||||||
|
tokenAddress,
|
||||||
|
userAddress,
|
||||||
|
methodOpts,
|
||||||
|
);
|
||||||
this.setProxyAllowance(tokenAddress, userAddress, proxyAllowance);
|
this.setProxyAllowance(tokenAddress, userAddress, proxyAllowance);
|
||||||
}
|
}
|
||||||
const cachedProxyAllowance = this._proxyAllowance[tokenAddress][userAddress];
|
const cachedProxyAllowance = this._proxyAllowance[tokenAddress][userAddress];
|
||||||
|
@@ -2,30 +2,33 @@ import { BlockParamLiteral } from '@0xproject/types';
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
|
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
|
||||||
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy on read store for filled/cancelled taker amounts
|
* Copy on read store for filled/cancelled taker amounts
|
||||||
*/
|
*/
|
||||||
export class OrderFilledCancelledLazyStore {
|
export class OrderFilledCancelledLazyStore implements OrderFilledCancelledFetcher {
|
||||||
private _exchange: ExchangeWrapper;
|
private _exchangeWrapper: ExchangeWrapper;
|
||||||
|
private _defaultBlock: BlockParamLiteral;
|
||||||
private _filledTakerAmount: {
|
private _filledTakerAmount: {
|
||||||
[orderHash: string]: BigNumber;
|
[orderHash: string]: BigNumber;
|
||||||
};
|
};
|
||||||
private _cancelledTakerAmount: {
|
private _cancelledTakerAmount: {
|
||||||
[orderHash: string]: BigNumber;
|
[orderHash: string]: BigNumber;
|
||||||
};
|
};
|
||||||
constructor(exchange: ExchangeWrapper) {
|
constructor(exchange: ExchangeWrapper, defaultBlock: BlockParamLiteral) {
|
||||||
this._exchange = exchange;
|
this._exchangeWrapper = exchange;
|
||||||
|
this._defaultBlock = defaultBlock;
|
||||||
this._filledTakerAmount = {};
|
this._filledTakerAmount = {};
|
||||||
this._cancelledTakerAmount = {};
|
this._cancelledTakerAmount = {};
|
||||||
}
|
}
|
||||||
public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
||||||
if (_.isUndefined(this._filledTakerAmount[orderHash])) {
|
if (_.isUndefined(this._filledTakerAmount[orderHash])) {
|
||||||
const methodOpts = {
|
const methodOpts = {
|
||||||
defaultBlock: BlockParamLiteral.Pending,
|
defaultBlock: this._defaultBlock,
|
||||||
};
|
};
|
||||||
const filledTakerAmount = await this._exchange.getFilledTakerAmountAsync(orderHash, methodOpts);
|
const filledTakerAmount = await this._exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
|
||||||
this.setFilledTakerAmount(orderHash, filledTakerAmount);
|
this.setFilledTakerAmount(orderHash, filledTakerAmount);
|
||||||
}
|
}
|
||||||
const cachedFilled = this._filledTakerAmount[orderHash];
|
const cachedFilled = this._filledTakerAmount[orderHash];
|
||||||
@@ -40,9 +43,12 @@ export class OrderFilledCancelledLazyStore {
|
|||||||
public async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
public async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
|
||||||
if (_.isUndefined(this._cancelledTakerAmount[orderHash])) {
|
if (_.isUndefined(this._cancelledTakerAmount[orderHash])) {
|
||||||
const methodOpts = {
|
const methodOpts = {
|
||||||
defaultBlock: BlockParamLiteral.Pending,
|
defaultBlock: this._defaultBlock,
|
||||||
};
|
};
|
||||||
const cancelledTakerAmount = await this._exchange.getCancelledTakerAmountAsync(orderHash, methodOpts);
|
const cancelledTakerAmount = await this._exchangeWrapper.getCancelledTakerAmountAsync(
|
||||||
|
orderHash,
|
||||||
|
methodOpts,
|
||||||
|
);
|
||||||
this.setCancelledTakerAmount(orderHash, cancelledTakerAmount);
|
this.setCancelledTakerAmount(orderHash, cancelledTakerAmount);
|
||||||
}
|
}
|
||||||
const cachedCancelled = this._cancelledTakerAmount[orderHash];
|
const cachedCancelled = this._cancelledTakerAmount[orderHash];
|
||||||
|
@@ -38,7 +38,6 @@ export enum ZeroExError {
|
|||||||
NoNetworkId = 'NO_NETWORK_ID',
|
NoNetworkId = 'NO_NETWORK_ID',
|
||||||
SubscriptionNotFound = 'SUBSCRIPTION_NOT_FOUND',
|
SubscriptionNotFound = 'SUBSCRIPTION_NOT_FOUND',
|
||||||
SubscriptionAlreadyPresent = 'SUBSCRIPTION_ALREADY_PRESENT',
|
SubscriptionAlreadyPresent = 'SUBSCRIPTION_ALREADY_PRESENT',
|
||||||
TransactionMiningTimeout = 'TRANSACTION_MINING_TIMEOUT',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum InternalZeroExError {
|
export enum InternalZeroExError {
|
||||||
@@ -156,20 +155,12 @@ export type AsyncMethod = (...args: any[]) => Promise<any>;
|
|||||||
export type SyncMethod = (...args: any[]) => any;
|
export type SyncMethod = (...args: any[]) => any;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* We re-export the `Web3.Provider` type specified in the Web3 Typescript typings
|
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default=50.
|
||||||
* since it is the type of the `provider` argument to the `ZeroEx` constructor.
|
* eventPollingIntervalMs: How often to poll the Ethereum node for new events. Default=200.
|
||||||
* It is however a `Web3` library type, not a native `0x.js` type. To learn more
|
|
||||||
* about providers, visit https://0xproject.com/wiki#Web3-Provider-Explained
|
|
||||||
*/
|
|
||||||
export type Web3Provider = Web3.Provider;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default: 50
|
|
||||||
* eventPollingIntervalMs: How often to poll the Ethereum node for new events. Default: 200
|
|
||||||
* expirationMarginMs: Amount of time before order expiry that you'd like to be notified
|
* expirationMarginMs: Amount of time before order expiry that you'd like to be notified
|
||||||
* of an orders expiration. Default: 0
|
* of an orders expiration. Default=0.
|
||||||
* cleanupJobIntervalMs: How often to run a cleanup job which revalidates all the orders. Defaults: 1h
|
* cleanupJobIntervalMs: How often to run a cleanup job which revalidates all the orders. Default=1hr.
|
||||||
* stateLayer: Optional blockchain state layer OrderWatcher will monitor for new events. Default: latest
|
* stateLayer: Optional blockchain state layer OrderWatcher will monitor for new events. Default=latest.
|
||||||
*/
|
*/
|
||||||
export interface OrderStateWatcherConfig {
|
export interface OrderStateWatcherConfig {
|
||||||
orderExpirationCheckingIntervalMs?: number;
|
orderExpirationCheckingIntervalMs?: number;
|
||||||
@@ -179,7 +170,7 @@ export interface OrderStateWatcherConfig {
|
|||||||
stateLayer: BlockParamLiteral;
|
stateLayer: BlockParamLiteral;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 3-ropsten, 4-rinkeby, 42-kovan, 50-testrpc)
|
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 3-ropsten, 4-rinkeby, 42-kovan, 50-testrpc)
|
||||||
* gasPrice: Gas price to use with every transaction
|
* gasPrice: Gas price to use with every transaction
|
||||||
* exchangeContractAddress: The address of an exchange contract to use
|
* exchangeContractAddress: The address of an exchange contract to use
|
||||||
@@ -210,7 +201,7 @@ export interface Artifact {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* expectedFillTakerTokenAmount: If specified, the validation method will ensure that the
|
* expectedFillTakerTokenAmount: If specified, the validation method will ensure that the
|
||||||
* supplied order maker has a sufficient allowance/balance to fill this amount of the order's
|
* supplied order maker has a sufficient allowance/balance to fill this amount of the order's
|
||||||
* takerTokenAmount. If not specified, the validation method ensures that the maker has a sufficient
|
* takerTokenAmount. If not specified, the validation method ensures that the maker has a sufficient
|
||||||
@@ -220,7 +211,7 @@ export interface ValidateOrderFillableOpts {
|
|||||||
expectedFillTakerTokenAmount?: BigNumber;
|
expectedFillTakerTokenAmount?: BigNumber;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* defaultBlock: The block up to which to query the blockchain state. Setting this to a historical block number
|
* defaultBlock: The block up to which to query the blockchain state. Setting this to a historical block number
|
||||||
* let's the user query the blockchain's state at an arbitrary point in time. In order for this to work, the
|
* let's the user query the blockchain's state at an arbitrary point in time. In order for this to work, the
|
||||||
* backing Ethereum node must keep the entire historical state of the chain (e.g setting `--pruning=archive`
|
* backing Ethereum node must keep the entire historical state of the chain (e.g setting `--pruning=archive`
|
||||||
@@ -230,7 +221,7 @@ export interface MethodOpts {
|
|||||||
defaultBlock?: BlockParam;
|
defaultBlock?: BlockParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* gasPrice: Gas price in Wei to use for a transaction
|
* gasPrice: Gas price in Wei to use for a transaction
|
||||||
* gasLimit: The amount of gas to send with a transaction
|
* gasLimit: The amount of gas to send with a transaction
|
||||||
*/
|
*/
|
||||||
@@ -239,9 +230,9 @@ export interface TransactionOpts {
|
|||||||
gasLimit?: number;
|
gasLimit?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* shouldValidate: Flag indicating whether the library should make attempts to validate a transaction before
|
* shouldValidate: Flag indicating whether the library should make attempts to validate a transaction before
|
||||||
* broadcasting it. For example, order has a valid signature, maker has sufficient funds, etc. Default: true
|
* broadcasting it. For example, order has a valid signature, maker has sufficient funds, etc. Default=true.
|
||||||
*/
|
*/
|
||||||
export interface OrderTransactionOpts extends TransactionOpts {
|
export interface OrderTransactionOpts extends TransactionOpts {
|
||||||
shouldValidate?: boolean;
|
shouldValidate?: boolean;
|
||||||
|
@@ -3,17 +3,17 @@ import { BigNumber } from '@0xproject/utils';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { ZeroEx } from '../0x';
|
import { ZeroEx } from '../0x';
|
||||||
|
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
|
||||||
|
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
|
||||||
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
import { RemainingFillableCalculator } from '../order_watcher/remaining_fillable_calculator';
|
import { RemainingFillableCalculator } from '../order_watcher/remaining_fillable_calculator';
|
||||||
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
|
|
||||||
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
|
|
||||||
import { ExchangeContractErrs, OrderRelevantState, OrderState, OrderStateInvalid, OrderStateValid } from '../types';
|
import { ExchangeContractErrs, OrderRelevantState, OrderState, OrderStateInvalid, OrderStateValid } from '../types';
|
||||||
|
|
||||||
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
|
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
|
||||||
|
|
||||||
export class OrderStateUtils {
|
export class OrderStateUtils {
|
||||||
private _balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore;
|
private _balanceAndProxyAllowanceFetcher: BalanceAndProxyAllowanceFetcher;
|
||||||
private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
|
private _orderFilledCancelledFetcher: OrderFilledCancelledFetcher;
|
||||||
private static _validateIfOrderIsValid(signedOrder: SignedOrder, orderRelevantState: OrderRelevantState): void {
|
private static _validateIfOrderIsValid(signedOrder: SignedOrder, orderRelevantState: OrderRelevantState): void {
|
||||||
const unavailableTakerTokenAmount = orderRelevantState.cancelledTakerTokenAmount.add(
|
const unavailableTakerTokenAmount = orderRelevantState.cancelledTakerTokenAmount.add(
|
||||||
orderRelevantState.filledTakerTokenAmount,
|
orderRelevantState.filledTakerTokenAmount,
|
||||||
@@ -49,11 +49,11 @@ export class OrderStateUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
constructor(
|
constructor(
|
||||||
balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore,
|
balanceAndProxyAllowanceFetcher: BalanceAndProxyAllowanceFetcher,
|
||||||
orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore,
|
orderFilledCancelledFetcher: OrderFilledCancelledFetcher,
|
||||||
) {
|
) {
|
||||||
this._balanceAndProxyAllowanceLazyStore = balanceAndProxyAllowanceLazyStore;
|
this._balanceAndProxyAllowanceFetcher = balanceAndProxyAllowanceFetcher;
|
||||||
this._orderFilledCancelledLazyStore = orderFilledCancelledLazyStore;
|
this._orderFilledCancelledFetcher = orderFilledCancelledFetcher;
|
||||||
}
|
}
|
||||||
public async getOrderStateAsync(signedOrder: SignedOrder): Promise<OrderState> {
|
public async getOrderStateAsync(signedOrder: SignedOrder): Promise<OrderState> {
|
||||||
const orderRelevantState = await this.getOrderRelevantStateAsync(signedOrder);
|
const orderRelevantState = await this.getOrderRelevantStateAsync(signedOrder);
|
||||||
@@ -80,27 +80,27 @@ export class OrderStateUtils {
|
|||||||
// If we pass it from the instantiator - there is no opportunity to get it there
|
// If we pass it from the instantiator - there is no opportunity to get it there
|
||||||
// because JS doesn't support async constructors.
|
// because JS doesn't support async constructors.
|
||||||
// Moreover - it's cached under the hood so it's equivalent to an async constructor.
|
// Moreover - it's cached under the hood so it's equivalent to an async constructor.
|
||||||
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
|
const exchange = (this._orderFilledCancelledFetcher as any)._exchangeWrapper as ExchangeWrapper;
|
||||||
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
const makerBalance = await this._balanceAndProxyAllowanceLazyStore.getBalanceAsync(
|
const makerBalance = await this._balanceAndProxyAllowanceFetcher.getBalanceAsync(
|
||||||
signedOrder.makerTokenAddress,
|
signedOrder.makerTokenAddress,
|
||||||
signedOrder.maker,
|
signedOrder.maker,
|
||||||
);
|
);
|
||||||
const makerProxyAllowance = await this._balanceAndProxyAllowanceLazyStore.getProxyAllowanceAsync(
|
const makerProxyAllowance = await this._balanceAndProxyAllowanceFetcher.getProxyAllowanceAsync(
|
||||||
signedOrder.makerTokenAddress,
|
signedOrder.makerTokenAddress,
|
||||||
signedOrder.maker,
|
signedOrder.maker,
|
||||||
);
|
);
|
||||||
const makerFeeBalance = await this._balanceAndProxyAllowanceLazyStore.getBalanceAsync(
|
const makerFeeBalance = await this._balanceAndProxyAllowanceFetcher.getBalanceAsync(
|
||||||
zrxTokenAddress,
|
zrxTokenAddress,
|
||||||
signedOrder.maker,
|
signedOrder.maker,
|
||||||
);
|
);
|
||||||
const makerFeeProxyAllowance = await this._balanceAndProxyAllowanceLazyStore.getProxyAllowanceAsync(
|
const makerFeeProxyAllowance = await this._balanceAndProxyAllowanceFetcher.getProxyAllowanceAsync(
|
||||||
zrxTokenAddress,
|
zrxTokenAddress,
|
||||||
signedOrder.maker,
|
signedOrder.maker,
|
||||||
);
|
);
|
||||||
const filledTakerTokenAmount = await this._orderFilledCancelledLazyStore.getFilledTakerAmountAsync(orderHash);
|
const filledTakerTokenAmount = await this._orderFilledCancelledFetcher.getFilledTakerAmountAsync(orderHash);
|
||||||
const cancelledTakerTokenAmount = await this._orderFilledCancelledLazyStore.getCancelledTakerAmountAsync(
|
const cancelledTakerTokenAmount = await this._orderFilledCancelledFetcher.getCancelledTakerAmountAsync(
|
||||||
orderHash,
|
orderHash,
|
||||||
);
|
);
|
||||||
const unavailableTakerTokenAmount = await exchange.getUnavailableTakerAmountAsync(orderHash);
|
const unavailableTakerTokenAmount = await exchange.getUnavailableTakerAmountAsync(orderHash);
|
||||||
|
@@ -1,16 +1,23 @@
|
|||||||
|
import { Deployer } from '@0xproject/deployer';
|
||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
|
// HACK: This dependency is optional since it is only available when run from within
|
||||||
|
// the monorepo. tslint doesn't handle optional dependencies
|
||||||
|
// tslint:disable-next-line:no-implicit-dependencies
|
||||||
|
import { runMigrationsAsync } from '@0xproject/migrations';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
import * as path from 'path';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
|
|
||||||
import { ApprovalContractEventArgs, LogWithDecodedArgs, Order, TokenEvents, ZeroEx } from '../src';
|
import { ApprovalContractEventArgs, LogWithDecodedArgs, Order, TokenEvents, ZeroEx } from '../src';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
|
import { deployer } from './utils/deployer';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
@@ -19,10 +26,14 @@ const expect = chai.expect;
|
|||||||
const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false;
|
const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false;
|
||||||
|
|
||||||
describe('ZeroEx library', () => {
|
describe('ZeroEx library', () => {
|
||||||
const config = {
|
let zeroEx: ZeroEx;
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
before(async () => {
|
||||||
};
|
await runMigrationsAsync(deployer);
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, config);
|
const config = {
|
||||||
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
|
};
|
||||||
|
zeroEx = new ZeroEx(provider, config);
|
||||||
|
});
|
||||||
describe('#setProvider', () => {
|
describe('#setProvider', () => {
|
||||||
it('overrides provider in nested web3s and invalidates contractInstances', async () => {
|
it('overrides provider in nested web3s and invalidates contractInstances', async () => {
|
||||||
// Instantiate the contract instances with the current provider
|
// Instantiate the contract instances with the current provider
|
||||||
@@ -31,10 +42,9 @@ describe('ZeroEx library', () => {
|
|||||||
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined();
|
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined();
|
||||||
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined();
|
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined();
|
||||||
|
|
||||||
const newProvider = web3Factory.getRpcProvider();
|
|
||||||
// Add property to newProvider so that we can differentiate it from old provider
|
// Add property to newProvider so that we can differentiate it from old provider
|
||||||
(newProvider as any).zeroExTestId = 1;
|
(provider as any).zeroExTestId = 1;
|
||||||
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
|
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
|
||||||
|
|
||||||
// Check that contractInstances with old provider are removed after provider update
|
// Check that contractInstances with old provider are removed after provider update
|
||||||
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined();
|
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined();
|
||||||
@@ -278,7 +288,7 @@ describe('ZeroEx library', () => {
|
|||||||
exchangeContractAddress: ZeroEx.NULL_ADDRESS,
|
exchangeContractAddress: ZeroEx.NULL_ADDRESS,
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroExWithWrongExchangeAddress = new ZeroEx(web3.currentProvider, zeroExConfig);
|
const zeroExWithWrongExchangeAddress = new ZeroEx(provider, zeroExConfig);
|
||||||
expect(zeroExWithWrongExchangeAddress.exchange.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS);
|
expect(zeroExWithWrongExchangeAddress.exchange.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS);
|
||||||
});
|
});
|
||||||
it('allows to specify token registry token contract address', async () => {
|
it('allows to specify token registry token contract address', async () => {
|
||||||
@@ -286,7 +296,7 @@ describe('ZeroEx library', () => {
|
|||||||
tokenRegistryContractAddress: ZeroEx.NULL_ADDRESS,
|
tokenRegistryContractAddress: ZeroEx.NULL_ADDRESS,
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroExWithWrongTokenRegistryAddress = new ZeroEx(web3.currentProvider, zeroExConfig);
|
const zeroExWithWrongTokenRegistryAddress = new ZeroEx(provider, zeroExConfig);
|
||||||
expect(zeroExWithWrongTokenRegistryAddress.tokenRegistry.getContractAddress()).to.be.equal(
|
expect(zeroExWithWrongTokenRegistryAddress.tokenRegistry.getContractAddress()).to.be.equal(
|
||||||
ZeroEx.NULL_ADDRESS,
|
ZeroEx.NULL_ADDRESS,
|
||||||
);
|
);
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import HDWalletProvider = require('truffle-hdwallet-provider');
|
|
||||||
|
|
||||||
import { ZeroEx } from '../src';
|
import { ZeroEx } from '../src';
|
||||||
|
|
||||||
@@ -14,14 +14,11 @@ const TIMEOUT = 10000;
|
|||||||
describe('Artifacts', () => {
|
describe('Artifacts', () => {
|
||||||
describe('contracts are deployed on kovan', () => {
|
describe('contracts are deployed on kovan', () => {
|
||||||
const kovanRpcUrl = constants.KOVAN_RPC_URL;
|
const kovanRpcUrl = constants.KOVAN_RPC_URL;
|
||||||
const packageJSONContent = fs.readFileSync('package.json', 'utf-8');
|
const provider = web3Factory.create({ rpcUrl: kovanRpcUrl }).currentProvider;
|
||||||
const packageJSON = JSON.parse(packageJSONContent);
|
|
||||||
const mnemonic = packageJSON.config.mnemonic;
|
|
||||||
const web3Provider = new HDWalletProvider(mnemonic, kovanRpcUrl);
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.KOVAN_NETWORK_ID,
|
networkId: constants.KOVAN_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroEx = new ZeroEx(web3Provider, config);
|
const zeroEx = new ZeroEx(provider, config);
|
||||||
it('token registry contract is deployed', async () => {
|
it('token registry contract is deployed', async () => {
|
||||||
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
|
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
|
||||||
}).timeout(TIMEOUT);
|
}).timeout(TIMEOUT);
|
||||||
@@ -34,14 +31,11 @@ describe('Artifacts', () => {
|
|||||||
});
|
});
|
||||||
describe('contracts are deployed on ropsten', () => {
|
describe('contracts are deployed on ropsten', () => {
|
||||||
const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
|
const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
|
||||||
const packageJSONContent = fs.readFileSync('package.json', 'utf-8');
|
const provider = web3Factory.create({ rpcUrl: ropstenRpcUrl }).currentProvider;
|
||||||
const packageJSON = JSON.parse(packageJSONContent);
|
|
||||||
const mnemonic = packageJSON.config.mnemonic;
|
|
||||||
const web3Provider = new HDWalletProvider(mnemonic, ropstenRpcUrl);
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.ROPSTEN_NETWORK_ID,
|
networkId: constants.ROPSTEN_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroEx = new ZeroEx(web3Provider, config);
|
const zeroEx = new ZeroEx(provider, config);
|
||||||
it('token registry contract is deployed', async () => {
|
it('token registry contract is deployed', async () => {
|
||||||
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
|
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
|
||||||
}).timeout(TIMEOUT);
|
}).timeout(TIMEOUT);
|
||||||
|
@@ -6,15 +6,15 @@ import { ZeroEx } from '../src';
|
|||||||
import { assert } from '../src/utils/assert';
|
import { assert } from '../src/utils/assert';
|
||||||
|
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
|
import { provider } from './utils/web3_wrapper';
|
||||||
|
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
describe('Assertion library', () => {
|
describe('Assertion library', () => {
|
||||||
const web3 = web3Factory.create();
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, config);
|
const zeroEx = new ZeroEx(provider, config);
|
||||||
describe('#isSenderAddressHexAsync', () => {
|
describe('#isSenderAddressHexAsync', () => {
|
||||||
it('throws when address is invalid', async () => {
|
it('throws when address is invalid', async () => {
|
||||||
const address = '0xdeadbeef';
|
const address = '0xdeadbeef';
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ApprovalContractEventArgs,
|
ApprovalContractEventArgs,
|
||||||
@@ -23,7 +23,7 @@ import { chaiSetup } from './utils/chai_setup';
|
|||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -54,12 +54,12 @@ describe('EtherTokenWrapper', () => {
|
|||||||
const depositAmount = new BigNumber(42);
|
const depositAmount = new BigNumber(42);
|
||||||
const withdrawalAmount = new BigNumber(42);
|
const withdrawalAmount = new BigNumber(42);
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);
|
zeroEx = new ZeroEx(provider, zeroExConfig);
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
addressWithETH = userAddresses[0];
|
addressWithETH = userAddresses[0];
|
||||||
wethContractAddress = zeroEx.etherToken.getContractAddressIfExists() as string;
|
wethContractAddress = zeroEx.etherToken.getContractAddressIfExists() as string;
|
||||||
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
|
depositWeiAmount = Web3Wrapper.toWei(new BigNumber(5));
|
||||||
decimalPlaces = 7;
|
decimalPlaces = 7;
|
||||||
addressWithoutFunds = userAddresses[1];
|
addressWithoutFunds = userAddresses[1];
|
||||||
});
|
});
|
||||||
@@ -78,7 +78,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
const UNKNOWN_NETWORK_NETWORK_ID = 10;
|
const UNKNOWN_NETWORK_NETWORK_ID = 10;
|
||||||
expect(
|
expect(
|
||||||
() =>
|
() =>
|
||||||
new ZeroEx(web3.currentProvider, {
|
new ZeroEx(provider, {
|
||||||
networkId: UNKNOWN_NETWORK_NETWORK_ID,
|
networkId: UNKNOWN_NETWORK_NETWORK_ID,
|
||||||
} as any),
|
} as any),
|
||||||
).to.throw();
|
).to.throw();
|
||||||
@@ -105,7 +105,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
it('should throw if user has insufficient ETH balance for deposit', async () => {
|
it('should throw if user has insufficient ETH balance for deposit', async () => {
|
||||||
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
|
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
|
||||||
|
|
||||||
const extraETHBalance = (zeroEx as any)._web3Wrapper.toWei(5, 'ether');
|
const extraETHBalance = Web3Wrapper.toWei(new BigNumber(5));
|
||||||
const overETHBalanceinWei = preETHBalance.add(extraETHBalance);
|
const overETHBalanceinWei = preETHBalance.add(extraETHBalance);
|
||||||
|
|
||||||
return expect(
|
return expect(
|
||||||
@@ -260,8 +260,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
callbackNeverToBeCalled,
|
callbackNeverToBeCalled,
|
||||||
);
|
);
|
||||||
const callbackToBeCalled = reportNodeCallbackErrors(done)();
|
const callbackToBeCalled = reportNodeCallbackErrors(done)();
|
||||||
const newProvider = web3Factory.getRpcProvider();
|
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
|
||||||
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
|
|
||||||
await zeroEx.etherToken.depositAsync(etherTokenAddress, transferAmount, addressWithETH);
|
await zeroEx.etherToken.depositAsync(etherTokenAddress, transferAmount, addressWithETH);
|
||||||
zeroEx.etherToken.subscribe(
|
zeroEx.etherToken.subscribe(
|
||||||
etherTokenAddress,
|
etherTokenAddress,
|
||||||
|
@@ -5,7 +5,6 @@ import * as chai from 'chai';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { LogEvent } from '../src';
|
import { LogEvent } from '../src';
|
||||||
import { EventWatcher } from '../src/order_watcher/event_watcher';
|
import { EventWatcher } from '../src/order_watcher/event_watcher';
|
||||||
@@ -13,12 +12,12 @@ import { DoneCallback } from '../src/types';
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
|
import { provider } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
describe('EventWatcher', () => {
|
describe('EventWatcher', () => {
|
||||||
let web3: Web3;
|
|
||||||
let stubs: Sinon.SinonStub[] = [];
|
let stubs: Sinon.SinonStub[] = [];
|
||||||
let eventWatcher: EventWatcher;
|
let eventWatcher: EventWatcher;
|
||||||
let web3Wrapper: Web3Wrapper;
|
let web3Wrapper: Web3Wrapper;
|
||||||
@@ -53,9 +52,8 @@ describe('EventWatcher', () => {
|
|||||||
transactionIndex: 0,
|
transactionIndex: 0,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
const pollingIntervalMs = 10;
|
const pollingIntervalMs = 10;
|
||||||
web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
web3Wrapper = new Web3Wrapper(provider);
|
||||||
eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalMs);
|
eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalMs);
|
||||||
});
|
});
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
|
@@ -9,7 +9,7 @@ import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simula
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -19,7 +19,7 @@ describe('ExchangeTransferSimulator', () => {
|
|||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, config);
|
const zeroEx = new ZeroEx(provider, config);
|
||||||
const transferAmount = new BigNumber(5);
|
const transferAmount = new BigNumber(5);
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
|
@@ -4,7 +4,6 @@ import { BigNumber } from '@0xproject/utils';
|
|||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
BlockRange,
|
BlockRange,
|
||||||
@@ -15,6 +14,7 @@ import {
|
|||||||
LogFillContractEventArgs,
|
LogFillContractEventArgs,
|
||||||
OrderCancellationRequest,
|
OrderCancellationRequest,
|
||||||
OrderFillRequest,
|
OrderFillRequest,
|
||||||
|
OrderState,
|
||||||
SignedOrder,
|
SignedOrder,
|
||||||
Token,
|
Token,
|
||||||
ZeroEx,
|
ZeroEx,
|
||||||
@@ -26,7 +26,7 @@ import { constants } from './utils/constants';
|
|||||||
import { FillScenarios } from './utils/fill_scenarios';
|
import { FillScenarios } from './utils/fill_scenarios';
|
||||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -46,7 +46,7 @@ describe('ExchangeWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
@@ -977,8 +977,7 @@ describe('ExchangeWrapper', () => {
|
|||||||
);
|
);
|
||||||
zeroEx.exchange.subscribe(ExchangeEvents.LogFill, indexFilterValues, callbackNeverToBeCalled);
|
zeroEx.exchange.subscribe(ExchangeEvents.LogFill, indexFilterValues, callbackNeverToBeCalled);
|
||||||
|
|
||||||
const newProvider = web3Factory.getRpcProvider();
|
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
|
||||||
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
|
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)(
|
const callback = reportNodeCallbackErrors(done)(
|
||||||
(logEvent: DecodedLogEvent<LogFillContractEventArgs>) => {
|
(logEvent: DecodedLogEvent<LogFillContractEventArgs>) => {
|
||||||
@@ -1156,4 +1155,41 @@ describe('ExchangeWrapper', () => {
|
|||||||
expect(args.maker).to.be.equal(differentMakerAddress);
|
expect(args.maker).to.be.equal(differentMakerAddress);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('#getOrderStateAsync', () => {
|
||||||
|
let maker: string;
|
||||||
|
let taker: string;
|
||||||
|
let makerToken: Token;
|
||||||
|
let takerToken: Token;
|
||||||
|
let signedOrder: SignedOrder;
|
||||||
|
let orderState: OrderState;
|
||||||
|
const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), constants.ZRX_DECIMALS);
|
||||||
|
before(async () => {
|
||||||
|
[, maker, taker] = userAddresses;
|
||||||
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
|
[makerToken, takerToken] = tokenUtils.getDummyTokens();
|
||||||
|
});
|
||||||
|
it('should report orderStateValid when order is fillable', async () => {
|
||||||
|
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
|
||||||
|
makerToken.address,
|
||||||
|
takerToken.address,
|
||||||
|
maker,
|
||||||
|
taker,
|
||||||
|
fillableAmount,
|
||||||
|
);
|
||||||
|
orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
|
||||||
|
expect(orderState.isValid).to.be.true();
|
||||||
|
});
|
||||||
|
it('should report orderStateInvalid when maker allowance set to 0', async () => {
|
||||||
|
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
|
||||||
|
makerToken.address,
|
||||||
|
takerToken.address,
|
||||||
|
maker,
|
||||||
|
taker,
|
||||||
|
fillableAmount,
|
||||||
|
);
|
||||||
|
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
|
||||||
|
orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
|
||||||
|
expect(orderState.isValid).to.be.false();
|
||||||
|
});
|
||||||
|
});
|
||||||
}); // tslint:disable:max-file-line-count
|
}); // tslint:disable:max-file-line-count
|
||||||
|
@@ -4,7 +4,6 @@ import * as chai from 'chai';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { ZeroEx } from '../src/0x';
|
import { ZeroEx } from '../src/0x';
|
||||||
import { ExpirationWatcher } from '../src/order_watcher/expiration_watcher';
|
import { ExpirationWatcher } from '../src/order_watcher/expiration_watcher';
|
||||||
@@ -16,7 +15,7 @@ import { constants } from './utils/constants';
|
|||||||
import { FillScenarios } from './utils/fill_scenarios';
|
import { FillScenarios } from './utils/fill_scenarios';
|
||||||
import { reportNoErrorCallbackErrors } from './utils/report_callback_errors';
|
import { reportNoErrorCallbackErrors } from './utils/report_callback_errors';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -44,7 +43,7 @@ describe('ExpirationWatcher', () => {
|
|||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
|
@@ -3,7 +3,6 @@ import { BigNumber } from '@0xproject/utils';
|
|||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
@@ -23,7 +22,7 @@ import { constants } from './utils/constants';
|
|||||||
import { FillScenarios } from './utils/fill_scenarios';
|
import { FillScenarios } from './utils/fill_scenarios';
|
||||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
const TIMEOUT_MS = 150;
|
const TIMEOUT_MS = 150;
|
||||||
|
|
||||||
@@ -51,7 +50,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const decimals = constants.ZRX_DECIMALS;
|
const decimals = constants.ZRX_DECIMALS;
|
||||||
const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), decimals);
|
const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), decimals);
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
orderStateWatcher = zeroEx.createOrderStateWatcher();
|
orderStateWatcher = zeroEx.createOrderStateWatcher();
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
|
@@ -3,7 +3,6 @@ import { BlockParamLiteral } from '@0xproject/types';
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { ExchangeContractErrs, SignedOrder, Token, ZeroEx, ZeroExError } from '../src';
|
import { ExchangeContractErrs, SignedOrder, Token, ZeroEx, ZeroExError } from '../src';
|
||||||
import { TradeSide, TransferType } from '../src/types';
|
import { TradeSide, TransferType } from '../src/types';
|
||||||
@@ -14,7 +13,7 @@ import { chaiSetup } from './utils/chai_setup';
|
|||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { FillScenarios } from './utils/fill_scenarios';
|
import { FillScenarios } from './utils/fill_scenarios';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -40,7 +39,7 @@ describe('OrderValidation', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
[coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;
|
[coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;
|
||||||
|
@@ -3,7 +3,6 @@ import { BigNumber } from '@0xproject/utils';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { ApprovalContractEventArgs, DecodedLogEvent, Token, TokenEvents, ZeroEx } from '../src';
|
import { ApprovalContractEventArgs, DecodedLogEvent, Token, TokenEvents, ZeroEx } from '../src';
|
||||||
import { DoneCallback } from '../src/types';
|
import { DoneCallback } from '../src/types';
|
||||||
@@ -11,7 +10,7 @@ import { DoneCallback } from '../src/types';
|
|||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { assertNodeCallbackError } from './utils/report_callback_errors';
|
import { assertNodeCallbackError } from './utils/report_callback_errors';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
@@ -26,7 +25,7 @@ describe('SubscriptionTest', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
coinbase = userAddresses[0];
|
coinbase = userAddresses[0];
|
||||||
|
@@ -8,7 +8,7 @@ import { Token, ZeroEx } from '../src';
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -31,7 +31,7 @@ describe('TokenRegistryWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
_.map(tokens, token => {
|
_.map(tokens, token => {
|
||||||
tokenAddressBySymbol[token.symbol] = token.address;
|
tokenAddressBySymbol[token.symbol] = token.address;
|
||||||
|
@@ -1,14 +1,13 @@
|
|||||||
import { web3Factory } from '@0xproject/dev-utils';
|
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
|
|
||||||
import { ZeroEx } from '../src';
|
import { ZeroEx } from '../src';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
|
import { provider } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const web3 = web3Factory.create();
|
|
||||||
|
|
||||||
describe('TokenTransferProxyWrapper', () => {
|
describe('TokenTransferProxyWrapper', () => {
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
@@ -16,7 +15,7 @@ describe('TokenTransferProxyWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
});
|
});
|
||||||
describe('#isAuthorizedAsync', () => {
|
describe('#isAuthorizedAsync', () => {
|
||||||
it('should return false if the address is not authorized', async () => {
|
it('should return false if the address is not authorized', async () => {
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
|
import { EmptyWalletSubprovider } from '@0xproject/subproviders';
|
||||||
|
import { Provider } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
import * as Web3 from 'web3';
|
import Web3ProviderEngine = require('web3-provider-engine');
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ApprovalContractEventArgs,
|
ApprovalContractEventArgs,
|
||||||
@@ -22,7 +23,7 @@ import { chaiSetup } from './utils/chai_setup';
|
|||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -39,7 +40,7 @@ describe('TokenWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(provider, config);
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
tokenUtils = new TokenUtils(tokens);
|
tokenUtils = new TokenUtils(tokens);
|
||||||
@@ -164,7 +165,7 @@ describe('TokenWrapper', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('#getBalanceAsync', () => {
|
describe('#getBalanceAsync', () => {
|
||||||
describe('With web3 provider with accounts', () => {
|
describe('With provider with accounts', () => {
|
||||||
it('should return the balance for an existing ERC20 token', async () => {
|
it('should return the balance for an existing ERC20 token', async () => {
|
||||||
const token = tokens[0];
|
const token = tokens[0];
|
||||||
const ownerAddress = coinbase;
|
const ownerAddress = coinbase;
|
||||||
@@ -187,14 +188,14 @@ describe('TokenWrapper', () => {
|
|||||||
return expect(balance).to.be.bignumber.equal(expectedBalance);
|
return expect(balance).to.be.bignumber.equal(expectedBalance);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('With web3 provider without accounts', () => {
|
describe('With provider without accounts', () => {
|
||||||
let zeroExWithoutAccounts: ZeroEx;
|
let zeroExWithoutAccounts: ZeroEx;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const hasAddresses = false;
|
const hasAddresses = false;
|
||||||
const web3WithoutAccounts = web3Factory.create({ hasAddresses });
|
const emptyWalletProvider = addEmptyWalletSubprovider(provider);
|
||||||
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
zeroExWithoutAccounts = new ZeroEx(emptyWalletProvider, config);
|
||||||
});
|
});
|
||||||
it('should return balance even when called with Web3 provider instance without addresses', async () => {
|
it('should return balance even when called with provider instance without addresses', async () => {
|
||||||
const token = tokens[0];
|
const token = tokens[0];
|
||||||
const ownerAddress = coinbase;
|
const ownerAddress = coinbase;
|
||||||
const balance = await zeroExWithoutAccounts.token.getBalanceAsync(token.address, ownerAddress);
|
const balance = await zeroExWithoutAccounts.token.getBalanceAsync(token.address, ownerAddress);
|
||||||
@@ -277,7 +278,7 @@ describe('TokenWrapper', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('#getAllowanceAsync', () => {
|
describe('#getAllowanceAsync', () => {
|
||||||
describe('With web3 provider with accounts', () => {
|
describe('With provider with accounts', () => {
|
||||||
it('should get the proxy allowance', async () => {
|
it('should get the proxy allowance', async () => {
|
||||||
const token = tokens[0];
|
const token = tokens[0];
|
||||||
const ownerAddress = coinbase;
|
const ownerAddress = coinbase;
|
||||||
@@ -299,12 +300,12 @@ describe('TokenWrapper', () => {
|
|||||||
return expect(allowance).to.be.bignumber.equal(expectedAllowance);
|
return expect(allowance).to.be.bignumber.equal(expectedAllowance);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('With web3 provider without accounts', () => {
|
describe('With provider without accounts', () => {
|
||||||
let zeroExWithoutAccounts: ZeroEx;
|
let zeroExWithoutAccounts: ZeroEx;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const hasAddresses = false;
|
const hasAddresses = false;
|
||||||
const web3WithoutAccounts = web3Factory.create({ hasAddresses });
|
const emptyWalletProvider = addEmptyWalletSubprovider(provider);
|
||||||
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
zeroExWithoutAccounts = new ZeroEx(emptyWalletProvider, config);
|
||||||
});
|
});
|
||||||
it('should get the proxy allowance', async () => {
|
it('should get the proxy allowance', async () => {
|
||||||
const token = tokens[0];
|
const token = tokens[0];
|
||||||
@@ -424,8 +425,7 @@ describe('TokenWrapper', () => {
|
|||||||
);
|
);
|
||||||
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackNeverToBeCalled);
|
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackNeverToBeCalled);
|
||||||
const callbackToBeCalled = reportNodeCallbackErrors(done)();
|
const callbackToBeCalled = reportNodeCallbackErrors(done)();
|
||||||
const newProvider = web3Factory.getRpcProvider();
|
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
|
||||||
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
|
|
||||||
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackToBeCalled);
|
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackToBeCalled);
|
||||||
await zeroEx.token.transferAsync(tokenAddress, coinbase, addressWithoutFunds, transferAmount);
|
await zeroEx.token.transferAsync(tokenAddress, coinbase, addressWithoutFunds, transferAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
@@ -515,3 +515,14 @@ describe('TokenWrapper', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
// tslint:disable:max-file-line-count
|
// tslint:disable:max-file-line-count
|
||||||
|
|
||||||
|
function addEmptyWalletSubprovider(p: Provider): Provider {
|
||||||
|
const providerEngine = new Web3ProviderEngine();
|
||||||
|
providerEngine.addProvider(new EmptyWalletSubprovider());
|
||||||
|
const currentSubproviders = (p as any)._providers;
|
||||||
|
for (const subprovider of currentSubproviders) {
|
||||||
|
providerEngine.addProvider(subprovider);
|
||||||
|
}
|
||||||
|
providerEngine.start();
|
||||||
|
return providerEngine;
|
||||||
|
}
|
||||||
|
@@ -2,19 +2,17 @@ import { Deployer } from '@0xproject/deployer';
|
|||||||
import { devConstants } from '@0xproject/dev-utils';
|
import { devConstants } from '@0xproject/dev-utils';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import { constants } from '../util/constants';
|
import { constants } from './constants';
|
||||||
|
|
||||||
import { runMigrationsAsync } from './migrate';
|
import { provider } from './web3_wrapper';
|
||||||
|
|
||||||
|
const artifactsDir = path.resolve('test', 'artifacts');
|
||||||
const deployerOpts = {
|
const deployerOpts = {
|
||||||
artifactsDir: path.resolve('src', 'artifacts'),
|
artifactsDir,
|
||||||
jsonrpcUrl: devConstants.RPC_URL,
|
provider,
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
defaults: {
|
defaults: {
|
||||||
gas: devConstants.GAS_ESTIMATE,
|
gas: devConstants.GAS_ESTIMATE,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export const deployer = new Deployer(deployerOpts);
|
export const deployer = new Deployer(deployerOpts);
|
||||||
|
|
||||||
runMigrationsAsync(deployer).catch(console.log);
|
|
@@ -36,7 +36,12 @@ export class FillScenarios {
|
|||||||
for (const token of this._tokens) {
|
for (const token of this._tokens) {
|
||||||
if (token.symbol !== 'ZRX' && token.symbol !== 'WETH') {
|
if (token.symbol !== 'ZRX' && token.symbol !== 'WETH') {
|
||||||
const defaults = {};
|
const defaults = {};
|
||||||
const dummyToken = new DummyTokenContract(web3Wrapper, artifacts.DummyTokenArtifact.abi, token.address);
|
const dummyToken = new DummyTokenContract(
|
||||||
|
artifacts.DummyTokenArtifact.abi,
|
||||||
|
token.address,
|
||||||
|
web3Wrapper.getProvider(),
|
||||||
|
web3Wrapper.getContractDefaults(),
|
||||||
|
);
|
||||||
const tokenSupply = ZeroEx.toBaseUnitAmount(INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS, token.decimals);
|
const tokenSupply = ZeroEx.toBaseUnitAmount(INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS, token.decimals);
|
||||||
const txHash = await dummyToken.setBalance.sendTransactionAsync(this._coinbase, tokenSupply, {
|
const txHash = await dummyToken.setBalance.sendTransactionAsync(this._coinbase, tokenSupply, {
|
||||||
from: this._coinbase,
|
from: this._coinbase,
|
||||||
|
@@ -1,6 +1,12 @@
|
|||||||
import { web3Factory } from '@0xproject/dev-utils';
|
import { devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { Provider } from '@0xproject/types';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
export const web3 = web3Factory.create();
|
import { constants } from './constants';
|
||||||
export const web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
|
||||||
|
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
|
||||||
|
const provider: Provider = web3.currentProvider;
|
||||||
|
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
||||||
|
|
||||||
|
export { provider, web3Wrapper };
|
||||||
|
@@ -1,13 +1,7 @@
|
|||||||
{
|
{
|
||||||
"extends": "../../tsconfig",
|
"extends": "../../tsconfig",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib",
|
"outDir": "lib"
|
||||||
"noImplicitThis": false
|
|
||||||
},
|
},
|
||||||
"include": [
|
"include": ["./src/**/*", "./test/**/*"]
|
||||||
"./src/**/*",
|
|
||||||
"./test/**/*",
|
|
||||||
"../../node_modules/types-bn/index.d.ts",
|
|
||||||
"../../node_modules/types-ethereumjs-util/index.d.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,31 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1524044013,
|
||||||
|
"version": "0.2.11",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1523462196,
|
||||||
|
"version": "0.2.10",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1522673609,
|
||||||
|
"version": "0.2.9",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1522658513,
|
"timestamp": 1522658513,
|
||||||
"version": "0.2.8",
|
"version": "0.2.8",
|
||||||
@@ -16,8 +43,7 @@
|
|||||||
"pr": 452
|
"pr": 452
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1521298800,
|
"timestamp": 1521298800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.2.4",
|
"version": "0.2.4",
|
||||||
@@ -37,8 +63,7 @@
|
|||||||
"pr": 413
|
"pr": 413
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520089200,
|
"timestamp": 1520089200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
@@ -48,8 +73,7 @@
|
|||||||
"pr": 389
|
"pr": 389
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1518102000,
|
"timestamp": 1518102000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
@@ -64,8 +88,7 @@
|
|||||||
"pr": 388
|
"pr": 388
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1517929200,
|
"timestamp": 1517929200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
@@ -83,7 +106,6 @@
|
|||||||
"pr": 304
|
"pr": 304
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1515596400,
|
"timestamp": 1515596400
|
||||||
"isPublished": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.11 - _April 18, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.10 - _April 12, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.9 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
## v0.2.8 - _April 2, 2018_
|
## v0.2.8 - _April 2, 2018_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@@ -57,3 +57,61 @@ See the [type definition](https://github.com/0xProject/0x-monorepo/tree/developm
|
|||||||
## Output files
|
## Output files
|
||||||
|
|
||||||
Output files will be generated within an output folder with names converted to camel case and taken from abi file names. If you already have some files in that folder they will be overwritten.
|
Output files will be generated within an output folder with names converted to camel case and taken from abi file names. If you already have some files in that folder they will be overwritten.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lerna:rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also build this specific package by running the following from within its directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build:watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clean
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn clean
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lint
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lint
|
||||||
|
```
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/abi-gen",
|
"name": "@0xproject/abi-gen",
|
||||||
"version": "0.2.8",
|
"version": "0.2.11",
|
||||||
"description": "Generate contract wrappers from ABI and handlebars templates",
|
"description": "Generate contract wrappers from ABI and handlebars templates",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
@@ -8,7 +8,8 @@
|
|||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"lint": "tslint --project . 'src/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts'",
|
||||||
"clean": "shx rm -rf lib scripts",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts"
|
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
||||||
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"abi-gen": "lib/index.js"
|
"abi-gen": "lib/index.js"
|
||||||
@@ -23,9 +24,9 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/types": "^0.4.2",
|
"@0xproject/types": "^0.6.1",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/utils": "^0.4.4",
|
"@0xproject/utils": "^0.5.2",
|
||||||
"chalk": "^2.3.0",
|
"chalk": "^2.3.0",
|
||||||
"glob": "^7.1.2",
|
"glob": "^7.1.2",
|
||||||
"handlebars": "^4.0.11",
|
"handlebars": "^4.0.11",
|
||||||
@@ -35,8 +36,8 @@
|
|||||||
"yargs": "^10.0.3"
|
"yargs": "^10.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/monorepo-scripts": "^0.1.15",
|
"@0xproject/monorepo-scripts": "^0.1.18",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/glob": "^5.0.33",
|
"@types/glob": "^5.0.33",
|
||||||
"@types/handlebars": "^4.0.36",
|
"@types/handlebars": "^4.0.36",
|
||||||
"@types/mkdirp": "^0.5.1",
|
"@types/mkdirp": "^0.5.1",
|
||||||
|
5
packages/abi-gen/src/globals.d.ts
vendored
5
packages/abi-gen/src/globals.d.ts
vendored
@@ -1,8 +1,3 @@
|
|||||||
declare function toSnakeCase(str: string): string;
|
|
||||||
declare module 'to-snake-case' {
|
|
||||||
export = toSnakeCase;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
const json: any;
|
const json: any;
|
||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from '@0xproject/types';
|
import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from '@0xproject/types';
|
||||||
import { logUtils } from '@0xproject/utils';
|
import { abiUtils, logUtils } from '@0xproject/utils';
|
||||||
import chalk from 'chalk';
|
import chalk from 'chalk';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import { sync as globSync } from 'glob';
|
import { sync as globSync } from 'glob';
|
||||||
@@ -12,7 +12,7 @@ import * as yargs from 'yargs';
|
|||||||
|
|
||||||
import toSnakeCase = require('to-snake-case');
|
import toSnakeCase = require('to-snake-case');
|
||||||
|
|
||||||
import { ContextData, ContractsBackend, ParamKind } from './types';
|
import { ContextData, ContractsBackend, Method, ParamKind } from './types';
|
||||||
import { utils } from './utils';
|
import { utils } from './utils';
|
||||||
|
|
||||||
const ABI_TYPE_CONSTRUCTOR = 'constructor';
|
const ABI_TYPE_CONSTRUCTOR = 'constructor';
|
||||||
@@ -83,7 +83,6 @@ function writeOutputFile(name: string, renderedTsCode: string): void {
|
|||||||
|
|
||||||
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
|
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
|
||||||
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output, args.backend));
|
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output, args.backend));
|
||||||
|
|
||||||
if (args.partials) {
|
if (args.partials) {
|
||||||
registerPartials(args.partials);
|
registerPartials(args.partials);
|
||||||
}
|
}
|
||||||
@@ -126,11 +125,12 @@ for (const abiFileName of abiFileNames) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const methodAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_METHOD) as MethodAbi[];
|
const methodAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_METHOD) as MethodAbi[];
|
||||||
const methodsData = _.map(methodAbis, methodAbi => {
|
const sanitizedMethodAbis = abiUtils.renameOverloadedMethods(methodAbis) as MethodAbi[];
|
||||||
_.map(methodAbi.inputs, (input, i: number) => {
|
const methodsData = _.map(methodAbis, (methodAbi, methodAbiIndex: number) => {
|
||||||
|
_.forEach(methodAbi.inputs, (input, inputIndex: number) => {
|
||||||
if (_.isEmpty(input.name)) {
|
if (_.isEmpty(input.name)) {
|
||||||
// Auto-generated getters don't have parameter names
|
// Auto-generated getters don't have parameter names
|
||||||
input.name = `index_${i}`;
|
input.name = `index_${inputIndex}`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// This will make templates simpler
|
// This will make templates simpler
|
||||||
@@ -138,6 +138,8 @@ for (const abiFileName of abiFileNames) {
|
|||||||
...methodAbi,
|
...methodAbi,
|
||||||
singleReturnValue: methodAbi.outputs.length === 1,
|
singleReturnValue: methodAbi.outputs.length === 1,
|
||||||
hasReturnValue: methodAbi.outputs.length !== 0,
|
hasReturnValue: methodAbi.outputs.length !== 0,
|
||||||
|
tsName: sanitizedMethodAbis[methodAbiIndex].name,
|
||||||
|
functionSignature: abiUtils.getFunctionSignature(methodAbi),
|
||||||
};
|
};
|
||||||
return methodData;
|
return methodData;
|
||||||
});
|
});
|
||||||
|
@@ -5,13 +5,6 @@ export enum ParamKind {
|
|||||||
Output = 'output',
|
Output = 'output',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum AbiType {
|
|
||||||
Function = 'function',
|
|
||||||
Constructor = 'constructor',
|
|
||||||
Event = 'event',
|
|
||||||
Fallback = 'fallback',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum ContractsBackend {
|
export enum ContractsBackend {
|
||||||
Web3 = 'web3',
|
Web3 = 'web3',
|
||||||
Ethers = 'ethers',
|
Ethers = 'ethers',
|
||||||
@@ -20,6 +13,8 @@ export enum ContractsBackend {
|
|||||||
export interface Method extends MethodAbi {
|
export interface Method extends MethodAbi {
|
||||||
singleReturnValue: boolean;
|
singleReturnValue: boolean;
|
||||||
hasReturnValue: boolean;
|
hasReturnValue: boolean;
|
||||||
|
tsName: string;
|
||||||
|
functionSignature: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ContextData {
|
export interface ContextData {
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
import { ConstructorAbi, DataItem } from '@0xproject/types';
|
import { AbiType, ConstructorAbi, DataItem } from '@0xproject/types';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
import { AbiType, ContractsBackend, ParamKind } from './types';
|
import { ContractsBackend, ParamKind } from './types';
|
||||||
|
|
||||||
export const utils = {
|
export const utils = {
|
||||||
solTypeToTsType(paramKind: ParamKind, backend: ContractsBackend, solType: string, components?: DataItem[]): string {
|
solTypeToTsType(paramKind: ParamKind, backend: ContractsBackend, solType: string, components?: DataItem[]): string {
|
||||||
|
@@ -1,4 +1,31 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1524044013,
|
||||||
|
"version": "0.2.7",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1523462196,
|
||||||
|
"version": "0.2.6",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1522673609,
|
||||||
|
"version": "0.2.5",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1522658513,
|
"timestamp": 1522658513,
|
||||||
"version": "0.2.4",
|
"version": "0.2.4",
|
||||||
@@ -16,8 +43,7 @@
|
|||||||
"pr": 412
|
"pr": 412
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520434800,
|
"timestamp": 1520434800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
@@ -31,8 +57,7 @@
|
|||||||
"pr": 385
|
"pr": 385
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520089200,
|
"timestamp": 1520089200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.0.18",
|
"version": "0.0.18",
|
||||||
@@ -42,8 +67,7 @@
|
|||||||
"pr": 389
|
"pr": 389
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1486566000,
|
"timestamp": 1486566000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.0.4",
|
"version": "0.0.4",
|
||||||
@@ -56,7 +80,6 @@
|
|||||||
"Added assertion isValidBaseUnitAmount which checks both that the value is a valid bigNumber and that it does not contain decimals."
|
"Added assertion isValidBaseUnitAmount which checks both that the value is a valid bigNumber and that it does not contain decimals."
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1510585200,
|
"timestamp": 1510585200
|
||||||
"isPublished": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.7 - _April 18, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.6 - _April 12, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.5 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
## v0.2.4 - _April 2, 2018_
|
## v0.2.4 - _April 2, 2018_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@@ -26,11 +26,11 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol
|
|||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
We strongly encourage 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.
|
We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.
|
||||||
|
|
||||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||||
|
|
||||||
### Install Dependencies
|
### Install dependencies
|
||||||
|
|
||||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||||
|
|
||||||
@@ -46,10 +46,36 @@ yarn install
|
|||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
|
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lerna:rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also build this specific package by running the following from within its directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build:watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clean
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn clean
|
||||||
|
```
|
||||||
|
|
||||||
### Lint
|
### Lint
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/assert",
|
"name": "@0xproject/assert",
|
||||||
"version": "0.2.4",
|
"version": "0.2.7",
|
||||||
"description": "Provides a standard way of performing type and schema validation across 0x projects",
|
"description": "Provides a standard way of performing type and schema validation across 0x projects",
|
||||||
"main": "lib/src/index.js",
|
"main": "lib/src/index.js",
|
||||||
"types": "lib/src/index.d.ts",
|
"types": "lib/src/index.d.ts",
|
||||||
@@ -9,12 +9,13 @@
|
|||||||
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib test_temp scripts",
|
"clean": "shx rm -rf lib test_temp scripts",
|
||||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js",
|
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
||||||
"prepublishOnly": "run-p build",
|
"prepublishOnly": "run-p build",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "run-s clean build run_mocha",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage"
|
"test:circleci": "yarn test:coverage",
|
||||||
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -26,8 +27,8 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/assert/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/assert/README.md",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/monorepo-scripts": "^0.1.15",
|
"@0xproject/monorepo-scripts": "^0.1.18",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/lodash": "4.14.104",
|
"@types/lodash": "4.14.104",
|
||||||
"@types/mocha": "^2.2.42",
|
"@types/mocha": "^2.2.42",
|
||||||
"@types/valid-url": "^1.0.2",
|
"@types/valid-url": "^1.0.2",
|
||||||
@@ -42,9 +43,9 @@
|
|||||||
"typescript": "2.7.1"
|
"typescript": "2.7.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/json-schemas": "^0.7.18",
|
"@0xproject/json-schemas": "^0.7.21",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/utils": "^0.4.4",
|
"@0xproject/utils": "^0.5.2",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"valid-url": "^1.0.9"
|
"valid-url": "^1.0.9"
|
||||||
},
|
},
|
||||||
|
2
packages/assert/src/globals.d.ts
vendored
2
packages/assert/src/globals.d.ts
vendored
@@ -1,5 +1,3 @@
|
|||||||
declare module 'dirty-chai';
|
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
const json: any;
|
const json: any;
|
||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
|
@@ -61,7 +61,7 @@ export const assert = {
|
|||||||
},
|
},
|
||||||
isWeb3Provider(variableName: string, value: any): void {
|
isWeb3Provider(variableName: string, value: any): void {
|
||||||
const isWeb3Provider = _.isFunction(value.send) || _.isFunction(value.sendAsync);
|
const isWeb3Provider = _.isFunction(value.send) || _.isFunction(value.sendAsync);
|
||||||
this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Web3.Provider', value));
|
this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Provider', value));
|
||||||
},
|
},
|
||||||
doesConformToSchema(variableName: string, value: any, schema: Schema, subSchemas?: Schema[]): void {
|
doesConformToSchema(variableName: string, value: any, schema: Schema, subSchemas?: Schema[]): void {
|
||||||
const schemaValidator = new SchemaValidator();
|
const schemaValidator = new SchemaValidator();
|
||||||
|
@@ -1,4 +1,41 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1524044013,
|
||||||
|
"version": "0.2.1",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Contract wrappers now accept Provider and defaults instead of Web3Wrapper",
|
||||||
|
"pr": 501
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1523462196
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Add tests for traversing ABI tree",
|
||||||
|
"pr": 485
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Fix ABI tuples traversing",
|
||||||
|
"pr": 485
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Fix ABI arrays traversing",
|
||||||
|
"pr": 485
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1522673609
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1522658513,
|
"timestamp": 1522658513,
|
||||||
"version": "0.0.6",
|
"version": "0.0.6",
|
||||||
@@ -15,7 +52,6 @@
|
|||||||
"note": "Initial release"
|
"note": "Initial release"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1520089200,
|
"timestamp": 1520089200
|
||||||
"isPublished": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -5,6 +5,20 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.1 - _April 18, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.0 - _April 12, 2018_
|
||||||
|
|
||||||
|
* Contract wrappers now accept Provider and defaults instead of Web3Wrapper (#501)
|
||||||
|
|
||||||
|
## v0.1.0 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Add tests for traversing ABI tree (#485)
|
||||||
|
* Fix ABI tuples traversing (#485)
|
||||||
|
* Fix ABI arrays traversing (#485)
|
||||||
|
|
||||||
## v0.0.6 - _April 2, 2018_
|
## v0.0.6 - _April 2, 2018_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
0
packages/base-contract/coverage/.gitkeep
Normal file
0
packages/base-contract/coverage/.gitkeep
Normal file
@@ -1,14 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/base-contract",
|
"name": "@0xproject/base-contract",
|
||||||
"version": "0.0.6",
|
"version": "0.2.1",
|
||||||
"description": "0x Base TS contract",
|
"description": "0x Base TS contract",
|
||||||
"main": "lib/index.js",
|
"main": "lib/src/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/src/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib scripts",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"lint": "tslint --project . 'src/**/*.ts'"
|
"test": "run-s clean build run_mocha",
|
||||||
|
"test:circleci": "yarn test:coverage",
|
||||||
|
"run_mocha": "mocha lib/test/**/*_test.js --bail --exit",
|
||||||
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
|
"lint": "tslint --project .",
|
||||||
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -20,19 +26,22 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/base-contract/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/base-contract/README.md",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/monorepo-scripts": "^0.1.15",
|
"@0xproject/monorepo-scripts": "^0.1.18",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/lodash": "4.14.104",
|
"@types/lodash": "4.14.104",
|
||||||
|
"chai": "^4.0.1",
|
||||||
"copyfiles": "^1.2.0",
|
"copyfiles": "^1.2.0",
|
||||||
|
"mocha": "^4.0.1",
|
||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"typescript": "2.7.1"
|
"typescript": "2.7.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/types": "^0.4.2",
|
"@0xproject/types": "^0.6.1",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/web3-wrapper": "^0.4.0",
|
"@0xproject/utils": "^0.5.2",
|
||||||
|
"@0xproject/web3-wrapper": "^0.6.1",
|
||||||
"ethers-contracts": "^2.2.1",
|
"ethers-contracts": "^2.2.1",
|
||||||
"lodash": "^4.17.4"
|
"lodash": "^4.17.4"
|
||||||
},
|
},
|
||||||
|
@@ -1,40 +1,44 @@
|
|||||||
import { ContractAbi, DataItem, TxData, TxDataPayable } from '@0xproject/types';
|
import {
|
||||||
|
AbiDefinition,
|
||||||
|
AbiType,
|
||||||
|
ContractAbi,
|
||||||
|
DataItem,
|
||||||
|
MethodAbi,
|
||||||
|
Provider,
|
||||||
|
TxData,
|
||||||
|
TxDataPayable,
|
||||||
|
} from '@0xproject/types';
|
||||||
|
import { abiUtils, BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as ethersContracts from 'ethers-contracts';
|
import * as ethersContracts from 'ethers-contracts';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
|
import { formatABIDataItem } from './utils';
|
||||||
|
|
||||||
|
export interface EthersInterfaceByFunctionSignature {
|
||||||
|
[key: string]: ethersContracts.Interface;
|
||||||
|
}
|
||||||
|
|
||||||
export class BaseContract {
|
export class BaseContract {
|
||||||
protected _ethersInterface: ethersContracts.Interface;
|
protected _ethersInterfacesByFunctionSignature: EthersInterfaceByFunctionSignature;
|
||||||
protected _web3Wrapper: Web3Wrapper;
|
protected _web3Wrapper: Web3Wrapper;
|
||||||
public abi: ContractAbi;
|
public abi: ContractAbi;
|
||||||
public address: string;
|
public address: string;
|
||||||
protected static _transformABIData(
|
protected static _formatABIDataItemList(
|
||||||
abis: DataItem[],
|
abis: DataItem[],
|
||||||
values: any[],
|
values: any[],
|
||||||
transformation: (type: string, value: any) => any,
|
formatter: (type: string, value: any) => any,
|
||||||
): any {
|
): any {
|
||||||
return _.map(values, (value: any, i: number) =>
|
return _.map(values, (value: any, i: number) => formatABIDataItem(abis[i], value, formatter));
|
||||||
BaseContract._transformTypedData(abis[i].type, value, transformation),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
protected static _lowercaseAddress(type: string, value: string): string {
|
protected static _lowercaseAddress(type: string, value: string): string {
|
||||||
return type === 'address' ? value.toLowerCase() : value;
|
return type === 'address' ? value.toLowerCase() : value;
|
||||||
}
|
}
|
||||||
protected static _bigNumberToString(type: string, value: string): string {
|
protected static _bigNumberToString(type: string, value: any): any {
|
||||||
return _.isObject(value) && (value as any).isBigNumber ? value.toString() : value;
|
return _.isObject(value) && value.isBigNumber ? value.toString() : value;
|
||||||
}
|
}
|
||||||
private static _transformTypedData(
|
protected static _bnToBigNumber(type: string, value: any): any {
|
||||||
type: string,
|
return _.isObject(value) && value._bn ? new BigNumber(value.toString()) : value;
|
||||||
values: any,
|
|
||||||
transformation: (type: string, value: any) => any,
|
|
||||||
): any {
|
|
||||||
const trailingArrayRegex = /\[\d*\]$/;
|
|
||||||
if (type.match(trailingArrayRegex)) {
|
|
||||||
const arrayItemType = type.replace(trailingArrayRegex, '');
|
|
||||||
return _.map(values, value => this._transformTypedData(arrayItemType, value, transformation));
|
|
||||||
} else {
|
|
||||||
return transformation(type, values);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
protected async _applyDefaultsToTxDataAsync<T extends Partial<TxData | TxDataPayable>>(
|
protected async _applyDefaultsToTxDataAsync<T extends Partial<TxData | TxDataPayable>>(
|
||||||
txData: T,
|
txData: T,
|
||||||
@@ -58,10 +62,37 @@ export class BaseContract {
|
|||||||
}
|
}
|
||||||
return txDataWithDefaults;
|
return txDataWithDefaults;
|
||||||
}
|
}
|
||||||
constructor(web3Wrapper: Web3Wrapper, abi: ContractAbi, address: string) {
|
protected _lookupEthersInterface(functionSignature: string): ethersContracts.Interface {
|
||||||
this._web3Wrapper = web3Wrapper;
|
const ethersInterface = this._ethersInterfacesByFunctionSignature[functionSignature];
|
||||||
|
if (_.isUndefined(ethersInterface)) {
|
||||||
|
throw new Error(`Failed to lookup method with function signature '${functionSignature}'`);
|
||||||
|
}
|
||||||
|
return ethersInterface;
|
||||||
|
}
|
||||||
|
protected _lookupAbi(functionSignature: string): MethodAbi {
|
||||||
|
const methodAbi = _.find(this.abi, (abiDefinition: AbiDefinition) => {
|
||||||
|
if (abiDefinition.type !== AbiType.Function) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const abiFunctionSignature = abiUtils.getFunctionSignature(abiDefinition);
|
||||||
|
if (abiFunctionSignature === functionSignature) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}) as MethodAbi;
|
||||||
|
return methodAbi;
|
||||||
|
}
|
||||||
|
constructor(abi: ContractAbi, address: string, provider: Provider, defaults?: Partial<TxData>) {
|
||||||
|
this._web3Wrapper = new Web3Wrapper(provider, defaults);
|
||||||
this.abi = abi;
|
this.abi = abi;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
this._ethersInterface = new ethersContracts.Interface(abi);
|
const methodAbis = this.abi.filter(
|
||||||
|
(abiDefinition: AbiDefinition) => abiDefinition.type === AbiType.Function,
|
||||||
|
) as MethodAbi[];
|
||||||
|
this._ethersInterfacesByFunctionSignature = {};
|
||||||
|
_.each(methodAbis, methodAbi => {
|
||||||
|
const functionSignature = abiUtils.getFunctionSignature(methodAbi);
|
||||||
|
this._ethersInterfacesByFunctionSignature[functionSignature] = new ethersContracts.Interface([methodAbi]);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
packages/base-contract/src/utils.ts
Normal file
25
packages/base-contract/src/utils.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import { DataItem } from '@0xproject/types';
|
||||||
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
|
// tslint:disable-next-line:completed-docs
|
||||||
|
export function formatABIDataItem(abi: DataItem, value: any, formatter: (type: string, value: any) => any): any {
|
||||||
|
const trailingArrayRegex = /\[\d*\]$/;
|
||||||
|
if (abi.type.match(trailingArrayRegex)) {
|
||||||
|
const arrayItemType = abi.type.replace(trailingArrayRegex, '');
|
||||||
|
return _.map(value, val => {
|
||||||
|
const arrayItemAbi = {
|
||||||
|
...abi,
|
||||||
|
type: arrayItemType,
|
||||||
|
};
|
||||||
|
return formatABIDataItem(arrayItemAbi, val, formatter);
|
||||||
|
});
|
||||||
|
} else if (abi.type === 'tuple') {
|
||||||
|
const formattedTuple: { [componentName: string]: DataItem } = {};
|
||||||
|
_.forEach(abi.components, componentABI => {
|
||||||
|
formattedTuple[componentABI.name] = formatABIDataItem(componentABI, value[componentABI.name], formatter);
|
||||||
|
});
|
||||||
|
return formattedTuple;
|
||||||
|
} else {
|
||||||
|
return formatter(abi.type, value);
|
||||||
|
}
|
||||||
|
}
|
108
packages/base-contract/test/utils_test.ts
Normal file
108
packages/base-contract/test/utils_test.ts
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
import * as chai from 'chai';
|
||||||
|
import 'mocha';
|
||||||
|
|
||||||
|
import { formatABIDataItem } from '../src/utils';
|
||||||
|
|
||||||
|
const { expect } = chai;
|
||||||
|
|
||||||
|
describe('Utils tests', () => {
|
||||||
|
describe('#formatABIDataItem', () => {
|
||||||
|
it('correctly handles arrays', () => {
|
||||||
|
const calls: Array<{ type: string; value: any }> = [];
|
||||||
|
const abi = {
|
||||||
|
name: 'values',
|
||||||
|
type: 'uint256[]',
|
||||||
|
};
|
||||||
|
const val = [1, 2, 3];
|
||||||
|
const formatted = formatABIDataItem(abi, val, (type: string, value: any) => {
|
||||||
|
calls.push({ type, value });
|
||||||
|
return value; // no-op
|
||||||
|
});
|
||||||
|
expect(formatted).to.be.deep.equal(val);
|
||||||
|
expect(calls).to.be.deep.equal([
|
||||||
|
{ type: 'uint256', value: 1 },
|
||||||
|
{ type: 'uint256', value: 2 },
|
||||||
|
{ type: 'uint256', value: 3 },
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
it('correctly handles tuples', () => {
|
||||||
|
const calls: Array<{ type: string; value: any }> = [];
|
||||||
|
const abi = {
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
name: 'to',
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'amount',
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: 'data',
|
||||||
|
type: 'tuple',
|
||||||
|
};
|
||||||
|
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
||||||
|
const val = { to: ZERO_ADDRESS, amount: new BigNumber(1) };
|
||||||
|
const formatted = formatABIDataItem(abi, val, (type: string, value: any) => {
|
||||||
|
calls.push({ type, value });
|
||||||
|
return value; // no-op
|
||||||
|
});
|
||||||
|
expect(formatted).to.be.deep.equal(val);
|
||||||
|
expect(calls).to.be.deep.equal([
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
value: val.to,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
value: val.amount,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
it('correctly handles nested arrays of tuples', () => {
|
||||||
|
const calls: Array<{ type: string; value: any }> = [];
|
||||||
|
const abi = {
|
||||||
|
components: [
|
||||||
|
{
|
||||||
|
name: 'to',
|
||||||
|
type: 'address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'amount',
|
||||||
|
type: 'uint256',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
name: 'data',
|
||||||
|
type: 'tuple[2][]',
|
||||||
|
};
|
||||||
|
const ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';
|
||||||
|
const val = [
|
||||||
|
[{ to: ZERO_ADDRESS, amount: new BigNumber(1) }, { to: ZERO_ADDRESS, amount: new BigNumber(2) }],
|
||||||
|
];
|
||||||
|
const formatted = formatABIDataItem(abi, val, (type: string, value: any) => {
|
||||||
|
calls.push({ type, value });
|
||||||
|
return value; // no-op
|
||||||
|
});
|
||||||
|
expect(formatted).to.be.deep.equal(val);
|
||||||
|
expect(calls).to.be.deep.equal([
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
value: val[0][0].to,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
value: val[0][0].amount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'address',
|
||||||
|
value: val[0][1].to,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'uint256',
|
||||||
|
value: val[0][1].amount,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@@ -3,5 +3,5 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib"
|
"outDir": "lib"
|
||||||
},
|
},
|
||||||
"include": ["./src/**/*"]
|
"include": ["src/**/*", "test/**/*"]
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,31 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1524044013,
|
||||||
|
"version": "0.6.10",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1523462196,
|
||||||
|
"version": "0.6.9",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"timestamp": 1522673609,
|
||||||
|
"version": "0.6.8",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"timestamp": 1522658513,
|
"timestamp": 1522658513,
|
||||||
"version": "0.6.7",
|
"version": "0.6.7",
|
||||||
@@ -16,8 +43,7 @@
|
|||||||
"pr": 456
|
"pr": 456
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1521298800,
|
"timestamp": 1521298800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.6.2",
|
"version": "0.6.2",
|
||||||
@@ -27,8 +53,7 @@
|
|||||||
"pr": 407
|
"pr": 407
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1518706800,
|
"timestamp": 1518706800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.6.0",
|
"version": "0.6.0",
|
||||||
@@ -42,8 +67,7 @@
|
|||||||
"pr": 406
|
"pr": 406
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1518706800,
|
"timestamp": 1518706800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
@@ -53,8 +77,7 @@
|
|||||||
"pr": 389
|
"pr": 389
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1518102000,
|
"timestamp": 1518102000
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
@@ -72,8 +95,7 @@
|
|||||||
"pr": 318
|
"pr": 318
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1516114800,
|
"timestamp": 1516114800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
@@ -83,8 +105,7 @@
|
|||||||
"pr": 296
|
"pr": 296
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1515596400,
|
"timestamp": 1515596400
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.3.0",
|
"version": "0.3.0",
|
||||||
@@ -98,8 +119,7 @@
|
|||||||
"pr": 256
|
"pr": 256
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1512658800,
|
"timestamp": 1512658800
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.2.0",
|
"version": "0.2.0",
|
||||||
@@ -114,8 +134,7 @@
|
|||||||
"note": "Remove dependency on 0x.js"
|
"note": "Remove dependency on 0x.js"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1511881200,
|
"timestamp": 1511881200
|
||||||
"isPublished": true
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
@@ -124,7 +143,6 @@
|
|||||||
"note": "Provide a HttpClient class for interacting with standard relayer api compliant HTTP urls"
|
"note": "Provide a HttpClient class for interacting with standard relayer api compliant HTTP urls"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"timestamp": 1511276400,
|
"timestamp": 1511276400
|
||||||
"isPublished": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@@ -5,6 +5,18 @@ Edit the package's CHANGELOG.json file only.
|
|||||||
|
|
||||||
CHANGELOG
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.6.10 - _April 18, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.6.9 - _April 12, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.6.8 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
## v0.6.7 - _April 2, 2018_
|
## v0.6.7 - _April 2, 2018_
|
||||||
|
|
||||||
* Dependencies updated
|
* Dependencies updated
|
||||||
|
@@ -23,11 +23,11 @@ If your project is in [TypeScript](https://www.typescriptlang.org/), add the fol
|
|||||||
|
|
||||||
## Contributing
|
## 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.
|
We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.
|
||||||
|
|
||||||
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
|
||||||
|
|
||||||
### Install Dependencies
|
### Install dependencies
|
||||||
|
|
||||||
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
|
||||||
|
|
||||||
@@ -43,10 +43,36 @@ yarn install
|
|||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
|
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lerna:rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also build this specific package by running the following from within its directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build:watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### Clean
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn clean
|
||||||
|
```
|
||||||
|
|
||||||
### Lint
|
### Lint
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/connect",
|
"name": "@0xproject/connect",
|
||||||
"version": "0.6.7",
|
"version": "0.6.10",
|
||||||
"description": "A javascript library for interacting with the standard relayer api",
|
"description": "A javascript library for interacting with the standard relayer api",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"connect",
|
"connect",
|
||||||
@@ -17,11 +17,12 @@
|
|||||||
"clean": "shx rm -rf lib test_temp scripts",
|
"clean": "shx rm -rf lib test_temp scripts",
|
||||||
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
|
||||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js",
|
"run_mocha": "mocha lib/test/**/*_test.js --exit",
|
||||||
"test": "run-s clean build copy_test_fixtures run_mocha",
|
"test": "run-s clean build copy_test_fixtures run_mocha",
|
||||||
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
"test:circleci": "yarn test:coverage",
|
"test:circleci": "yarn test:coverage",
|
||||||
|
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
|
||||||
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
||||||
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
|
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
|
||||||
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
|
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
|
||||||
@@ -49,19 +50,19 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.2.4",
|
"@0xproject/assert": "^0.2.7",
|
||||||
"@0xproject/json-schemas": "^0.7.18",
|
"@0xproject/json-schemas": "^0.7.21",
|
||||||
"@0xproject/types": "^0.4.2",
|
"@0xproject/types": "^0.6.1",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/utils": "^0.4.4",
|
"@0xproject/utils": "^0.5.2",
|
||||||
"isomorphic-fetch": "^2.2.1",
|
"isomorphic-fetch": "^2.2.1",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"query-string": "^5.0.1",
|
"query-string": "^5.0.1",
|
||||||
"websocket": "^1.0.25"
|
"websocket": "^1.0.25"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/monorepo-scripts": "^0.1.15",
|
"@0xproject/monorepo-scripts": "^0.1.18",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/fetch-mock": "^5.12.1",
|
"@types/fetch-mock": "^5.12.1",
|
||||||
"@types/lodash": "4.14.104",
|
"@types/lodash": "4.14.104",
|
||||||
"@types/mocha": "^2.2.42",
|
"@types/mocha": "^2.2.42",
|
||||||
|
3
packages/connect/src/globals.d.ts
vendored
3
packages/connect/src/globals.d.ts
vendored
@@ -1,6 +1,3 @@
|
|||||||
declare module 'async-child-process';
|
|
||||||
declare module 'dirty-chai';
|
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
const value: any;
|
const value: any;
|
||||||
export default value;
|
export default value;
|
||||||
|
@@ -15,14 +15,14 @@ export interface OrderbookChannel {
|
|||||||
close: () => void;
|
close: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* heartbeatInterval: Interval in milliseconds that the orderbook channel should ping the underlying websocket. Default: 15000
|
* heartbeatInterval: Interval in milliseconds that the orderbook channel should ping the underlying websocket. Default: 15000
|
||||||
*/
|
*/
|
||||||
export interface WebSocketOrderbookChannelConfig {
|
export interface WebSocketOrderbookChannelConfig {
|
||||||
heartbeatIntervalMs?: number;
|
heartbeatIntervalMs?: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* baseTokenAddress: The address of token designated as the baseToken in the currency pair calculation of price
|
* baseTokenAddress: The address of token designated as the baseToken in the currency pair calculation of price
|
||||||
* quoteTokenAddress: The address of token designated as the quoteToken in the currency pair calculation of price
|
* quoteTokenAddress: The address of token designated as the quoteToken in the currency pair calculation of price
|
||||||
* snapshot: If true, a snapshot of the orderbook will be sent before the updates to the orderbook
|
* snapshot: If true, a snapshot of the orderbook will be sent before the updates to the orderbook
|
||||||
|
@@ -5,12 +5,11 @@
|
|||||||
// tslint:disable:no-consecutive-blank-lines
|
// tslint:disable:no-consecutive-blank-lines
|
||||||
// tslint:disable-next-line:no-unused-variable
|
// tslint:disable-next-line:no-unused-variable
|
||||||
import { BaseContract } from '@0xproject/base-contract';
|
import { BaseContract } from '@0xproject/base-contract';
|
||||||
import { BlockParam, BlockParamLiteral, CallData, ContractAbi, DataItem, MethodAbi, TxData, TxDataPayable } from '@0xproject/types';
|
import { BlockParam, BlockParamLiteral, CallData, ContractAbi, DataItem, MethodAbi, Provider, TxData, TxDataPayable } from '@0xproject/types';
|
||||||
import { BigNumber, classUtils, promisify } from '@0xproject/utils';
|
import { BigNumber, classUtils, promisify } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as ethersContracts from 'ethers-contracts';
|
import * as ethersContracts from 'ethers-contracts';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
{{#if events}}
|
{{#if events}}
|
||||||
export type {{contractName}}ContractEventArgs =
|
export type {{contractName}}ContractEventArgs =
|
||||||
@@ -40,8 +39,8 @@ export class {{contractName}}Contract extends BaseContract {
|
|||||||
{{> tx contractName=../contractName}}
|
{{> tx contractName=../contractName}}
|
||||||
{{/this.constant}}
|
{{/this.constant}}
|
||||||
{{/each}}
|
{{/each}}
|
||||||
constructor(web3Wrapper: Web3Wrapper, abi: ContractAbi, address: string) {
|
constructor(abi: ContractAbi, address: string, provider: Provider, defaults?: Partial<TxData>) {
|
||||||
super(web3Wrapper, abi, address);
|
super(abi, address, provider, defaults);
|
||||||
classUtils.bindAll(this, ['_ethersInterface', 'address', 'abi', '_web3Wrapper']);
|
classUtils.bindAll(this, ['_ethersInterfacesByFunctionSignature', 'address', 'abi', '_web3Wrapper']);
|
||||||
}
|
}
|
||||||
} // tslint:disable:max-file-line-count
|
} // tslint:disable:max-file-line-count
|
||||||
|
@@ -4,10 +4,10 @@ async callAsync(
|
|||||||
callData: Partial<CallData> = {},
|
callData: Partial<CallData> = {},
|
||||||
defaultBlock?: BlockParam,
|
defaultBlock?: BlockParam,
|
||||||
): Promise<{{> return_type outputs=outputs}}> {
|
): Promise<{{> return_type outputs=outputs}}> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as any as {{contractName}}Contract;
|
||||||
const inputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).inputs;
|
const inputAbi = self._lookupAbi('{{this.functionSignature}}').inputs;
|
||||||
[{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
[{{> params inputs=inputs}}] = BaseContract._formatABIDataItemList(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
||||||
const encodedData = self._ethersInterface.functions.{{this.name}}(
|
const encodedData = self._lookupEthersInterface('{{this.functionSignature}}').functions.{{this.name}}(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
).data;
|
).data;
|
||||||
const callDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
const callDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
||||||
@@ -19,7 +19,8 @@ async callAsync(
|
|||||||
const outputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).outputs;
|
const outputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).outputs;
|
||||||
const outputParamsTypes = _.map(outputAbi, 'type');
|
const outputParamsTypes = _.map(outputAbi, 'type');
|
||||||
let resultArray = ethersContracts.Interface.decodeParams(outputParamsTypes, rawCallResult) as any;
|
let resultArray = ethersContracts.Interface.decodeParams(outputParamsTypes, rawCallResult) as any;
|
||||||
resultArray = BaseContract._transformABIData(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this));
|
resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this));
|
||||||
|
resultArray = BaseContract._formatABIDataItemList(outputAbi, resultArray, BaseContract._bnToBigNumber.bind(this));
|
||||||
return resultArray{{#singleReturnValue}}[0]{{/singleReturnValue}};
|
return resultArray{{#singleReturnValue}}[0]{{/singleReturnValue}};
|
||||||
},
|
},
|
||||||
{{/hasReturnValue}}
|
{{/hasReturnValue}}
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
public {{this.name}} = {
|
public {{this.tsName}} = {
|
||||||
async sendTransactionAsync(
|
async sendTransactionAsync(
|
||||||
{{> typed_params inputs=inputs}}
|
{{> typed_params inputs=inputs}}
|
||||||
{{#this.payable}}
|
{{#this.payable}}
|
||||||
@@ -8,18 +8,18 @@ public {{this.name}} = {
|
|||||||
txData: Partial<TxData> = {},
|
txData: Partial<TxData> = {},
|
||||||
{{/this.payable}}
|
{{/this.payable}}
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as any as {{contractName}}Contract;
|
||||||
const inputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).inputs;
|
const inputAbi = self._lookupAbi('{{this.functionSignature}}').inputs;
|
||||||
[{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
[{{> params inputs=inputs}}] = BaseContract._formatABIDataItemList(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
||||||
const encodedData = self._ethersInterface.functions.{{this.name}}(
|
const encodedData = self._lookupEthersInterface('{{this.functionSignature}}').functions.{{this.name}}(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
).data
|
).data;
|
||||||
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
||||||
{
|
{
|
||||||
...txData,
|
...txData,
|
||||||
data: encodedData,
|
data: encodedData,
|
||||||
},
|
},
|
||||||
self.{{this.name}}.estimateGasAsync.bind(
|
self.{{this.tsName}}.estimateGasAsync.bind(
|
||||||
self,
|
self,
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
),
|
),
|
||||||
@@ -31,12 +31,12 @@ public {{this.name}} = {
|
|||||||
{{> typed_params inputs=inputs}}
|
{{> typed_params inputs=inputs}}
|
||||||
txData: Partial<TxData> = {},
|
txData: Partial<TxData> = {},
|
||||||
): Promise<number> {
|
): Promise<number> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as any as {{contractName}}Contract;
|
||||||
const inputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).inputs;
|
const inputAbi = self._lookupAbi('{{this.functionSignature}}').inputs;
|
||||||
[{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(this));
|
[{{> params inputs=inputs}}] = BaseContract._formatABIDataItemList(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(this));
|
||||||
const encodedData = self._ethersInterface.functions.{{this.name}}(
|
const encodedData = self._lookupEthersInterface('{{this.functionSignature}}').functions.{{this.name}}(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
).data
|
).data;
|
||||||
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
||||||
{
|
{
|
||||||
...txData,
|
...txData,
|
||||||
@@ -49,12 +49,12 @@ public {{this.name}} = {
|
|||||||
getABIEncodedTransactionData(
|
getABIEncodedTransactionData(
|
||||||
{{> typed_params inputs=inputs}}
|
{{> typed_params inputs=inputs}}
|
||||||
): string {
|
): string {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as any as {{contractName}}Contract;
|
||||||
const inputAbi = (_.find(self.abi, {name: '{{this.name}}'}) as MethodAbi).inputs;
|
const inputAbi = self._lookupAbi('{{this.functionSignature}}').inputs;
|
||||||
[{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
[{{> params inputs=inputs}}] = BaseContract._formatABIDataItemList(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(self));
|
||||||
const abiEncodedTransactionData = self._ethersInterface.functions.{{this.name}}(
|
const abiEncodedTransactionData = self._lookupEthersInterface('{{this.name}}').functions.{{this.name}}(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
).data
|
).data;
|
||||||
return abiEncodedTransactionData;
|
return abiEncodedTransactionData;
|
||||||
},
|
},
|
||||||
{{> callAsync}}
|
{{> callAsync}}
|
||||||
|
@@ -34,11 +34,25 @@ yarn install
|
|||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
|
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn lerna:rebuild
|
||||||
|
```
|
||||||
|
|
||||||
|
Or continuously rebuild on change:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also build this specific package by running the following from within its directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
or
|
or continuously rebuild on change:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn build:watch
|
yarn build:watch
|
||||||
@@ -58,17 +72,6 @@ yarn lint
|
|||||||
|
|
||||||
### Run Tests
|
### Run Tests
|
||||||
|
|
||||||
Before running the tests, you will need to spin up a [TestRPC](https://www.npmjs.com/package/ethereumjs-testrpc) instance.
|
|
||||||
|
|
||||||
In a separate terminal, start TestRPC (a convenience command is provided as part of the [0x.js monorepo](https://github.com/0xProject/0x-monorepo))
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd ../..
|
|
||||||
yarn testrpc
|
|
||||||
```
|
|
||||||
|
|
||||||
Then in your main terminal run
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn test
|
yarn test
|
||||||
```
|
```
|
||||||
|
29
packages/contracts/globals.d.ts
vendored
29
packages/contracts/globals.d.ts
vendored
@@ -1,35 +1,6 @@
|
|||||||
declare module 'chai-bignumber';
|
|
||||||
declare module 'dirty-chai';
|
|
||||||
|
|
||||||
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
|
|
||||||
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
|
|
||||||
// disallow `namespace`, we disable tslint for the following.
|
|
||||||
/* tslint:disable */
|
|
||||||
declare namespace Chai {
|
|
||||||
interface Assertion {
|
|
||||||
bignumber: Assertion;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* tslint:enable */
|
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
const json: any;
|
const json: any;
|
||||||
/* tslint:disable */
|
/* tslint:disable */
|
||||||
export default json;
|
export default json;
|
||||||
/* tslint:enable */
|
/* tslint:enable */
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module 'solc' {
|
|
||||||
export function compile(sources: any, optimizerEnabled: number, findImports: (importPath: string) => any): any;
|
|
||||||
export function setupMethods(solcBin: any): any;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module 'web3-eth-abi' {
|
|
||||||
export function encodeParameters(typesArray: string[], parameters: any[]): string;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module 'ethereumjs-abi' {
|
|
||||||
const soliditySHA3: (argTypes: string[], args: any[]) => Buffer;
|
|
||||||
const soliditySHA256: (argTypes: string[], args: any[]) => Buffer;
|
|
||||||
const methodID: (name: string, types: string[]) => Buffer;
|
|
||||||
}
|
|
||||||
|
19
packages/contracts/globalsAugment.d.ts
vendored
19
packages/contracts/globalsAugment.d.ts
vendored
@@ -1,19 +0,0 @@
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
|
||||||
|
|
||||||
// HACK: This module overrides the Chai namespace so that we can use BigNumber types inside.
|
|
||||||
// Source: https://github.com/Microsoft/TypeScript/issues/7352#issuecomment-191547232
|
|
||||||
declare global {
|
|
||||||
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
|
|
||||||
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
|
|
||||||
// disallow `namespace`, we disable tslint for the following.
|
|
||||||
/* tslint:disable */
|
|
||||||
namespace Chai {
|
|
||||||
interface NumberComparer {
|
|
||||||
(value: number | BigNumber, message?: string): Assertion;
|
|
||||||
}
|
|
||||||
interface NumericComparison {
|
|
||||||
greaterThan: NumberComparer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* tslint:enable */
|
|
||||||
}
|
|
@@ -1,10 +0,0 @@
|
|||||||
import { MultiSigConfigByNetwork } from '../types';
|
|
||||||
|
|
||||||
// Make a copy of this file named `multisig.js` and input custom params as needed
|
|
||||||
export const multiSig: MultiSigConfigByNetwork = {
|
|
||||||
kovan: {
|
|
||||||
owners: [],
|
|
||||||
confirmationsRequired: 0,
|
|
||||||
secondsRequired: 0,
|
|
||||||
},
|
|
||||||
};
|
|
@@ -1,23 +0,0 @@
|
|||||||
export interface MultiSigConfig {
|
|
||||||
owners: string[];
|
|
||||||
confirmationsRequired: number;
|
|
||||||
secondsRequired: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface MultiSigConfigByNetwork {
|
|
||||||
[networkName: string]: MultiSigConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Token {
|
|
||||||
address?: string;
|
|
||||||
name: string;
|
|
||||||
symbol: string;
|
|
||||||
decimals: number;
|
|
||||||
ipfsHash: string;
|
|
||||||
swarmHash: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface TokenInfoByNetwork {
|
|
||||||
development: Token[];
|
|
||||||
live: Token[];
|
|
||||||
}
|
|
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "contracts",
|
"name": "contracts",
|
||||||
"version": "2.1.20",
|
"version": "2.1.23",
|
||||||
"description": "Smart contract components of 0x protocol",
|
"description": "Smart contract components of 0x protocol",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"directories": {
|
"directories": {
|
||||||
@@ -10,16 +10,15 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
|
"prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers",
|
||||||
"copy_artifacts": "copyfiles './src/artifacts/**/*' ./lib",
|
"copy_artifacts": "copyfiles -u 4 '../migrations/src/artifacts/**/*' ./lib/src/artifacts;",
|
||||||
"build": "tsc",
|
"build": "tsc",
|
||||||
"test": "run-s build run_mocha",
|
"test": "run-s build run_mocha",
|
||||||
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
"test:coverage": "SOLIDITY_COVERAGE=true run-s build run_mocha coverage:report:text coverage:report:lcov",
|
||||||
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
"run_mocha": "mocha 'lib/test/**/*.js' --timeout 100000 --bail --exit",
|
||||||
"compile:comment": "Yarn workspaces do not link binaries correctly so we need to reference them directly https://github.com/yarnpkg/yarn/issues/3846",
|
"compile:comment": "Yarn workspaces do not link binaries correctly so we need to reference them directly https://github.com/yarnpkg/yarn/issues/3846",
|
||||||
"compile": "node ../deployer/lib/src/cli.js compile --contracts ${npm_package_config_contracts} --contracts-dir src/contracts --artifacts-dir src/artifacts",
|
"compile": "node ../deployer/lib/src/cli.js compile --contracts ${npm_package_config_contracts} --contracts-dir src/contracts --artifacts-dir ../migrations/src/artifacts",
|
||||||
"clean": "shx rm -rf ./lib",
|
"clean": "shx rm -rf ./lib",
|
||||||
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis ${npm_package_config_abis} --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
|
||||||
"migrate": "yarn build && yarn compile && node ./lib/migrations/index.js",
|
|
||||||
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
|
"lint": "tslint --project . 'migrations/**/*.ts' 'test/**/*.ts' 'util/**/*.ts' 'deploy/**/*.ts'",
|
||||||
"coverage:report:text": "istanbul report text",
|
"coverage:report:text": "istanbul report text",
|
||||||
"coverage:report:html": "istanbul report html && open coverage/index.html",
|
"coverage:report:html": "istanbul report html && open coverage/index.html",
|
||||||
@@ -27,7 +26,7 @@
|
|||||||
"test:circleci": "yarn test:coverage"
|
"test:circleci": "yarn test:coverage"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"abis": "src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|Arbitrage|EtherDelta|AccountLevels).json",
|
"abis": "../migrations/src/artifacts/@(DummyToken|TokenTransferProxy|Exchange|TokenRegistry|MultiSigWallet|MultiSigWalletWithTimeLock|MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress|TokenRegistry|ZRXToken|Arbitrage|EtherDelta|AccountLevels).json",
|
||||||
"contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,Arbitrage,EtherDelta,AccountLevels"
|
"contracts": "Exchange,DummyToken,ZRXToken,Token,WETH9,TokenTransferProxy,MultiSigWallet,MultiSigWalletWithTimeLock,MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress,MaliciousToken,TokenRegistry,Arbitrage,EtherDelta,AccountLevels"
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -41,12 +40,10 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/contracts/README.md",
|
"homepage": "https://github.com/0xProject/0x-monorepo/packages/contracts/README.md",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/dev-utils": "^0.3.3",
|
"@0xproject/dev-utils": "^0.3.6",
|
||||||
"@0xproject/tslint-config": "^0.4.13",
|
"@0xproject/tslint-config": "^0.4.16",
|
||||||
"@types/bluebird": "^3.5.3",
|
|
||||||
"@types/lodash": "4.14.104",
|
"@types/lodash": "4.14.104",
|
||||||
"@types/node": "^8.0.53",
|
"@types/node": "^8.0.53",
|
||||||
"@types/request-promise-native": "^1.0.2",
|
|
||||||
"@types/yargs": "^10.0.0",
|
"@types/yargs": "^10.0.0",
|
||||||
"chai": "^4.0.1",
|
"chai": "^4.0.1",
|
||||||
"chai-as-promised": "^7.1.0",
|
"chai-as-promised": "^7.1.0",
|
||||||
@@ -57,30 +54,23 @@
|
|||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
"prettier": "^1.11.1",
|
"prettier": "^1.11.1",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"solc": "^0.4.18",
|
"solc": "^0.4.22",
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"types-bn": "^0.0.1",
|
|
||||||
"types-ethereumjs-util": "0xProject/types-ethereumjs-util",
|
|
||||||
"typescript": "2.7.1",
|
"typescript": "2.7.1",
|
||||||
"yargs": "^10.0.3"
|
"yargs": "^10.0.3"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"0x.js": "^0.34.0",
|
"0x.js": "^0.36.1",
|
||||||
"@0xproject/deployer": "^0.3.4",
|
"@0xproject/deployer": "^0.4.1",
|
||||||
"@0xproject/json-schemas": "^0.7.18",
|
"@0xproject/types": "^0.6.1",
|
||||||
"@0xproject/types": "^0.4.2",
|
"@0xproject/typescript-typings": "^0.2.0",
|
||||||
"@0xproject/typescript-typings": "^0.0.2",
|
"@0xproject/utils": "^0.5.2",
|
||||||
"@0xproject/utils": "^0.4.4",
|
"@0xproject/web3-wrapper": "^0.6.1",
|
||||||
"@0xproject/web3-wrapper": "^0.4.0",
|
|
||||||
"bluebird": "^3.5.0",
|
|
||||||
"bn.js": "^4.11.8",
|
"bn.js": "^4.11.8",
|
||||||
"ethereumjs-abi": "^0.6.4",
|
"ethereumjs-abi": "^0.6.4",
|
||||||
"ethereumjs-util": "^5.1.1",
|
"ethereumjs-util": "^5.1.1",
|
||||||
"ethers-contracts": "^2.2.1",
|
"ethers-contracts": "^2.2.1",
|
||||||
"isomorphic-fetch": "^2.2.1",
|
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"request": "^2.81.0",
|
"web3": "^0.20.0"
|
||||||
"web3": "^0.20.0",
|
|
||||||
"web3-eth-abi": "^1.0.0-beta.24"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -9,7 +9,7 @@ import { ContractName } from '../util/types';
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { deployer } from './utils/deployer';
|
import { deployer } from './utils/deployer';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -26,7 +26,7 @@ describe('EtherToken', () => {
|
|||||||
|
|
||||||
const etherToken = await deployer.deployAsync(ContractName.EtherToken);
|
const etherToken = await deployer.deployAsync(ContractName.EtherToken);
|
||||||
etherTokenAddress = etherToken.address;
|
etherTokenAddress = etherToken.address;
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, {
|
zeroEx = new ZeroEx(provider, {
|
||||||
gasPrice,
|
gasPrice,
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
});
|
});
|
||||||
@@ -51,7 +51,7 @@ describe('EtherToken', () => {
|
|||||||
const initEthBalance = await web3Wrapper.getBalanceInWeiAsync(account);
|
const initEthBalance = await web3Wrapper.getBalanceInWeiAsync(account);
|
||||||
const initEthTokenBalance = await zeroEx.token.getBalanceAsync(etherTokenAddress, account);
|
const initEthTokenBalance = await zeroEx.token.getBalanceAsync(etherTokenAddress, account);
|
||||||
|
|
||||||
const ethToDeposit = new BigNumber(web3.toWei(1, 'ether'));
|
const ethToDeposit = new BigNumber(Web3Wrapper.toWei(new BigNumber(1)));
|
||||||
|
|
||||||
const txHash = await zeroEx.etherToken.depositAsync(etherTokenAddress, ethToDeposit, account);
|
const txHash = await zeroEx.etherToken.depositAsync(etherTokenAddress, ethToDeposit, account);
|
||||||
const receipt = await zeroEx.awaitTransactionMinedAsync(txHash);
|
const receipt = await zeroEx.awaitTransactionMinedAsync(txHash);
|
||||||
@@ -76,7 +76,7 @@ describe('EtherToken', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should convert ether tokens to ether with sufficient balance', async () => {
|
it('should convert ether tokens to ether with sufficient balance', async () => {
|
||||||
const ethToDeposit = new BigNumber(web3.toWei(1, 'ether'));
|
const ethToDeposit = new BigNumber(Web3Wrapper.toWei(new BigNumber(1)));
|
||||||
await zeroEx.etherToken.depositAsync(etherTokenAddress, ethToDeposit, account);
|
await zeroEx.etherToken.depositAsync(etherTokenAddress, ethToDeposit, account);
|
||||||
const initEthTokenBalance = await zeroEx.token.getBalanceAsync(etherTokenAddress, account);
|
const initEthTokenBalance = await zeroEx.token.getBalanceAsync(etherTokenAddress, account);
|
||||||
const initEthBalance = await web3Wrapper.getBalanceInWeiAsync(account);
|
const initEthBalance = await web3Wrapper.getBalanceInWeiAsync(account);
|
||||||
|
@@ -22,7 +22,7 @@ import { OrderFactory } from '../../util/order_factory';
|
|||||||
import { BalancesByOwner, ContractName, ExchangeContractErrs } from '../../util/types';
|
import { BalancesByOwner, ContractName, ExchangeContractErrs } from '../../util/types';
|
||||||
import { chaiSetup } from '../utils/chai_setup';
|
import { chaiSetup } from '../utils/chai_setup';
|
||||||
import { deployer } from '../utils/deployer';
|
import { deployer } from '../utils/deployer';
|
||||||
import { web3, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -59,22 +59,22 @@ describe('Exchange', () => {
|
|||||||
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
||||||
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
||||||
]);
|
]);
|
||||||
rep = new DummyTokenContract(web3Wrapper, repInstance.abi, repInstance.address);
|
rep = new DummyTokenContract(repInstance.abi, repInstance.address, provider);
|
||||||
dgd = new DummyTokenContract(web3Wrapper, dgdInstance.abi, dgdInstance.address);
|
dgd = new DummyTokenContract(dgdInstance.abi, dgdInstance.address, provider);
|
||||||
zrx = new DummyTokenContract(web3Wrapper, zrxInstance.abi, zrxInstance.address);
|
zrx = new DummyTokenContract(zrxInstance.abi, zrxInstance.address, provider);
|
||||||
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
||||||
tokenTransferProxy = new TokenTransferProxyContract(
|
tokenTransferProxy = new TokenTransferProxyContract(
|
||||||
web3Wrapper,
|
|
||||||
tokenTransferProxyInstance.abi,
|
tokenTransferProxyInstance.abi,
|
||||||
tokenTransferProxyInstance.address,
|
tokenTransferProxyInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
||||||
zrx.address,
|
zrx.address,
|
||||||
tokenTransferProxy.address,
|
tokenTransferProxy.address,
|
||||||
]);
|
]);
|
||||||
exchange = new ExchangeContract(web3Wrapper, exchangeInstance.abi, exchangeInstance.address);
|
exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||||
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
|
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, {
|
zeroEx = new ZeroEx(provider, {
|
||||||
exchangeContractAddress: exchange.address,
|
exchangeContractAddress: exchange.address,
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
});
|
});
|
||||||
|
@@ -17,7 +17,7 @@ import { OrderFactory } from '../../util/order_factory';
|
|||||||
import { ContractName } from '../../util/types';
|
import { ContractName } from '../../util/types';
|
||||||
import { chaiSetup } from '../utils/chai_setup';
|
import { chaiSetup } from '../utils/chai_setup';
|
||||||
import { deployer } from '../utils/deployer';
|
import { deployer } from '../utils/deployer';
|
||||||
import { web3, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -46,9 +46,9 @@ describe('Exchange', () => {
|
|||||||
zrx.address,
|
zrx.address,
|
||||||
tokenTransferProxy.address,
|
tokenTransferProxy.address,
|
||||||
]);
|
]);
|
||||||
const exchange = new ExchangeContract(web3Wrapper, exchangeInstance.abi, exchangeInstance.address);
|
const exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||||
await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
|
await tokenTransferProxy.addAuthorizedAddress(exchange.address, { from: accounts[0] });
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
|
const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID });
|
||||||
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
|
exchangeWrapper = new ExchangeWrapper(exchange, zeroEx);
|
||||||
const defaultOrderParams = {
|
const defaultOrderParams = {
|
||||||
exchangeContractAddress: exchange.address,
|
exchangeContractAddress: exchange.address,
|
||||||
|
@@ -22,7 +22,7 @@ import { OrderFactory } from '../../util/order_factory';
|
|||||||
import { BalancesByOwner, ContractName } from '../../util/types';
|
import { BalancesByOwner, ContractName } from '../../util/types';
|
||||||
import { chaiSetup } from '../utils/chai_setup';
|
import { chaiSetup } from '../utils/chai_setup';
|
||||||
import { deployer } from '../utils/deployer';
|
import { deployer } from '../utils/deployer';
|
||||||
import { web3, web3Wrapper } from '../utils/web3_wrapper';
|
import { provider, web3Wrapper } from '../utils/web3_wrapper';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -59,28 +59,24 @@ describe('Exchange', () => {
|
|||||||
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
||||||
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
deployer.deployAsync(ContractName.DummyToken, constants.DUMMY_TOKEN_ARGS),
|
||||||
]);
|
]);
|
||||||
rep = new DummyTokenContract(web3Wrapper, repInstance.abi, repInstance.address);
|
rep = new DummyTokenContract(repInstance.abi, repInstance.address, provider);
|
||||||
dgd = new DummyTokenContract(web3Wrapper, dgdInstance.abi, dgdInstance.address);
|
dgd = new DummyTokenContract(dgdInstance.abi, dgdInstance.address, provider);
|
||||||
zrx = new DummyTokenContract(web3Wrapper, zrxInstance.abi, zrxInstance.address);
|
zrx = new DummyTokenContract(zrxInstance.abi, zrxInstance.address, provider);
|
||||||
const tokenRegistryInstance = await deployer.deployAsync(ContractName.TokenRegistry);
|
const tokenRegistryInstance = await deployer.deployAsync(ContractName.TokenRegistry);
|
||||||
tokenRegistry = new TokenRegistryContract(
|
tokenRegistry = new TokenRegistryContract(tokenRegistryInstance.abi, tokenRegistryInstance.address, provider);
|
||||||
web3Wrapper,
|
|
||||||
tokenRegistryInstance.abi,
|
|
||||||
tokenRegistryInstance.address,
|
|
||||||
);
|
|
||||||
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
||||||
tokenTransferProxy = new TokenTransferProxyContract(
|
tokenTransferProxy = new TokenTransferProxyContract(
|
||||||
web3Wrapper,
|
|
||||||
tokenTransferProxyInstance.abi,
|
tokenTransferProxyInstance.abi,
|
||||||
tokenTransferProxyInstance.address,
|
tokenTransferProxyInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
const exchangeInstance = await deployer.deployAsync(ContractName.Exchange, [
|
||||||
zrx.address,
|
zrx.address,
|
||||||
tokenTransferProxy.address,
|
tokenTransferProxy.address,
|
||||||
]);
|
]);
|
||||||
exchange = new ExchangeContract(web3Wrapper, exchangeInstance.abi, exchangeInstance.address);
|
exchange = new ExchangeContract(exchangeInstance.abi, exchangeInstance.address, provider);
|
||||||
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
|
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(exchange.address, { from: accounts[0] });
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
|
const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID });
|
||||||
exWrapper = new ExchangeWrapper(exchange, zeroEx);
|
exWrapper = new ExchangeWrapper(exchange, zeroEx);
|
||||||
|
|
||||||
const defaultOrderParams = {
|
const defaultOrderParams = {
|
||||||
|
@@ -15,13 +15,13 @@ import { ContractName, SubmissionContractEventArgs } from '../util/types';
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { deployer } from './utils/deployer';
|
import { deployer } from './utils/deployer';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
const MULTI_SIG_ABI = artifacts.MultiSigWalletWithTimeLockArtifact.networks[constants.TESTRPC_NETWORK_ID].abi;
|
const MULTI_SIG_ABI = artifacts.MultiSigWalletWithTimeLockArtifact.networks[constants.TESTRPC_NETWORK_ID].abi;
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
|
const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID });
|
||||||
const abiDecoder = new AbiDecoder([MULTI_SIG_ABI]);
|
const abiDecoder = new AbiDecoder([MULTI_SIG_ABI]);
|
||||||
|
|
||||||
describe('MultiSigWalletWithTimeLock', () => {
|
describe('MultiSigWalletWithTimeLock', () => {
|
||||||
@@ -46,16 +46,16 @@ describe('MultiSigWalletWithTimeLock', () => {
|
|||||||
|
|
||||||
describe('changeTimeLock', () => {
|
describe('changeTimeLock', () => {
|
||||||
describe('initially non-time-locked', async () => {
|
describe('initially non-time-locked', async () => {
|
||||||
before('deploy a walet', async () => {
|
before('deploy a wallet', async () => {
|
||||||
const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
|
const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
|
||||||
owners,
|
owners,
|
||||||
SIGNATURES_REQUIRED,
|
SIGNATURES_REQUIRED,
|
||||||
0,
|
0,
|
||||||
]);
|
]);
|
||||||
multiSig = new MultiSigWalletWithTimeLockContract(
|
multiSig = new MultiSigWalletWithTimeLockContract(
|
||||||
web3Wrapper,
|
|
||||||
multiSigInstance.abi,
|
multiSigInstance.abi,
|
||||||
multiSigInstance.address,
|
multiSigInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
|
multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
|
||||||
|
|
||||||
@@ -143,16 +143,16 @@ describe('MultiSigWalletWithTimeLock', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('initially time-locked', async () => {
|
describe('initially time-locked', async () => {
|
||||||
before('deploy a walet', async () => {
|
before('deploy a wallet', async () => {
|
||||||
const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
|
const multiSigInstance = await deployer.deployAsync(ContractName.MultiSigWalletWithTimeLock, [
|
||||||
owners,
|
owners,
|
||||||
SIGNATURES_REQUIRED,
|
SIGNATURES_REQUIRED,
|
||||||
SECONDS_TIME_LOCKED,
|
SECONDS_TIME_LOCKED,
|
||||||
]);
|
]);
|
||||||
multiSig = new MultiSigWalletWithTimeLockContract(
|
multiSig = new MultiSigWalletWithTimeLockContract(
|
||||||
web3Wrapper,
|
|
||||||
multiSigInstance.abi,
|
multiSigInstance.abi,
|
||||||
multiSigInstance.address,
|
multiSigInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
|
multiSigWrapper = new MultiSigWrapper((multiSig as any) as MultiSigWalletContract);
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@ import { ContractName, SubmissionContractEventArgs, TransactionDataParams } from
|
|||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { deployer } from './utils/deployer';
|
import { deployer } from './utils/deployer';
|
||||||
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
import { provider, web3Wrapper } from './utils/web3_wrapper';
|
||||||
const PROXY_ABI = artifacts.TokenTransferProxyArtifact.networks[constants.TESTRPC_NETWORK_ID].abi;
|
const PROXY_ABI = artifacts.TokenTransferProxyArtifact.networks[constants.TESTRPC_NETWORK_ID].abi;
|
||||||
const MUTISIG_WALLET_WITH_TIME_LOCK_EXCEPT_REMOVE_AUTHORIZED_ADDRESS_ABI =
|
const MUTISIG_WALLET_WITH_TIME_LOCK_EXCEPT_REMOVE_AUTHORIZED_ADDRESS_ABI =
|
||||||
artifacts.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact.networks[constants.TESTRPC_NETWORK_ID]
|
artifacts.MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressArtifact.networks[constants.TESTRPC_NETWORK_ID]
|
||||||
@@ -28,7 +28,7 @@ const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
|||||||
const abiDecoder = new AbiDecoder([MUTISIG_WALLET_WITH_TIME_LOCK_EXCEPT_REMOVE_AUTHORIZED_ADDRESS_ABI]);
|
const abiDecoder = new AbiDecoder([MUTISIG_WALLET_WITH_TIME_LOCK_EXCEPT_REMOVE_AUTHORIZED_ADDRESS_ABI]);
|
||||||
|
|
||||||
describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
|
describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
|
||||||
const zeroEx = new ZeroEx(web3.currentProvider, { networkId: constants.TESTRPC_NETWORK_ID });
|
const zeroEx = new ZeroEx(provider, { networkId: constants.TESTRPC_NETWORK_ID });
|
||||||
let owners: string[];
|
let owners: string[];
|
||||||
const requiredApprovals = 2;
|
const requiredApprovals = 2;
|
||||||
const SECONDS_TIME_LOCKED = 1000000;
|
const SECONDS_TIME_LOCKED = 1000000;
|
||||||
@@ -49,9 +49,9 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
|
|||||||
const initialOwner = accounts[0];
|
const initialOwner = accounts[0];
|
||||||
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
const tokenTransferProxyInstance = await deployer.deployAsync(ContractName.TokenTransferProxy);
|
||||||
tokenTransferProxy = new TokenTransferProxyContract(
|
tokenTransferProxy = new TokenTransferProxyContract(
|
||||||
web3Wrapper,
|
|
||||||
tokenTransferProxyInstance.abi,
|
tokenTransferProxyInstance.abi,
|
||||||
tokenTransferProxyInstance.address,
|
tokenTransferProxyInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(authorizedAddress, {
|
await tokenTransferProxy.addAuthorizedAddress.sendTransactionAsync(authorizedAddress, {
|
||||||
from: initialOwner,
|
from: initialOwner,
|
||||||
@@ -61,9 +61,9 @@ describe('MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress', () => {
|
|||||||
[owners, requiredApprovals, SECONDS_TIME_LOCKED, tokenTransferProxy.address],
|
[owners, requiredApprovals, SECONDS_TIME_LOCKED, tokenTransferProxy.address],
|
||||||
);
|
);
|
||||||
multiSig = new MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract(
|
multiSig = new MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddressContract(
|
||||||
web3Wrapper,
|
|
||||||
multiSigInstance.abi,
|
multiSigInstance.abi,
|
||||||
multiSigInstance.address,
|
multiSigInstance.address,
|
||||||
|
provider,
|
||||||
);
|
);
|
||||||
await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, {
|
await tokenTransferProxy.transferOwnership.sendTransactionAsync(multiSig.address, {
|
||||||
from: initialOwner,
|
from: initialOwner,
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user