Compare commits
397 Commits
@0xproject
...
@0xproject
Author | SHA1 | Date | |
---|---|---|---|
|
2411bfc20f | ||
|
4d4ea8a4d0 | ||
|
595517e68b | ||
|
40ab2de393 | ||
|
723276ae3f | ||
|
76c5945017 | ||
|
01c6fd92e8 | ||
|
3f230a8fdb | ||
|
2a6a71ea6c | ||
|
cd23f220a0 | ||
|
fab88ea2cc | ||
|
688f8615ff | ||
|
d187a31e38 | ||
|
c6f85464ce | ||
|
a220b56736 | ||
|
0e33f45f3d | ||
|
ff7c3012a5 | ||
|
20fec2943b | ||
|
08b30b0706 | ||
|
bf52ce7e72 | ||
|
1bac5019e8 | ||
|
19454a92dc | ||
|
cdbb3a015f | ||
|
644da2b0cb | ||
|
57446d78f1 | ||
|
3e285c0ef1 | ||
|
a322148631 | ||
|
33ec9fdf47 | ||
|
323826111a | ||
|
ddd3d284d9 | ||
|
f55a300f43 | ||
|
08a69ebd6e | ||
|
ddb8e26bec | ||
|
57ca611e12 | ||
|
1eff120f49 | ||
|
4bc6096ec0 | ||
|
95eb114051 | ||
|
9c856de49c | ||
|
d502f79303 | ||
|
5224337323 | ||
|
ef49192170 | ||
|
c9df388731 | ||
|
870da2ab22 | ||
|
6122840241 | ||
|
03b00ef8da | ||
|
84b820abc6 | ||
|
cc4ff568a9 | ||
|
665011174b | ||
|
37f210e9f0 | ||
|
9c01e3a8a0 | ||
|
c4dd9658e7 | ||
|
29aa09e448 | ||
|
1337b6928a | ||
|
ac35d8127e | ||
|
a6ae1efadb | ||
|
bd7b5c51b2 | ||
|
397cd77ef9 | ||
|
743c3dbe01 | ||
|
9f1c212596 | ||
|
defd249565 | ||
|
8926dac78c | ||
|
18cac3f092 | ||
|
01e27426d6 | ||
|
0b09cc36b0 | ||
|
f3cb484f82 | ||
|
0053762760 | ||
|
d72b7299c6 | ||
|
eb89ef79eb | ||
|
066d13f5b7 | ||
|
ec06d8d606 | ||
|
a2e4aaa9a3 | ||
|
26e9696ddb | ||
|
343191e936 | ||
|
3e3b667366 | ||
|
3b45d4727b | ||
|
b4f3450d4a | ||
|
0a8b7cb494 | ||
|
125ace3519 | ||
|
109fc41474 | ||
|
f30353087f | ||
|
d106079d9b | ||
|
dc3be992a3 | ||
|
bed7d87b7f | ||
|
05daab5dea | ||
|
170e5589f9 | ||
|
538914aa52 | ||
|
81deb68c8e | ||
|
36986fe9c9 | ||
|
5791632933 | ||
|
289359bf0d | ||
|
81f6487865 | ||
|
21b797c3f9 | ||
|
de8450d5c9 | ||
|
bcb9ee4cc2 | ||
|
7c87447241 | ||
|
b39d87f357 | ||
|
552b14b1fa | ||
|
5779ffd01b | ||
|
a7c24a17f4 | ||
|
8743c40911 | ||
|
7ef6bd4b14 | ||
|
6af0f08dfc | ||
|
54ae94dde0 | ||
|
c570f3865f | ||
|
ed9d1da297 | ||
|
beb483ea85 | ||
|
46b7fecafe | ||
|
e476682922 | ||
|
8478dc8d6d | ||
|
9f8e41cbfa | ||
|
3916383dd0 | ||
|
a60c8f7d8c | ||
|
4e5cd472c2 | ||
|
e1341bc6d9 | ||
|
d437a66019 | ||
|
542b46a22f | ||
|
6fef533fff | ||
|
ec219fc395 | ||
|
a555a8a374 | ||
|
78e9c48803 | ||
|
18d3e5458a | ||
|
ac25764d12 | ||
|
c55e7fa91a | ||
|
e31ba2e12e | ||
|
73f8ae9a47 | ||
|
32b85625c1 | ||
|
629edd3108 | ||
|
ee77b81551 | ||
|
2c7fdac5cd | ||
|
d118116548 | ||
|
8d01956c3e | ||
|
1dda8c1468 | ||
|
111f7e917e | ||
|
477daf4168 | ||
|
8b52793f2f | ||
|
18b9fe5256 | ||
|
439e864085 | ||
|
f45191d0e8 | ||
|
32feadee42 | ||
|
c4b4bb9e8e | ||
|
8fd705d2af | ||
|
3c36135d6c | ||
|
02ede26893 | ||
|
af21ad1615 | ||
|
07fa01528b | ||
|
38f716bd77 | ||
|
6a410b03ff | ||
|
3cd7bce0a3 | ||
|
6693540f43 | ||
|
647bc5a63e | ||
|
4f76bb2a12 | ||
|
9991ddecc2 | ||
|
3cf2cb89bb | ||
|
2875cfa8c7 | ||
|
87cbbdad72 | ||
|
07de3a1d94 | ||
|
27880a6059 | ||
|
0367e4117a | ||
|
ec582d6e46 | ||
|
4ca706d4e6 | ||
|
72671c1014 | ||
|
a3c31f4f4a | ||
|
db8be4a66e | ||
|
2f7c19e80d | ||
|
7d9c357409 | ||
|
abf41b073c | ||
|
c9b07107f3 | ||
|
773be348a3 | ||
|
b7bb8d9b2a | ||
|
c7c12371ef | ||
|
fb40b10501 | ||
|
d4dce41d3a | ||
|
293b55e51f | ||
|
11bac66046 | ||
|
2a438419ab | ||
|
0f0aca7de5 | ||
|
f699b9a73f | ||
|
214096de9e | ||
|
a0ccb609cd | ||
|
4e05554b3e | ||
|
04c08b9fc8 | ||
|
86c1c8082d | ||
|
c5afc5feb5 | ||
|
8392ee4625 | ||
|
ac881d149c | ||
|
cc4e390c91 | ||
|
26c726da45 | ||
|
358f3d9b42 | ||
|
3337625fa0 | ||
|
ae2daa5a6f | ||
|
79f521b555 | ||
|
fffcb98ac4 | ||
|
5468358f21 | ||
|
87044313c2 | ||
|
794b155827 | ||
|
4941ffd354 | ||
|
aa8a3ee055 | ||
|
c1d17c83f8 | ||
|
db030016fa | ||
|
ae04f55882 | ||
|
b40fab35f6 | ||
|
644deee8b5 | ||
|
c7302c46e5 | ||
|
4948551703 | ||
|
d4c1b3b0bd | ||
|
bbdb072634 | ||
|
d7bf003d51 | ||
|
5a827eb3d4 | ||
|
b37076136b | ||
|
3574ab253f | ||
|
312a30578b | ||
|
8243e73413 | ||
|
5175fe8107 | ||
|
2acb767640 | ||
|
a9b1dcb32a | ||
|
8f8577b7c6 | ||
|
0225d34b74 | ||
|
8d1e27a1a5 | ||
|
e4ea6e1ec3 | ||
|
8137d41ce5 | ||
|
4b7f0bd374 | ||
|
f9ad97b978 | ||
|
b145a17d11 | ||
|
3430e2bdac | ||
|
cdcf925378 | ||
|
76029cbf09 | ||
|
b9c1653c1c | ||
|
f6c01520ae | ||
|
0fb4de85c4 | ||
|
ffe7363776 | ||
|
4a27a7dc58 | ||
|
3b3d5b12bc | ||
|
380e51ca50 | ||
|
aea7207b9f | ||
|
9593739938 | ||
|
40ebb533b3 | ||
|
7fe26ee719 | ||
|
28d63ad8e1 | ||
|
56eeea1e63 | ||
|
642a2cf165 | ||
|
e16feb27f4 | ||
|
83ae7ba08d | ||
|
a86f8a81a2 | ||
|
28abcef1ca | ||
|
32d15d79f1 | ||
|
538ac604a8 | ||
|
009b70f5b2 | ||
|
f7c1e10b5a | ||
|
3f3e8be004 | ||
|
cb612360ca | ||
|
6a8c2cb717 | ||
|
c8a8b851d8 | ||
|
ba9a734ba7 | ||
|
b08374f0ba | ||
|
c2f8858aab | ||
|
1f81fa1c6c | ||
|
db44a5bca7 | ||
|
53e1815c1d | ||
|
20985d515f | ||
|
0334004b11 | ||
|
95e2b37d62 | ||
|
dba1b8a7e9 | ||
|
ee29ed26ff | ||
|
a08ae722c1 | ||
|
b3c1c0ccad | ||
|
e1fa65f5ef | ||
|
a2e848a7fa | ||
|
67fbffc964 | ||
|
c3b4359e87 | ||
|
11ed5d62ba | ||
|
5827170815 | ||
|
ca25b816fa | ||
|
a9db0e8ebe | ||
|
a0791455e1 | ||
|
efb0ee4c02 | ||
|
df1968157c | ||
|
355aac2a1a | ||
|
b93b66edfb | ||
|
92a4e77288 | ||
|
7ac646ff94 | ||
|
ef6aa9f41b | ||
|
df9e7385ad | ||
|
e065ac45dc | ||
|
745af5309d | ||
|
952f1cf8d0 | ||
|
86a55fe55a | ||
|
88c6694ffc | ||
|
20826e0f08 | ||
|
e474096119 | ||
|
075f286130 | ||
|
32e3cab116 | ||
|
49ff4299c6 | ||
|
4d18a4802d | ||
|
d613791104 | ||
|
44f7f79bd9 | ||
|
1cdfbbadaa | ||
|
76a31b6fd6 | ||
|
0ad3d06ef9 | ||
|
fb0fd8ddc4 | ||
|
2a9913b8fb | ||
|
9b8d2ed469 | ||
|
17148df06d | ||
|
d93089fcc0 | ||
|
870995933a | ||
|
d6c2e47bbd | ||
|
e2b2bf1e0d | ||
|
c4a18ee64b | ||
|
7143996d26 | ||
|
22f78a2c52 | ||
|
bd7517cfd4 | ||
|
9bffce9dc5 | ||
|
10f6a17857 | ||
|
2197c2481a | ||
|
8d90e640b0 | ||
|
368870a2fc | ||
|
945a19bb61 | ||
|
b0abc384bc | ||
|
8f45e9a518 | ||
|
b06f1d1982 | ||
|
4365350430 | ||
|
3b158cb726 | ||
|
2298a34c37 | ||
|
633039c528 | ||
|
ee31d5e24d | ||
|
f590aa11f7 | ||
|
6b7f48644c | ||
|
21aac75533 | ||
|
95b02a3197 | ||
|
be7c444959 | ||
|
f02d3f689d | ||
|
981752059c | ||
|
6c87ebac01 | ||
|
a9479b3c01 | ||
|
c5afca53a4 | ||
|
b4cb88ab26 | ||
|
ad4f607643 | ||
|
c7d340e822 | ||
|
2c501d2380 | ||
|
3787e4a83c | ||
|
3b77e4ebf1 | ||
|
6eebf717d5 | ||
|
98f32d6f1f | ||
|
62f45f7b41 | ||
|
a7d8f6599a | ||
|
4da6db8418 | ||
|
d991291f2a | ||
|
392fb42973 | ||
|
13299158d1 | ||
|
a6571b09d2 | ||
|
870ba445b8 | ||
|
caaa70f630 | ||
|
56a8e0a09a | ||
|
4c08667a07 | ||
|
4ac6b6828c | ||
|
c050186014 | ||
|
63f2606863 | ||
|
5160e0ba18 | ||
|
0aad2ee005 | ||
|
8a58ffda86 | ||
|
cea8dcae3d | ||
|
fc7e7d9331 | ||
|
494bff4bc0 | ||
|
824ee8a3dc | ||
|
47af38ecb8 | ||
|
654c790c3d | ||
|
7ebebb5bd9 | ||
|
8f921a61da | ||
|
cfd734d84f | ||
|
342a697e42 | ||
|
918f3cde94 | ||
|
7b82a8669d | ||
|
7116f100ee | ||
|
42fce45585 | ||
|
9da57daa7f | ||
|
e302d23317 | ||
|
0edfa83951 | ||
|
a5ba049427 | ||
|
adba69a589 | ||
|
cc73f72d13 | ||
|
e4f90996af | ||
|
974c0d2b95 | ||
|
d1fc2a115e | ||
|
a9373c7fb0 | ||
|
8b604462ac | ||
|
51e4a73439 | ||
|
d42cdcfd43 | ||
|
c18acd0859 | ||
|
9699ee4eff | ||
|
c78e504bfb | ||
|
0eeaac1f2b | ||
|
b578517f91 | ||
|
c009e9979e | ||
|
22b6097e95 | ||
|
8e3446a389 | ||
|
1747d7a1bb | ||
|
da277f5b27 | ||
|
f27e943258 |
@@ -27,6 +27,15 @@ jobs:
|
|||||||
key: repo-{{ .Environment.CIRCLE_SHA1 }}
|
key: repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
paths:
|
paths:
|
||||||
- ~/repo
|
- ~/repo
|
||||||
|
test-installation:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- run: yarn test:installation
|
||||||
test-0xjs:
|
test-0xjs:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:6.12
|
- image: circleci/node:6.12
|
||||||
@@ -40,6 +49,10 @@ jobs:
|
|||||||
command: npm run testrpc -- --db testrpc_snapshot
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
background: true
|
background: true
|
||||||
- run: yarn lerna:run --scope 0x.js test:circleci
|
- run: yarn lerna:run --scope 0x.js test:circleci
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/0x.js/coverage/lcov.info
|
||||||
test-contracts:
|
test-contracts:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:6.12
|
- image: circleci/node:6.12
|
||||||
@@ -53,6 +66,10 @@ jobs:
|
|||||||
command: npm run testrpc -- --db testrpc_snapshot
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
background: true
|
background: true
|
||||||
- run: yarn lerna:run --scope contracts test:circleci
|
- run: yarn lerna:run --scope contracts test:circleci
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/contracts/coverage/lcov.info
|
||||||
test-deployer:
|
test-deployer:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:6.12
|
- image: circleci/node:6.12
|
||||||
@@ -66,6 +83,10 @@ jobs:
|
|||||||
command: npm run testrpc -- --db testrpc_snapshot
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
background: true
|
background: true
|
||||||
- run: yarn lerna:run --scope @0xproject/deployer test:circleci
|
- run: yarn lerna:run --scope @0xproject/deployer test:circleci
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-deployer-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/deployer/coverage/lcov.info
|
||||||
test-rest:
|
test-rest:
|
||||||
docker:
|
docker:
|
||||||
- image: circleci/node:6.12
|
- image: circleci/node:6.12
|
||||||
@@ -79,6 +100,30 @@ jobs:
|
|||||||
command: npm run testrpc -- --db testrpc_snapshot
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
background: true
|
background: true
|
||||||
- run: yarn lerna:run --ignore contracts --ignore 0x.js --ignore @0xproject/deployer test:circleci
|
- run: yarn lerna:run --ignore contracts --ignore 0x.js --ignore @0xproject/deployer test:circleci
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/assert/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/connect/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/dev-utils/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/json-schemas/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/subproviders/coverage/lcov.info
|
||||||
|
- save_cache:
|
||||||
|
key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo/packages/sol-cov/coverage/lcov.info
|
||||||
lint:
|
lint:
|
||||||
working_directory: ~/repo
|
working_directory: ~/repo
|
||||||
docker:
|
docker:
|
||||||
@@ -97,11 +142,50 @@ jobs:
|
|||||||
keys:
|
keys:
|
||||||
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
- run: yarn prettier:ci
|
- run: yarn prettier:ci
|
||||||
|
submit-coverage:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-connect-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-deployer-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- run: yarn report_coverage
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
main:
|
main:
|
||||||
jobs:
|
jobs:
|
||||||
- build
|
- build
|
||||||
|
- test-installation:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
- test-0xjs:
|
- test-0xjs:
|
||||||
requires:
|
requires:
|
||||||
- build
|
- build
|
||||||
@@ -120,3 +204,9 @@ workflows:
|
|||||||
- lint:
|
- lint:
|
||||||
requires:
|
requires:
|
||||||
- build
|
- build
|
||||||
|
- submit-coverage:
|
||||||
|
requires:
|
||||||
|
- test-0xjs
|
||||||
|
- test-deployer
|
||||||
|
- test-rest
|
||||||
|
- test-contracts
|
||||||
|
10
.gitignore
vendored
10
.gitignore
vendored
@@ -75,3 +75,13 @@ bin/
|
|||||||
|
|
||||||
# generated contract artifacts
|
# generated contract artifacts
|
||||||
packages/contracts/src/artifacts
|
packages/contracts/src/artifacts
|
||||||
|
|
||||||
|
# generated contract wrappers
|
||||||
|
packages/0x.js/src/contract_wrappers/generated/
|
||||||
|
packages/contracts/src/contract_wrappers/generated/
|
||||||
|
|
||||||
|
# solc-bin in deployer
|
||||||
|
packages/deployer/solc_bin/
|
||||||
|
|
||||||
|
# Monorepo scripts
|
||||||
|
packages/*/scripts/
|
||||||
|
71
README.md
71
README.md
@@ -10,7 +10,7 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
|
|||||||
[whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf
|
[whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf
|
||||||
|
|
||||||
[](https://circleci.com/gh/0xProject/0x-monorepo)
|
[](https://circleci.com/gh/0xProject/0x-monorepo)
|
||||||
[](https://coveralls.io/github/0xProject/0x-monorepo?branch=master)
|
[](https://coveralls.io/github/0xProject/0x-monorepo?branch=development)
|
||||||
[](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)
|
||||||
@@ -18,34 +18,36 @@ This repository is a monorepo including the 0x protocol smart contracts and nume
|
|||||||
|
|
||||||
### Published Packages
|
### Published Packages
|
||||||
|
|
||||||
| Package | Version | Description |
|
| Package | Version | Description |
|
||||||
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
|
||||||
| [`0x.js`](/packages/0x.js) | [](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol |
|
| [`0x.js`](/packages/0x.js) | [](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol |
|
||||||
| [`@0xproject/abi-gen`](/packages/abi-gen) | [](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
|
| [`@0xproject/abi-gen`](/packages/abi-gen) | [](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
|
||||||
| [`@0xproject/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
|
| [`@0xproject/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
|
||||||
| [`@0xproject/base-contract`](/packages/base-contract) | [](https://www.npmjs.com/package/@0xproject/base-contract) | BaseContract to derive all auto-generated wrappers from |
|
| [`@0xproject/base-contract`](/packages/base-contract) | [](https://www.npmjs.com/package/@0xproject/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts |
|
||||||
| [`chai-as-promised-typescript-typings`](/packages/chai-as-promised-typescript-typings) | [](https://www.npmjs.com/package/chai-as-promised-typescript-typings) | Chai as promised typescript typings |
|
| [`@0xproject/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the Standard Relayer API |
|
||||||
| [`chai-typescript-typings`](/packages/chai-typescript-typings) | [](https://www.npmjs.com/package/chai-typescript-typings) | Chai typescript typings |
|
| [`@0xproject/deployer`](/packages/deployer) | [](https://www.npmjs.com/package/@0xproject/deployer) | Solidity project compiler and deployer framework |
|
||||||
| [`@0xproject/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the standard relayer api |
|
| [`@0xproject/dev-utils`](/packages/dev-utils) | [](https://www.npmjs.com/package/@0xproject/dev-utils) | Dev utils to be shared across 0x projects and packages |
|
||||||
| [`@0xproject/deployer`](/packages/deployer) | [](https://www.npmjs.com/package/@0xproject/deployer) | Smart contract deployer |
|
| [`@0xproject/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
|
||||||
| [`@0xproject/dev-utils`](/packages/dev-utils) | [](https://www.npmjs.com/package/@0xproject/dev-utils) | Dev utils to be shared across 0x projects and packages |
|
| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | [](https://www.npmjs.com/package/@0xproject/monorepo-scripts) | Monorepo scripts |
|
||||||
| [`ethers-typescript-typings`](/packages/ethers-typescript-typings) | [](https://www.npmjs.com/package/ethers-typescript-typings) | [Ethers.js](https://github.com/ethers-io/ethers.js/) typescript typings |
|
| [`@0xproject/react-docs`](/packages/react-docs) | [](https://www.npmjs.com/package/@0xproject/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON |
|
||||||
| [`@0xproject/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
|
| [`@0xproject/react-shared`](/packages/react-shared) | [](https://www.npmjs.com/package/@0xproject/react-shared) | 0x shared react components |
|
||||||
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
| [`@0xproject/sra-report`](/packages/sra-report) | [](https://www.npmjs.com/package/@0xproject/sra-report) | Generate reports for standard relayer API compliance |
|
||||||
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
| [`@0xproject/sol-cov`](/packages/sol-cov) | [](https://www.npmjs.com/package/@0xproject/sol-cov) | Solidity test coverage tool tool |
|
||||||
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
||||||
| [`@0xproject/utils`](/packages/utils) | [](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities |
|
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
||||||
| [`web3-typescript-typings`](/packages/web3-typescript-typings) | [](https://www.npmjs.com/package/web3-typescript-typings) | Web3 typescript typings |
|
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
||||||
| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper |
|
| [`@0xproject/typescript-typings`](/packages/typescript-typings) | [](https://www.npmjs.com/package/@0xproject/typescript-typings) | Repository of types for external packages |
|
||||||
|
| [`@0xproject/utils`](/packages/utils) | [](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities |
|
||||||
|
| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper |
|
||||||
|
|
||||||
### Private Packages
|
### Private Packages
|
||||||
|
|
||||||
| Package | Description |
|
| Package | Description |
|
||||||
| ----------------------------------------------------------- | ---------------------------------------------------------------- |
|
| --------------------------------------------------------------- | ---------------------------------------------------------------- |
|
||||||
| [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests |
|
| [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests |
|
||||||
| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | Shared monorepo scripts |
|
| [`@0xproject/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0xproject/react-docs` |
|
||||||
| [`@0xproject/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
|
| [`@0xproject/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
|
||||||
| [`@0xproject/website`](/packages/website) | 0x website & Portal DApp |
|
| [`@0xproject/website`](/packages/website) | 0x website & Portal DApp |
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -56,6 +58,13 @@ Dedicated documentation pages:
|
|||||||
* [Smart contracts](https://0xproject.com/docs/contracts)
|
* [Smart contracts](https://0xproject.com/docs/contracts)
|
||||||
* [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.
|
||||||
|
You can include those by prepending @0xproject/typescript-typings package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config.
|
||||||
|
|
||||||
|
```json
|
||||||
|
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
|
||||||
|
```
|
||||||
|
|
||||||
## 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 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.
|
||||||
@@ -78,13 +87,17 @@ yarn install
|
|||||||
|
|
||||||
### Build
|
### Build
|
||||||
|
|
||||||
Build all 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
|
||||||
|
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
|
||||||
|
this order.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn lerna:run build
|
yarn lerna:rebuild
|
||||||
```
|
```
|
||||||
|
|
||||||
Continuously rebuild on exchange
|
Continuously rebuild on change
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
yarn dev
|
yarn dev
|
||||||
|
25
package.json
25
package.json
@@ -1,27 +1,36 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"name": "0x-monorepo",
|
"name": "0x-monorepo",
|
||||||
"workspaces": ["packages/*"],
|
"workspaces": [
|
||||||
|
"packages/*"
|
||||||
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "lerna run --parallel build:watch",
|
"dev": "lerna run --parallel build:watch",
|
||||||
"testrpc": "testrpc -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"",
|
"testrpc": "testrpc -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"",
|
||||||
"prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
"prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
||||||
"prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
"prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
||||||
|
"report_coverage": "lcov-result-merger 'packages/*/coverage/lcov.info' | coveralls",
|
||||||
|
"test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js",
|
||||||
|
"lerna:install": "yarn install",
|
||||||
"lerna:run": "lerna run",
|
"lerna:run": "lerna run",
|
||||||
"lerna:rebuild": "lerna run clean; lerna run build;",
|
"lerna:clean": "lerna run clean",
|
||||||
"lerna:publish":
|
"lerna:build": "lerna run build",
|
||||||
"yarn install; lerna run clean; lerna run build; lerna publish --registry=https://registry.npmjs.org/"
|
"lerna:rebuild": "run-s lerna:clean lerna:build",
|
||||||
|
"lerna:publish": "run-s lerna:install lerna:rebuild script:publish",
|
||||||
|
"lerna:publish:dry": "run-s lerna:install lerna:rebuild script:publish:dry",
|
||||||
|
"script:publish": "node ./packages/monorepo-scripts/lib/publish.js",
|
||||||
|
"script:publish:dry": "IS_DRY_RUN=true yarn script:publish"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
|
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/utils": "^0.4.0",
|
|
||||||
"async-child-process": "^1.1.1",
|
"async-child-process": "^1.1.1",
|
||||||
|
"coveralls": "^3.0.0",
|
||||||
"ethereumjs-testrpc": "^6.0.3",
|
"ethereumjs-testrpc": "^6.0.3",
|
||||||
|
"lcov-result-merger": "^2.0.0",
|
||||||
"lerna": "^2.5.1",
|
"lerna": "^2.5.1",
|
||||||
"prettier": "^1.11.1",
|
"npm-run-all": "^4.1.2",
|
||||||
"publish-release": "0xproject/publish-release",
|
"prettier": "^1.11.1"
|
||||||
"semver-sort": "^0.0.4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,3 +8,4 @@ test/
|
|||||||
/contract_templates/
|
/contract_templates/
|
||||||
/generated_docs/
|
/generated_docs/
|
||||||
/scripts/
|
/scripts/
|
||||||
|
/lib/src/monorepo_scripts/
|
||||||
|
1012
packages/0x.js/CHANGELOG.json
Normal file
1012
packages/0x.js/CHANGELOG.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,21 @@
|
|||||||
# CHANGELOG
|
<!--
|
||||||
|
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||||
|
Edit the package's CHANGELOG.json file only.
|
||||||
|
-->
|
||||||
|
|
||||||
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.34.0 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Fix the bug causing `zeroEx.exchange.fillOrdersUpToAsync` validation to fail if there were some extra orders passed (#470)
|
||||||
|
* Remove automatic instantiation of `zeroEx.orderStateWatcher` (#488)
|
||||||
|
* Add `zeroEx.createOrderStateWatcher` to allow creating arbitrary number of OrderStateWatchers (#488)
|
||||||
|
* Added `stateLayer` setting to `OrderStateWatcherConfig` so OrderStateWatcher can be set to monitor different blockchain state layers (#488)
|
||||||
|
|
||||||
|
## v0.33.2 - _March 18, 2018_
|
||||||
|
|
||||||
|
* Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package (#452)
|
||||||
|
* Consolidate `Order`, `SignedOrder`, and `ECSignature` into the `@0xproject/types` package (#456)
|
||||||
|
|
||||||
## v0.33.1 - _March 8, 2018_
|
## v0.33.1 - _March 8, 2018_
|
||||||
|
|
||||||
@@ -32,10 +49,7 @@
|
|||||||
|
|
||||||
## v0.31.0 - _January 30, 2018_
|
## v0.31.0 - _January 30, 2018_
|
||||||
|
|
||||||
* Add the `shouldAddPersonalMessagePrefix` parameter to `signOrderHashAsync` so that the
|
* Add the `shouldAddPersonalMessagePrefix` parameter to `signOrderHashAsync` so that the caller can decide on whether to add the personalMessage prefix before relaying the request to the signer. Parity Signer, Ledger and TestRPC add the prefix themselves, Metamask expects it to have already been added. (#349)
|
||||||
caller can decide on whether to add the personalMessage prefix before relaying the request
|
|
||||||
to the signer. Parity Signer, Ledger and TestRPC add the prefix themselves, Metamask expects
|
|
||||||
it to have already been added. (#349)
|
|
||||||
|
|
||||||
## v0.30.2 - _January 29, 2018_
|
## v0.30.2 - _January 29, 2018_
|
||||||
|
|
||||||
@@ -151,16 +165,16 @@
|
|||||||
## v0.21.0 - _October 10, 2017_
|
## v0.21.0 - _October 10, 2017_
|
||||||
|
|
||||||
* Complete rewrite of subscription logic (#182)
|
* Complete rewrite of subscription logic (#182)
|
||||||
* Subscriptions no longer return historical logs. If you want them - use `getLogsAsync`
|
* Subscriptions no longer return historical logs. If you want them - use `getLogsAsync`
|
||||||
* Subscriptions now use [ethereumjs-blockstream](https://github.com/ethereumjs/ethereumjs-blockstream) under the hood
|
* Subscriptions now use [ethereumjs-blockstream](https://github.com/ethereumjs/ethereumjs-blockstream) under the hood
|
||||||
* Subscriptions correctly handle block re-orgs (forks)
|
* Subscriptions correctly handle block re-orgs (forks)
|
||||||
* Subscriptions correctly backfill logs (connection problems)
|
* Subscriptions correctly backfill logs (connection problems)
|
||||||
* They no longer setup filters on the underlying nodes, so you can use them with infura without a filter Subprovider
|
* They no longer setup filters on the underlying nodes, so you can use them with infura without a filter Subprovider
|
||||||
* Removed `ContractEventEmitter` and added `LogEvent`
|
* Removed `ContractEventEmitter` and added `LogEvent`
|
||||||
* Renamed `zeroEx.token.subscribeAsync` to `zeroEx.token.subscribe`
|
* Renamed `zeroEx.token.subscribeAsync` to `zeroEx.token.subscribe`
|
||||||
* Added `zeroEx.token.unsubscribe` and `zeroEx.exchange.unsubscribe`
|
* Added `zeroEx.token.unsubscribe` and `zeroEx.exchange.unsubscribe`
|
||||||
* Renamed `zeroEx.exchange.stopWatchingAllEventsAsync` to `zeroEx.exhange.unsubscribeAll`
|
* Renamed `zeroEx.exchange.stopWatchingAllEventsAsync` to `zeroEx.exhange.unsubscribeAll`
|
||||||
* Renamed `zeroEx.token.stopWatchingAllEventsAsync` to `zeroEx.token.unsubscribeAll`
|
* Renamed `zeroEx.token.stopWatchingAllEventsAsync` to `zeroEx.token.unsubscribeAll`
|
||||||
* Fixed the batch fills validation by emulating all balance & proxy allowance changes (#185)
|
* Fixed the batch fills validation by emulating all balance & proxy allowance changes (#185)
|
||||||
|
|
||||||
## v0.20.0 - _October 5, 2017_
|
## v0.20.0 - _October 5, 2017_
|
||||||
@@ -186,9 +200,9 @@
|
|||||||
## v0.16.0 - _September 20, 2017_
|
## v0.16.0 - _September 20, 2017_
|
||||||
|
|
||||||
* Added the ability to specify custom contract addresses to be used with 0x.js (#165)
|
* Added the ability to specify custom contract addresses to be used with 0x.js (#165)
|
||||||
* ZeroExConfig.exchangeContractAddress
|
* ZeroExConfig.exchangeContractAddress
|
||||||
* ZeroExConfig.tokenRegistryContractAddress
|
* ZeroExConfig.tokenRegistryContractAddress
|
||||||
* ZeroExConfig.etherTokenContractAddress
|
* ZeroExConfig.etherTokenContractAddress
|
||||||
* Added `zeroEx.tokenRegistry.getContractAddressAsync` (#165)
|
* Added `zeroEx.tokenRegistry.getContractAddressAsync` (#165)
|
||||||
|
|
||||||
## v0.15.0 - _September 8, 2017_
|
## v0.15.0 - _September 8, 2017_
|
||||||
@@ -228,11 +242,11 @@
|
|||||||
* Added `zeroEx.token.setUnlimitedAllowanceAsync` (#137)
|
* Added `zeroEx.token.setUnlimitedAllowanceAsync` (#137)
|
||||||
* Added `zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS` (#137)
|
* Added `zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS` (#137)
|
||||||
|
|
||||||
## v0.10.4 - _Aug 24, 2017_
|
## v0.10.4 - _August 24, 2017_
|
||||||
|
|
||||||
* Fixed a bug where checksummed addresses were being pulled from artifacts and not lower-cased. (#135)
|
* Fixed a bug where checksummed addresses were being pulled from artifacts and not lower-cased. (#135)
|
||||||
|
|
||||||
## v0.10.1 - _Aug 24, 2017_
|
## v0.10.1 - _August 24, 2017_
|
||||||
|
|
||||||
* Added `zeroEx.exchange.validateFillOrderThrowIfInvalidAsync` (#128)
|
* Added `zeroEx.exchange.validateFillOrderThrowIfInvalidAsync` (#128)
|
||||||
* Added `zeroEx.exchange.validateFillOrKillOrderThrowIfInvalidAsync` (#128)
|
* Added `zeroEx.exchange.validateFillOrKillOrderThrowIfInvalidAsync` (#128)
|
||||||
@@ -247,20 +261,20 @@
|
|||||||
* Added clear error message when checksummed address is passed to a public method (#124)
|
* Added clear error message when checksummed address is passed to a public method (#124)
|
||||||
* Fixes the description of `shouldThrowOnInsufficientBalanceOrAllowance` in docs (#127)
|
* Fixes the description of `shouldThrowOnInsufficientBalanceOrAllowance` in docs (#127)
|
||||||
|
|
||||||
## v0.9.3 - _Aug 22, 2017_
|
## v0.9.3 - _August 22, 2017_
|
||||||
|
|
||||||
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
|
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
|
||||||
|
|
||||||
## v0.9.2 - _Aug 21, 2017_
|
## v0.9.2 - _August 21, 2017_
|
||||||
|
|
||||||
* *This version was unpublished because of a publishing issue.*
|
* *This version was unpublished because of a publishing issue.*
|
||||||
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
|
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
|
||||||
|
|
||||||
## v0.9.1 - _Aug. 16, 2017_
|
## v0.9.1 - _August 16, 2017_
|
||||||
|
|
||||||
* Fixed the bug causing `zeroEx.token.getBalanceAsync()` to fail if no addresses available (#120)
|
* Fixed the bug causing `zeroEx.token.getBalanceAsync()` to fail if no addresses available (#120)
|
||||||
|
|
||||||
## v0.9.0 - _Jul. 26, 2017_
|
## v0.9.0 - _July 26, 2017_
|
||||||
|
|
||||||
* Migrated to the new version of smart contracts (#101)
|
* Migrated to the new version of smart contracts (#101)
|
||||||
* Removed the ability to call methods on multiple authorized Exchange smart contracts (#106)
|
* Removed the ability to call methods on multiple authorized Exchange smart contracts (#106)
|
||||||
@@ -271,48 +285,48 @@
|
|||||||
* Updated to typescript v2.4 (#104)
|
* Updated to typescript v2.4 (#104)
|
||||||
* Fixed an issue with incorrect balance/allowance validation when ZRX is one of the tokens traded (#109)
|
* Fixed an issue with incorrect balance/allowance validation when ZRX is one of the tokens traded (#109)
|
||||||
|
|
||||||
## v0.8.0 - _Jul. 4, 2017_
|
## v0.8.0 - _July 4, 2017_
|
||||||
|
|
||||||
* Added the ability to call methods on different authorized versions of the Exchange smart contract (#82)
|
* Added the ability to call methods on different authorized versions of the Exchange smart contract (#82)
|
||||||
* Updated contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59)
|
* Updated contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59)
|
||||||
* Added `zeroEx.proxy.isAuthorizedAsync` and `zeroEx.proxy.getAuthorizedAddressesAsync` (#89)
|
* Added `zeroEx.proxy.isAuthorizedAsync` and `zeroEx.proxy.getAuthorizedAddressesAsync` (#89)
|
||||||
* Added `zeroEx.token.subscribeAsync` (#90)
|
* Added `zeroEx.token.subscribeAsync` (#90)
|
||||||
* Made contract invalidation functions private (#90)
|
* Made contract invalidation functions private (#90)
|
||||||
* `zeroEx.token.invalidateContractInstancesAsync`
|
* `zeroEx.token.invalidateContractInstancesAsync`
|
||||||
* `zeroEx.exchange.invalidateContractInstancesAsync`
|
* `zeroEx.exchange.invalidateContractInstancesAsync`
|
||||||
* `zeroEx.proxy.invalidateContractInstance`
|
* `zeroEx.proxy.invalidateContractInstance`
|
||||||
* `zeroEx.tokenRegistry.invalidateContractInstance`
|
* `zeroEx.tokenRegistry.invalidateContractInstance`
|
||||||
* Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance
|
* Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance
|
||||||
|
|
||||||
## v0.7.1 - _Jun. 26, 2017_
|
## v0.7.1 - _June 26, 2017_
|
||||||
|
|
||||||
* Added the ability to convert Ether to wrapped Ether tokens and back via `zeroEx.etherToken.depostAsync` and `zeroEx.etherToken.withdrawAsync` (#81)
|
* Added the ability to convert Ether to wrapped Ether tokens and back via `zeroEx.etherToken.depostAsync` and `zeroEx.etherToken.withdrawAsync` (#81)
|
||||||
|
|
||||||
## v0.7.0 - _Jun. 22, 2017_
|
## v0.7.0 - _June 22, 2017_
|
||||||
|
|
||||||
* Added Kovan smart contract artifacts (#78)
|
* Added Kovan smart contract artifacts (#78)
|
||||||
* Started returning fillAmount from `fillOrderAsync` and `fillUpToAsync` (#72)
|
* Started returning fillAmount from `fillOrderAsync` and `fillUpToAsync` (#72)
|
||||||
* Started returning cancelledAmount from `cancelOrderAsync` (#72)
|
* Started returning cancelledAmount from `cancelOrderAsync` (#72)
|
||||||
* Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`
|
* Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`
|
||||||
|
|
||||||
## v0.6.2 - _Jun. 21, 2017_
|
## v0.6.2 - _June 21, 2017_
|
||||||
|
|
||||||
* Reduced bundle size
|
* Reduced bundle size
|
||||||
* Improved documentation
|
* Improved documentation
|
||||||
|
|
||||||
## v0.6.1 - _Jun. 19, 2017_
|
## v0.6.1 - _June 19, 2017_
|
||||||
|
|
||||||
* Improved documentation
|
* Improved documentation
|
||||||
|
|
||||||
## v0.6.0 - _Jun. 19, 2017_
|
## v0.6.0 - _June 19, 2017_
|
||||||
|
|
||||||
* Made `ZeroEx` class accept `Web3Provider` instance instead of `Web3` instance
|
* Made `ZeroEx` class accept `Web3Provider` instance instead of `Web3` instance
|
||||||
* Added types for contract event arguments
|
* Added types for contract event arguments
|
||||||
|
|
||||||
## v0.5.2 - _Jun. 15, 2017_
|
## v0.5.2 - _June 15, 2017_
|
||||||
|
|
||||||
* 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
|
||||||
|
|
||||||
## v0.5.1 - _Jun. 15, 2017_
|
## v0.5.1 - _June 15, 2017_
|
||||||
|
|
||||||
* Added `postpublish` script to publish to Github Releases with assets.
|
* Added `postpublish` script to publish to Github Releases with assets.
|
||||||
|
@@ -20,11 +20,10 @@ import { ZeroEx } from '0x.js';
|
|||||||
|
|
||||||
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
||||||
|
|
||||||
```
|
```json
|
||||||
"include": [
|
"compilerOptions": {
|
||||||
"./node_modules/web3-typescript-typings/index.d.ts",
|
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
|
||||||
"./node_modules/ethers-typescript-typings/index.d.ts"
|
}
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### UMD:
|
#### UMD:
|
||||||
|
0
packages/0x.js/coverage/.gitkeep
Normal file
0
packages/0x.js/coverage/.gitkeep
Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "0x.js",
|
"name": "0x.js",
|
||||||
"version": "0.33.1",
|
"version": "0.34.0",
|
||||||
"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,23 +15,40 @@
|
|||||||
"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;",
|
||||||
"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",
|
|
||||||
"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/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 report_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",
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
"report_test_coverage": "nyc report --reporter=text-lcov | coveralls",
|
"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_contracts": "for i in ${npm_package_config_artifacts}; do copyfiles -u 4 ../contracts/build/contracts/$i.json ../0x.js/src/artifacts; done;",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp",
|
"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;",
|
"build:commonjs": "tsc && copyfiles -u 2 './src/artifacts/**/*.json' ./lib/src/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",
|
||||||
|
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
||||||
|
"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"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"artifacts": "TokenTransferProxy Exchange TokenRegistry Token EtherToken"
|
"artifacts": "TokenTransferProxy Exchange TokenRegistry Token EtherToken",
|
||||||
|
"postpublish": {
|
||||||
|
"assets": [
|
||||||
|
"packages/0x.js/_bundles/index.js",
|
||||||
|
"packages/0x.js/_bundles/index.min.js"
|
||||||
|
],
|
||||||
|
"docPublishConfigs": {
|
||||||
|
"extraFileIncludes": [
|
||||||
|
"../types/src/index.ts",
|
||||||
|
"./src/contract_wrappers/generated/ether_token.ts",
|
||||||
|
"./src/contract_wrappers/generated/token.ts",
|
||||||
|
"./src/contract_wrappers/generated/exchange.ts"
|
||||||
|
],
|
||||||
|
"s3BucketPath": "s3://doc-jsons/0x.js/",
|
||||||
|
"s3StagingBucketPath": "s3://staging-doc-jsons/0x.js/"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -42,12 +59,13 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/abi-gen": "^0.2.5",
|
"@0xproject/abi-gen": "^0.2.8",
|
||||||
"@0xproject/dev-utils": "^0.2.1",
|
"@0xproject/dev-utils": "^0.3.3",
|
||||||
"@0xproject/tslint-config": "^0.4.10",
|
"@0xproject/monorepo-scripts": "^0.1.15",
|
||||||
|
"@0xproject/tslint-config": "^0.4.13",
|
||||||
"@types/bintrees": "^1.0.2",
|
"@types/bintrees": "^1.0.2",
|
||||||
"@types/jsonschema": "^1.1.1",
|
"@types/jsonschema": "^1.1.1",
|
||||||
"@types/lodash": "^4.14.86",
|
"@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/sinon": "^2.2.2",
|
"@types/sinon": "^2.2.2",
|
||||||
@@ -55,17 +73,15 @@
|
|||||||
"awesome-typescript-loader": "^3.1.3",
|
"awesome-typescript-loader": "^3.1.3",
|
||||||
"chai": "^4.0.1",
|
"chai": "^4.0.1",
|
||||||
"chai-as-promised": "^7.1.0",
|
"chai-as-promised": "^7.1.0",
|
||||||
"chai-as-promised-typescript-typings": "^0.0.10",
|
|
||||||
"chai-bignumber": "^2.0.1",
|
"chai-bignumber": "^2.0.1",
|
||||||
"chai-typescript-typings": "^0.0.4",
|
|
||||||
"copyfiles": "^1.2.0",
|
"copyfiles": "^1.2.0",
|
||||||
"coveralls": "^3.0.0",
|
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
"json-loader": "^0.5.4",
|
"json-loader": "^0.5.4",
|
||||||
"mocha": "^4.0.1",
|
"mocha": "^4.0.1",
|
||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
"nyc": "^11.0.1",
|
"nyc": "^11.0.1",
|
||||||
"opn-cli": "^3.1.0",
|
"opn-cli": "^3.1.0",
|
||||||
|
"prettier": "^1.11.1",
|
||||||
"request": "^2.81.0",
|
"request": "^2.81.0",
|
||||||
"request-promise-native": "^1.0.5",
|
"request-promise-native": "^1.0.5",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
@@ -80,23 +96,25 @@
|
|||||||
"webpack": "^3.1.0"
|
"webpack": "^3.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.2.0",
|
"@0xproject/assert": "^0.2.4",
|
||||||
"@0xproject/base-contract": "^0.0.3",
|
"@0xproject/base-contract": "^0.0.6",
|
||||||
"@0xproject/json-schemas": "^0.7.14",
|
"@0xproject/json-schemas": "^0.7.18",
|
||||||
"@0xproject/types": "^0.3.1",
|
"@0xproject/types": "^0.4.2",
|
||||||
"@0xproject/utils": "^0.4.1",
|
"@0xproject/typescript-typings": "^0.0.2",
|
||||||
"@0xproject/web3-wrapper": "^0.2.1",
|
"@0xproject/utils": "^0.4.4",
|
||||||
|
"@0xproject/web3-wrapper": "^0.4.0",
|
||||||
"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",
|
||||||
"ethereumjs-blockstream": "^2.0.6",
|
"ethereumjs-blockstream": "^2.0.6",
|
||||||
"ethereumjs-util": "^5.1.1",
|
"ethereumjs-util": "^5.1.1",
|
||||||
"ethers-contracts": "^2.2.1",
|
"ethers-contracts": "^2.2.1",
|
||||||
"ethers-typescript-typings": "^0.0.2",
|
|
||||||
"js-sha3": "^0.7.0",
|
"js-sha3": "^0.7.0",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"uuid": "^3.1.0",
|
"uuid": "^3.1.0",
|
||||||
"web3": "^0.20.0",
|
"web3": "^0.20.0"
|
||||||
"web3-typescript-typings": "^0.10.0"
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,47 +0,0 @@
|
|||||||
const execAsync = require('async-child-process').execAsync;
|
|
||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
const tsConfig = require('../tsconfig.json');
|
|
||||||
|
|
||||||
const cwd = __dirname + '/..';
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
// Include any external packages that are part of the 0x.js public interface
|
|
||||||
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
|
|
||||||
// So far, we only have @0xproject/types as part of 0x.js's public interface.
|
|
||||||
const fileIncludes = [...tsConfig.include, '../types/src/index.ts'];
|
|
||||||
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
|
|
||||||
const projectFiles = fileIncludesAdjusted.join(' ');
|
|
||||||
const S3BucketPath = 's3://0xjs-docs-jsons/';
|
|
||||||
|
|
||||||
let tag;
|
|
||||||
let version;
|
|
||||||
postpublish_utils
|
|
||||||
.getLatestTagAndVersionAsync(subPackageName)
|
|
||||||
.then(function(result) {
|
|
||||||
tag = result.tag;
|
|
||||||
version = result.version;
|
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
|
||||||
const assets = [__dirname + '/../_bundles/index.js', __dirname + '/../_bundles/index.min.js'];
|
|
||||||
return postpublish_utils.publishReleaseNotesAsync(tag, releaseName, assets);
|
|
||||||
})
|
|
||||||
.then(function(release) {
|
|
||||||
console.log('POSTPUBLISH: Release successful, generating docs...');
|
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
|
||||||
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.then(function(result) {
|
|
||||||
if (result.stderr !== '') {
|
|
||||||
throw new Error(result.stderr);
|
|
||||||
}
|
|
||||||
const fileName = 'v' + version + '.json';
|
|
||||||
console.log('POSTPUBLISH: Doc generation successful, uploading docs... as ', fileName);
|
|
||||||
const s3Url = S3BucketPath + fileName;
|
|
||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
throw err;
|
|
||||||
});
|
|
@@ -1,31 +0,0 @@
|
|||||||
const execAsync = require('async-child-process').execAsync;
|
|
||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const tsConfig = require('../tsconfig.json');
|
|
||||||
|
|
||||||
const cwd = __dirname + '/..';
|
|
||||||
const S3BucketPath = 's3://staging-0xjs-docs-jsons/';
|
|
||||||
// Include any external packages that are part of the 0x.js public interface
|
|
||||||
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
|
|
||||||
// So far, we only have @0xproject/types as part of 0x.js's public interface.
|
|
||||||
const fileIncludes = [...tsConfig.include, '../types/src/index.ts'];
|
|
||||||
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
|
|
||||||
const projectFiles = fileIncludesAdjusted.join(' ');
|
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
|
||||||
const version = process.env.DOCS_VERSION;
|
|
||||||
|
|
||||||
execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
|
|
||||||
cwd,
|
|
||||||
})
|
|
||||||
.then(function(result) {
|
|
||||||
if (result.stderr !== '') {
|
|
||||||
throw new Error(result.stderr);
|
|
||||||
}
|
|
||||||
const fileName = 'v' + version + '.json';
|
|
||||||
const s3Url = S3BucketPath + fileName;
|
|
||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
@@ -1,5 +1,5 @@
|
|||||||
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
||||||
import { TransactionReceiptWithDecodedLogs } from '@0xproject/types';
|
import { ECSignature, Order, 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 { ECSignature, Order, SignedOrder, Web3Provider, ZeroExConfig, ZeroExError } from './types';
|
import { OrderStateWatcherConfig, Web3Provider, 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';
|
||||||
@@ -57,11 +57,6 @@ export class ZeroEx {
|
|||||||
* tokenTransferProxy smart contract.
|
* tokenTransferProxy smart contract.
|
||||||
*/
|
*/
|
||||||
public proxy: TokenTransferProxyWrapper;
|
public proxy: TokenTransferProxyWrapper;
|
||||||
/**
|
|
||||||
* An instance of the OrderStateWatcher class containing methods for watching a set of orders for relevant
|
|
||||||
* blockchain state changes.
|
|
||||||
*/
|
|
||||||
public orderStateWatcher: OrderStateWatcher;
|
|
||||||
private _web3Wrapper: Web3Wrapper;
|
private _web3Wrapper: Web3Wrapper;
|
||||||
private _abiDecoder: AbiDecoder;
|
private _abiDecoder: AbiDecoder;
|
||||||
/**
|
/**
|
||||||
@@ -83,7 +78,7 @@ export class ZeroEx {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Generates a pseudo-random 256-bit salt.
|
* Generates a pseudo-random 256-bit salt.
|
||||||
* The salt can be included in an 0x order, ensuring that the order generates a unique orderHash
|
* The salt can be included in a 0x order, ensuring that the order generates a unique orderHash
|
||||||
* and will not collide with other outstanding orders that are identical in all other parameters.
|
* and will not collide with other outstanding orders that are identical in all other parameters.
|
||||||
* @return A pseudo-random 256-bit number that can be used as a salt.
|
* @return A pseudo-random 256-bit number that can be used as a salt.
|
||||||
*/
|
*/
|
||||||
@@ -197,13 +192,6 @@ export class ZeroEx {
|
|||||||
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._abiDecoder, this.token);
|
||||||
this.orderStateWatcher = new OrderStateWatcher(
|
|
||||||
this._web3Wrapper,
|
|
||||||
this._abiDecoder,
|
|
||||||
this.token,
|
|
||||||
this.exchange,
|
|
||||||
config.orderWatcherConfig,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* 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
|
||||||
@@ -260,7 +248,7 @@ export class ZeroEx {
|
|||||||
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
|
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
|
||||||
}
|
}
|
||||||
|
|
||||||
const signature = await this._web3Wrapper.signTransactionAsync(normalizedSignerAddress, msgHashHex);
|
const signature = await this._web3Wrapper.signMessageAsync(normalizedSignerAddress, msgHashHex);
|
||||||
|
|
||||||
// HACK: There is no consensus on whether the signatureHex string should be formatted as
|
// HACK: There is no consensus on whether the signatureHex string should be formatted as
|
||||||
// v + r + s OR r + s + v, and different clients (even different versions of the same client)
|
// v + r + s OR r + s + v, and different clients (even different versions of the same client)
|
||||||
@@ -336,6 +324,15 @@ export class ZeroEx {
|
|||||||
const txReceipt = await txReceiptPromise;
|
const txReceipt = await txReceiptPromise;
|
||||||
return txReceipt;
|
return txReceipt;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* Instantiates and returns a new OrderStateWatcher instance.
|
||||||
|
* Defaults to watching the pending state.
|
||||||
|
* @param config The configuration object. Look up the type for the description.
|
||||||
|
* @return An instance of the 0x.js OrderStateWatcher class.
|
||||||
|
*/
|
||||||
|
public createOrderStateWatcher(config?: OrderStateWatcherConfig) {
|
||||||
|
return new OrderStateWatcher(this._web3Wrapper, this._abiDecoder, 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
|
||||||
* an `ExchangeWrapper`. `ExchangeWrapper` needs `TokenWrapper` to validate orders, creating a dependency cycle.
|
* an `ExchangeWrapper`. `ExchangeWrapper` needs `TokenWrapper` to validate orders, creating a dependency cycle.
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockParamLiteral, LogWithDecodedArgs, RawLog } from '@0xproject/types';
|
import { BlockParamLiteral, ContractAbi, FilterObject, LogEntry, LogWithDecodedArgs, RawLog } from '@0xproject/types';
|
||||||
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
|
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import { Block, BlockAndLogStreamer } from 'ethereumjs-blockstream';
|
import { Block, BlockAndLogStreamer } from 'ethereumjs-blockstream';
|
||||||
@@ -35,7 +35,7 @@ export class ContractWrapper {
|
|||||||
private _abiDecoder?: AbiDecoder;
|
private _abiDecoder?: AbiDecoder;
|
||||||
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
|
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
|
||||||
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
|
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
|
||||||
private _filters: { [filterToken: string]: Web3.FilterObject };
|
private _filters: { [filterToken: string]: FilterObject };
|
||||||
private _filterCallbacks: {
|
private _filterCallbacks: {
|
||||||
[filterToken: string]: EventCallback<ContractEventArgs>;
|
[filterToken: string]: EventCallback<ContractEventArgs>;
|
||||||
};
|
};
|
||||||
@@ -75,7 +75,7 @@ export class ContractWrapper {
|
|||||||
address: string,
|
address: string,
|
||||||
eventName: ContractEvents,
|
eventName: ContractEvents,
|
||||||
indexFilterValues: IndexedFilterValues,
|
indexFilterValues: IndexedFilterValues,
|
||||||
abi: Web3.ContractAbi,
|
abi: ContractAbi,
|
||||||
callback: EventCallback<ArgsType>,
|
callback: EventCallback<ArgsType>,
|
||||||
): string {
|
): string {
|
||||||
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi);
|
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi);
|
||||||
@@ -92,7 +92,7 @@ export class ContractWrapper {
|
|||||||
eventName: ContractEvents,
|
eventName: ContractEvents,
|
||||||
blockRange: BlockRange,
|
blockRange: BlockRange,
|
||||||
indexFilterValues: IndexedFilterValues,
|
indexFilterValues: IndexedFilterValues,
|
||||||
abi: Web3.ContractAbi,
|
abi: ContractAbi,
|
||||||
): Promise<Array<LogWithDecodedArgs<ArgsType>>> {
|
): Promise<Array<LogWithDecodedArgs<ArgsType>>> {
|
||||||
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi, blockRange);
|
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi, blockRange);
|
||||||
const logs = await this._web3Wrapper.getLogsAsync(filter);
|
const logs = await this._web3Wrapper.getLogsAsync(filter);
|
||||||
@@ -100,7 +100,7 @@ export class ContractWrapper {
|
|||||||
return logsWithDecodedArguments;
|
return logsWithDecodedArguments;
|
||||||
}
|
}
|
||||||
protected _tryToDecodeLogOrNoop<ArgsType extends ContractEventArgs>(
|
protected _tryToDecodeLogOrNoop<ArgsType extends ContractEventArgs>(
|
||||||
log: Web3.LogEntry,
|
log: LogEntry,
|
||||||
): LogWithDecodedArgs<ArgsType> | RawLog {
|
): LogWithDecodedArgs<ArgsType> | RawLog {
|
||||||
if (_.isUndefined(this._abiDecoder)) {
|
if (_.isUndefined(this._abiDecoder)) {
|
||||||
throw new Error(InternalZeroExError.NoAbiDecoder);
|
throw new Error(InternalZeroExError.NoAbiDecoder);
|
||||||
@@ -111,7 +111,7 @@ export class ContractWrapper {
|
|||||||
protected async _getContractAbiAndAddressFromArtifactsAsync(
|
protected async _getContractAbiAndAddressFromArtifactsAsync(
|
||||||
artifact: Artifact,
|
artifact: Artifact,
|
||||||
addressIfExists?: string,
|
addressIfExists?: string,
|
||||||
): Promise<[Web3.ContractAbi, string]> {
|
): Promise<[ContractAbi, string]> {
|
||||||
let contractAddress: string;
|
let contractAddress: string;
|
||||||
if (_.isUndefined(addressIfExists)) {
|
if (_.isUndefined(addressIfExists)) {
|
||||||
if (_.isUndefined(artifact.networks[this._networkId])) {
|
if (_.isUndefined(artifact.networks[this._networkId])) {
|
||||||
@@ -125,7 +125,7 @@ export class ContractWrapper {
|
|||||||
if (!doesContractExist) {
|
if (!doesContractExist) {
|
||||||
throw new Error(CONTRACT_NAME_TO_NOT_FOUND_ERROR[artifact.contract_name]);
|
throw new Error(CONTRACT_NAME_TO_NOT_FOUND_ERROR[artifact.contract_name]);
|
||||||
}
|
}
|
||||||
const abiAndAddress: [Web3.ContractAbi, string] = [artifact.abi, contractAddress];
|
const abiAndAddress: [ContractAbi, string] = [artifact.abi, contractAddress];
|
||||||
return abiAndAddress;
|
return abiAndAddress;
|
||||||
}
|
}
|
||||||
protected _getContractAddress(artifact: Artifact, addressIfExists?: string): string {
|
protected _getContractAddress(artifact: Artifact, addressIfExists?: string): string {
|
||||||
@@ -139,8 +139,8 @@ export class ContractWrapper {
|
|||||||
return addressIfExists;
|
return addressIfExists;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private _onLogStateChanged<ArgsType extends ContractEventArgs>(isRemoved: boolean, log: Web3.LogEntry): void {
|
private _onLogStateChanged<ArgsType extends ContractEventArgs>(isRemoved: boolean, log: LogEntry): void {
|
||||||
_.forEach(this._filters, (filter: Web3.FilterObject, filterToken: string) => {
|
_.forEach(this._filters, (filter: FilterObject, filterToken: string) => {
|
||||||
if (filterUtils.matchesFilter(log, filter)) {
|
if (filterUtils.matchesFilter(log, filter)) {
|
||||||
const decodedLog = this._tryToDecodeLogOrNoop(log) as LogWithDecodedArgs<ArgsType>;
|
const decodedLog = this._tryToDecodeLogOrNoop(log) as LogWithDecodedArgs<ArgsType>;
|
||||||
const logEvent = {
|
const logEvent = {
|
||||||
|
@@ -64,7 +64,7 @@ export class EtherTokenWrapper extends ContractWrapper {
|
|||||||
* equivalent number of wrapped ETH tokens.
|
* equivalent number of wrapped ETH tokens.
|
||||||
* @param etherTokenAddress EtherToken address you wish to withdraw from.
|
* @param etherTokenAddress EtherToken address you wish to withdraw from.
|
||||||
* @param amountInWei Amount of ETH in Wei the caller wishes to withdraw.
|
* @param amountInWei Amount of ETH in Wei the caller wishes to withdraw.
|
||||||
* @param withdrawer The hex encoded user Ethereum address that would like to make the withdrawl.
|
* @param withdrawer The hex encoded user Ethereum address that would like to make the withdrawal.
|
||||||
* @param txOpts Transaction parameters.
|
* @param txOpts Transaction parameters.
|
||||||
* @return Transaction hash.
|
* @return Transaction hash.
|
||||||
*/
|
*/
|
||||||
@@ -96,7 +96,7 @@ export class EtherTokenWrapper extends ContractWrapper {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Gets historical logs without creating a subscription
|
* Gets historical logs without creating a subscription
|
||||||
* @param etherTokenAddress An address of the ether token that emmited the logs.
|
* @param etherTokenAddress An address of the ether token that emitted the logs.
|
||||||
* @param eventName The ether token contract event you would like to subscribe to.
|
* @param eventName The ether token contract event you would like to subscribe to.
|
||||||
* @param blockRange Block range to get logs from.
|
* @param blockRange Block range to get logs from.
|
||||||
* @param indexFilterValues An object where the keys are indexed args returned by the event and
|
* @param indexFilterValues An object where the keys are indexed args returned by the event and
|
||||||
|
@@ -1,26 +1,30 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { BlockParamLiteral, DecodedLogArgs, LogWithDecodedArgs } from '@0xproject/types';
|
import {
|
||||||
|
BlockParamLiteral,
|
||||||
|
DecodedLogArgs,
|
||||||
|
ECSignature,
|
||||||
|
LogEntry,
|
||||||
|
LogWithDecodedArgs,
|
||||||
|
Order,
|
||||||
|
SignedOrder,
|
||||||
|
} from '@0xproject/types';
|
||||||
import { AbiDecoder, BigNumber } from '@0xproject/utils';
|
import { AbiDecoder, BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
import {
|
import {
|
||||||
BlockRange,
|
BlockRange,
|
||||||
ECSignature,
|
|
||||||
EventCallback,
|
EventCallback,
|
||||||
ExchangeContractErrCodes,
|
ExchangeContractErrCodes,
|
||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
IndexedFilterValues,
|
IndexedFilterValues,
|
||||||
MethodOpts,
|
MethodOpts,
|
||||||
Order,
|
|
||||||
OrderAddresses,
|
OrderAddresses,
|
||||||
OrderCancellationRequest,
|
OrderCancellationRequest,
|
||||||
OrderFillRequest,
|
OrderFillRequest,
|
||||||
OrderTransactionOpts,
|
OrderTransactionOpts,
|
||||||
OrderValues,
|
OrderValues,
|
||||||
SignedOrder,
|
|
||||||
ValidateOrderFillableOpts,
|
ValidateOrderFillableOpts,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
@@ -277,6 +281,9 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
zrxTokenAddress,
|
zrxTokenAddress,
|
||||||
);
|
);
|
||||||
filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
|
filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
|
||||||
|
if (filledTakerTokenAmount.eq(fillTakerTokenAmount)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -853,10 +860,10 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
return isRoundingError;
|
return isRoundingError;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Checks if logs contain LogError, which is emmited by Exchange contract on transaction failure.
|
* Checks if logs contain LogError, which is emitted by Exchange contract on transaction failure.
|
||||||
* @param logs Transaction logs as returned by `zeroEx.awaitTransactionMinedAsync`
|
* @param logs Transaction logs as returned by `zeroEx.awaitTransactionMinedAsync`
|
||||||
*/
|
*/
|
||||||
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | Web3.LogEntry>): void {
|
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | LogEntry>): void {
|
||||||
const errLog = _.find(logs, {
|
const errLog = _.find(logs, {
|
||||||
event: ExchangeEvents.LogError,
|
event: ExchangeEvents.LogError,
|
||||||
});
|
});
|
||||||
|
@@ -1 +0,0 @@
|
|||||||
*
|
|
@@ -385,7 +385,7 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Gets historical logs without creating a subscription
|
* Gets historical logs without creating a subscription
|
||||||
* @param tokenAddress An address of the token that emmited the logs.
|
* @param tokenAddress An address of the token that emitted the logs.
|
||||||
* @param eventName The token contract event you would like to subscribe to.
|
* @param eventName The token contract event you would like to subscribe to.
|
||||||
* @param blockRange Block range to get logs from.
|
* @param blockRange Block range to get logs from.
|
||||||
* @param indexFilterValues An object where the keys are indexed args returned by the event and
|
* @param indexFilterValues An object where the keys are indexed args returned by the event and
|
||||||
|
11
packages/0x.js/src/globals.d.ts
vendored
11
packages/0x.js/src/globals.d.ts
vendored
@@ -4,6 +4,12 @@ declare module 'dirty-chai';
|
|||||||
declare module 'request-promise-native';
|
declare module 'request-promise-native';
|
||||||
declare module 'web3-provider-engine';
|
declare module 'web3-provider-engine';
|
||||||
declare module 'web3-provider-engine/subproviders/rpc';
|
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
|
// 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
|
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
|
||||||
@@ -31,12 +37,13 @@ declare module 'ethereumjs-abi' {
|
|||||||
|
|
||||||
// truffle-hdwallet-provider declarations
|
// truffle-hdwallet-provider declarations
|
||||||
declare module 'truffle-hdwallet-provider' {
|
declare module 'truffle-hdwallet-provider' {
|
||||||
|
import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types';
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
class HDWalletProvider implements Web3.Provider {
|
class HDWalletProvider implements Web3.Provider {
|
||||||
constructor(mnemonic: string, rpcUrl: string);
|
constructor(mnemonic: string, rpcUrl: string);
|
||||||
public sendAsync(
|
public sendAsync(
|
||||||
payload: Web3.JSONRPCRequestPayload,
|
payload: JSONRPCRequestPayload,
|
||||||
callback: (err: Error, result: Web3.JSONRPCResponsePayload) => void,
|
callback: (err: Error, result: JSONRPCResponsePayload) => void,
|
||||||
): void;
|
): void;
|
||||||
}
|
}
|
||||||
export = HDWalletProvider;
|
export = HDWalletProvider;
|
||||||
|
@@ -1,9 +1,6 @@
|
|||||||
export { ZeroEx } from './0x';
|
export { ZeroEx } from './0x';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Order,
|
|
||||||
SignedOrder,
|
|
||||||
ECSignature,
|
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
EventCallback,
|
EventCallback,
|
||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
@@ -19,7 +16,6 @@ export {
|
|||||||
MethodOpts,
|
MethodOpts,
|
||||||
OrderTransactionOpts,
|
OrderTransactionOpts,
|
||||||
TransactionOpts,
|
TransactionOpts,
|
||||||
FilterObject,
|
|
||||||
LogEvent,
|
LogEvent,
|
||||||
DecodedLogEvent,
|
DecodedLogEvent,
|
||||||
EventWatcherCallback,
|
EventWatcherCallback,
|
||||||
@@ -31,9 +27,13 @@ export {
|
|||||||
|
|
||||||
export {
|
export {
|
||||||
BlockParamLiteral,
|
BlockParamLiteral,
|
||||||
|
FilterObject,
|
||||||
BlockParam,
|
BlockParam,
|
||||||
ContractEventArg,
|
ContractEventArg,
|
||||||
LogWithDecodedArgs,
|
LogWithDecodedArgs,
|
||||||
|
Order,
|
||||||
|
SignedOrder,
|
||||||
|
ECSignature,
|
||||||
TransactionReceipt,
|
TransactionReceipt,
|
||||||
TransactionReceiptWithDecodedLogs,
|
TransactionReceiptWithDecodedLogs,
|
||||||
} from '@0xproject/types';
|
} from '@0xproject/types';
|
||||||
|
8
packages/0x.js/src/monorepo_scripts/postpublish.ts
Normal file
8
packages/0x.js/src/monorepo_scripts/postpublish.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);
|
8
packages/0x.js/src/monorepo_scripts/stage_docs.ts
Normal file
8
packages/0x.js/src/monorepo_scripts/stage_docs.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.publishDocsToStagingAsync(packageJSON, tsConfigJSON, cwd);
|
@@ -1,9 +1,7 @@
|
|||||||
|
import { BlockParamLiteral, LogEntry } from '@0xproject/types';
|
||||||
import { intervalUtils } from '@0xproject/utils';
|
import { intervalUtils } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { BlockParamLiteral } from '@0xproject/types';
|
|
||||||
|
|
||||||
import { EventWatcherCallback, ZeroExError } from '../types';
|
import { EventWatcherCallback, ZeroExError } from '../types';
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
@@ -23,9 +21,15 @@ export class EventWatcher {
|
|||||||
private _web3Wrapper: Web3Wrapper;
|
private _web3Wrapper: Web3Wrapper;
|
||||||
private _pollingIntervalMs: number;
|
private _pollingIntervalMs: number;
|
||||||
private _intervalIdIfExists?: NodeJS.Timer;
|
private _intervalIdIfExists?: NodeJS.Timer;
|
||||||
private _lastEvents: Web3.LogEntry[] = [];
|
private _lastEvents: LogEntry[] = [];
|
||||||
constructor(web3Wrapper: Web3Wrapper, pollingIntervalIfExistsMs: undefined | number) {
|
private _stateLayer: BlockParamLiteral;
|
||||||
|
constructor(
|
||||||
|
web3Wrapper: Web3Wrapper,
|
||||||
|
pollingIntervalIfExistsMs: undefined | number,
|
||||||
|
stateLayer: BlockParamLiteral = BlockParamLiteral.Latest,
|
||||||
|
) {
|
||||||
this._web3Wrapper = web3Wrapper;
|
this._web3Wrapper = web3Wrapper;
|
||||||
|
this._stateLayer = stateLayer;
|
||||||
this._pollingIntervalMs = _.isUndefined(pollingIntervalIfExistsMs)
|
this._pollingIntervalMs = _.isUndefined(pollingIntervalIfExistsMs)
|
||||||
? DEFAULT_EVENT_POLLING_INTERVAL_MS
|
? DEFAULT_EVENT_POLLING_INTERVAL_MS
|
||||||
: pollingIntervalIfExistsMs;
|
: pollingIntervalIfExistsMs;
|
||||||
@@ -69,16 +73,16 @@ export class EventWatcher {
|
|||||||
await this._emitDifferencesAsync(newEvents, LogEventState.Added, callback);
|
await this._emitDifferencesAsync(newEvents, LogEventState.Added, callback);
|
||||||
this._lastEvents = pendingEvents;
|
this._lastEvents = pendingEvents;
|
||||||
}
|
}
|
||||||
private async _getEventsAsync(): Promise<Web3.LogEntry[]> {
|
private async _getEventsAsync(): Promise<LogEntry[]> {
|
||||||
const eventFilter = {
|
const eventFilter = {
|
||||||
fromBlock: BlockParamLiteral.Pending,
|
fromBlock: this._stateLayer,
|
||||||
toBlock: BlockParamLiteral.Pending,
|
toBlock: this._stateLayer,
|
||||||
};
|
};
|
||||||
const events = await this._web3Wrapper.getLogsAsync(eventFilter);
|
const events = await this._web3Wrapper.getLogsAsync(eventFilter);
|
||||||
return events;
|
return events;
|
||||||
}
|
}
|
||||||
private async _emitDifferencesAsync(
|
private async _emitDifferencesAsync(
|
||||||
logs: Web3.LogEntry[],
|
logs: LogEntry[],
|
||||||
logEventState: LogEventState,
|
logEventState: LogEventState,
|
||||||
callback: EventWatcherCallback,
|
callback: EventWatcherCallback,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { BlockParamLiteral, LogWithDecodedArgs } from '@0xproject/types';
|
import { BlockParamLiteral, LogWithDecodedArgs, SignedOrder } from '@0xproject/types';
|
||||||
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
|
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -31,7 +31,6 @@ import {
|
|||||||
OnOrderStateChangeCallback,
|
OnOrderStateChangeCallback,
|
||||||
OrderState,
|
OrderState,
|
||||||
OrderStateWatcherConfig,
|
OrderStateWatcherConfig,
|
||||||
SignedOrder,
|
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
@@ -60,7 +59,7 @@ const DEFAULT_CLEANUP_JOB_INTERVAL_MS = 1000 * 60 * 60; // 1h
|
|||||||
/**
|
/**
|
||||||
* This class includes all the functionality related to watching a set of orders
|
* This class includes all the functionality related to watching a set of orders
|
||||||
* for potential changes in order validity/fillability. The orderWatcher notifies
|
* for potential changes in order validity/fillability. The orderWatcher notifies
|
||||||
* the subscriber of these changes so that a final decison can be made on whether
|
* the subscriber of these changes so that a final decision can be made on whether
|
||||||
* the order should be deemed invalid.
|
* the order should be deemed invalid.
|
||||||
*/
|
*/
|
||||||
export class OrderStateWatcher {
|
export class OrderStateWatcher {
|
||||||
@@ -87,11 +86,10 @@ export class OrderStateWatcher {
|
|||||||
this._abiDecoder = abiDecoder;
|
this._abiDecoder = abiDecoder;
|
||||||
this._web3Wrapper = web3Wrapper;
|
this._web3Wrapper = web3Wrapper;
|
||||||
const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
|
const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
|
||||||
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs);
|
const stateLayer =
|
||||||
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
|
_.isUndefined(config) || _.isUndefined(config.stateLayer) ? BlockParamLiteral.Latest : config.stateLayer;
|
||||||
token,
|
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs, stateLayer);
|
||||||
BlockParamLiteral.Pending,
|
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(token, stateLayer);
|
||||||
);
|
|
||||||
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange);
|
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange);
|
||||||
this._orderStateUtils = new OrderStateUtils(
|
this._orderStateUtils = new OrderStateUtils(
|
||||||
this._balanceAndProxyAllowanceLazyStore,
|
this._balanceAndProxyAllowanceLazyStore,
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
|
import { SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
import { SignedOrder } from '../types';
|
|
||||||
|
|
||||||
export class RemainingFillableCalculator {
|
export class RemainingFillableCalculator {
|
||||||
private _signedOrder: SignedOrder;
|
private _signedOrder: SignedOrder;
|
||||||
private _isMakerTokenZRX: boolean;
|
private _isMakerTokenZRX: boolean;
|
||||||
|
@@ -1,6 +1,16 @@
|
|||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
import { BlockParam, BlockParamLiteral, ContractEventArg, LogWithDecodedArgs } from '@0xproject/types';
|
import {
|
||||||
|
BlockParam,
|
||||||
|
BlockParamLiteral,
|
||||||
|
ContractAbi,
|
||||||
|
ContractEventArg,
|
||||||
|
FilterObject,
|
||||||
|
LogEntryEvent,
|
||||||
|
LogWithDecodedArgs,
|
||||||
|
Order,
|
||||||
|
SignedOrder,
|
||||||
|
} from '@0xproject/types';
|
||||||
|
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
@@ -37,20 +47,11 @@ export enum InternalZeroExError {
|
|||||||
WethNotInTokenRegistry = 'WETH_NOT_IN_TOKEN_REGISTRY',
|
WethNotInTokenRegistry = 'WETH_NOT_IN_TOKEN_REGISTRY',
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Elliptic Curve signature
|
|
||||||
*/
|
|
||||||
export interface ECSignature {
|
|
||||||
v: number;
|
|
||||||
r: string;
|
|
||||||
s: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type OrderAddresses = [string, string, string, string, string];
|
export type OrderAddresses = [string, string, string, string, string];
|
||||||
|
|
||||||
export type OrderValues = [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];
|
export type OrderValues = [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];
|
||||||
|
|
||||||
export type LogEvent = Web3.LogEntryEvent;
|
export type LogEvent = LogEntryEvent;
|
||||||
export interface DecodedLogEvent<ArgsType> {
|
export interface DecodedLogEvent<ArgsType> {
|
||||||
isRemoved: boolean;
|
isRemoved: boolean;
|
||||||
log: LogWithDecodedArgs<ArgsType>;
|
log: LogWithDecodedArgs<ArgsType>;
|
||||||
@@ -107,25 +108,6 @@ export interface ContractEvent {
|
|||||||
|
|
||||||
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
|
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
|
||||||
|
|
||||||
export interface Order {
|
|
||||||
maker: string;
|
|
||||||
taker: string;
|
|
||||||
makerFee: BigNumber;
|
|
||||||
takerFee: BigNumber;
|
|
||||||
makerTokenAmount: BigNumber;
|
|
||||||
takerTokenAmount: BigNumber;
|
|
||||||
makerTokenAddress: string;
|
|
||||||
takerTokenAddress: string;
|
|
||||||
salt: BigNumber;
|
|
||||||
exchangeContractAddress: string;
|
|
||||||
feeRecipient: string;
|
|
||||||
expirationUnixTimestampSec: BigNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface SignedOrder extends Order {
|
|
||||||
ecSignature: ECSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
// [address, name, symbol, decimals, ipfsHash, swarmHash]
|
// [address, name, symbol, decimals, ipfsHash, swarmHash]
|
||||||
export type TokenMetadata = [string, string, string, number, string, string];
|
export type TokenMetadata = [string, string, string, number, string, string];
|
||||||
|
|
||||||
@@ -183,16 +165,18 @@ export type Web3Provider = Web3.Provider;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default: 50
|
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default: 50
|
||||||
* eventPollingIntervalMs: How often to poll the Ethereum node for new events. Defaults: 200
|
* 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. Defaults: 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. Defaults: 1h
|
||||||
|
* stateLayer: Optional blockchain state layer OrderWatcher will monitor for new events. Default: latest
|
||||||
*/
|
*/
|
||||||
export interface OrderStateWatcherConfig {
|
export interface OrderStateWatcherConfig {
|
||||||
orderExpirationCheckingIntervalMs?: number;
|
orderExpirationCheckingIntervalMs?: number;
|
||||||
eventPollingIntervalMs?: number;
|
eventPollingIntervalMs?: number;
|
||||||
expirationMarginMs?: number;
|
expirationMarginMs?: number;
|
||||||
cleanupJobIntervalMs?: number;
|
cleanupJobIntervalMs?: number;
|
||||||
|
stateLayer: BlockParamLiteral;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -218,7 +202,7 @@ export type ArtifactContractName = 'ZRX' | 'TokenTransferProxy' | 'TokenRegistry
|
|||||||
|
|
||||||
export interface Artifact {
|
export interface Artifact {
|
||||||
contract_name: ArtifactContractName;
|
contract_name: ArtifactContractName;
|
||||||
abi: Web3.ContractAbi;
|
abi: ContractAbi;
|
||||||
networks: {
|
networks: {
|
||||||
[networkId: number]: {
|
[networkId: number]: {
|
||||||
address: string;
|
address: string;
|
||||||
@@ -243,7 +227,7 @@ export interface ValidateOrderFillableOpts {
|
|||||||
* flag when running Parity).
|
* flag when running Parity).
|
||||||
*/
|
*/
|
||||||
export interface MethodOpts {
|
export interface MethodOpts {
|
||||||
defaultBlock?: Web3.BlockParam;
|
defaultBlock?: BlockParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -263,8 +247,6 @@ export interface OrderTransactionOpts extends TransactionOpts {
|
|||||||
shouldValidate?: boolean;
|
shouldValidate?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type FilterObject = Web3.FilterObject;
|
|
||||||
|
|
||||||
export enum TradeSide {
|
export enum TradeSide {
|
||||||
Maker = 'maker',
|
Maker = 'maker',
|
||||||
Taker = 'taker',
|
Taker = 'taker',
|
||||||
|
@@ -3,11 +3,11 @@ import { assert as sharedAssert } from '@0xproject/assert';
|
|||||||
// tslint:disable-next-line:no-unused-variable
|
// tslint:disable-next-line:no-unused-variable
|
||||||
import { Schema } from '@0xproject/json-schemas';
|
import { Schema } from '@0xproject/json-schemas';
|
||||||
// tslint:disable-next-line:no-unused-variable
|
// tslint:disable-next-line:no-unused-variable
|
||||||
|
import { ECSignature } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { ECSignature } from '../types';
|
|
||||||
import { signatureUtils } from '../utils/signature_utils';
|
import { signatureUtils } from '../utils/signature_utils';
|
||||||
|
|
||||||
export const assert = {
|
export const assert = {
|
||||||
|
@@ -1,8 +1,16 @@
|
|||||||
|
import {
|
||||||
|
ConstructorAbi,
|
||||||
|
ContractAbi,
|
||||||
|
EventAbi,
|
||||||
|
FallbackAbi,
|
||||||
|
FilterObject,
|
||||||
|
LogEntry,
|
||||||
|
MethodAbi,
|
||||||
|
} from '@0xproject/types';
|
||||||
import * as ethUtil from 'ethereumjs-util';
|
import * as ethUtil from 'ethereumjs-util';
|
||||||
import * as jsSHA3 from 'js-sha3';
|
import * as jsSHA3 from 'js-sha3';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as uuid from 'uuid/v4';
|
import * as uuid from 'uuid/v4';
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { BlockRange, ContractEvents, IndexedFilterValues } from '../types';
|
import { BlockRange, ContractEvents, IndexedFilterValues } from '../types';
|
||||||
|
|
||||||
@@ -16,15 +24,15 @@ export const filterUtils = {
|
|||||||
address: string,
|
address: string,
|
||||||
eventName: ContractEvents,
|
eventName: ContractEvents,
|
||||||
indexFilterValues: IndexedFilterValues,
|
indexFilterValues: IndexedFilterValues,
|
||||||
abi: Web3.ContractAbi,
|
abi: ContractAbi,
|
||||||
blockRange?: BlockRange,
|
blockRange?: BlockRange,
|
||||||
): Web3.FilterObject {
|
): FilterObject {
|
||||||
const eventAbi = _.find(abi, { name: eventName }) as Web3.EventAbi;
|
const eventAbi = _.find(abi, { name: eventName }) as EventAbi;
|
||||||
const eventSignature = filterUtils.getEventSignatureFromAbiByName(eventAbi, eventName);
|
const eventSignature = filterUtils.getEventSignatureFromAbiByName(eventAbi, eventName);
|
||||||
const topicForEventSignature = ethUtil.addHexPrefix(jsSHA3.keccak256(eventSignature));
|
const topicForEventSignature = ethUtil.addHexPrefix(jsSHA3.keccak256(eventSignature));
|
||||||
const topicsForIndexedArgs = filterUtils.getTopicsForIndexedArgs(eventAbi, indexFilterValues);
|
const topicsForIndexedArgs = filterUtils.getTopicsForIndexedArgs(eventAbi, indexFilterValues);
|
||||||
const topics = [topicForEventSignature, ...topicsForIndexedArgs];
|
const topics = [topicForEventSignature, ...topicsForIndexedArgs];
|
||||||
let filter: Web3.FilterObject = {
|
let filter: FilterObject = {
|
||||||
address,
|
address,
|
||||||
topics,
|
topics,
|
||||||
};
|
};
|
||||||
@@ -36,12 +44,12 @@ export const filterUtils = {
|
|||||||
}
|
}
|
||||||
return filter;
|
return filter;
|
||||||
},
|
},
|
||||||
getEventSignatureFromAbiByName(eventAbi: Web3.EventAbi, eventName: ContractEvents): string {
|
getEventSignatureFromAbiByName(eventAbi: EventAbi, eventName: ContractEvents): string {
|
||||||
const types = _.map(eventAbi.inputs, 'type');
|
const types = _.map(eventAbi.inputs, 'type');
|
||||||
const signature = `${eventAbi.name}(${types.join(',')})`;
|
const signature = `${eventAbi.name}(${types.join(',')})`;
|
||||||
return signature;
|
return signature;
|
||||||
},
|
},
|
||||||
getTopicsForIndexedArgs(abi: Web3.EventAbi, indexFilterValues: IndexedFilterValues): Array<string | null> {
|
getTopicsForIndexedArgs(abi: EventAbi, indexFilterValues: IndexedFilterValues): Array<string | null> {
|
||||||
const topics: Array<string | null> = [];
|
const topics: Array<string | null> = [];
|
||||||
for (const eventInput of abi.inputs) {
|
for (const eventInput of abi.inputs) {
|
||||||
if (!eventInput.indexed) {
|
if (!eventInput.indexed) {
|
||||||
@@ -60,7 +68,7 @@ export const filterUtils = {
|
|||||||
}
|
}
|
||||||
return topics;
|
return topics;
|
||||||
},
|
},
|
||||||
matchesFilter(log: Web3.LogEntry, filter: Web3.FilterObject): boolean {
|
matchesFilter(log: LogEntry, filter: FilterObject): boolean {
|
||||||
if (!_.isUndefined(filter.address) && log.address !== filter.address) {
|
if (!_.isUndefined(filter.address) && log.address !== filter.address) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import { SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
@@ -6,14 +7,7 @@ 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 { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
|
||||||
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
|
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
|
||||||
import {
|
import { ExchangeContractErrs, OrderRelevantState, OrderState, OrderStateInvalid, OrderStateValid } from '../types';
|
||||||
ExchangeContractErrs,
|
|
||||||
OrderRelevantState,
|
|
||||||
OrderState,
|
|
||||||
OrderStateInvalid,
|
|
||||||
OrderStateValid,
|
|
||||||
SignedOrder,
|
|
||||||
} from '../types';
|
|
||||||
|
|
||||||
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
|
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
|
||||||
|
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
|
import { Order, SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { ZeroEx } from '../0x';
|
import { ZeroEx } from '../0x';
|
||||||
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
import { ExchangeContractErrs, Order, SignedOrder, TradeSide, TransferType, ZeroExError } from '../types';
|
import { ExchangeContractErrs, TradeSide, TransferType, ZeroExError } from '../types';
|
||||||
import { constants } from '../utils/constants';
|
import { constants } from '../utils/constants';
|
||||||
import { utils } from '../utils/utils';
|
import { utils } from '../utils/utils';
|
||||||
|
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
|
import { ECSignature } from '@0xproject/types';
|
||||||
import * as ethUtil from 'ethereumjs-util';
|
import * as ethUtil from 'ethereumjs-util';
|
||||||
|
|
||||||
import { ECSignature } from '../types';
|
|
||||||
|
|
||||||
export const signatureUtils = {
|
export const signatureUtils = {
|
||||||
isValidSignature(data: string, signature: ECSignature, signerAddress: string): boolean {
|
isValidSignature(data: string, signature: ECSignature, signerAddress: string): boolean {
|
||||||
const dataBuff = ethUtil.toBuffer(data);
|
const dataBuff = ethUtil.toBuffer(data);
|
||||||
|
@@ -1,12 +1,10 @@
|
|||||||
import { SolidityTypes } from '@0xproject/types';
|
import { Order, SignedOrder, SolidityTypes } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import BN = require('bn.js');
|
import BN = require('bn.js');
|
||||||
import * as ethABI from 'ethereumjs-abi';
|
import * as ethABI from 'ethereumjs-abi';
|
||||||
import * as ethUtil from 'ethereumjs-util';
|
import * as ethUtil from 'ethereumjs-util';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { Order, SignedOrder } from '../types';
|
|
||||||
|
|
||||||
export const utils = {
|
export const utils = {
|
||||||
/**
|
/**
|
||||||
* Converts BigNumber instance to BN
|
* Converts BigNumber instance to BN
|
||||||
@@ -17,10 +15,6 @@ export const utils = {
|
|||||||
bigNumberToBN(value: BigNumber) {
|
bigNumberToBN(value: BigNumber) {
|
||||||
return new BN(value.toString(), 10);
|
return new BN(value.toString(), 10);
|
||||||
},
|
},
|
||||||
consoleLog(message: string): void {
|
|
||||||
// tslint:disable-next-line: no-console
|
|
||||||
console.log(message);
|
|
||||||
},
|
|
||||||
spawnSwitchErr(name: string, value: any): Error {
|
spawnSwitchErr(name: string, value: any): Error {
|
||||||
return new Error(`Unexpected switch value: ${value} encountered for ${name}`);
|
return new Error(`Unexpected switch value: ${value} encountered for ${name}`);
|
||||||
},
|
},
|
||||||
|
@@ -10,15 +10,15 @@ import { ApprovalContractEventArgs, LogWithDecodedArgs, Order, TokenEvents, Zero
|
|||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { TokenUtils } from './utils/token_utils';
|
import { TokenUtils } from './utils/token_utils';
|
||||||
|
import { web3, web3Wrapper } from './utils/web3_wrapper';
|
||||||
|
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
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 web3 = web3Factory.create();
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
@@ -41,11 +41,11 @@ describe('ZeroEx library', () => {
|
|||||||
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined();
|
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined();
|
||||||
|
|
||||||
// Check that all nested web3 wrapper instances return the updated provider
|
// Check that all nested web3 wrapper instances return the updated provider
|
||||||
const nestedWeb3WrapperProvider = (zeroEx as any)._web3Wrapper.getCurrentProvider();
|
const nestedWeb3WrapperProvider = (zeroEx as any)._web3Wrapper.getProvider();
|
||||||
expect(nestedWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
expect(nestedWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
||||||
const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getCurrentProvider();
|
const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getProvider();
|
||||||
expect(exchangeWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
expect(exchangeWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
||||||
const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getCurrentProvider();
|
const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getProvider();
|
||||||
expect(tokenRegistryWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
expect(tokenRegistryWeb3WrapperProvider.zeroExTestId).to.be.a('number');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -216,7 +216,7 @@ describe('ZeroEx library', () => {
|
|||||||
s: '0x050aa3cc1f2c435e67e114cdce54b9527b4f50548342401bc5d2b77adbdacb02',
|
s: '0x050aa3cc1f2c435e67e114cdce54b9527b4f50548342401bc5d2b77adbdacb02',
|
||||||
};
|
};
|
||||||
stubs = [
|
stubs = [
|
||||||
Sinon.stub((zeroEx as any)._web3Wrapper, 'signTransactionAsync').returns(Promise.resolve(signature)),
|
Sinon.stub((zeroEx as any)._web3Wrapper, 'signMessageAsync').returns(Promise.resolve(signature)),
|
||||||
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -237,7 +237,7 @@ describe('ZeroEx library', () => {
|
|||||||
s: '0x2dea66f25a608bbae457e020fb6decb763deb8b7192abab624997242da248960',
|
s: '0x2dea66f25a608bbae457e020fb6decb763deb8b7192abab624997242da248960',
|
||||||
};
|
};
|
||||||
stubs = [
|
stubs = [
|
||||||
Sinon.stub((zeroEx as any)._web3Wrapper, 'signTransactionAsync').returns(Promise.resolve(signature)),
|
Sinon.stub((zeroEx as any)._web3Wrapper, 'signMessageAsync').returns(Promise.resolve(signature)),
|
||||||
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
@@ -23,10 +23,11 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
// Since the address depositing/withdrawing ETH/WETH also needs to pay gas costs for the transaction,
|
// Since the address depositing/withdrawing ETH/WETH also needs to pay gas costs for the transaction,
|
||||||
// a small amount of ETH will be used to pay this gas cost. We therefore check that the difference between
|
// a small amount of ETH will be used to pay this gas cost. We therefore check that the difference between
|
||||||
@@ -35,7 +36,6 @@ const blockchainLifecycle = new BlockchainLifecycle();
|
|||||||
const MAX_REASONABLE_GAS_COST_IN_WEI = 62517;
|
const MAX_REASONABLE_GAS_COST_IN_WEI = 62517;
|
||||||
|
|
||||||
describe('EtherTokenWrapper', () => {
|
describe('EtherTokenWrapper', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
||||||
@@ -54,7 +54,6 @@ 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 () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);
|
zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
@@ -138,7 +137,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
gasCost = expectedETHBalance.minus(postETHBalance);
|
gasCost = expectedETHBalance.minus(postETHBalance);
|
||||||
expect(gasCost).to.be.bignumber.lte(MAX_REASONABLE_GAS_COST_IN_WEI);
|
expect(gasCost).to.be.bignumber.lte(MAX_REASONABLE_GAS_COST_IN_WEI);
|
||||||
});
|
});
|
||||||
it('should throw if user has insufficient WETH balance for withdrawl', async () => {
|
it('should throw if user has insufficient WETH balance for withdrawal', async () => {
|
||||||
const preWETHBalance = await zeroEx.token.getBalanceAsync(wethContractAddress, addressWithETH);
|
const preWETHBalance = await zeroEx.token.getBalanceAsync(wethContractAddress, addressWithETH);
|
||||||
expect(preWETHBalance).to.be.bignumber.equal(0);
|
expect(preWETHBalance).to.be.bignumber.equal(0);
|
||||||
|
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { web3Factory } from '@0xproject/dev-utils';
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { LogEntry } from '@0xproject/types';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -21,7 +22,7 @@ describe('EventWatcher', () => {
|
|||||||
let stubs: Sinon.SinonStub[] = [];
|
let stubs: Sinon.SinonStub[] = [];
|
||||||
let eventWatcher: EventWatcher;
|
let eventWatcher: EventWatcher;
|
||||||
let web3Wrapper: Web3Wrapper;
|
let web3Wrapper: Web3Wrapper;
|
||||||
const logA: Web3.LogEntry = {
|
const logA: LogEntry = {
|
||||||
address: '0x71d271f8b14adef568f8f28f1587ce7271ac4ca5',
|
address: '0x71d271f8b14adef568f8f28f1587ce7271ac4ca5',
|
||||||
blockHash: null,
|
blockHash: null,
|
||||||
blockNumber: null,
|
blockNumber: null,
|
||||||
@@ -31,7 +32,7 @@ describe('EventWatcher', () => {
|
|||||||
transactionHash: '0x004881d38cd4a8f72f1a0d68c8b9b8124504706041ff37019c1d1ed6bfda8e17',
|
transactionHash: '0x004881d38cd4a8f72f1a0d68c8b9b8124504706041ff37019c1d1ed6bfda8e17',
|
||||||
transactionIndex: 0,
|
transactionIndex: 0,
|
||||||
};
|
};
|
||||||
const logB: Web3.LogEntry = {
|
const logB: LogEntry = {
|
||||||
address: '0x8d12a197cb00d4747a1fe03395095ce2a5cc6819',
|
address: '0x8d12a197cb00d4747a1fe03395095ce2a5cc6819',
|
||||||
blockHash: null,
|
blockHash: null,
|
||||||
blockNumber: null,
|
blockNumber: null,
|
||||||
@@ -41,7 +42,7 @@ describe('EventWatcher', () => {
|
|||||||
transactionHash: '0x01ef3c048b18d9b09ea195b4ed94cf8dd5f3d857a1905ff886b152cfb1166f25',
|
transactionHash: '0x01ef3c048b18d9b09ea195b4ed94cf8dd5f3d857a1905ff886b152cfb1166f25',
|
||||||
transactionIndex: 0,
|
transactionIndex: 0,
|
||||||
};
|
};
|
||||||
const logC: Web3.LogEntry = {
|
const logC: LogEntry = {
|
||||||
address: '0x1d271f8b174adef58f1587ce68f8f27271ac4ca5',
|
address: '0x1d271f8b174adef58f1587ce68f8f27271ac4ca5',
|
||||||
blockHash: null,
|
blockHash: null,
|
||||||
blockNumber: null,
|
blockNumber: null,
|
||||||
@@ -64,7 +65,7 @@ describe('EventWatcher', () => {
|
|||||||
eventWatcher.unsubscribe();
|
eventWatcher.unsubscribe();
|
||||||
});
|
});
|
||||||
it('correctly emits initial log events', (done: DoneCallback) => {
|
it('correctly emits initial log events', (done: DoneCallback) => {
|
||||||
const logs: Web3.LogEntry[] = [logA, logB];
|
const logs: LogEntry[] = [logA, logB];
|
||||||
const expectedLogEvents = [
|
const expectedLogEvents = [
|
||||||
{
|
{
|
||||||
removed: false,
|
removed: false,
|
||||||
@@ -89,8 +90,8 @@ describe('EventWatcher', () => {
|
|||||||
eventWatcher.subscribe(callback);
|
eventWatcher.subscribe(callback);
|
||||||
});
|
});
|
||||||
it('correctly computes the difference and emits only changes', (done: DoneCallback) => {
|
it('correctly computes the difference and emits only changes', (done: DoneCallback) => {
|
||||||
const initialLogs: Web3.LogEntry[] = [logA, logB];
|
const initialLogs: LogEntry[] = [logA, logB];
|
||||||
const changedLogs: Web3.LogEntry[] = [logA, logC];
|
const changedLogs: LogEntry[] = [logA, logC];
|
||||||
const expectedLogEvents = [
|
const expectedLogEvents = [
|
||||||
{
|
{
|
||||||
removed: false,
|
removed: false,
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
import { BlockParamLiteral } from '@0xproject/types';
|
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';
|
||||||
@@ -9,13 +9,13 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('ExchangeTransferSimulator', () => {
|
describe('ExchangeTransferSimulator', () => {
|
||||||
const web3 = web3Factory.create();
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
|
@@ -26,15 +26,15 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
|
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
|
||||||
|
|
||||||
describe('ExchangeWrapper', () => {
|
describe('ExchangeWrapper', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let tokenUtils: TokenUtils;
|
let tokenUtils: TokenUtils;
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
@@ -46,7 +46,6 @@ describe('ExchangeWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
@@ -597,6 +596,19 @@ describe('ExchangeWrapper', () => {
|
|||||||
const remainingFillAmount = fillableAmount.minus(1);
|
const remainingFillAmount = fillableAmount.minus(1);
|
||||||
expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount);
|
expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount);
|
||||||
});
|
});
|
||||||
|
it('should successfully fill up to specified amount and leave the rest of the orders untouched', async () => {
|
||||||
|
const txHash = await zeroEx.exchange.fillOrdersUpToAsync(
|
||||||
|
signedOrders,
|
||||||
|
fillableAmount,
|
||||||
|
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||||
|
takerAddress,
|
||||||
|
);
|
||||||
|
await zeroEx.awaitTransactionMinedAsync(txHash);
|
||||||
|
const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex);
|
||||||
|
const zeroAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex);
|
||||||
|
expect(filledAmount).to.be.bignumber.equal(fillableAmount);
|
||||||
|
expect(zeroAmount).to.be.bignumber.equal(0);
|
||||||
|
});
|
||||||
it('should successfully fill up to specified amount even if filling all orders would fail', async () => {
|
it('should successfully fill up to specified amount even if filling all orders would fail', async () => {
|
||||||
const missingBalance = new BigNumber(1); // User will still have enough balance to fill up to 9,
|
const missingBalance = new BigNumber(1); // User will still have enough balance to fill up to 9,
|
||||||
// but won't have 10 to fully fill all orders in a batch.
|
// but won't have 10 to fully fill all orders in a batch.
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
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';
|
||||||
@@ -16,13 +16,13 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('ExpirationWatcher', () => {
|
describe('ExpirationWatcher', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let tokenUtils: TokenUtils;
|
let tokenUtils: TokenUtils;
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
@@ -41,7 +41,6 @@ describe('ExpirationWatcher', () => {
|
|||||||
let timer: Sinon.SinonFakeTimers;
|
let timer: Sinon.SinonFakeTimers;
|
||||||
let expirationWatcher: ExpirationWatcher;
|
let expirationWatcher: ExpirationWatcher;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
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';
|
||||||
@@ -15,6 +15,7 @@ import {
|
|||||||
ZeroEx,
|
ZeroEx,
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
} from '../src';
|
} from '../src';
|
||||||
|
import { OrderStateWatcher } from '../src/order_watcher/order_state_watcher';
|
||||||
import { DoneCallback } from '../src/types';
|
import { DoneCallback } from '../src/types';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
@@ -22,15 +23,15 @@ 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';
|
||||||
|
|
||||||
const TIMEOUT_MS = 150;
|
const TIMEOUT_MS = 150;
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('OrderStateWatcher', () => {
|
describe('OrderStateWatcher', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
let tokenUtils: TokenUtils;
|
let tokenUtils: TokenUtils;
|
||||||
@@ -43,14 +44,15 @@ describe('OrderStateWatcher', () => {
|
|||||||
let maker: string;
|
let maker: string;
|
||||||
let taker: string;
|
let taker: string;
|
||||||
let signedOrder: SignedOrder;
|
let signedOrder: SignedOrder;
|
||||||
|
let orderStateWatcher: OrderStateWatcher;
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
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 () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
|
orderStateWatcher = zeroEx.createOrderStateWatcher();
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
[, maker, taker] = userAddresses;
|
[, maker, taker] = userAddresses;
|
||||||
@@ -77,17 +79,17 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
expect((zeroEx.orderStateWatcher as any)._orderByOrderHash).to.include({
|
expect((orderStateWatcher as any)._orderByOrderHash).to.include({
|
||||||
[orderHash]: signedOrder,
|
[orderHash]: signedOrder,
|
||||||
});
|
});
|
||||||
let dependentOrderHashes = (zeroEx.orderStateWatcher as any)._dependentOrderHashes;
|
let dependentOrderHashes = (orderStateWatcher as any)._dependentOrderHashes;
|
||||||
expect(dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress]).to.have.keys(orderHash);
|
expect(dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress]).to.have.keys(orderHash);
|
||||||
zeroEx.orderStateWatcher.removeOrder(orderHash);
|
orderStateWatcher.removeOrder(orderHash);
|
||||||
expect((zeroEx.orderStateWatcher as any)._orderByOrderHash).to.not.include({
|
expect((orderStateWatcher as any)._orderByOrderHash).to.not.include({
|
||||||
[orderHash]: signedOrder,
|
[orderHash]: signedOrder,
|
||||||
});
|
});
|
||||||
dependentOrderHashes = (zeroEx.orderStateWatcher as any)._dependentOrderHashes;
|
dependentOrderHashes = (orderStateWatcher as any)._dependentOrderHashes;
|
||||||
expect(dependentOrderHashes[signedOrder.maker]).to.be.undefined();
|
expect(dependentOrderHashes[signedOrder.maker]).to.be.undefined();
|
||||||
});
|
});
|
||||||
it('should no-op when removing a non-existing order', async () => {
|
it('should no-op when removing a non-existing order', async () => {
|
||||||
@@ -104,23 +106,23 @@ describe('OrderStateWatcher', () => {
|
|||||||
.split('')
|
.split('')
|
||||||
.reverse()
|
.reverse()
|
||||||
.join('')}`;
|
.join('')}`;
|
||||||
zeroEx.orderStateWatcher.removeOrder(nonExistentOrderHash);
|
orderStateWatcher.removeOrder(nonExistentOrderHash);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('#subscribe', async () => {
|
describe('#subscribe', async () => {
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
zeroEx.orderStateWatcher.unsubscribe();
|
orderStateWatcher.unsubscribe();
|
||||||
});
|
});
|
||||||
it('should fail when trying to subscribe twice', async () => {
|
it('should fail when trying to subscribe twice', async () => {
|
||||||
zeroEx.orderStateWatcher.subscribe(_.noop);
|
orderStateWatcher.subscribe(_.noop);
|
||||||
expect(() => zeroEx.orderStateWatcher.subscribe(_.noop)).to.throw(ZeroExError.SubscriptionAlreadyPresent);
|
expect(() => orderStateWatcher.subscribe(_.noop)).to.throw(ZeroExError.SubscriptionAlreadyPresent);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('tests with cleanup', async () => {
|
describe('tests with cleanup', async () => {
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
zeroEx.orderStateWatcher.unsubscribe();
|
orderStateWatcher.unsubscribe();
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.removeOrder(orderHash);
|
orderStateWatcher.removeOrder(orderHash);
|
||||||
});
|
});
|
||||||
it('should emit orderStateInvalid when maker allowance set to 0 for watched order', (done: DoneCallback) => {
|
it('should emit orderStateInvalid when maker allowance set to 0 for watched order', (done: DoneCallback) => {
|
||||||
(async () => {
|
(async () => {
|
||||||
@@ -132,14 +134,14 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.false();
|
expect(orderState.isValid).to.be.false();
|
||||||
const invalidOrderState = orderState as OrderStateInvalid;
|
const invalidOrderState = orderState as OrderStateInvalid;
|
||||||
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
||||||
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
|
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
|
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
@@ -152,11 +154,11 @@ describe('OrderStateWatcher', () => {
|
|||||||
taker,
|
taker,
|
||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
throw new Error('OrderState callback fired for irrelevant order');
|
throw new Error('OrderState callback fired for irrelevant order');
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
const notTheMaker = userAddresses[0];
|
const notTheMaker = userAddresses[0];
|
||||||
const anyRecipient = taker;
|
const anyRecipient = taker;
|
||||||
const transferAmount = new BigNumber(2);
|
const transferAmount = new BigNumber(2);
|
||||||
@@ -176,14 +178,14 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.false();
|
expect(orderState.isValid).to.be.false();
|
||||||
const invalidOrderState = orderState as OrderStateInvalid;
|
const invalidOrderState = orderState as OrderStateInvalid;
|
||||||
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
||||||
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerBalance);
|
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerBalance);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
const anyRecipient = taker;
|
const anyRecipient = taker;
|
||||||
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
|
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
|
||||||
await zeroEx.token.transferAsync(makerToken.address, maker, anyRecipient, makerBalance);
|
await zeroEx.token.transferAsync(makerToken.address, maker, anyRecipient, makerBalance);
|
||||||
@@ -199,7 +201,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.false();
|
expect(orderState.isValid).to.be.false();
|
||||||
@@ -207,7 +209,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
||||||
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
|
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
|
|
||||||
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
||||||
await zeroEx.exchange.fillOrderAsync(
|
await zeroEx.exchange.fillOrderAsync(
|
||||||
@@ -231,7 +233,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
|
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
|
||||||
const fillAmountInBaseUnits = new BigNumber(2);
|
const fillAmountInBaseUnits = new BigNumber(2);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.true();
|
expect(orderState.isValid).to.be.true();
|
||||||
@@ -248,7 +250,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
);
|
);
|
||||||
expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance);
|
expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
||||||
await zeroEx.exchange.fillOrderAsync(
|
await zeroEx.exchange.fillOrderAsync(
|
||||||
signedOrder,
|
signedOrder,
|
||||||
@@ -273,8 +275,8 @@ describe('OrderStateWatcher', () => {
|
|||||||
taker,
|
taker,
|
||||||
);
|
);
|
||||||
const callback = reportNodeCallbackErrors(done)();
|
const callback = reportNodeCallbackErrors(done)();
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
|
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
@@ -293,7 +295,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
);
|
);
|
||||||
const fillAmountInBaseUnits = ZeroEx.toBaseUnitAmount(new BigNumber(2), decimals);
|
const fillAmountInBaseUnits = ZeroEx.toBaseUnitAmount(new BigNumber(2), decimals);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.true();
|
expect(orderState.isValid).to.be.true();
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
@@ -306,7 +308,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
ZeroEx.toBaseUnitAmount(new BigNumber(8), decimals),
|
ZeroEx.toBaseUnitAmount(new BigNumber(8), decimals),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
const shouldThrowOnInsufficientBalanceOrAllowance = true;
|
||||||
await zeroEx.exchange.fillOrderAsync(
|
await zeroEx.exchange.fillOrderAsync(
|
||||||
signedOrder,
|
signedOrder,
|
||||||
@@ -327,7 +329,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
const changedMakerApprovalAmount = ZeroEx.toBaseUnitAmount(new BigNumber(3), decimals);
|
const changedMakerApprovalAmount = ZeroEx.toBaseUnitAmount(new BigNumber(3), decimals);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
@@ -339,7 +341,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
changedMakerApprovalAmount,
|
changedMakerApprovalAmount,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, changedMakerApprovalAmount);
|
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, changedMakerApprovalAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
@@ -357,7 +359,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
|
|
||||||
const remainingAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), decimals);
|
const remainingAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), decimals);
|
||||||
const transferAmount = makerBalance.sub(remainingAmount);
|
const transferAmount = makerBalance.sub(remainingAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.true();
|
expect(orderState.isValid).to.be.true();
|
||||||
@@ -370,7 +372,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
remainingAmount,
|
remainingAmount,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.transferAsync(makerToken.address, maker, ZeroEx.NULL_ADDRESS, transferAmount);
|
await zeroEx.token.transferAsync(makerToken.address, maker, ZeroEx.NULL_ADDRESS, transferAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
@@ -392,7 +394,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
|
|
||||||
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
|
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
|
||||||
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.true();
|
expect(orderState.isValid).to.be.true();
|
||||||
@@ -402,7 +404,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
remainingTokenAmount,
|
remainingTokenAmount,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.exchange.cancelOrderAsync(signedOrder, transferTokenAmount);
|
await zeroEx.exchange.cancelOrderAsync(signedOrder, transferTokenAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
@@ -426,7 +428,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
|
|
||||||
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
|
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
|
||||||
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
@@ -435,7 +437,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
remainingFeeAmount,
|
remainingFeeAmount,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, remainingFeeAmount);
|
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, remainingFeeAmount);
|
||||||
await zeroEx.token.transferAsync(
|
await zeroEx.token.transferAsync(
|
||||||
makerToken.address,
|
makerToken.address,
|
||||||
@@ -461,7 +463,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
feeRecipient,
|
feeRecipient,
|
||||||
);
|
);
|
||||||
|
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
@@ -470,7 +472,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(
|
await zeroEx.token.setProxyAllowanceAsync(
|
||||||
makerToken.address,
|
makerToken.address,
|
||||||
maker,
|
maker,
|
||||||
@@ -489,7 +491,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.false();
|
expect(orderState.isValid).to.be.false();
|
||||||
@@ -497,7 +499,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
||||||
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
|
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
|
|
||||||
await zeroEx.exchange.cancelOrderAsync(signedOrder, fillableAmount);
|
await zeroEx.exchange.cancelOrderAsync(signedOrder, fillableAmount);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
@@ -513,7 +515,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.false();
|
expect(orderState.isValid).to.be.false();
|
||||||
@@ -521,7 +523,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
|
||||||
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
|
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.exchange.cancelOrderAsync(
|
await zeroEx.exchange.cancelOrderAsync(
|
||||||
signedOrder,
|
signedOrder,
|
||||||
fillableAmount.minus(remainingFillableAmountInBaseUnits),
|
fillableAmount.minus(remainingFillableAmountInBaseUnits),
|
||||||
@@ -540,7 +542,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
|
|
||||||
const cancelAmountInBaseUnits = new BigNumber(2);
|
const cancelAmountInBaseUnits = new BigNumber(2);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
expect(orderState.isValid).to.be.true();
|
expect(orderState.isValid).to.be.true();
|
||||||
@@ -549,7 +551,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
expect(orderRelevantState.cancelledTakerTokenAmount).to.be.bignumber.equal(cancelAmountInBaseUnits);
|
expect(orderRelevantState.cancelledTakerTokenAmount).to.be.bignumber.equal(cancelAmountInBaseUnits);
|
||||||
});
|
});
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmountInBaseUnits);
|
await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmountInBaseUnits);
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
import { BlockParamLiteral } from '@0xproject/types';
|
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';
|
||||||
@@ -14,13 +14,13 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('OrderValidation', () => {
|
describe('OrderValidation', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
@@ -40,7 +40,6 @@ describe('OrderValidation', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
exchangeContractAddress = zeroEx.exchange.getContractAddress();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
|
import { ECSignature, SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
|
||||||
import { ZeroEx } from '../src/0x';
|
import { ZeroEx } from '../src/0x';
|
||||||
import { RemainingFillableCalculator } from '../src/order_watcher/remaining_fillable_calculator';
|
import { RemainingFillableCalculator } from '../src/order_watcher/remaining_fillable_calculator';
|
||||||
import { ECSignature, SignedOrder } from '../src/types';
|
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
@@ -11,12 +11,12 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('SubscriptionTest', () => {
|
describe('SubscriptionTest', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
@@ -26,7 +26,6 @@ describe('SubscriptionTest', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
|
||||||
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -8,10 +8,11 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
|
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
|
||||||
|
|
||||||
@@ -30,7 +31,6 @@ describe('TokenRegistryWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
_.map(tokens, token => {
|
_.map(tokens, token => {
|
||||||
|
@@ -8,6 +8,7 @@ import { constants } from './utils/constants';
|
|||||||
|
|
||||||
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;
|
||||||
@@ -15,7 +16,6 @@ describe('TokenTransferProxyWrapper', () => {
|
|||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
});
|
});
|
||||||
describe('#isAuthorizedAsync', () => {
|
describe('#isAuthorizedAsync', () => {
|
||||||
|
@@ -22,27 +22,24 @@ 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';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle();
|
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
|
||||||
|
|
||||||
describe('TokenWrapper', () => {
|
describe('TokenWrapper', () => {
|
||||||
let web3: Web3;
|
|
||||||
let zeroEx: ZeroEx;
|
let zeroEx: ZeroEx;
|
||||||
let userAddresses: string[];
|
let userAddresses: string[];
|
||||||
let tokens: Token[];
|
let tokens: Token[];
|
||||||
let tokenUtils: TokenUtils;
|
let tokenUtils: TokenUtils;
|
||||||
let coinbase: string;
|
let coinbase: string;
|
||||||
let addressWithoutFunds: string;
|
let addressWithoutFunds: string;
|
||||||
let web3Wrapper: Web3Wrapper;
|
|
||||||
const config = {
|
const config = {
|
||||||
networkId: constants.TESTRPC_NETWORK_ID,
|
networkId: constants.TESTRPC_NETWORK_ID,
|
||||||
};
|
};
|
||||||
before(async () => {
|
before(async () => {
|
||||||
web3 = web3Factory.create();
|
|
||||||
zeroEx = new ZeroEx(web3.currentProvider, config);
|
zeroEx = new ZeroEx(web3.currentProvider, config);
|
||||||
web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
|
||||||
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);
|
||||||
@@ -194,7 +191,7 @@ describe('TokenWrapper', () => {
|
|||||||
let zeroExWithoutAccounts: ZeroEx;
|
let zeroExWithoutAccounts: ZeroEx;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const hasAddresses = false;
|
const hasAddresses = false;
|
||||||
const web3WithoutAccounts = web3Factory.create(hasAddresses);
|
const web3WithoutAccounts = web3Factory.create({ hasAddresses });
|
||||||
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
||||||
});
|
});
|
||||||
it('should return balance even when called with Web3 provider instance without addresses', async () => {
|
it('should return balance even when called with Web3 provider instance without addresses', async () => {
|
||||||
@@ -306,7 +303,7 @@ describe('TokenWrapper', () => {
|
|||||||
let zeroExWithoutAccounts: ZeroEx;
|
let zeroExWithoutAccounts: ZeroEx;
|
||||||
before(async () => {
|
before(async () => {
|
||||||
const hasAddresses = false;
|
const hasAddresses = false;
|
||||||
const web3WithoutAccounts = web3Factory.create(hasAddresses);
|
const web3WithoutAccounts = web3Factory.create({ hasAddresses });
|
||||||
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
|
||||||
});
|
});
|
||||||
it('should get the proxy allowance', async () => {
|
it('should get the proxy allowance', async () => {
|
||||||
|
6
packages/0x.js/test/utils/web3_wrapper.ts
Normal file
6
packages/0x.js/test/utils/web3_wrapper.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
|
export const web3 = web3Factory.create();
|
||||||
|
export const web3Wrapper = new Web3Wrapper(web3.currentProvider);
|
@@ -8,10 +8,6 @@
|
|||||||
"./src/**/*",
|
"./src/**/*",
|
||||||
"./test/**/*",
|
"./test/**/*",
|
||||||
"../../node_modules/types-bn/index.d.ts",
|
"../../node_modules/types-bn/index.d.ts",
|
||||||
"../../node_modules/types-ethereumjs-util/index.d.ts",
|
"../../node_modules/types-ethereumjs-util/index.d.ts"
|
||||||
"../../node_modules/ethers-typescript-typings/index.d.ts",
|
|
||||||
"../../node_modules/web3-typescript-typings/index.d.ts",
|
|
||||||
"../../node_modules/chai-typescript-typings/index.d.ts",
|
|
||||||
"../../node_modules/chai-as-promised-typescript-typings/index.d.ts"
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -3,3 +3,4 @@ yarn-error.log
|
|||||||
/src/
|
/src/
|
||||||
/scripts/
|
/scripts/
|
||||||
tsconfig.json
|
tsconfig.json
|
||||||
|
/lib/monorepo_scripts/
|
||||||
|
89
packages/abi-gen/CHANGELOG.json
Normal file
89
packages/abi-gen/CHANGELOG.json
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1522658513,
|
||||||
|
"version": "0.2.8",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.5",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package",
|
||||||
|
"pr": 452
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1521298800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.4",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Add a `backend` parameter that allows you to specify the Ethereum library you use in your templates (`web3` or `ethers`). Ethers auto-converts small ints to numbers whereas Web3 doesn't. Defaults to `web3`",
|
||||||
|
"pr": 413
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Add support for [tuple types](https://solidity.readthedocs.io/en/develop/abi-spec.html#handling-tuple-types)",
|
||||||
|
"pr": 413
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add `hasReturnValue` to context data",
|
||||||
|
"pr": 413
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1520089200,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.1",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
|
||||||
|
"pr": 389
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1518102000,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Added CLI options for explicit specifying location of partials and main template",
|
||||||
|
"pr": 346
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Added CLI option to specify networkId, adding support for the JSON artifact format found in @0xproject/contracts",
|
||||||
|
"pr": 388
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1517929200,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Fixed array typings with union types",
|
||||||
|
"pr": 295
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add event ABIs to context data passed to templates",
|
||||||
|
"pr": 302
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add constructor ABIs to context data passed to templates",
|
||||||
|
"pr": 304
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1515596400,
|
||||||
|
"isPublished": true
|
||||||
|
}
|
||||||
|
]
|
@@ -1,4 +1,17 @@
|
|||||||
# CHANGELOG
|
<!--
|
||||||
|
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||||
|
Edit the package's CHANGELOG.json file only.
|
||||||
|
-->
|
||||||
|
|
||||||
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.8 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.2.5 - _March 18, 2018_
|
||||||
|
|
||||||
|
* Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package (#452)
|
||||||
|
|
||||||
## v0.2.4 - _March 4, 2018_
|
## v0.2.4 - _March 4, 2018_
|
||||||
|
|
||||||
|
@@ -16,24 +16,33 @@ For an example of the generated [wrapper files](https://github.com/0xProject/0x-
|
|||||||
```
|
```
|
||||||
abi-gen
|
abi-gen
|
||||||
Options:
|
Options:
|
||||||
--help Show help [boolean]
|
--help Show help [boolean]
|
||||||
--version Show version number [boolean]
|
--version Show version number [boolean]
|
||||||
--abiGlob Glob pattern to search for ABI JSON files [string] [required]
|
--abis Glob pattern to search for ABI JSON files
|
||||||
--templates Folder where to search for templates [string] [required]
|
[string] [required]
|
||||||
--output Folder where to put the output files [string] [required]
|
--output, -o, --out Folder where to put the output files [string] [required]
|
||||||
|
--partials Glob pattern for the partial template files [string]
|
||||||
|
--template Path for the main template file that will be used to
|
||||||
|
generate each contract [string] [required]
|
||||||
|
--backend The backing Ethereum library your app uses. Either 'web3'
|
||||||
|
or 'ethers'. Ethers auto-converts small ints to numbers
|
||||||
|
whereas Web3 doesn't.
|
||||||
|
[string] [choices: "web3", "ethers"] [default: "web3"]
|
||||||
|
--network-id ID of the network where contract ABIs are nested in
|
||||||
|
artifacts [number] [default: 50]
|
||||||
```
|
```
|
||||||
|
|
||||||
## ABI files
|
|
||||||
|
|
||||||
You're required to pass a [glob](<https://en.wikipedia.org/wiki/Glob_(programming)>) template where your abi files are located.
|
You're required to pass a [glob](<https://en.wikipedia.org/wiki/Glob_(programming)>) template where your abi files are located.
|
||||||
TL;DR - here is the example from 0x.js.
|
TL;DR - here is the example from 0x.js.
|
||||||
|
|
||||||
`--abiGlob 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry).json`
|
`--abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry).json`
|
||||||
|
|
||||||
We could've just used `--abiGlob 'src/artifacts/*.json` but we wanted to exclude some of the abi files.
|
We could've just used `--abis 'src/artifacts/*.json` but we wanted to exclude some of the abi files.
|
||||||
|
|
||||||
The abi file should be either a [Truffle](http://truffleframework.com/) contract artifact (a JSON object with an abi key) or a JSON abi array.
|
The abi file should be either a [Truffle](http://truffleframework.com/) contract artifact (a JSON object with an abi key) or a JSON abi array.
|
||||||
|
|
||||||
|
You need to also specify the location of your main template used for every contract `--template` as well as the partial templates `--partials` that can later be used from the main one.
|
||||||
|
|
||||||
## How to write custom templates?
|
## How to write custom templates?
|
||||||
|
|
||||||
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) and start adjusting them for your needs.
|
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) and start adjusting them for your needs.
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/abi-gen",
|
"name": "@0xproject/abi-gen",
|
||||||
"version": "0.2.5",
|
"version": "0.2.8",
|
||||||
"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",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"lint": "tslint --project . 'src/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts'",
|
||||||
"clean": "shx rm -rf lib",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"build": "tsc"
|
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"abi-gen": "lib/index.js"
|
"abi-gen": "lib/index.js"
|
||||||
@@ -23,27 +23,32 @@
|
|||||||
},
|
},
|
||||||
"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/utils": "^0.4.1",
|
"@0xproject/types": "^0.4.2",
|
||||||
|
"@0xproject/typescript-typings": "^0.0.2",
|
||||||
|
"@0xproject/utils": "^0.4.4",
|
||||||
"chalk": "^2.3.0",
|
"chalk": "^2.3.0",
|
||||||
"glob": "^7.1.2",
|
"glob": "^7.1.2",
|
||||||
"handlebars": "^4.0.11",
|
"handlebars": "^4.0.11",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"to-snake-case": "^1.0.0",
|
"to-snake-case": "^1.0.0",
|
||||||
"web3": "^0.20.0",
|
|
||||||
"yargs": "^10.0.3"
|
"yargs": "^10.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/tslint-config": "^0.4.10",
|
"@0xproject/monorepo-scripts": "^0.1.15",
|
||||||
|
"@0xproject/tslint-config": "^0.4.13",
|
||||||
"@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",
|
||||||
"@types/node": "^8.0.53",
|
"@types/node": "^8.0.53",
|
||||||
"@types/yargs": "^10.0.0",
|
"@types/yargs": "^10.0.0",
|
||||||
|
"copyfiles": "^1.2.0",
|
||||||
"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"
|
||||||
"web3-typescript-typings": "^0.10.0"
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +0,0 @@
|
|||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
postpublish_utils.standardPostPublishAsync(subPackageName);
|
|
7
packages/abi-gen/src/globals.d.ts
vendored
7
packages/abi-gen/src/globals.d.ts
vendored
@@ -2,3 +2,10 @@ declare function toSnakeCase(str: string): string;
|
|||||||
declare module 'to-snake-case' {
|
declare module 'to-snake-case' {
|
||||||
export = toSnakeCase;
|
export = toSnakeCase;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare module '*.json' {
|
||||||
|
const json: any;
|
||||||
|
/* tslint:disable */
|
||||||
|
export default json;
|
||||||
|
/* tslint:enable */
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,7 @@
|
|||||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from '@0xproject/types';
|
||||||
|
import { 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';
|
||||||
@@ -9,7 +11,6 @@ import * as mkdirp from 'mkdirp';
|
|||||||
import * as yargs from 'yargs';
|
import * as yargs from 'yargs';
|
||||||
|
|
||||||
import toSnakeCase = require('to-snake-case');
|
import toSnakeCase = require('to-snake-case');
|
||||||
import * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { ContextData, ContractsBackend, ParamKind } from './types';
|
import { ContextData, ContractsBackend, ParamKind } from './types';
|
||||||
import { utils } from './utils';
|
import { utils } from './utils';
|
||||||
@@ -62,7 +63,7 @@ const args = yargs
|
|||||||
|
|
||||||
function registerPartials(partialsGlob: string) {
|
function registerPartials(partialsGlob: string) {
|
||||||
const partialTemplateFileNames = globSync(partialsGlob);
|
const partialTemplateFileNames = globSync(partialsGlob);
|
||||||
utils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
|
logUtils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
|
||||||
for (const partialTemplateFileName of partialTemplateFileNames) {
|
for (const partialTemplateFileName of partialTemplateFileNames) {
|
||||||
const namedContent = utils.getNamedContent(partialTemplateFileName);
|
const namedContent = utils.getNamedContent(partialTemplateFileName);
|
||||||
Handlebars.registerPartial(namedContent.name, namedContent.content);
|
Handlebars.registerPartial(namedContent.name, namedContent.content);
|
||||||
@@ -77,7 +78,7 @@ function writeOutputFile(name: string, renderedTsCode: string): void {
|
|||||||
}
|
}
|
||||||
const filePath = `${args.output}/${fileName}.ts`;
|
const filePath = `${args.output}/${fileName}.ts`;
|
||||||
fs.writeFileSync(filePath, renderedTsCode);
|
fs.writeFileSync(filePath, renderedTsCode);
|
||||||
utils.log(`Created: ${chalk.bold(filePath)}`);
|
logUtils.log(`Created: ${chalk.bold(filePath)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
|
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
|
||||||
@@ -91,17 +92,17 @@ const template = Handlebars.compile<ContextData>(mainTemplate.content);
|
|||||||
const abiFileNames = globSync(args.abis);
|
const abiFileNames = globSync(args.abis);
|
||||||
|
|
||||||
if (_.isEmpty(abiFileNames)) {
|
if (_.isEmpty(abiFileNames)) {
|
||||||
utils.log(`${chalk.red(`No ABI files found.`)}`);
|
logUtils.log(`${chalk.red(`No ABI files found.`)}`);
|
||||||
utils.log(`Please make sure you've passed the correct folder name and that the files have
|
logUtils.log(`Please make sure you've passed the correct folder name and that the files have
|
||||||
${chalk.bold('*.json')} extensions`);
|
${chalk.bold('*.json')} extensions`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
} else {
|
} else {
|
||||||
utils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`);
|
logUtils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`);
|
||||||
mkdirp.sync(args.output);
|
mkdirp.sync(args.output);
|
||||||
}
|
}
|
||||||
for (const abiFileName of abiFileNames) {
|
for (const abiFileName of abiFileNames) {
|
||||||
const namedContent = utils.getNamedContent(abiFileName);
|
const namedContent = utils.getNamedContent(abiFileName);
|
||||||
utils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
|
logUtils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
|
||||||
const parsedContent = JSON.parse(namedContent.content);
|
const parsedContent = JSON.parse(namedContent.content);
|
||||||
let ABI;
|
let ABI;
|
||||||
if (_.isArray(parsedContent)) {
|
if (_.isArray(parsedContent)) {
|
||||||
@@ -112,19 +113,19 @@ for (const abiFileName of abiFileNames) {
|
|||||||
ABI = parsedContent.networks[args.networkId].abi; // 0x contracts package artifact
|
ABI = parsedContent.networks[args.networkId].abi; // 0x contracts package artifact
|
||||||
}
|
}
|
||||||
if (_.isUndefined(ABI)) {
|
if (_.isUndefined(ABI)) {
|
||||||
utils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
|
logUtils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
|
||||||
utils.log(
|
logUtils.log(
|
||||||
`Please make sure your ABI file is either an array with ABI entries or a truffle artifact or 0x deployer artifact`,
|
`Please make sure your ABI file is either an array with ABI entries or a truffle artifact or 0x deployer artifact`,
|
||||||
);
|
);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
let ctor = ABI.find((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as Web3.ConstructorAbi;
|
let ctor = ABI.find((abi: AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as ConstructorAbi;
|
||||||
if (_.isUndefined(ctor)) {
|
if (_.isUndefined(ctor)) {
|
||||||
ctor = utils.getEmptyConstructor(); // The constructor exists, but it's implicit in JSON's ABI definition
|
ctor = utils.getEmptyConstructor(); // The constructor exists, but it's implicit in JSON's ABI definition
|
||||||
}
|
}
|
||||||
|
|
||||||
const methodAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_METHOD) as Web3.MethodAbi[];
|
const methodAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_METHOD) as MethodAbi[];
|
||||||
const methodsData = _.map(methodAbis, methodAbi => {
|
const methodsData = _.map(methodAbis, methodAbi => {
|
||||||
_.map(methodAbi.inputs, (input, i: number) => {
|
_.map(methodAbi.inputs, (input, i: number) => {
|
||||||
if (_.isEmpty(input.name)) {
|
if (_.isEmpty(input.name)) {
|
||||||
@@ -141,7 +142,7 @@ for (const abiFileName of abiFileNames) {
|
|||||||
return methodData;
|
return methodData;
|
||||||
});
|
});
|
||||||
|
|
||||||
const eventAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_EVENT) as Web3.EventAbi[];
|
const eventAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_EVENT) as EventAbi[];
|
||||||
|
|
||||||
const contextData = {
|
const contextData = {
|
||||||
contractName: namedContent.name,
|
contractName: namedContent.name,
|
||||||
|
8
packages/abi-gen/src/monorepo_scripts/postpublish.ts
Normal file
8
packages/abi-gen/src/monorepo_scripts/postpublish.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);
|
@@ -1,4 +1,4 @@
|
|||||||
import * as Web3 from 'web3';
|
import { EventAbi, MethodAbi } from '@0xproject/types';
|
||||||
|
|
||||||
export enum ParamKind {
|
export enum ParamKind {
|
||||||
Input = 'input',
|
Input = 'input',
|
||||||
@@ -17,7 +17,7 @@ export enum ContractsBackend {
|
|||||||
Ethers = 'ethers',
|
Ethers = 'ethers',
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Method extends Web3.MethodAbi {
|
export interface Method extends MethodAbi {
|
||||||
singleReturnValue: boolean;
|
singleReturnValue: boolean;
|
||||||
hasReturnValue: boolean;
|
hasReturnValue: boolean;
|
||||||
}
|
}
|
||||||
@@ -25,5 +25,5 @@ export interface Method extends Web3.MethodAbi {
|
|||||||
export interface ContextData {
|
export interface ContextData {
|
||||||
contractName: string;
|
contractName: string;
|
||||||
methods: Method[];
|
methods: Method[];
|
||||||
events: Web3.EventAbi[];
|
events: EventAbi[];
|
||||||
}
|
}
|
||||||
|
@@ -1,17 +1,12 @@
|
|||||||
|
import { 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 * as Web3 from 'web3';
|
|
||||||
|
|
||||||
import { AbiType, ContractsBackend, ParamKind } from './types';
|
import { AbiType, ContractsBackend, ParamKind } from './types';
|
||||||
|
|
||||||
export const utils = {
|
export const utils = {
|
||||||
solTypeToTsType(
|
solTypeToTsType(paramKind: ParamKind, backend: ContractsBackend, solType: string, components?: DataItem[]): string {
|
||||||
paramKind: ParamKind,
|
|
||||||
backend: ContractsBackend,
|
|
||||||
solType: string,
|
|
||||||
components?: Web3.DataItem[],
|
|
||||||
): string {
|
|
||||||
const trailingArrayRegex = /\[\d*\]$/;
|
const trailingArrayRegex = /\[\d*\]$/;
|
||||||
if (solType.match(trailingArrayRegex)) {
|
if (solType.match(trailingArrayRegex)) {
|
||||||
const arrayItemSolType = solType.replace(trailingArrayRegex, '');
|
const arrayItemSolType = solType.replace(trailingArrayRegex, '');
|
||||||
@@ -73,9 +68,6 @@ export const utils = {
|
|||||||
isObjectType(tsType: string): boolean {
|
isObjectType(tsType: string): boolean {
|
||||||
return /^{.*}$/.test(tsType);
|
return /^{.*}$/.test(tsType);
|
||||||
},
|
},
|
||||||
log(...args: any[]): void {
|
|
||||||
console.log(...args); // tslint:disable-line:no-console
|
|
||||||
},
|
|
||||||
getPartialNameFromFileName(filename: string): string {
|
getPartialNameFromFileName(filename: string): string {
|
||||||
const name = path.parse(filename).name;
|
const name = path.parse(filename).name;
|
||||||
return name;
|
return name;
|
||||||
@@ -92,7 +84,7 @@ export const utils = {
|
|||||||
throw new Error(`Failed to read ${filename}: ${err}`);
|
throw new Error(`Failed to read ${filename}: ${err}`);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
getEmptyConstructor(): Web3.ConstructorAbi {
|
getEmptyConstructor(): ConstructorAbi {
|
||||||
return {
|
return {
|
||||||
type: AbiType.Constructor,
|
type: AbiType.Constructor,
|
||||||
stateMutability: 'nonpayable',
|
stateMutability: 'nonpayable',
|
||||||
|
@@ -3,5 +3,5 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib"
|
"outDir": "lib"
|
||||||
},
|
},
|
||||||
"include": ["./src/**/*", "./test/**/*", "../../node_modules/web3-typescript-typings/index.d.ts"]
|
"include": ["./src/**/*", "./test/**/*"]
|
||||||
}
|
}
|
||||||
|
@@ -4,3 +4,4 @@ yarn-error.log
|
|||||||
/scripts/
|
/scripts/
|
||||||
test/
|
test/
|
||||||
tsconfig.json
|
tsconfig.json
|
||||||
|
/lib/src/monorepo_scripts/
|
||||||
|
62
packages/assert/CHANGELOG.json
Normal file
62
packages/assert/CHANGELOG.json
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1522658513,
|
||||||
|
"version": "0.2.4",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Rename `isHttpUrl` to `isWebUri`",
|
||||||
|
"pr": 412
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1520434800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Remove isETHAddressHex checksum address check and assume address will be lowercased ",
|
||||||
|
"pr": 373
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add an optional parameter `subSchemas` to `doesConformToSchema` method",
|
||||||
|
"pr": 385
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1520089200,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.0.18",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
|
||||||
|
"pr": 389
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1486566000,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.0.4",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Re-publish Assert previously published under NPM package @0xproject/0x-assert"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note":
|
||||||
|
"Added assertion isValidBaseUnitAmount which checks both that the value is a valid bigNumber and that it does not contain decimals."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1510585200,
|
||||||
|
"isPublished": true
|
||||||
|
}
|
||||||
|
]
|
@@ -1,4 +1,13 @@
|
|||||||
# CHANGELOG
|
<!--
|
||||||
|
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||||
|
Edit the package's CHANGELOG.json file only.
|
||||||
|
-->
|
||||||
|
|
||||||
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.4 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
## v0.2.0 - _March 8, 2018_
|
## v0.2.0 - _March 8, 2018_
|
||||||
|
|
||||||
|
@@ -8,14 +8,6 @@ Standard type and schema assertions to be used across all 0x projects and packag
|
|||||||
yarn add @0xproject/assert
|
yarn add @0xproject/assert
|
||||||
```
|
```
|
||||||
|
|
||||||
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
|
||||||
|
|
||||||
```
|
|
||||||
"include": [
|
|
||||||
"./node_modules/web3-typescript-typings/index.d.ts",
|
|
||||||
]
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
@@ -24,6 +16,14 @@ import { assert } from '@0xproject/assert';
|
|||||||
assert.isValidBaseUnitAmount('baseUnitAmount', baseUnitAmount);
|
assert.isValidBaseUnitAmount('baseUnitAmount', baseUnitAmount);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"compilerOptions": {
|
||||||
|
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## 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 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.
|
||||||
|
0
packages/assert/coverage/.gitkeep
Normal file
0
packages/assert/coverage/.gitkeep
Normal file
@@ -1,18 +1,20 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/assert",
|
"name": "@0xproject/assert",
|
||||||
"version": "0.2.0",
|
"version": "0.2.4",
|
||||||
"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",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"build": "tsc",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp",
|
"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",
|
||||||
"prepublishOnly": "run-p build",
|
"prepublishOnly": "run-p build",
|
||||||
"test": "run-s clean build run_mocha",
|
"test": "run-s clean build run_mocha",
|
||||||
"test:circleci": "yarn test"
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
|
"test:circleci": "yarn test:coverage"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"repository": {
|
"repository": {
|
||||||
@@ -24,23 +26,29 @@
|
|||||||
},
|
},
|
||||||
"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/tslint-config": "^0.4.10",
|
"@0xproject/monorepo-scripts": "^0.1.15",
|
||||||
"@types/lodash": "^4.14.86",
|
"@0xproject/tslint-config": "^0.4.13",
|
||||||
|
"@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",
|
||||||
"chai": "^4.0.1",
|
"chai": "^4.0.1",
|
||||||
"chai-typescript-typings": "^0.0.4",
|
"copyfiles": "^1.2.0",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
"mocha": "^4.0.1",
|
"mocha": "^4.0.1",
|
||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
|
"nyc": "^11.0.1",
|
||||||
"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/json-schemas": "^0.7.14",
|
"@0xproject/json-schemas": "^0.7.18",
|
||||||
"@0xproject/utils": "^0.4.1",
|
"@0xproject/typescript-typings": "^0.0.2",
|
||||||
|
"@0xproject/utils": "^0.4.4",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"valid-url": "^1.0.9"
|
"valid-url": "^1.0.9"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +0,0 @@
|
|||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
postpublish_utils.standardPostPublishAsync(subPackageName);
|
|
7
packages/assert/src/globals.d.ts
vendored
7
packages/assert/src/globals.d.ts
vendored
@@ -1 +1,8 @@
|
|||||||
declare module 'dirty-chai';
|
declare module 'dirty-chai';
|
||||||
|
|
||||||
|
declare module '*.json' {
|
||||||
|
const json: any;
|
||||||
|
/* tslint:disable */
|
||||||
|
export default json;
|
||||||
|
/* tslint:enable */
|
||||||
|
}
|
||||||
|
8
packages/assert/src/monorepo_scripts/postpublish.ts
Normal file
8
packages/assert/src/monorepo_scripts/postpublish.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);
|
@@ -3,10 +3,5 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib"
|
"outDir": "lib"
|
||||||
},
|
},
|
||||||
"include": [
|
"include": ["./src/**/*", "./test/**/*"]
|
||||||
"./src/**/*",
|
|
||||||
"./test/**/*",
|
|
||||||
"../../node_modules/web3-typescript-typings/index.d.ts",
|
|
||||||
"../../node_modules/chai-typescript-typings/index.d.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
@@ -3,3 +3,4 @@ yarn-error.log
|
|||||||
/scripts/
|
/scripts/
|
||||||
/src/
|
/src/
|
||||||
tsconfig.json
|
tsconfig.json
|
||||||
|
/lib/monorepo_scripts/
|
||||||
|
21
packages/base-contract/CHANGELOG.json
Normal file
21
packages/base-contract/CHANGELOG.json
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1522658513,
|
||||||
|
"version": "0.0.6",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.0.2",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Initial release"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1520089200,
|
||||||
|
"isPublished": true
|
||||||
|
}
|
||||||
|
]
|
@@ -1,4 +1,13 @@
|
|||||||
# CHANGELOG
|
<!--
|
||||||
|
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||||
|
Edit the package's CHANGELOG.json file only.
|
||||||
|
-->
|
||||||
|
|
||||||
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.0.6 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
## v0.0.2 - _March 4, 2018_
|
## v0.0.2 - _March 4, 2018_
|
||||||
|
|
||||||
|
@@ -10,11 +10,10 @@ yarn add @0xproject/base-contract
|
|||||||
|
|
||||||
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
||||||
|
|
||||||
```
|
```json
|
||||||
"include": [
|
"compilerOptions": {
|
||||||
"./node_modules/web3-typescript-typings/index.d.ts",
|
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
|
||||||
"./node_modules/ethers-typescript-typings/index.d.ts"
|
}
|
||||||
]
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/base-contract",
|
"name": "@0xproject/base-contract",
|
||||||
"version": "0.0.3",
|
"version": "0.0.6",
|
||||||
"description": "0x Base TS contract",
|
"description": "0x Base TS contract",
|
||||||
"main": "lib/index.js",
|
"main": "lib/index.js",
|
||||||
"types": "lib/index.d.ts",
|
"types": "lib/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"build": "tsc",
|
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf lib",
|
"clean": "shx rm -rf lib scripts",
|
||||||
"lint": "tslint --project . 'src/**/*.ts'"
|
"lint": "tslint --project . 'src/**/*.ts'"
|
||||||
},
|
},
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -20,20 +20,23 @@
|
|||||||
},
|
},
|
||||||
"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/tslint-config": "^0.4.10",
|
"@0xproject/monorepo-scripts": "^0.1.15",
|
||||||
"@types/lodash": "^4.14.86",
|
"@0xproject/tslint-config": "^0.4.13",
|
||||||
|
"@types/lodash": "4.14.104",
|
||||||
|
"copyfiles": "^1.2.0",
|
||||||
"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.3.1",
|
"@0xproject/types": "^0.4.2",
|
||||||
"@0xproject/web3-wrapper": "^0.2.1",
|
"@0xproject/typescript-typings": "^0.0.2",
|
||||||
|
"@0xproject/web3-wrapper": "^0.4.0",
|
||||||
"ethers-contracts": "^2.2.1",
|
"ethers-contracts": "^2.2.1",
|
||||||
"ethers-typescript-typings": "^0.0.2",
|
"lodash": "^4.17.4"
|
||||||
"lodash": "^4.17.4",
|
},
|
||||||
"web3": "^0.20.0",
|
"publishConfig": {
|
||||||
"web3-typescript-typings": "^0.10.0"
|
"access": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
6
packages/base-contract/src/globals.d.ts
vendored
Normal file
6
packages/base-contract/src/globals.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
declare module '*.json' {
|
||||||
|
const json: any;
|
||||||
|
/* tslint:disable */
|
||||||
|
export default json;
|
||||||
|
/* tslint:enable */
|
||||||
|
}
|
@@ -1,16 +1,15 @@
|
|||||||
import { TxData, TxDataPayable } from '@0xproject/types';
|
import { ContractAbi, DataItem, TxData, TxDataPayable } from '@0xproject/types';
|
||||||
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';
|
|
||||||
|
|
||||||
export class BaseContract {
|
export class BaseContract {
|
||||||
protected _ethersInterface: ethersContracts.Interface;
|
protected _ethersInterface: ethersContracts.Interface;
|
||||||
protected _web3Wrapper: Web3Wrapper;
|
protected _web3Wrapper: Web3Wrapper;
|
||||||
public abi: Web3.ContractAbi;
|
public abi: ContractAbi;
|
||||||
public address: string;
|
public address: string;
|
||||||
protected static _transformABIData(
|
protected static _transformABIData(
|
||||||
abis: Web3.DataItem[],
|
abis: DataItem[],
|
||||||
values: any[],
|
values: any[],
|
||||||
transformation: (type: string, value: any) => any,
|
transformation: (type: string, value: any) => any,
|
||||||
): any {
|
): any {
|
||||||
@@ -46,20 +45,20 @@ export class BaseContract {
|
|||||||
// 2. Global config passed in at library instantiation
|
// 2. Global config passed in at library instantiation
|
||||||
// 3. Gas estimate calculation + safety margin
|
// 3. Gas estimate calculation + safety margin
|
||||||
const removeUndefinedProperties = _.pickBy;
|
const removeUndefinedProperties = _.pickBy;
|
||||||
const txDataWithDefaults = {
|
const txDataWithDefaults = ({
|
||||||
to: this.address,
|
to: this.address,
|
||||||
...removeUndefinedProperties(this._web3Wrapper.getContractDefaults()),
|
...removeUndefinedProperties(this._web3Wrapper.getContractDefaults()),
|
||||||
...removeUndefinedProperties(txData as any),
|
...removeUndefinedProperties(txData as any),
|
||||||
// HACK: TS can't prove that T is spreadable.
|
// HACK: TS can't prove that T is spreadable.
|
||||||
// Awaiting https://github.com/Microsoft/TypeScript/pull/13288 to be merged
|
// Awaiting https://github.com/Microsoft/TypeScript/pull/13288 to be merged
|
||||||
};
|
} as any) as TxData;
|
||||||
if (_.isUndefined(txDataWithDefaults.gas) && !_.isUndefined(estimateGasAsync)) {
|
if (_.isUndefined(txDataWithDefaults.gas) && !_.isUndefined(estimateGasAsync)) {
|
||||||
const estimatedGas = await estimateGasAsync(txData);
|
const estimatedGas = await estimateGasAsync(txData);
|
||||||
txDataWithDefaults.gas = estimatedGas;
|
txDataWithDefaults.gas = estimatedGas;
|
||||||
}
|
}
|
||||||
return txDataWithDefaults;
|
return txDataWithDefaults;
|
||||||
}
|
}
|
||||||
constructor(web3Wrapper: Web3Wrapper, abi: Web3.ContractAbi, address: string) {
|
constructor(web3Wrapper: Web3Wrapper, abi: ContractAbi, address: string) {
|
||||||
this._web3Wrapper = web3Wrapper;
|
this._web3Wrapper = web3Wrapper;
|
||||||
this.abi = abi;
|
this.abi = abi;
|
||||||
this.address = address;
|
this.address = address;
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);
|
@@ -3,9 +3,5 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib"
|
"outDir": "lib"
|
||||||
},
|
},
|
||||||
"include": [
|
"include": ["./src/**/*"]
|
||||||
"./src/**/*",
|
|
||||||
"../../node_modules/web3-typescript-typings/index.d.ts",
|
|
||||||
"../../node_modules/ethers-typescript-typings/index.d.ts"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
@@ -1,3 +0,0 @@
|
|||||||
# CHANGELOG
|
|
||||||
|
|
||||||
## v0.x.x - _TBD, 2018_
|
|
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chai-as-promised-typescript-typings",
|
|
||||||
"version": "0.0.10",
|
|
||||||
"description": "Typescript type definitions for chai-as-promised",
|
|
||||||
"main": "index.d.ts",
|
|
||||||
"types": "index.d.ts",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/0xProject/0x-monorepo.git"
|
|
||||||
},
|
|
||||||
"author": "Fabio Berger",
|
|
||||||
"contributors": [
|
|
||||||
"Leonid Logvinov <logvinov.leon@gmail.com>"
|
|
||||||
],
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/0xProject/0x-monorepo/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/chai-as-promised-typescript-typings#readme",
|
|
||||||
"dependencies": {
|
|
||||||
"chai-typescript-typings": "^0.0.4"
|
|
||||||
}
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
postpublish_utils.standardPostPublishAsync(subPackageName);
|
|
@@ -1,3 +0,0 @@
|
|||||||
# CHANGELOG
|
|
||||||
|
|
||||||
## v0.x.x - _TBD, 2018_
|
|
@@ -1,43 +0,0 @@
|
|||||||
## chai-typescript-typings
|
|
||||||
|
|
||||||
Fork of type definitions for chai that includes changes made by dirty-chai
|
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn add -D chai-typescript-typings
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Add the following line within an `include` section of your `tsconfig.json`
|
|
||||||
|
|
||||||
```json
|
|
||||||
"./node_modules/chai-typescript-typings/index.d.ts"
|
|
||||||
```
|
|
||||||
|
|
||||||
## 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.
|
|
||||||
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lint
|
|
||||||
|
|
||||||
```bash
|
|
||||||
yarn lint
|
|
||||||
```
|
|
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "chai-typescript-typings",
|
|
||||||
"version": "0.0.4",
|
|
||||||
"description": "Typescript type definitions for chai",
|
|
||||||
"main": "index.d.ts",
|
|
||||||
"types": "index.d.ts",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/0xProject/0x-monorepo.git"
|
|
||||||
},
|
|
||||||
"license": "Apache-2.0",
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/0xProject/0x-monorepo/issues"
|
|
||||||
},
|
|
||||||
"homepage": "https://github.com/0xProject/0x-monorepo/packages/chai-typescript-typings#readme"
|
|
||||||
}
|
|
@@ -1,5 +0,0 @@
|
|||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
postpublish_utils.standardPostPublishAsync(subPackageName);
|
|
@@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": ["tslint-config-0xproject"]
|
|
||||||
}
|
|
@@ -5,3 +5,4 @@ yarn-error.log
|
|||||||
/generated_docs/
|
/generated_docs/
|
||||||
test/
|
test/
|
||||||
tsconfig.json
|
tsconfig.json
|
||||||
|
/lib/src/monorepo_scripts/
|
||||||
|
130
packages/connect/CHANGELOG.json
Normal file
130
packages/connect/CHANGELOG.json
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"timestamp": 1522658513,
|
||||||
|
"version": "0.6.7",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Dependencies updated"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.6.4",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Consolidate `Order`, `SignedOrder`, and `ECSignature` into the `@0xproject/types` package",
|
||||||
|
"pr": 456
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1521298800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.6.2",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Fix JSON parse empty response",
|
||||||
|
"pr": 407
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1518706800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.6.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Add pagination options to HttpClient methods",
|
||||||
|
"pr": 393
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add heartbeat configuration to WebSocketOrderbookChannel constructor",
|
||||||
|
"pr": 406
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1518706800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.5.7",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
|
||||||
|
"pr": 389
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1518102000,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.5.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Sanitize api endpoint url and remove trailing slashes",
|
||||||
|
"pr": 318
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Improve error message text in HttpClient",
|
||||||
|
"pr": 318
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Stop appending '/v0' to api endpoint url in HttpClient",
|
||||||
|
"pr": 318
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1516114800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.4.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Prevent getFeesAsync method on HttpClient from mutating input",
|
||||||
|
"pr": 296
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1515596400,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.3.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Expose WebSocketOrderbookChannel and associated types to public interface",
|
||||||
|
"pr": 251
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Remove tokenA and tokenB fields from OrdersRequest",
|
||||||
|
"pr": 256
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1512658800,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Add SignedOrder and TokenTradeInfo to the public interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Add ECSignature and Order to the public interface"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"note": "Remove dependency on 0x.js"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1511881200,
|
||||||
|
"isPublished": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"version": "0.1.0",
|
||||||
|
"changes": [
|
||||||
|
{
|
||||||
|
"note": "Provide a HttpClient class for interacting with standard relayer api compliant HTTP urls"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"timestamp": 1511276400,
|
||||||
|
"isPublished": true
|
||||||
|
}
|
||||||
|
]
|
@@ -1,4 +1,17 @@
|
|||||||
# CHANGELOG
|
<!--
|
||||||
|
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
|
||||||
|
Edit the package's CHANGELOG.json file only.
|
||||||
|
-->
|
||||||
|
|
||||||
|
CHANGELOG
|
||||||
|
|
||||||
|
## v0.6.7 - _April 2, 2018_
|
||||||
|
|
||||||
|
* Dependencies updated
|
||||||
|
|
||||||
|
## v0.6.4 - _March 18, 2018_
|
||||||
|
|
||||||
|
* Consolidate `Order`, `SignedOrder`, and `ECSignature` into the `@0xproject/types` package (#456)
|
||||||
|
|
||||||
## v0.6.2 - _February 16, 2018_
|
## v0.6.2 - _February 16, 2018_
|
||||||
|
|
||||||
|
@@ -10,10 +10,10 @@ yarn add @0xproject/connect
|
|||||||
|
|
||||||
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
|
||||||
|
|
||||||
```
|
```json
|
||||||
"include": [
|
"compilerOptions": {
|
||||||
"./node_modules/web3-typescript-typings/index.d.ts",
|
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
|
||||||
]
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
0
packages/connect/coverage/.gitkeep
Normal file
0
packages/connect/coverage/.gitkeep
Normal file
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/connect",
|
"name": "@0xproject/connect",
|
||||||
"version": "0.6.3",
|
"version": "0.6.7",
|
||||||
"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",
|
||||||
@@ -13,15 +13,27 @@
|
|||||||
"types": "lib/src/index.d.ts",
|
"types": "lib/src/index.d.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build:watch": "tsc -w",
|
"build:watch": "tsc -w",
|
||||||
"build": "tsc",
|
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp",
|
"clean": "shx rm -rf lib test_temp scripts",
|
||||||
"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",
|
|
||||||
"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",
|
||||||
"test": "run-s clean build copy_test_fixtures run_mocha",
|
"test": "run-s clean build copy_test_fixtures run_mocha",
|
||||||
"test:circleci": "yarn test"
|
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
|
||||||
|
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
|
||||||
|
"test:circleci": "yarn test:coverage",
|
||||||
|
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
"config": {
|
||||||
|
"postpublish": {
|
||||||
|
"assets": [],
|
||||||
|
"docPublishConfigs": {
|
||||||
|
"s3BucketPath": "s3://doc-jsons/connect/",
|
||||||
|
"s3StagingBucketPath": "s3://staging-doc-jsons/connect/"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
@@ -37,34 +49,39 @@
|
|||||||
},
|
},
|
||||||
"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.0",
|
"@0xproject/assert": "^0.2.4",
|
||||||
"@0xproject/json-schemas": "^0.7.14",
|
"@0xproject/json-schemas": "^0.7.18",
|
||||||
"@0xproject/utils": "^0.4.1",
|
"@0xproject/types": "^0.4.2",
|
||||||
|
"@0xproject/typescript-typings": "^0.0.2",
|
||||||
|
"@0xproject/utils": "^0.4.4",
|
||||||
"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/tslint-config": "^0.4.10",
|
"@0xproject/monorepo-scripts": "^0.1.15",
|
||||||
|
"@0xproject/tslint-config": "^0.4.13",
|
||||||
"@types/fetch-mock": "^5.12.1",
|
"@types/fetch-mock": "^5.12.1",
|
||||||
"@types/lodash": "^4.14.86",
|
"@types/lodash": "4.14.104",
|
||||||
"@types/mocha": "^2.2.42",
|
"@types/mocha": "^2.2.42",
|
||||||
"@types/query-string": "^5.0.1",
|
"@types/query-string": "^5.0.1",
|
||||||
"@types/websocket": "^0.0.34",
|
"@types/websocket": "^0.0.34",
|
||||||
|
"async-child-process": "^1.1.1",
|
||||||
"chai": "^4.0.1",
|
"chai": "^4.0.1",
|
||||||
"chai-as-promised": "^7.1.0",
|
"chai-as-promised": "^7.1.0",
|
||||||
"chai-as-promised-typescript-typings": "^0.0.10",
|
|
||||||
"chai-typescript-typings": "^0.0.4",
|
|
||||||
"copyfiles": "^1.2.0",
|
"copyfiles": "^1.2.0",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
"fetch-mock": "^5.13.1",
|
"fetch-mock": "^5.13.1",
|
||||||
"mocha": "^4.0.1",
|
"mocha": "^4.0.1",
|
||||||
"npm-run-all": "^4.1.2",
|
"npm-run-all": "^4.1.2",
|
||||||
|
"nyc": "^11.0.1",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"typedoc": "~0.8.0",
|
"typedoc": "~0.8.0",
|
||||||
"typescript": "2.7.1",
|
"typescript": "2.7.1"
|
||||||
"web3-typescript-typings": "^0.10.0"
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,45 +0,0 @@
|
|||||||
const execAsync = require('async-child-process').execAsync;
|
|
||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const packageJSON = require('../package.json');
|
|
||||||
const tsConfig = require('../tsconfig.json');
|
|
||||||
|
|
||||||
const cwd = __dirname + '/..';
|
|
||||||
const subPackageName = packageJSON.name;
|
|
||||||
const S3BucketPath = 's3://connect-docs-jsons/';
|
|
||||||
// Include any external packages that are part of the @0xproject/connect public interface
|
|
||||||
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
|
|
||||||
const fileIncludes = [...tsConfig.include];
|
|
||||||
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
|
|
||||||
const projectFiles = fileIncludesAdjusted.join(' ');
|
|
||||||
|
|
||||||
let tag;
|
|
||||||
let version;
|
|
||||||
postpublish_utils
|
|
||||||
.getLatestTagAndVersionAsync(subPackageName)
|
|
||||||
.then(function(result) {
|
|
||||||
tag = result.tag;
|
|
||||||
version = result.version;
|
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
|
||||||
return postpublish_utils.publishReleaseNotesAsync(tag, releaseName);
|
|
||||||
})
|
|
||||||
.then(function(release) {
|
|
||||||
console.log('POSTPUBLISH: Release successful, generating docs...');
|
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
|
||||||
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.then(function(result) {
|
|
||||||
if (result.stderr !== '') {
|
|
||||||
throw new Error(result.stderr);
|
|
||||||
}
|
|
||||||
const fileName = 'v' + version + '.json';
|
|
||||||
console.log('POSTPUBLISH: Doc generation successful, uploading docs... as ', fileName);
|
|
||||||
const s3Url = S3BucketPath + fileName;
|
|
||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
throw err;
|
|
||||||
});
|
|
@@ -1,30 +0,0 @@
|
|||||||
const execAsync = require('async-child-process').execAsync;
|
|
||||||
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
|
||||||
const tsConfig = require('../tsconfig.json');
|
|
||||||
|
|
||||||
const cwd = __dirname + '/..';
|
|
||||||
const S3BucketPath = 's3://staging-connect-docs-jsons/';
|
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
|
||||||
const version = process.env.DOCS_VERSION;
|
|
||||||
// Include any external packages that are part of the @0xproject/connect public interface
|
|
||||||
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
|
|
||||||
const fileIncludes = [...tsConfig.include];
|
|
||||||
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
|
|
||||||
const projectFiles = fileIncludesAdjusted.join(' ');
|
|
||||||
|
|
||||||
execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
|
|
||||||
cwd,
|
|
||||||
})
|
|
||||||
.then(function(result) {
|
|
||||||
if (result.stderr !== '') {
|
|
||||||
throw new Error(result.stderr);
|
|
||||||
}
|
|
||||||
const fileName = 'v' + version + '.json';
|
|
||||||
const s3Url = S3BucketPath + fileName;
|
|
||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
|
||||||
cwd,
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch(function(err) {
|
|
||||||
console.log(err);
|
|
||||||
});
|
|
1
packages/connect/src/globals.d.ts
vendored
1
packages/connect/src/globals.d.ts
vendored
@@ -1,3 +1,4 @@
|
|||||||
|
declare module 'async-child-process';
|
||||||
declare module 'dirty-chai';
|
declare module 'dirty-chai';
|
||||||
|
|
||||||
declare module '*.json' {
|
declare module '*.json' {
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
import { assert } from '@0xproject/assert';
|
import { assert } from '@0xproject/assert';
|
||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
|
import { SignedOrder } from '@0xproject/types';
|
||||||
import 'isomorphic-fetch';
|
import 'isomorphic-fetch';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as queryString from 'query-string';
|
import * as queryString from 'query-string';
|
||||||
@@ -15,7 +16,6 @@ import {
|
|||||||
OrderbookResponse,
|
OrderbookResponse,
|
||||||
OrdersRequestOpts,
|
OrdersRequestOpts,
|
||||||
PagedRequestOpts,
|
PagedRequestOpts,
|
||||||
SignedOrder,
|
|
||||||
TokenPairsItem,
|
TokenPairsItem,
|
||||||
TokenPairsRequestOpts,
|
TokenPairsRequestOpts,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
@@ -2,10 +2,8 @@ export { HttpClient } from './http_client';
|
|||||||
export { WebSocketOrderbookChannel } from './ws_orderbook_channel';
|
export { WebSocketOrderbookChannel } from './ws_orderbook_channel';
|
||||||
export {
|
export {
|
||||||
Client,
|
Client,
|
||||||
ECSignature,
|
|
||||||
FeesRequest,
|
FeesRequest,
|
||||||
FeesResponse,
|
FeesResponse,
|
||||||
Order,
|
|
||||||
OrderbookChannel,
|
OrderbookChannel,
|
||||||
OrderbookChannelHandler,
|
OrderbookChannelHandler,
|
||||||
OrderbookChannelSubscriptionOpts,
|
OrderbookChannelSubscriptionOpts,
|
||||||
@@ -13,9 +11,10 @@ export {
|
|||||||
OrderbookResponse,
|
OrderbookResponse,
|
||||||
OrdersRequestOpts,
|
OrdersRequestOpts,
|
||||||
PagedRequestOpts,
|
PagedRequestOpts,
|
||||||
SignedOrder,
|
|
||||||
TokenPairsItem,
|
TokenPairsItem,
|
||||||
TokenPairsRequestOpts,
|
TokenPairsRequestOpts,
|
||||||
TokenTradeInfo,
|
TokenTradeInfo,
|
||||||
WebSocketOrderbookChannelConfig,
|
WebSocketOrderbookChannelConfig,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
|
||||||
|
export { ECSignature, Order, SignedOrder } from '@0xproject/types';
|
||||||
|
8
packages/connect/src/monorepo_scripts/postpublish.ts
Normal file
8
packages/connect/src/monorepo_scripts/postpublish.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);
|
8
packages/connect/src/monorepo_scripts/stage_docs.ts
Normal file
8
packages/connect/src/monorepo_scripts/stage_docs.ts
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import { postpublishUtils } from '@0xproject/monorepo-scripts';
|
||||||
|
|
||||||
|
import * as packageJSON from '../package.json';
|
||||||
|
import * as tsConfigJSON from '../tsconfig.json';
|
||||||
|
|
||||||
|
const cwd = `${__dirname}/..`;
|
||||||
|
// tslint:disable-next-line:no-floating-promises
|
||||||
|
postpublishUtils.publishDocsToStagingAsync(packageJSON, tsConfigJSON, cwd);
|
@@ -1,34 +1,6 @@
|
|||||||
|
import { ECSignature, Order, SignedOrder } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
// TODO: Consolidate Order, SignedOrder and ECSignature into a shared package instead of duplicating them from 0x.js
|
|
||||||
export interface Order {
|
|
||||||
maker: string;
|
|
||||||
taker: string;
|
|
||||||
makerFee: BigNumber;
|
|
||||||
takerFee: BigNumber;
|
|
||||||
makerTokenAmount: BigNumber;
|
|
||||||
takerTokenAmount: BigNumber;
|
|
||||||
makerTokenAddress: string;
|
|
||||||
takerTokenAddress: string;
|
|
||||||
salt: BigNumber;
|
|
||||||
exchangeContractAddress: string;
|
|
||||||
feeRecipient: string;
|
|
||||||
expirationUnixTimestampSec: BigNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface SignedOrder extends Order {
|
|
||||||
ecSignature: ECSignature;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Elliptic Curve signature
|
|
||||||
*/
|
|
||||||
export interface ECSignature {
|
|
||||||
v: number;
|
|
||||||
r: string;
|
|
||||||
s: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Client {
|
export interface Client {
|
||||||
getTokenPairsAsync: (requestOpts?: TokenPairsRequestOpts & PagedRequestOpts) => Promise<TokenPairsItem[]>;
|
getTokenPairsAsync: (requestOpts?: TokenPairsRequestOpts & PagedRequestOpts) => Promise<TokenPairsItem[]>;
|
||||||
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<SignedOrder[]>;
|
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<SignedOrder[]>;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user