Compare commits
369 Commits
@0xproject
...
@0xproject
Author | SHA1 | Date | |
---|---|---|---|
|
58003a2811 | ||
|
7f2a7cfa77 | ||
|
7ca1ba7e1e | ||
|
68a8acbe7b | ||
|
852811b314 | ||
|
2404ff0304 | ||
|
9ff4cacf0f | ||
|
e443cb2a3b | ||
|
f3c6cce455 | ||
|
a26e77074f | ||
|
12d62e1157 | ||
|
063c6b66b6 | ||
|
d9b1d31e73 | ||
|
0bad911a16 | ||
|
518efa8ad2 | ||
|
6e87c9e713 | ||
|
b61852b1f5 | ||
|
fcbe24a126 | ||
|
55312d00ef | ||
|
a96e3f3222 | ||
|
e35519b50f | ||
|
ae775f9664 | ||
|
071b1c47d1 | ||
|
4cc5bbaf19 | ||
|
a264c36a48 | ||
|
0c2ab22656 | ||
|
47adad5122 | ||
|
745f209f7e | ||
|
2287597712 | ||
|
eea8b15180 | ||
|
600a2b40af | ||
|
a7c51593e4 | ||
|
218876ac19 | ||
|
6cda67df10 | ||
|
897515c002 | ||
|
9deaf612f1 | ||
|
b7676d8c46 | ||
|
05aa2fa421 | ||
|
03f5c9b950 | ||
|
4c9c4c487a | ||
|
c172b9e080 | ||
|
5533a84dcd | ||
|
562bcb8571 | ||
|
00c07b38a4 | ||
|
f44bfa9682 | ||
|
7357a0a324 | ||
|
36a49966eb | ||
|
f818d06b43 | ||
|
548246c05f | ||
|
2bf1aa975a | ||
|
4be8eca3fe | ||
|
e17ace397c | ||
|
6bdabe72b9 | ||
|
00bfc7f889 | ||
|
5fcb77e591 | ||
|
df8de7ff51 | ||
|
67d7540907 | ||
|
83d0bad3a1 | ||
|
9d80a62bb1 | ||
|
629653425d | ||
|
03ce1d8641 | ||
|
225baeb5cb | ||
|
cf171d28c7 | ||
|
61434a9121 | ||
|
20590b7d35 | ||
|
fce7081215 | ||
|
83c7c8110d | ||
|
c4680a97a8 | ||
|
91a5bcf380 | ||
|
7e9ae458e2 | ||
|
4e284f5e6c | ||
|
75ded89790 | ||
|
598ce0d401 | ||
|
fc3058c1e2 | ||
|
d14ae70776 | ||
|
882816d609 | ||
|
2205e2b9a0 | ||
|
855fdd7921 | ||
|
99b1f81e89 | ||
|
46ad7b1b38 | ||
|
7e5b7a7f2a | ||
|
156e85a6b3 | ||
|
6fce02d25e | ||
|
4ddb86df53 | ||
|
3565e96f42 | ||
|
2c7db23022 | ||
|
fe51c9a9a2 | ||
|
5324dfa5a7 | ||
|
881d32e733 | ||
|
1f4cbb7479 | ||
|
b17bbdaa7d | ||
|
5458a1c1b7 | ||
|
fa98450754 | ||
|
7b4f2b47de | ||
|
400a97e7a8 | ||
|
a816fb5958 | ||
|
c7ad6ebad6 | ||
|
85b4a82a4b | ||
|
f18fa8e947 | ||
|
44cd185c66 | ||
|
890f414b5a | ||
|
03b1b12ef1 | ||
|
dae6f28f8a | ||
|
5aca3a2d7d | ||
|
7f257e258f | ||
|
6a9d3de0f9 | ||
|
05aae36813 | ||
|
d5d6079b67 | ||
|
bb4c8bf8eb | ||
|
3eb40db498 | ||
|
576f63d5e4 | ||
|
cda1dc82e9 | ||
|
2721252d6a | ||
|
45ac960308 | ||
|
47d74aa24a | ||
|
48aa1ad57d | ||
|
2eccb28dee | ||
|
9c3bfd920f | ||
|
76eb1e9e7f | ||
|
b7af597668 | ||
|
d635559a30 | ||
|
58dd90b7b7 | ||
|
ead990a734 | ||
|
27400fcd5b | ||
|
d4631e14b2 | ||
|
8df2cc103e | ||
|
8e0e9c7d3a | ||
|
913930b561 | ||
|
994c8db1f3 | ||
|
0c6cbb66b1 | ||
|
f09393d4f4 | ||
|
f6d963d45a | ||
|
39e3733be4 | ||
|
09659cc304 | ||
|
6811bdec40 | ||
|
6577d60733 | ||
|
c7db837214 | ||
|
03cb7233dc | ||
|
6682abf89d | ||
|
78fbf0f7ba | ||
|
89547332ee | ||
|
75539bf675 | ||
|
eaeb715e56 | ||
|
ca55cc99ed | ||
|
7cc4a8f5ce | ||
|
fa35768fc9 | ||
|
4d0ff0dce4 | ||
|
8aac6e46d4 | ||
|
1feac1a308 | ||
|
d3e42e4b3e | ||
|
3a1ca32ff1 | ||
|
ecf86d1d13 | ||
|
adc6170f02 | ||
|
02600f40d2 | ||
|
16ea0348a9 | ||
|
44162811bd | ||
|
57acb8db5c | ||
|
2bcb7d5639 | ||
|
a99e54330a | ||
|
e219772b2a | ||
|
144a507a2e | ||
|
5019c51940 | ||
|
da1071526f | ||
|
7ad314472d | ||
|
4f6168a982 | ||
|
218a872968 | ||
|
0043c5e1ac | ||
|
d0e7046a89 | ||
|
52ad16b920 | ||
|
5a4c0bff6a | ||
|
6205209fbb | ||
|
6ebf8a57d1 | ||
|
c02dfc4fb1 | ||
|
9d62e5fb6f | ||
|
6f13d107c4 | ||
|
e56b2ceebb | ||
|
7de244ed62 | ||
|
1e9147b8bb | ||
|
2f65fadeaa | ||
|
a17091b394 | ||
|
ed77c6cb54 | ||
|
bc37cc8a91 | ||
|
387363283c | ||
|
709026bf1a | ||
|
f2b2b86786 | ||
|
d0fbea76d8 | ||
|
8269610a5c | ||
|
20c88a46d9 | ||
|
661029f7cc | ||
|
850d32d60c | ||
|
eb881b9729 | ||
|
091ba473ff | ||
|
fca051c565 | ||
|
6463cda204 | ||
|
d004df56e3 | ||
|
359dd482c4 | ||
|
89e98240b4 | ||
|
1c1f2ef1ff | ||
|
4fa774f866 | ||
|
4671999ea0 | ||
|
0a73bbe279 | ||
|
8d30058a6d | ||
|
69151c06e4 | ||
|
2e3c02887e | ||
|
7603cef308 | ||
|
be370c4e19 | ||
|
c6dece6bd1 | ||
|
93a5b3f457 | ||
|
4242176d29 | ||
|
1cadbeed88 | ||
|
86cc011212 | ||
|
c0facfc28f | ||
|
ad52a82190 | ||
|
60b6ed514f | ||
|
ef32822b31 | ||
|
bb0cedd2de | ||
|
8175c7c085 | ||
|
5c2d725721 | ||
|
72571628da | ||
|
fa6130c907 | ||
|
8ccdd54974 | ||
|
6c1409b00d | ||
|
542a1a11b9 | ||
|
63ffa80c5c | ||
|
609342be7a | ||
|
52394884da | ||
|
af08177f79 | ||
|
45fdfc2d3d | ||
|
d18554e0e8 | ||
|
3c3f9ca85b | ||
|
005a02efeb | ||
|
6206ebc994 | ||
|
dd9f5adc2e | ||
|
748d805a32 | ||
|
4b59bf01b3 | ||
|
b4faa4851a | ||
|
f37fcc147c | ||
|
dc5694e544 | ||
|
e588f6f8c3 | ||
|
d227f2ad7c | ||
|
97c228031a | ||
|
ad85011d62 | ||
|
a70379625d | ||
|
7350333129 | ||
|
216420fdc5 | ||
|
c559fbbe8c | ||
|
71d68f975c | ||
|
390534497e | ||
|
3f0ec89f11 | ||
|
d3aa4f2bc7 | ||
|
f58f0ddb67 | ||
|
633e3129d4 | ||
|
877bdce4c8 | ||
|
6e1fbd2d97 | ||
|
36bfe62a8f | ||
|
b08bd0f9ab | ||
|
3998b47d84 | ||
|
d965fdb11d | ||
|
ddb64b3ec1 | ||
|
5055ec8617 | ||
|
8a858501f2 | ||
|
e1af25c8a6 | ||
|
6091f818da | ||
|
a45f9b4802 | ||
|
9ccf63b44a | ||
|
d34135ae43 | ||
|
a81f6f9ad1 | ||
|
8a80b10cc2 | ||
|
22b1ee132a | ||
|
ab7f681f15 | ||
|
2ac806ef08 | ||
|
13ec8ed03c | ||
|
fb77817c2d | ||
|
ceb8a492b1 | ||
|
cfc868bf4d | ||
|
7b4e2257d8 | ||
|
4ac6e5477d | ||
|
614ea14a7f | ||
|
ce45f99006 | ||
|
9203813a61 | ||
|
ba987b0574 | ||
|
b20f34adb7 | ||
|
63d0d810b1 | ||
|
5491400684 | ||
|
6a5165e9b3 | ||
|
9a7c4442d2 | ||
|
0e5363b5c3 | ||
|
d41bce36be | ||
|
1380cd811e | ||
|
d99bb3a87c | ||
|
4b9501318d | ||
|
e5eec04f92 | ||
|
f9c21efc30 | ||
|
ae72b71895 | ||
|
87e3fe725d | ||
|
807d9e3eef | ||
|
9e569b3791 | ||
|
024f093585 | ||
|
996e9e9102 | ||
|
d58bfb46cf | ||
|
eb0d7df50b | ||
|
547bee38c0 | ||
|
60614ba250 | ||
|
278f68ae77 | ||
|
b4375d6f64 | ||
|
9f47c72d31 | ||
|
de3bf03f42 | ||
|
59a39ac57d | ||
|
df9c2b193e | ||
|
3894311d68 | ||
|
35501dd4fc | ||
|
e2ca713658 | ||
|
a45de6d427 | ||
|
a350638526 | ||
|
59f9605ed9 | ||
|
9521bf8d4f | ||
|
7c1c94d39b | ||
|
8a74963815 | ||
|
3ebd8b7f45 | ||
|
ae8cb2e6a8 | ||
|
1ccb978612 | ||
|
7040a01cf2 | ||
|
6bc0e815e9 | ||
|
593f7e826c | ||
|
835fa0af13 | ||
|
0e3bd0c6c1 | ||
|
86668eb7b9 | ||
|
771f65c858 | ||
|
89d6326a83 | ||
|
8b81ea162f | ||
|
a53e6db537 | ||
|
62e3feeb94 | ||
|
a950494503 | ||
|
3cb310122e | ||
|
feace988b4 | ||
|
6a56f20928 | ||
|
80a46d14be | ||
|
fbcbf066cd | ||
|
4d30e1115f | ||
|
897cfb491c | ||
|
c2c7512431 | ||
|
568cf4d182 | ||
|
f54330f1c5 | ||
|
97e01d7a42 | ||
|
4be3e000e1 | ||
|
b47baa9ee1 | ||
|
f6c98112df | ||
|
94d29ab22e | ||
|
b0b179550a | ||
|
41c7ab4f9c | ||
|
432c7c63fe | ||
|
2bba1ae292 | ||
|
7830d518e0 | ||
|
571b3c4da8 | ||
|
5b6f8d4c3f | ||
|
ae57b21b98 | ||
|
292c3bbff8 | ||
|
065570ebf5 | ||
|
1f5dfd71d5 | ||
|
31b3ac4b98 | ||
|
ec3d8a034f | ||
|
c452294bcc | ||
|
d5757499bc | ||
|
139c8c2e78 | ||
|
215e33fa6c | ||
|
3d12b84f1d | ||
|
d8adc88c52 | ||
|
5119e49e47 | ||
|
cfb9f87418 |
@@ -6,24 +6,117 @@ jobs:
|
|||||||
- image: circleci/node:6.12
|
- image: circleci/node:6.12
|
||||||
environment:
|
environment:
|
||||||
CONTRACTS_COMMIT_HASH: '9ed05f5'
|
CONTRACTS_COMMIT_HASH: '9ed05f5'
|
||||||
|
working_directory: ~/repo
|
||||||
steps:
|
steps:
|
||||||
- checkout
|
- checkout
|
||||||
- run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV
|
- run: echo 'export PATH=$HOME/CIRCLE_PROJECT_REPONAME/node_modules/.bin:$PATH' >> $BASH_ENV
|
||||||
|
- restore_cache:
|
||||||
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
- run:
|
- run:
|
||||||
name: yarn
|
name: yarn
|
||||||
command: yarn
|
command: yarn --frozen-lockfile
|
||||||
- save_cache:
|
- save_cache:
|
||||||
key: dependency-cache-{{ checksum "package.json" }}
|
key: dependency-cache-{{ checksum "package.json" }}
|
||||||
paths:
|
paths:
|
||||||
- ~/.cache/yarn
|
- ./node_modules
|
||||||
- run: wget https://s3.amazonaws.com/testrpc-shapshots/${CONTRACTS_COMMIT_HASH}.zip
|
- run: wget https://s3.amazonaws.com/testrpc-shapshots/${CONTRACTS_COMMIT_HASH}.zip
|
||||||
- run: unzip ${CONTRACTS_COMMIT_HASH}.zip -d testrpc_snapshot
|
- run: unzip ${CONTRACTS_COMMIT_HASH}.zip -d testrpc_snapshot
|
||||||
- run: node ./node_modules/lerna/bin/lerna.js bootstrap
|
- run: node ./node_modules/lerna/bin/lerna.js bootstrap
|
||||||
- run: yarn lerna:run build
|
- run: yarn lerna:run build
|
||||||
|
- save_cache:
|
||||||
|
key: repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
paths:
|
||||||
|
- ~/repo
|
||||||
|
test-0xjs:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
- run:
|
- run:
|
||||||
name: testrpc
|
name: testrpc
|
||||||
command: npm run testrpc -- --db testrpc_snapshot
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
background: true
|
background: true
|
||||||
- run: yarn lerna:run test:circleci
|
- run: yarn lerna:run --scope 0x.js test:circleci
|
||||||
|
test-contracts:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- run:
|
||||||
|
name: testrpc
|
||||||
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
|
background: true
|
||||||
|
- run: yarn lerna:run --scope contracts test:circleci
|
||||||
|
test-deployer:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- run:
|
||||||
|
name: testrpc
|
||||||
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
|
background: true
|
||||||
|
- run: yarn lerna:run --scope @0xproject/deployer test:circleci
|
||||||
|
test-rest:
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
working_directory: ~/repo
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
|
- run:
|
||||||
|
name: testrpc
|
||||||
|
command: npm run testrpc -- --db testrpc_snapshot
|
||||||
|
background: true
|
||||||
|
- run: yarn lerna:run --ignore contracts --ignore 0x.js --ignore @0xproject/deployer test:circleci
|
||||||
|
lint:
|
||||||
|
working_directory: ~/repo
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
- run: yarn lerna:run lint
|
- run: yarn lerna:run lint
|
||||||
|
prettier:
|
||||||
|
working_directory: ~/repo
|
||||||
|
docker:
|
||||||
|
- image: circleci/node:6.12
|
||||||
|
steps:
|
||||||
|
- restore_cache:
|
||||||
|
keys:
|
||||||
|
- repo-{{ .Environment.CIRCLE_SHA1 }}
|
||||||
- run: yarn prettier:ci
|
- run: yarn prettier:ci
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
main:
|
||||||
|
jobs:
|
||||||
|
- build
|
||||||
|
- test-0xjs:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- test-contracts:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- test-deployer:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- test-rest:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- prettier:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
- lint:
|
||||||
|
requires:
|
||||||
|
- build
|
||||||
|
12
.editorconfig
Normal file
12
.editorconfig
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# EditorConfig http://EditorConfig.org
|
||||||
|
|
||||||
|
# top-most EditorConfig file
|
||||||
|
root = true
|
||||||
|
|
||||||
|
# All files
|
||||||
|
[*]
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
charset = utf-8
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 4
|
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
*.sol linguist-language=Solidity
|
@@ -2,3 +2,4 @@ lib
|
|||||||
generated
|
generated
|
||||||
.nyc_output
|
.nyc_output
|
||||||
/packages/contracts/build/contracts
|
/packages/contracts/build/contracts
|
||||||
|
package.json
|
||||||
|
1
CODEOWNERS
Normal file
1
CODEOWNERS
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* @abandeali1 @BMillman19 @dekz @fabioberger @LogvinovLeon @Recmo
|
62
ISSUE_TEMPLATE.md
Normal file
62
ISSUE_TEMPLATE.md
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
<!--- Thank you for taking the time to file an Issue -->
|
||||||
|
|
||||||
|
<!--- Before submitting please check to see if this issue was already reported -->
|
||||||
|
|
||||||
|
<!--- Provide a general summary of the issue in the Title above -->
|
||||||
|
|
||||||
|
## Expected Behavior
|
||||||
|
|
||||||
|
<!--- If you're describing a bug, tell us what should happen -->
|
||||||
|
|
||||||
|
<!--- If you're suggesting a package change/improvement, tell us how it should work -->
|
||||||
|
|
||||||
|
<!--- If you're suggesting a contract or protocol change/improvement, visit our ZEIPs repo -->
|
||||||
|
|
||||||
|
## Current Behavior
|
||||||
|
|
||||||
|
<!--- If describing a bug, tell us what happens instead of the expected behavior -->
|
||||||
|
|
||||||
|
<!--- If suggesting a change/improvement, explain the difference from current behavior -->
|
||||||
|
|
||||||
|
## Possible Solution
|
||||||
|
|
||||||
|
<!--- Not obligatory, but suggest a fix/reason for the bug, -->
|
||||||
|
|
||||||
|
<!--- or ideas how to implement the addition or change -->
|
||||||
|
|
||||||
|
## Steps to Reproduce (for bugs)
|
||||||
|
|
||||||
|
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
|
||||||
|
|
||||||
|
<!--- reproduce this bug. Include code to reproduce, if relevant -->
|
||||||
|
|
||||||
|
```
|
||||||
|
1.
|
||||||
|
2.
|
||||||
|
3.
|
||||||
|
```
|
||||||
|
|
||||||
|
## Context
|
||||||
|
|
||||||
|
<!--- How has this issue affected you? What are you trying to accomplish? -->
|
||||||
|
|
||||||
|
<!--- Providing context helps us come up with a solution that is most useful in the real world -->
|
||||||
|
|
||||||
|
## Your Environment
|
||||||
|
|
||||||
|
<!--- Include as many relevant details about the environment you experienced the bug in -->
|
||||||
|
|
||||||
|
| Package | Version |
|
||||||
|
| ------------------: | :------ |
|
||||||
|
| `0x.js` | 0.25.0 |
|
||||||
|
| `Exchange Contract` | v1 |
|
||||||
|
|
||||||
|
| Network |
|
||||||
|
| ------- |
|
||||||
|
| NAME |
|
||||||
|
|
||||||
|
<!-- For example:
|
||||||
|
| mainnet |
|
||||||
|
| kovan |
|
||||||
|
| testrpc |
|
||||||
|
-->
|
@@ -1,3 +1,38 @@
|
|||||||
This PR:
|
<!--- Thank you for taking the time to submit a Pull Request -->
|
||||||
|
|
||||||
\*
|
<!--- Provide a general summary of the issue in the Title above -->
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
<!--- Describe your changes in detail -->
|
||||||
|
|
||||||
|
## Motivation and Context
|
||||||
|
|
||||||
|
<!--- Why is this change required? What problem does it solve? -->
|
||||||
|
|
||||||
|
<!--- If it fixes an open issue, please link to the issue here. -->
|
||||||
|
|
||||||
|
## How Has This Been Tested?
|
||||||
|
|
||||||
|
<!--- Please describe in detail how you tested your changes. -->
|
||||||
|
|
||||||
|
<!--- Include details of your testing environment, and the tests you ran to -->
|
||||||
|
|
||||||
|
<!--- see how your change affects other areas of the code, etc. -->
|
||||||
|
|
||||||
|
## Types of changes
|
||||||
|
|
||||||
|
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
|
||||||
|
|
||||||
|
* [ ] Bug fix (non-breaking change which fixes an issue)
|
||||||
|
* [ ] New feature (non-breaking change which adds functionality)
|
||||||
|
* [ ] Breaking change (fix or feature that would cause existing functionality to change)
|
||||||
|
|
||||||
|
## Checklist:
|
||||||
|
|
||||||
|
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
|
||||||
|
|
||||||
|
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
|
||||||
|
|
||||||
|
* [ ] Change requires a change to the documentation.
|
||||||
|
* [ ] Added tests to cover my changes.
|
||||||
|
36
README.md
36
README.md
@@ -18,26 +18,30 @@ This repository contains all the 0x developer tools written in TypeScript. Our h
|
|||||||
|
|
||||||
### 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 |
|
| [`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/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
|
| [`chai-typescript-typings`](/packages/chai-typescript-typings) | [](https://www.npmjs.com/package/chai-typescript-typings) | Chai typescript typings |
|
||||||
| [`@0xproject/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the standard relayer api |
|
| [`web3-typescript-typings`](/packages/web3-typescript-typings) | [](https://www.npmjs.com/package/web3-typescript-typings) | Web3 typescript typings |
|
||||||
| [`@0xproject/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
|
| [`@0xproject/abi-gen`](/packages/abi-gen) | [](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
|
||||||
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
| [`@0xproject/assert`](/packages/assert) | [](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
|
||||||
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
| [`@0xproject/connect`](/packages/connect) | [](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the standard relayer api |
|
||||||
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
| [`@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/utils`](/packages/utils) | [](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities |
|
| [`@0xproject/json-schemas`](/packages/json-schemas) | [](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
|
||||||
| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper |
|
| [`@0xproject/subproviders`](/packages/subproviders) | [](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
|
||||||
|
| [`@0xproject/tslint-config`](/packages/tslint-config) | [](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
|
||||||
|
| [`@0xproject/types`](/packages/types) | [](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
|
||||||
|
| [`@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/kovan_faucets`](/packages/kovan-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
|
|
||||||
| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | Shared monorepo scripts |
|
| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | Shared monorepo scripts |
|
||||||
|
| [`@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
|
||||||
@@ -77,6 +81,12 @@ Build all packages
|
|||||||
yarn lerna:run build
|
yarn lerna:run build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Continuously rebuild on exchange
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn dev
|
||||||
|
```
|
||||||
|
|
||||||
### Lint
|
### Lint
|
||||||
|
|
||||||
Lint all packages
|
Lint all packages
|
||||||
|
@@ -2,6 +2,11 @@
|
|||||||
"lerna": "2.5.1",
|
"lerna": "2.5.1",
|
||||||
"packages": ["packages/*"],
|
"packages": ["packages/*"],
|
||||||
"version": "independent",
|
"version": "independent",
|
||||||
|
"commands": {
|
||||||
|
"publish": {
|
||||||
|
"ignore": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"]
|
||||||
|
}
|
||||||
|
},
|
||||||
"npmClient": "yarn",
|
"npmClient": "yarn",
|
||||||
"useWorkspaces": true
|
"useWorkspaces": true
|
||||||
}
|
}
|
||||||
|
@@ -3,9 +3,10 @@
|
|||||||
"name": "0x.js",
|
"name": "0x.js",
|
||||||
"workspaces": ["packages/*"],
|
"workspaces": ["packages/*"],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"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}'",
|
"prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
||||||
"prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}'",
|
"prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc",
|
||||||
"lerna:run": "lerna run",
|
"lerna:run": "lerna run",
|
||||||
"lerna:rebuild": "lerna run clean; lerna run build;",
|
"lerna:rebuild": "lerna run clean; lerna run build;",
|
||||||
"lerna:publish":
|
"lerna:publish":
|
||||||
@@ -15,9 +16,9 @@
|
|||||||
"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.1.0",
|
"@0xproject/utils": "^0.3.0",
|
||||||
"async-child-process": "^1.1.1",
|
"async-child-process": "^1.1.1",
|
||||||
"ethereumjs-testrpc": "6.0.3",
|
"ethereumjs-testrpc": "^6.0.3",
|
||||||
"lerna": "^2.5.1",
|
"lerna": "^2.5.1",
|
||||||
"prettier": "1.9.2",
|
"prettier": "1.9.2",
|
||||||
"publish-release": "0xproject/publish-release",
|
"publish-release": "0xproject/publish-release",
|
||||||
|
@@ -1,5 +1,42 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v0.32.1 - _February 7, 2018_
|
||||||
|
|
||||||
|
* Reorganized `BlockParamLiteral` export into `@0xproject/types` package (#355)
|
||||||
|
* Now using `abi-gen` package to generate ContractEventArgs types (#371)
|
||||||
|
|
||||||
|
## v0.32.0 - _February 5, 2018_
|
||||||
|
|
||||||
|
* Add `zeroEx.etherToken.getContractAddressIfExists` (#350)
|
||||||
|
* Fixed the bug causing order watcher to throw if there is an event with the same signature but different indexed fields (#366)
|
||||||
|
|
||||||
|
## v0.31.1 - _February 1, 2018_
|
||||||
|
|
||||||
|
* Fix the bug causing order watcher to throw if makerToken === zrx (#357)
|
||||||
|
|
||||||
|
## v0.31.0 - _January 30, 2018_
|
||||||
|
|
||||||
|
* 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)
|
||||||
|
|
||||||
|
## v0.30.2 - _January 29, 2018_
|
||||||
|
|
||||||
|
* Add Rinkeby testnet addresses to artifacts (#337)
|
||||||
|
* Move @0xproject/types to dependencies from devDependencies fixing missing type errors
|
||||||
|
|
||||||
|
## v0.30.1 - _January 24, 2018_
|
||||||
|
|
||||||
|
* Fix a bug allowing negative fill values (#212)
|
||||||
|
* Fix a bug that made it impossible to pass a custom ZRX address (#341)
|
||||||
|
|
||||||
|
## v0.30.0 - _January 17, 2018_
|
||||||
|
|
||||||
|
* Add an error parameter to the order watcher callback (#312)
|
||||||
|
* Fix a bug making it impossible to catch some errors from awaitTransactionMinedAsync (#312)
|
||||||
|
* Fix a bug in fillOrdersUpTo validation making it impossible to fill up to if user doesn't have enough balance to fully fill all the orders (#321)
|
||||||
|
|
||||||
## v0.29.1 - _January 11, 2018_
|
## v0.29.1 - _January 11, 2018_
|
||||||
|
|
||||||
* Fixed bignumber config issue #301 (#305)
|
* Fixed bignumber config issue #301 (#305)
|
||||||
|
44
packages/0x.js/contract_templates/contract.handlebars
Normal file
44
packages/0x.js/contract_templates/contract.handlebars
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/**
|
||||||
|
* This file is auto-generated using abi-gen. Don't edit directly.
|
||||||
|
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/0x.js/contract_templates.
|
||||||
|
*/
|
||||||
|
// tslint:disable:no-consecutive-blank-lines
|
||||||
|
// tslint:disable-next-line:no-unused-variable
|
||||||
|
import { TxData, TxDataPayable } from '@0xproject/types';
|
||||||
|
import { BigNumber, classUtils, promisify } from '@0xproject/utils';
|
||||||
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
|
import {BaseContract} from './base_contract';
|
||||||
|
|
||||||
|
{{#if events}}
|
||||||
|
export type {{contractName}}ContractEventArgs =
|
||||||
|
{{#each events}}
|
||||||
|
| {{name}}ContractEventArgs{{#if @last}};{{/if}}
|
||||||
|
{{/each}}
|
||||||
|
|
||||||
|
export enum {{contractName}}Events {
|
||||||
|
{{#each events}}
|
||||||
|
{{name}} = '{{name}}',
|
||||||
|
{{/each}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{#each events}}
|
||||||
|
{{> event}}
|
||||||
|
|
||||||
|
{{/each}}
|
||||||
|
{{/if}}
|
||||||
|
|
||||||
|
export class {{contractName}}Contract extends BaseContract {
|
||||||
|
{{#each methods}}
|
||||||
|
{{#this.constant}}
|
||||||
|
{{> call contractName=../contractName}}
|
||||||
|
{{/this.constant}}
|
||||||
|
{{^this.constant}}
|
||||||
|
{{> tx contractName=../contractName}}
|
||||||
|
{{/this.constant}}
|
||||||
|
{{/each}}
|
||||||
|
constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<TxData>) {
|
||||||
|
super(web3ContractInstance, defaults);
|
||||||
|
classUtils.bindAll(this, ['_web3ContractInstance', '_defaults']);
|
||||||
|
}
|
||||||
|
} // tslint:disable:max-file-line-count
|
@@ -5,8 +5,8 @@ public {{this.name}} = {
|
|||||||
): Promise<{{> return_type outputs=outputs}}> {
|
): Promise<{{> return_type outputs=outputs}}> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as {{contractName}}Contract;
|
||||||
const result = await promisify<{{> return_type outputs=outputs}}>(
|
const result = await promisify<{{> return_type outputs=outputs}}>(
|
||||||
self.web3ContractInstance.{{this.name}}.call,
|
self._web3ContractInstance.{{this.name}}.call,
|
||||||
self.web3ContractInstance,
|
self._web3ContractInstance,
|
||||||
)(
|
)(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
);
|
);
|
@@ -0,0 +1,5 @@
|
|||||||
|
export interface {{name}}ContractEventArgs {
|
||||||
|
{{#each inputs}}
|
||||||
|
{{name}}: {{#returnType type}}{{/returnType}};
|
||||||
|
{{/each}}
|
||||||
|
}
|
@@ -9,7 +9,7 @@ public {{this.name}} = {
|
|||||||
{{/this.payable}}
|
{{/this.payable}}
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as {{contractName}}Contract;
|
||||||
const txDataWithDefaults = await self.applyDefaultsToTxDataAsync(
|
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
||||||
txData,
|
txData,
|
||||||
self.{{this.name}}.estimateGasAsync.bind(
|
self.{{this.name}}.estimateGasAsync.bind(
|
||||||
self,
|
self,
|
||||||
@@ -17,7 +17,7 @@ public {{this.name}} = {
|
|||||||
),
|
),
|
||||||
);
|
);
|
||||||
const txHash = await promisify<string>(
|
const txHash = await promisify<string>(
|
||||||
self.web3ContractInstance.{{this.name}}, self.web3ContractInstance,
|
self._web3ContractInstance.{{this.name}}, self._web3ContractInstance,
|
||||||
)(
|
)(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
txDataWithDefaults,
|
txDataWithDefaults,
|
||||||
@@ -29,11 +29,11 @@ public {{this.name}} = {
|
|||||||
txData: TxData = {},
|
txData: TxData = {},
|
||||||
): Promise<number> {
|
): Promise<number> {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as {{contractName}}Contract;
|
||||||
const txDataWithDefaults = await self.applyDefaultsToTxDataAsync(
|
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
|
||||||
txData,
|
txData,
|
||||||
);
|
);
|
||||||
const gas = await promisify<number>(
|
const gas = await promisify<number>(
|
||||||
self.web3ContractInstance.{{this.name}}.estimateGas, self.web3ContractInstance,
|
self._web3ContractInstance.{{this.name}}.estimateGas, self._web3ContractInstance,
|
||||||
)(
|
)(
|
||||||
{{> params inputs=inputs}}
|
{{> params inputs=inputs}}
|
||||||
txDataWithDefaults,
|
txDataWithDefaults,
|
||||||
@@ -45,7 +45,7 @@ public {{this.name}} = {
|
|||||||
txData: TxData = {},
|
txData: TxData = {},
|
||||||
): string {
|
): string {
|
||||||
const self = this as {{contractName}}Contract;
|
const self = this as {{contractName}}Contract;
|
||||||
const abiEncodedTransactionData = self.web3ContractInstance.{{this.name}}.getData();
|
const abiEncodedTransactionData = self._web3ContractInstance.{{this.name}}.getData();
|
||||||
return abiEncodedTransactionData;
|
return abiEncodedTransactionData;
|
||||||
},
|
},
|
||||||
};
|
};
|
@@ -1,34 +1,33 @@
|
|||||||
{
|
{
|
||||||
"name": "0x.js",
|
"name": "0x.js",
|
||||||
"version": "0.29.0",
|
"version": "0.32.1",
|
||||||
"description": "A javascript library for interacting with the 0x protocol",
|
"description": "A javascript library for interacting with the 0x protocol",
|
||||||
"keywords": ["0x.js", "0xproject", "ethereum", "tokens", "exchange"],
|
"keywords": [
|
||||||
|
"0x.js",
|
||||||
|
"0xproject",
|
||||||
|
"ethereum",
|
||||||
|
"tokens",
|
||||||
|
"exchange"
|
||||||
|
],
|
||||||
"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",
|
||||||
"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_DIR",
|
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
|
||||||
"upload_docs_json":
|
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json",
|
||||||
"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",
|
||||||
"generate_contract_wrappers":
|
|
||||||
"node ../abi-gen/lib/index.js --abiGlob 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --templates contract_templates --output src/contract_wrappers/generated",
|
|
||||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||||
"test:circleci":
|
"test:circleci": "run-s test:coverage report_test_coverage",
|
||||||
"run-s test:coverage report_test_coverage && if [ $CIRCLE_BRANCH = \"development\" ]; then yarn test:umd; fi",
|
|
||||||
"test": "run-s clean test:commonjs",
|
"test": "run-s clean test:commonjs",
|
||||||
"test:umd": "./scripts/test_umd.sh",
|
|
||||||
"test:coverage": "nyc npm run test --all",
|
"test:coverage": "nyc npm run test --all",
|
||||||
"report_test_coverage": "nyc report --reporter=text-lcov | coveralls",
|
"report_test_coverage": "nyc report --reporter=text-lcov | coveralls",
|
||||||
"update_contracts":
|
"update_contracts": "for i in ${npm_package_config_artifacts}; do copyfiles -u 4 ../contracts/build/contracts/$i.json ../0x.js/src/artifacts; done;",
|
||||||
"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",
|
||||||
"build:umd:dev": "webpack",
|
|
||||||
"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;",
|
||||||
"test:commonjs": "run-s build:commonjs run_mocha",
|
"test:commonjs": "run-s build:commonjs run_mocha",
|
||||||
"pretest:umd": "run-s clean build:umd:dev build:commonjs",
|
|
||||||
"substitute_umd_bundle": "shx mv _bundles/* lib/src",
|
|
||||||
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit"
|
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
@@ -43,10 +42,9 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/abi-gen": "^0.0.4",
|
"@0xproject/abi-gen": "^0.2.0",
|
||||||
"@0xproject/dev-utils": "^0.0.3",
|
"@0xproject/dev-utils": "^0.0.11",
|
||||||
"@0xproject/tslint-config": "^0.4.0",
|
"@0xproject/tslint-config": "^0.4.7",
|
||||||
"@0xproject/types": "^0.1.2",
|
|
||||||
"@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.86",
|
||||||
@@ -57,9 +55,9 @@
|
|||||||
"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.3",
|
"chai-as-promised-typescript-typings": "^0.0.8",
|
||||||
"chai-bignumber": "^2.0.1",
|
"chai-bignumber": "^2.0.1",
|
||||||
"chai-typescript-typings": "^0.0.1",
|
"chai-typescript-typings": "^0.0.2",
|
||||||
"copyfiles": "^1.2.0",
|
"copyfiles": "^1.2.0",
|
||||||
"coveralls": "^3.0.0",
|
"coveralls": "^3.0.0",
|
||||||
"dirty-chai": "^2.0.1",
|
"dirty-chai": "^2.0.1",
|
||||||
@@ -69,31 +67,31 @@
|
|||||||
"nyc": "^11.0.1",
|
"nyc": "^11.0.1",
|
||||||
"opn-cli": "^3.1.0",
|
"opn-cli": "^3.1.0",
|
||||||
"request": "^2.81.0",
|
"request": "^2.81.0",
|
||||||
"request-promise-native": "^1.0.4",
|
"request-promise-native": "^1.0.5",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"sinon": "^4.0.0",
|
"sinon": "^4.0.0",
|
||||||
"source-map-support": "^0.5.0",
|
"source-map-support": "^0.5.0",
|
||||||
"truffle-hdwallet-provider": "^0.0.3",
|
"truffle-hdwallet-provider": "^0.0.3",
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"typedoc": "~0.8.0",
|
"typedoc": "~0.8.0",
|
||||||
"typescript": "~2.6.1",
|
"types-bn": "^0.0.1",
|
||||||
|
"typescript": "2.7.1",
|
||||||
"web3-provider-engine": "^13.0.1",
|
"web3-provider-engine": "^13.0.1",
|
||||||
"web3-typescript-typings": "^0.9.0",
|
"web3-typescript-typings": "^0.9.9",
|
||||||
"webpack": "^3.1.0"
|
"webpack": "^3.1.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.0.9",
|
"@0xproject/assert": "^0.0.17",
|
||||||
"@0xproject/json-schemas": "^0.7.1",
|
"@0xproject/json-schemas": "^0.7.9",
|
||||||
"@0xproject/utils": "^0.1.2",
|
"@0xproject/types": "^0.2.0",
|
||||||
"@0xproject/web3-wrapper": "^0.1.2",
|
"@0xproject/utils": "^0.3.1",
|
||||||
|
"@0xproject/web3-wrapper": "^0.1.11",
|
||||||
"bintrees": "^1.0.2",
|
"bintrees": "^1.0.2",
|
||||||
"bn.js": "^4.11.8",
|
"bn.js": "^4.11.8",
|
||||||
"compare-versions": "^3.0.1",
|
|
||||||
"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",
|
||||||
"find-versions": "^2.0.0",
|
"js-sha3": "^0.7.0",
|
||||||
"js-sha3": "^0.6.1",
|
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"uuid": "^3.1.0",
|
"uuid": "^3.1.0",
|
||||||
"web3": "^0.20.0"
|
"web3": "^0.20.0"
|
||||||
|
@@ -8,26 +8,21 @@ const S3BucketPath = 's3://0xjs-docs-jsons/';
|
|||||||
|
|
||||||
let tag;
|
let tag;
|
||||||
let version;
|
let version;
|
||||||
postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
tag = result.tag;
|
tag = result.tag;
|
||||||
version = result.version;
|
version = result.version;
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
||||||
const assets = [
|
const assets = [__dirname + '/../_bundles/index.js', __dirname + '/../_bundles/index.min.js'];
|
||||||
__dirname + '/../_bundles/index.js',
|
return postpublish_utils.publishReleaseNotes(tag, releaseName, assets);
|
||||||
__dirname + '/../_bundles/index.min.js',
|
|
||||||
];
|
|
||||||
return postpublish_utils.publishReleaseNotes(tag, releaseName, assets);
|
|
||||||
})
|
})
|
||||||
.then(function(release) {
|
.then(function(release) {
|
||||||
console.log('POSTPUBLISH: Release successful, generating docs...');
|
console.log('POSTPUBLISH: Release successful, generating docs...');
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
||||||
return execAsync(
|
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json', {
|
||||||
'JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json',
|
cwd,
|
||||||
{
|
});
|
||||||
cwd,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
if (result.stderr !== '') {
|
if (result.stderr !== '') {
|
||||||
@@ -39,6 +34,7 @@ postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
|||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
||||||
cwd,
|
cwd,
|
||||||
});
|
});
|
||||||
}).catch (function(err) {
|
})
|
||||||
|
.catch(function(err) {
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
@@ -1,6 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# This script runs umd tests and cleans up after them while preserving the `return_code` for CI
|
|
||||||
# UMD tests should only be run after building the commonjs because they reuse some of the commonjs build artifacts
|
|
||||||
run-s substitute_umd_bundle run_mocha
|
|
||||||
return_code=$?
|
|
||||||
exit $return_code
|
|
@@ -1,5 +1,6 @@
|
|||||||
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
|
||||||
import { BigNumber, intervalUtils } from '@0xproject/utils';
|
import { TransactionReceiptWithDecodedLogs } from '@0xproject/types';
|
||||||
|
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';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -12,16 +13,7 @@ import { TokenTransferProxyWrapper } from './contract_wrappers/token_transfer_pr
|
|||||||
import { TokenWrapper } from './contract_wrappers/token_wrapper';
|
import { TokenWrapper } from './contract_wrappers/token_wrapper';
|
||||||
import { OrderStateWatcher } from './order_watcher/order_state_watcher';
|
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 {
|
import { ECSignature, Order, SignedOrder, Web3Provider, ZeroExConfig, ZeroExError } from './types';
|
||||||
ECSignature,
|
|
||||||
Order,
|
|
||||||
SignedOrder,
|
|
||||||
TransactionReceiptWithDecodedLogs,
|
|
||||||
Web3Provider,
|
|
||||||
ZeroExConfig,
|
|
||||||
ZeroExError,
|
|
||||||
} from './types';
|
|
||||||
import { AbiDecoder } from './utils/abi_decoder';
|
|
||||||
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';
|
||||||
@@ -191,6 +183,7 @@ export class ZeroEx {
|
|||||||
this._abiDecoder,
|
this._abiDecoder,
|
||||||
this.token,
|
this.token,
|
||||||
config.exchangeContractAddress,
|
config.exchangeContractAddress,
|
||||||
|
config.zrxContractAddress,
|
||||||
);
|
);
|
||||||
this.tokenRegistry = new TokenRegistryWrapper(
|
this.tokenRegistry = new TokenRegistryWrapper(
|
||||||
this._web3Wrapper,
|
this._web3Wrapper,
|
||||||
@@ -239,20 +232,22 @@ export class ZeroEx {
|
|||||||
* @param orderHash Hex encoded orderHash to sign.
|
* @param orderHash Hex encoded orderHash to sign.
|
||||||
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
|
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
|
||||||
* must be available via the Web3.Provider supplied to 0x.js.
|
* must be available via the Web3.Provider supplied to 0x.js.
|
||||||
|
* @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message`
|
||||||
|
* themselves (e.g Parity Signer, Ledger, TestRPC) and others expect it to already be done by the client
|
||||||
|
* (e.g Metamask). Depending on which signer this request is going to, decide on whether to add the prefix
|
||||||
|
* before sending the request.
|
||||||
* @return An object containing the Elliptic curve signature parameters generated by signing the orderHash.
|
* @return An object containing the Elliptic curve signature parameters generated by signing the orderHash.
|
||||||
*/
|
*/
|
||||||
public async signOrderHashAsync(orderHash: string, signerAddress: string): Promise<ECSignature> {
|
public async signOrderHashAsync(
|
||||||
|
orderHash: string,
|
||||||
|
signerAddress: string,
|
||||||
|
shouldAddPersonalMessagePrefix: boolean,
|
||||||
|
): Promise<ECSignature> {
|
||||||
assert.isHexString('orderHash', orderHash);
|
assert.isHexString('orderHash', orderHash);
|
||||||
await assert.isSenderAddressAsync('signerAddress', signerAddress, this._web3Wrapper);
|
await assert.isSenderAddressAsync('signerAddress', signerAddress, this._web3Wrapper);
|
||||||
|
|
||||||
let msgHashHex;
|
let msgHashHex = orderHash;
|
||||||
const nodeVersion = await this._web3Wrapper.getNodeVersionAsync();
|
if (shouldAddPersonalMessagePrefix) {
|
||||||
const isParityNode = utils.isParityNode(nodeVersion);
|
|
||||||
const isTestRpc = utils.isTestRpc(nodeVersion);
|
|
||||||
if (isParityNode || isTestRpc) {
|
|
||||||
// Parity and TestRpc nodes add the personalMessage prefix itself
|
|
||||||
msgHashHex = orderHash;
|
|
||||||
} else {
|
|
||||||
const orderHashBuff = ethUtil.toBuffer(orderHash);
|
const orderHashBuff = ethUtil.toBuffer(orderHash);
|
||||||
const msgHashBuff = ethUtil.hashPersonalMessage(orderHashBuff);
|
const msgHashBuff = ethUtil.hashPersonalMessage(orderHashBuff);
|
||||||
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
|
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
|
||||||
@@ -302,30 +297,37 @@ export class ZeroEx {
|
|||||||
|
|
||||||
const txReceiptPromise = new Promise(
|
const txReceiptPromise = new Promise(
|
||||||
(resolve: (receipt: TransactionReceiptWithDecodedLogs) => void, reject) => {
|
(resolve: (receipt: TransactionReceiptWithDecodedLogs) => void, reject) => {
|
||||||
const intervalId = intervalUtils.setAsyncExcludingInterval(async () => {
|
const intervalId = intervalUtils.setAsyncExcludingInterval(
|
||||||
if (timeoutExceeded) {
|
async () => {
|
||||||
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
if (timeoutExceeded) {
|
||||||
return reject(ZeroExError.TransactionMiningTimeout);
|
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
||||||
}
|
return reject(ZeroExError.TransactionMiningTimeout);
|
||||||
|
}
|
||||||
|
|
||||||
const transactionReceipt = await this._web3Wrapper.getTransactionReceiptAsync(txHash);
|
const transactionReceipt = await this._web3Wrapper.getTransactionReceiptAsync(txHash);
|
||||||
if (!_.isNull(transactionReceipt)) {
|
if (!_.isNull(transactionReceipt)) {
|
||||||
|
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
||||||
|
const logsWithDecodedArgs = _.map(
|
||||||
|
transactionReceipt.logs,
|
||||||
|
this._abiDecoder.tryToDecodeLogOrNoop.bind(this._abiDecoder),
|
||||||
|
);
|
||||||
|
const transactionReceiptWithDecodedLogArgs: TransactionReceiptWithDecodedLogs = {
|
||||||
|
...transactionReceipt,
|
||||||
|
logs: logsWithDecodedArgs,
|
||||||
|
};
|
||||||
|
resolve(transactionReceiptWithDecodedLogArgs);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
pollingIntervalMs,
|
||||||
|
(err: Error) => {
|
||||||
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
intervalUtils.clearAsyncExcludingInterval(intervalId);
|
||||||
const logsWithDecodedArgs = _.map(
|
reject(err);
|
||||||
transactionReceipt.logs,
|
},
|
||||||
this._abiDecoder.tryToDecodeLogOrNoop.bind(this._abiDecoder),
|
);
|
||||||
);
|
|
||||||
const transactionReceiptWithDecodedLogArgs: TransactionReceiptWithDecodedLogs = {
|
|
||||||
...transactionReceipt,
|
|
||||||
logs: logsWithDecodedArgs,
|
|
||||||
};
|
|
||||||
resolve(transactionReceiptWithDecodedLogArgs);
|
|
||||||
}
|
|
||||||
}, pollingIntervalMs);
|
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
const txReceipt = await txReceiptPromise;
|
||||||
return txReceiptPromise;
|
return txReceipt;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* 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
|
||||||
|
@@ -274,6 +274,9 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
|
"address": "0xc00fd9820cd2898cc4c054b7bf142de637ad129a"
|
||||||
},
|
},
|
||||||
|
"4": {
|
||||||
|
"address": "0xc778417e063141139fce010982780140aa0cd5ab"
|
||||||
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
|
"address": "0x653e49e301e508a13237c0ddc98ae7d4cd2667a1"
|
||||||
},
|
},
|
||||||
|
@@ -597,6 +597,9 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac"
|
"address": "0x479cc461fecd078f766ecc58533d6f69580cf3ac"
|
||||||
},
|
},
|
||||||
|
"4": {
|
||||||
|
"address": "0x1d16ef40fac01cec8adac2ac49427b9384192c05"
|
||||||
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364"
|
"address": "0x90fe2af704b34e0224bf2299c838e04d4dcf1364"
|
||||||
},
|
},
|
||||||
|
@@ -534,6 +534,9 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
|
"address": "0x6b1a50f0bb5a7995444bd3877b22dc89c62843ed"
|
||||||
},
|
},
|
||||||
|
"4": {
|
||||||
|
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
||||||
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
|
"address": "0xf18e504561f4347bea557f3d4558f559dddbae7f"
|
||||||
},
|
},
|
||||||
|
@@ -174,6 +174,9 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
"address": "0x4e9aad8184de8833365fea970cd9149372fdf1e6"
|
||||||
},
|
},
|
||||||
|
"4": {
|
||||||
|
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
||||||
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
|
"address": "0x087eed4bc1ee3de49befbd66c662b434b15d49d4"
|
||||||
},
|
},
|
||||||
|
@@ -7,6 +7,9 @@
|
|||||||
"3": {
|
"3": {
|
||||||
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
"address": "0xa8e9fa8f91e5ae138c74648c9c304f1c75003a8d"
|
||||||
},
|
},
|
||||||
|
"4": {
|
||||||
|
"address": "0x00f58d6d585f84b2d7267940cede30ce2fe6eae8"
|
||||||
|
},
|
||||||
"42": {
|
"42": {
|
||||||
"address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
|
"address": "0x6ff6c0ff1d68b964901f986d4c9fa3ac68346570"
|
||||||
},
|
},
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { intervalUtils } from '@0xproject/utils';
|
import { BlockParamLiteral, LogWithDecodedArgs, RawLog } from '@0xproject/types';
|
||||||
|
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';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -6,18 +7,14 @@ import * as Web3 from 'web3';
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
Artifact,
|
Artifact,
|
||||||
BlockParamLiteral,
|
|
||||||
BlockRange,
|
BlockRange,
|
||||||
ContractEventArgs,
|
ContractEventArgs,
|
||||||
ContractEvents,
|
ContractEvents,
|
||||||
EventCallback,
|
EventCallback,
|
||||||
IndexedFilterValues,
|
IndexedFilterValues,
|
||||||
InternalZeroExError,
|
InternalZeroExError,
|
||||||
LogWithDecodedArgs,
|
|
||||||
RawLog,
|
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { AbiDecoder } from '../utils/abi_decoder';
|
|
||||||
import { constants } from '../utils/constants';
|
import { constants } from '../utils/constants';
|
||||||
import { filterUtils } from '../utils/filter_utils';
|
import { filterUtils } from '../utils/filter_utils';
|
||||||
|
|
||||||
@@ -34,10 +31,10 @@ const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {
|
|||||||
|
|
||||||
export class ContractWrapper {
|
export class ContractWrapper {
|
||||||
protected _web3Wrapper: Web3Wrapper;
|
protected _web3Wrapper: Web3Wrapper;
|
||||||
private _networkId: number;
|
protected _networkId: number;
|
||||||
private _abiDecoder?: AbiDecoder;
|
private _abiDecoder?: AbiDecoder;
|
||||||
private _blockAndLogStreamerIfExists: BlockAndLogStreamer | undefined;
|
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
|
||||||
private _blockAndLogStreamInterval: NodeJS.Timer;
|
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
|
||||||
private _filters: { [filterToken: string]: Web3.FilterObject };
|
private _filters: { [filterToken: string]: Web3.FilterObject };
|
||||||
private _filterCallbacks: {
|
private _filterCallbacks: {
|
||||||
[filterToken: string]: EventCallback<ContractEventArgs>;
|
[filterToken: string]: EventCallback<ContractEventArgs>;
|
||||||
@@ -54,7 +51,7 @@ export class ContractWrapper {
|
|||||||
this._onLogAddedSubscriptionToken = undefined;
|
this._onLogAddedSubscriptionToken = undefined;
|
||||||
this._onLogRemovedSubscriptionToken = undefined;
|
this._onLogRemovedSubscriptionToken = undefined;
|
||||||
}
|
}
|
||||||
protected unsubscribeAll(): void {
|
protected _unsubscribeAll(): void {
|
||||||
const filterTokens = _.keys(this._filterCallbacks);
|
const filterTokens = _.keys(this._filterCallbacks);
|
||||||
_.each(filterTokens, filterToken => {
|
_.each(filterTokens, filterToken => {
|
||||||
this._unsubscribe(filterToken);
|
this._unsubscribe(filterToken);
|
||||||
@@ -164,9 +161,10 @@ export class ContractWrapper {
|
|||||||
);
|
);
|
||||||
const catchAllLogFilter = {};
|
const catchAllLogFilter = {};
|
||||||
this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter);
|
this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter);
|
||||||
this._blockAndLogStreamInterval = intervalUtils.setAsyncExcludingInterval(
|
this._blockAndLogStreamIntervalIfExists = intervalUtils.setAsyncExcludingInterval(
|
||||||
this._reconcileBlockAsync.bind(this),
|
this._reconcileBlockAsync.bind(this),
|
||||||
constants.DEFAULT_BLOCK_POLLING_INTERVAL,
|
constants.DEFAULT_BLOCK_POLLING_INTERVAL,
|
||||||
|
this._onReconcileBlockError.bind(this),
|
||||||
);
|
);
|
||||||
let isRemoved = false;
|
let isRemoved = false;
|
||||||
this._onLogAddedSubscriptionToken = this._blockAndLogStreamerIfExists.subscribeToOnLogAdded(
|
this._onLogAddedSubscriptionToken = this._blockAndLogStreamerIfExists.subscribeToOnLogAdded(
|
||||||
@@ -177,6 +175,12 @@ export class ContractWrapper {
|
|||||||
this._onLogStateChanged.bind(this, isRemoved),
|
this._onLogStateChanged.bind(this, isRemoved),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
private _onReconcileBlockError(err: Error): void {
|
||||||
|
const filterTokens = _.keys(this._filterCallbacks);
|
||||||
|
_.each(filterTokens, filterToken => {
|
||||||
|
this._unsubscribe(filterToken, err);
|
||||||
|
});
|
||||||
|
}
|
||||||
private _setNetworkId(networkId: number): void {
|
private _setNetworkId(networkId: number): void {
|
||||||
this._networkId = networkId;
|
this._networkId = networkId;
|
||||||
}
|
}
|
||||||
@@ -186,22 +190,15 @@ export class ContractWrapper {
|
|||||||
}
|
}
|
||||||
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogAdded(this._onLogAddedSubscriptionToken as string);
|
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogAdded(this._onLogAddedSubscriptionToken as string);
|
||||||
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogRemoved(this._onLogRemovedSubscriptionToken as string);
|
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogRemoved(this._onLogRemovedSubscriptionToken as string);
|
||||||
intervalUtils.clearAsyncExcludingInterval(this._blockAndLogStreamInterval);
|
intervalUtils.clearAsyncExcludingInterval(this._blockAndLogStreamIntervalIfExists as NodeJS.Timer);
|
||||||
delete this._blockAndLogStreamerIfExists;
|
delete this._blockAndLogStreamerIfExists;
|
||||||
}
|
}
|
||||||
private async _reconcileBlockAsync(): Promise<void> {
|
private async _reconcileBlockAsync(): Promise<void> {
|
||||||
try {
|
const latestBlock = await this._web3Wrapper.getBlockAsync(BlockParamLiteral.Latest);
|
||||||
const latestBlock = await this._web3Wrapper.getBlockAsync(BlockParamLiteral.Latest);
|
// We need to coerce to Block type cause Web3.Block includes types for mempool blocks
|
||||||
// We need to coerce to Block type cause Web3.Block includes types for mempool blocks
|
if (!_.isUndefined(this._blockAndLogStreamerIfExists)) {
|
||||||
if (!_.isUndefined(this._blockAndLogStreamerIfExists)) {
|
// If we clear the interval while fetching the block - this._blockAndLogStreamer will be undefined
|
||||||
// If we clear the interval while fetching the block - this._blockAndLogStreamer will be undefined
|
await this._blockAndLogStreamerIfExists.reconcileNewBlock((latestBlock as any) as Block);
|
||||||
await this._blockAndLogStreamerIfExists.reconcileNewBlock((latestBlock as any) as Block);
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
const filterTokens = _.keys(this._filterCallbacks);
|
|
||||||
_.each(filterTokens, filterToken => {
|
|
||||||
this._unsubscribe(filterToken, err);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,24 +1,15 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { LogWithDecodedArgs } from '@0xproject/types';
|
||||||
|
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 { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
import {
|
import { BlockRange, EventCallback, IndexedFilterValues, TransactionOpts, ZeroExError } from '../types';
|
||||||
BlockRange,
|
|
||||||
EtherTokenContractEventArgs,
|
|
||||||
EtherTokenEvents,
|
|
||||||
EventCallback,
|
|
||||||
IndexedFilterValues,
|
|
||||||
LogWithDecodedArgs,
|
|
||||||
TransactionOpts,
|
|
||||||
ZeroExError,
|
|
||||||
} from '../types';
|
|
||||||
import { AbiDecoder } from '../utils/abi_decoder';
|
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
|
|
||||||
import { ContractWrapper } from './contract_wrapper';
|
import { ContractWrapper } from './contract_wrapper';
|
||||||
import { EtherTokenContract } from './generated/ether_token';
|
import { EtherTokenContract, EtherTokenContractEventArgs, EtherTokenEvents } from './generated/ether_token';
|
||||||
import { TokenWrapper } from './token_wrapper';
|
import { TokenWrapper } from './token_wrapper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -160,11 +151,24 @@ export class EtherTokenWrapper extends ContractWrapper {
|
|||||||
/**
|
/**
|
||||||
* Cancels all existing subscriptions
|
* Cancels all existing subscriptions
|
||||||
*/
|
*/
|
||||||
public unsubscribeAll(): void {
|
public _unsubscribeAll(): void {
|
||||||
super.unsubscribeAll();
|
super._unsubscribeAll();
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Retrieves the Ethereum address of the EtherToken contract deployed on the network
|
||||||
|
* that the user-passed web3 provider is connected to. If it's not Kovan, Ropsten, Rinkeby, Mainnet or TestRPC
|
||||||
|
* (networkId: 50), it will return undefined (e.g a private network).
|
||||||
|
* @returns The Ethereum address of the EtherToken contract or undefined.
|
||||||
|
*/
|
||||||
|
public getContractAddressIfExists(): string | undefined {
|
||||||
|
const networkSpecificArtifact = artifacts.EtherTokenArtifact.networks[this._networkId];
|
||||||
|
const contractAddressIfExists = _.isUndefined(networkSpecificArtifact)
|
||||||
|
? undefined
|
||||||
|
: networkSpecificArtifact.address;
|
||||||
|
return contractAddressIfExists;
|
||||||
}
|
}
|
||||||
private _invalidateContractInstance(): void {
|
private _invalidateContractInstance(): void {
|
||||||
this.unsubscribeAll();
|
this._unsubscribeAll();
|
||||||
this._etherTokenContractsByAddress = {};
|
this._etherTokenContractsByAddress = {};
|
||||||
}
|
}
|
||||||
private async _getEtherTokenContractAsync(etherTokenAddress: string): Promise<EtherTokenContract> {
|
private async _getEtherTokenContractAsync(etherTokenAddress: string): Promise<EtherTokenContract> {
|
||||||
|
@@ -1,23 +1,18 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BlockParamLiteral, DecodedLogArgs, LogWithDecodedArgs } from '@0xproject/types';
|
||||||
|
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 * as Web3 from 'web3';
|
||||||
|
|
||||||
import { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
import {
|
import {
|
||||||
BlockParamLiteral,
|
|
||||||
BlockRange,
|
BlockRange,
|
||||||
DecodedLogArgs,
|
|
||||||
ECSignature,
|
ECSignature,
|
||||||
EventCallback,
|
EventCallback,
|
||||||
ExchangeContractErrCodes,
|
ExchangeContractErrCodes,
|
||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
ExchangeContractEventArgs,
|
|
||||||
ExchangeEvents,
|
|
||||||
IndexedFilterValues,
|
IndexedFilterValues,
|
||||||
LogErrorContractEventArgs,
|
|
||||||
LogWithDecodedArgs,
|
|
||||||
MethodOpts,
|
MethodOpts,
|
||||||
Order,
|
Order,
|
||||||
OrderAddresses,
|
OrderAddresses,
|
||||||
@@ -28,7 +23,6 @@ import {
|
|||||||
SignedOrder,
|
SignedOrder,
|
||||||
ValidateOrderFillableOpts,
|
ValidateOrderFillableOpts,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { AbiDecoder } from '../utils/abi_decoder';
|
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
import { decorators } from '../utils/decorators';
|
import { decorators } from '../utils/decorators';
|
||||||
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
|
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
|
||||||
@@ -36,7 +30,12 @@ import { OrderValidationUtils } from '../utils/order_validation_utils';
|
|||||||
import { utils } from '../utils/utils';
|
import { utils } from '../utils/utils';
|
||||||
|
|
||||||
import { ContractWrapper } from './contract_wrapper';
|
import { ContractWrapper } from './contract_wrapper';
|
||||||
import { ExchangeContract } from './generated/exchange';
|
import {
|
||||||
|
ExchangeContract,
|
||||||
|
ExchangeContractEventArgs,
|
||||||
|
ExchangeEvents,
|
||||||
|
LogErrorContractEventArgs,
|
||||||
|
} from './generated/exchange';
|
||||||
import { TokenWrapper } from './token_wrapper';
|
import { TokenWrapper } from './token_wrapper';
|
||||||
|
|
||||||
const SHOULD_VALIDATE_BY_DEFAULT = true;
|
const SHOULD_VALIDATE_BY_DEFAULT = true;
|
||||||
@@ -87,11 +86,13 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
abiDecoder: AbiDecoder,
|
abiDecoder: AbiDecoder,
|
||||||
tokenWrapper: TokenWrapper,
|
tokenWrapper: TokenWrapper,
|
||||||
contractAddressIfExists?: string,
|
contractAddressIfExists?: string,
|
||||||
|
zrxContractAddressIfExists?: string,
|
||||||
) {
|
) {
|
||||||
super(web3Wrapper, networkId, abiDecoder);
|
super(web3Wrapper, networkId, abiDecoder);
|
||||||
this._tokenWrapper = tokenWrapper;
|
this._tokenWrapper = tokenWrapper;
|
||||||
this._orderValidationUtils = new OrderValidationUtils(this);
|
this._orderValidationUtils = new OrderValidationUtils(this);
|
||||||
this._contractAddressIfExists = contractAddressIfExists;
|
this._contractAddressIfExists = contractAddressIfExists;
|
||||||
|
this._zrxContractAddressIfExists = zrxContractAddressIfExists;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Returns the unavailable takerAmount of an order. Unavailable amount is defined as the total
|
* Returns the unavailable takerAmount of an order. Unavailable amount is defined as the total
|
||||||
@@ -258,16 +259,18 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
? SHOULD_VALIDATE_BY_DEFAULT
|
? SHOULD_VALIDATE_BY_DEFAULT
|
||||||
: orderTransactionOpts.shouldValidate;
|
: orderTransactionOpts.shouldValidate;
|
||||||
if (shouldValidate) {
|
if (shouldValidate) {
|
||||||
|
let filledTakerTokenAmount = new BigNumber(0);
|
||||||
const zrxTokenAddress = this.getZRXTokenAddress();
|
const zrxTokenAddress = this.getZRXTokenAddress();
|
||||||
const exchangeTradeEmulator = new ExchangeTransferSimulator(this._tokenWrapper, BlockParamLiteral.Latest);
|
const exchangeTradeEmulator = new ExchangeTransferSimulator(this._tokenWrapper, BlockParamLiteral.Latest);
|
||||||
for (const signedOrder of signedOrders) {
|
for (const signedOrder of signedOrders) {
|
||||||
await this._orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
|
const singleFilledTakerTokenAmount = await this._orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
|
||||||
exchangeTradeEmulator,
|
exchangeTradeEmulator,
|
||||||
signedOrder,
|
signedOrder,
|
||||||
fillTakerTokenAmount,
|
fillTakerTokenAmount.minus(filledTakerTokenAmount),
|
||||||
takerAddress,
|
takerAddress,
|
||||||
zrxTokenAddress,
|
zrxTokenAddress,
|
||||||
);
|
);
|
||||||
|
filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -676,8 +679,8 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
/**
|
/**
|
||||||
* Cancels all existing subscriptions
|
* Cancels all existing subscriptions
|
||||||
*/
|
*/
|
||||||
public unsubscribeAll(): void {
|
public _unsubscribeAll(): void {
|
||||||
super.unsubscribeAll();
|
super._unsubscribeAll();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Gets historical logs without creating a subscription
|
* Gets historical logs without creating a subscription
|
||||||
@@ -842,9 +845,9 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | Web3.LogEntry>): void {
|
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | Web3.LogEntry>): void {
|
||||||
const errLog = _.find(logs, {
|
const errLog = _.find(logs, {
|
||||||
event: ExchangeEvents.LogError,
|
event: ExchangeEvents.LogError,
|
||||||
}) as LogWithDecodedArgs<LogErrorContractEventArgs> | undefined;
|
});
|
||||||
if (!_.isUndefined(errLog)) {
|
if (!_.isUndefined(errLog)) {
|
||||||
const logArgs = errLog.args;
|
const logArgs = (errLog as LogWithDecodedArgs<LogErrorContractEventArgs>).args;
|
||||||
const errCode = logArgs.errorId.toNumber();
|
const errCode = logArgs.errorId.toNumber();
|
||||||
const errMessage = this._exchangeContractErrCodesToMsg[errCode];
|
const errMessage = this._exchangeContractErrCodesToMsg[errCode];
|
||||||
throw new Error(errMessage);
|
throw new Error(errMessage);
|
||||||
@@ -859,7 +862,7 @@ export class ExchangeWrapper extends ContractWrapper {
|
|||||||
return contractAddress;
|
return contractAddress;
|
||||||
}
|
}
|
||||||
private _invalidateContractInstances(): void {
|
private _invalidateContractInstances(): void {
|
||||||
this.unsubscribeAll();
|
this._unsubscribeAll();
|
||||||
delete this._exchangeContractIfExists;
|
delete this._exchangeContractIfExists;
|
||||||
}
|
}
|
||||||
private async _isValidSignatureUsingContractCallAsync(
|
private async _isValidSignatureUsingContractCallAsync(
|
||||||
|
@@ -3,9 +3,9 @@ import * as _ from 'lodash';
|
|||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
export class BaseContract {
|
export class BaseContract {
|
||||||
protected web3ContractInstance: Web3.ContractInstance;
|
protected _web3ContractInstance: Web3.ContractInstance;
|
||||||
protected defaults: Partial<TxData>;
|
protected _defaults: Partial<TxData>;
|
||||||
protected async applyDefaultsToTxDataAsync<T extends TxData|TxDataPayable>(
|
protected async _applyDefaultsToTxDataAsync<T extends TxData|TxDataPayable>(
|
||||||
txData: T,
|
txData: T,
|
||||||
estimateGasAsync?: (txData: T) => Promise<number>,
|
estimateGasAsync?: (txData: T) => Promise<number>,
|
||||||
): Promise<TxData> {
|
): Promise<TxData> {
|
||||||
@@ -15,7 +15,7 @@ export class BaseContract {
|
|||||||
// 3. Gas estimate calculation + safety margin
|
// 3. Gas estimate calculation + safety margin
|
||||||
const removeUndefinedProperties = _.pickBy;
|
const removeUndefinedProperties = _.pickBy;
|
||||||
const txDataWithDefaults = {
|
const txDataWithDefaults = {
|
||||||
...removeUndefinedProperties(this.defaults),
|
...removeUndefinedProperties(this._defaults),
|
||||||
...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
|
||||||
@@ -27,7 +27,7 @@ export class BaseContract {
|
|||||||
return txDataWithDefaults;
|
return txDataWithDefaults;
|
||||||
}
|
}
|
||||||
constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<TxData>) {
|
constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<TxData>) {
|
||||||
this.web3ContractInstance = web3ContractInstance;
|
this._web3ContractInstance = web3ContractInstance;
|
||||||
this.defaults = defaults;
|
this._defaults = defaults;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,26 +1,16 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { LogWithDecodedArgs } from '@0xproject/types';
|
||||||
|
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 { artifacts } from '../artifacts';
|
import { artifacts } from '../artifacts';
|
||||||
import {
|
import { BlockRange, EventCallback, IndexedFilterValues, MethodOpts, TransactionOpts, ZeroExError } from '../types';
|
||||||
BlockRange,
|
|
||||||
EventCallback,
|
|
||||||
IndexedFilterValues,
|
|
||||||
LogWithDecodedArgs,
|
|
||||||
MethodOpts,
|
|
||||||
TokenContractEventArgs,
|
|
||||||
TokenEvents,
|
|
||||||
TransactionOpts,
|
|
||||||
ZeroExError,
|
|
||||||
} from '../types';
|
|
||||||
import { AbiDecoder } from '../utils/abi_decoder';
|
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
import { constants } from '../utils/constants';
|
import { constants } from '../utils/constants';
|
||||||
|
|
||||||
import { ContractWrapper } from './contract_wrapper';
|
import { ContractWrapper } from './contract_wrapper';
|
||||||
import { TokenContract } from './generated/token';
|
import { TokenContract, TokenContractEventArgs, TokenEvents } from './generated/token';
|
||||||
import { TokenTransferProxyWrapper } from './token_transfer_proxy_wrapper';
|
import { TokenTransferProxyWrapper } from './token_transfer_proxy_wrapper';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -343,8 +333,8 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
/**
|
/**
|
||||||
* Cancels all existing subscriptions
|
* Cancels all existing subscriptions
|
||||||
*/
|
*/
|
||||||
public unsubscribeAll(): void {
|
public _unsubscribeAll(): void {
|
||||||
super.unsubscribeAll();
|
super._unsubscribeAll();
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Gets historical logs without creating a subscription
|
* Gets historical logs without creating a subscription
|
||||||
@@ -375,7 +365,7 @@ export class TokenWrapper extends ContractWrapper {
|
|||||||
return logs;
|
return logs;
|
||||||
}
|
}
|
||||||
private _invalidateContractInstances(): void {
|
private _invalidateContractInstances(): void {
|
||||||
this.unsubscribeAll();
|
this._unsubscribeAll();
|
||||||
this._tokenContractsByAddress = {};
|
this._tokenContractsByAddress = {};
|
||||||
}
|
}
|
||||||
private async _getTokenContractAsync(tokenAddress: string): Promise<TokenContract> {
|
private async _getTokenContractAsync(tokenAddress: string): Promise<TokenContract> {
|
||||||
|
30
packages/0x.js/src/globals.d.ts
vendored
30
packages/0x.js/src/globals.d.ts
vendored
@@ -1,5 +1,3 @@
|
|||||||
/// <reference types='chai-typescript-typings' />
|
|
||||||
/// <reference types='chai-as-promised-typescript-typings' />
|
|
||||||
declare module 'web3_beta';
|
declare module 'web3_beta';
|
||||||
declare module 'chai-bignumber';
|
declare module 'chai-bignumber';
|
||||||
declare module 'dirty-chai';
|
declare module 'dirty-chai';
|
||||||
@@ -27,18 +25,6 @@ declare module '*.json' {
|
|||||||
/* tslint:enable */
|
/* tslint:enable */
|
||||||
}
|
}
|
||||||
|
|
||||||
// find-version declarations
|
|
||||||
declare function findVersions(version: string): string[];
|
|
||||||
declare module 'find-versions' {
|
|
||||||
export = findVersions;
|
|
||||||
}
|
|
||||||
|
|
||||||
// compare-version declarations
|
|
||||||
declare function compareVersions(firstVersion: string, secondVersion: string): number;
|
|
||||||
declare module 'compare-versions' {
|
|
||||||
export = compareVersions;
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module 'ethereumjs-abi' {
|
declare module 'ethereumjs-abi' {
|
||||||
const soliditySHA3: (argTypes: string[], args: any[]) => Buffer;
|
const soliditySHA3: (argTypes: string[], args: any[]) => Buffer;
|
||||||
}
|
}
|
||||||
@@ -55,19 +41,3 @@ declare module 'truffle-hdwallet-provider' {
|
|||||||
}
|
}
|
||||||
export = HDWalletProvider;
|
export = HDWalletProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
// abi-decoder declarations
|
|
||||||
interface DecodedLogArg {}
|
|
||||||
interface DecodedLog {
|
|
||||||
name: string;
|
|
||||||
events: DecodedLogArg[];
|
|
||||||
}
|
|
||||||
declare module 'abi-decoder' {
|
|
||||||
import * as Web3 from 'web3';
|
|
||||||
const addABI: (abi: Web3.AbiDefinition) => void;
|
|
||||||
const decodeLogs: (logs: Web3.LogEntry[]) => DecodedLog[];
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module 'web3/lib/solidity/coder' {
|
|
||||||
const decodeParams: (types: string[], data: string) => any[];
|
|
||||||
}
|
|
||||||
|
@@ -2,7 +2,6 @@ export { ZeroEx } from './0x';
|
|||||||
|
|
||||||
export {
|
export {
|
||||||
Order,
|
Order,
|
||||||
BlockParamLiteral,
|
|
||||||
SignedOrder,
|
SignedOrder,
|
||||||
ECSignature,
|
ECSignature,
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
@@ -10,30 +9,13 @@ export {
|
|||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
ContractEvent,
|
ContractEvent,
|
||||||
Token,
|
Token,
|
||||||
ExchangeEvents,
|
|
||||||
TokenEvents,
|
|
||||||
IndexedFilterValues,
|
IndexedFilterValues,
|
||||||
BlockRange,
|
BlockRange,
|
||||||
BlockParam,
|
|
||||||
OrderCancellationRequest,
|
OrderCancellationRequest,
|
||||||
OrderFillRequest,
|
OrderFillRequest,
|
||||||
LogErrorContractEventArgs,
|
|
||||||
LogCancelContractEventArgs,
|
|
||||||
LogFillContractEventArgs,
|
|
||||||
ExchangeContractEventArgs,
|
|
||||||
TransferContractEventArgs,
|
|
||||||
ApprovalContractEventArgs,
|
|
||||||
TokenContractEventArgs,
|
|
||||||
EtherTokenContractEventArgs,
|
|
||||||
WithdrawalContractEventArgs,
|
|
||||||
DepositContractEventArgs,
|
|
||||||
ContractEventArgs,
|
ContractEventArgs,
|
||||||
ContractEventArg,
|
|
||||||
Web3Provider,
|
Web3Provider,
|
||||||
ZeroExConfig,
|
ZeroExConfig,
|
||||||
EtherTokenEvents,
|
|
||||||
TransactionReceiptWithDecodedLogs,
|
|
||||||
LogWithDecodedArgs,
|
|
||||||
MethodOpts,
|
MethodOpts,
|
||||||
OrderTransactionOpts,
|
OrderTransactionOpts,
|
||||||
TransactionOpts,
|
TransactionOpts,
|
||||||
@@ -47,4 +29,34 @@ export {
|
|||||||
OrderState,
|
OrderState,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
|
||||||
|
export {
|
||||||
|
BlockParamLiteral,
|
||||||
|
BlockParam,
|
||||||
|
ContractEventArg,
|
||||||
|
LogWithDecodedArgs,
|
||||||
|
TransactionReceiptWithDecodedLogs,
|
||||||
|
} from '@0xproject/types';
|
||||||
|
|
||||||
|
export {
|
||||||
|
EtherTokenContractEventArgs,
|
||||||
|
WithdrawalContractEventArgs,
|
||||||
|
DepositContractEventArgs,
|
||||||
|
EtherTokenEvents,
|
||||||
|
} from './contract_wrappers/generated/ether_token';
|
||||||
|
|
||||||
|
export {
|
||||||
|
TransferContractEventArgs,
|
||||||
|
ApprovalContractEventArgs,
|
||||||
|
TokenContractEventArgs,
|
||||||
|
TokenEvents,
|
||||||
|
} from './contract_wrappers/generated/token';
|
||||||
|
|
||||||
|
export {
|
||||||
|
LogErrorContractEventArgs,
|
||||||
|
LogCancelContractEventArgs,
|
||||||
|
LogFillContractEventArgs,
|
||||||
|
ExchangeContractEventArgs,
|
||||||
|
ExchangeEvents,
|
||||||
|
} from './contract_wrappers/generated/exchange';
|
||||||
|
|
||||||
export { TransactionReceipt } from '@0xproject/types';
|
export { TransactionReceipt } from '@0xproject/types';
|
||||||
|
@@ -3,7 +3,9 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
|||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
import { BlockParamLiteral, EventWatcherCallback, ZeroExError } from '../types';
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
|
|
||||||
|
import { EventWatcherCallback, ZeroExError } from '../types';
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
|
|
||||||
const DEFAULT_EVENT_POLLING_INTERVAL_MS = 200;
|
const DEFAULT_EVENT_POLLING_INTERVAL_MS = 200;
|
||||||
@@ -36,6 +38,10 @@ export class EventWatcher {
|
|||||||
this._intervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
this._intervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
||||||
this._pollForBlockchainEventsAsync.bind(this, callback),
|
this._pollForBlockchainEventsAsync.bind(this, callback),
|
||||||
this._pollingIntervalMs,
|
this._pollingIntervalMs,
|
||||||
|
(err: Error) => {
|
||||||
|
this.unsubscribe();
|
||||||
|
callback(err);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public unsubscribe(): void {
|
public unsubscribe(): void {
|
||||||
@@ -47,6 +53,10 @@ export class EventWatcher {
|
|||||||
}
|
}
|
||||||
private async _pollForBlockchainEventsAsync(callback: EventWatcherCallback): Promise<void> {
|
private async _pollForBlockchainEventsAsync(callback: EventWatcherCallback): Promise<void> {
|
||||||
const pendingEvents = await this._getEventsAsync();
|
const pendingEvents = await this._getEventsAsync();
|
||||||
|
if (_.isUndefined(pendingEvents)) {
|
||||||
|
// HACK: This should never happen, but happens frequently on CI due to a ganache bug
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (pendingEvents.length === 0) {
|
if (pendingEvents.length === 0) {
|
||||||
// HACK: Sometimes when node rebuilds the pending block we get back the empty result.
|
// HACK: Sometimes when node rebuilds the pending block we get back the empty result.
|
||||||
// We don't want to emit a lot of removal events and bring them back after a couple of miliseconds,
|
// We don't want to emit a lot of removal events and bring them back after a couple of miliseconds,
|
||||||
@@ -78,7 +88,7 @@ export class EventWatcher {
|
|||||||
...log,
|
...log,
|
||||||
};
|
};
|
||||||
if (!_.isUndefined(this._intervalIdIfExists)) {
|
if (!_.isUndefined(this._intervalIdIfExists)) {
|
||||||
callback(logEvent);
|
callback(null, logEvent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,16 +30,17 @@ export class ExpirationWatcher {
|
|||||||
if (!_.isUndefined(this._orderExpirationCheckingIntervalIdIfExists)) {
|
if (!_.isUndefined(this._orderExpirationCheckingIntervalIdIfExists)) {
|
||||||
throw new Error(ZeroExError.SubscriptionAlreadyPresent);
|
throw new Error(ZeroExError.SubscriptionAlreadyPresent);
|
||||||
}
|
}
|
||||||
this._orderExpirationCheckingIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
this._orderExpirationCheckingIntervalIdIfExists = intervalUtils.setInterval(
|
||||||
this._pruneExpiredOrders.bind(this, callback),
|
this._pruneExpiredOrders.bind(this, callback),
|
||||||
this._orderExpirationCheckingIntervalMs,
|
this._orderExpirationCheckingIntervalMs,
|
||||||
|
_.noop, // _pruneExpiredOrders never throws
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
public unsubscribe(): void {
|
public unsubscribe(): void {
|
||||||
if (_.isUndefined(this._orderExpirationCheckingIntervalIdIfExists)) {
|
if (_.isUndefined(this._orderExpirationCheckingIntervalIdIfExists)) {
|
||||||
throw new Error(ZeroExError.SubscriptionNotFound);
|
throw new Error(ZeroExError.SubscriptionNotFound);
|
||||||
}
|
}
|
||||||
intervalUtils.clearAsyncExcludingInterval(this._orderExpirationCheckingIntervalIdIfExists);
|
intervalUtils.clearInterval(this._orderExpirationCheckingIntervalIdIfExists);
|
||||||
delete this._orderExpirationCheckingIntervalIdIfExists;
|
delete this._orderExpirationCheckingIntervalIdIfExists;
|
||||||
}
|
}
|
||||||
public addOrder(orderHash: string, expirationUnixTimestampMs: BigNumber): void {
|
public addOrder(orderHash: string, expirationUnixTimestampMs: BigNumber): void {
|
||||||
|
@@ -1,35 +1,39 @@
|
|||||||
import { schemas } from '@0xproject/json-schemas';
|
import { schemas } from '@0xproject/json-schemas';
|
||||||
import { intervalUtils } from '@0xproject/utils';
|
import { BlockParamLiteral, LogWithDecodedArgs } from '@0xproject/types';
|
||||||
|
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';
|
||||||
|
|
||||||
import { ZeroEx } from '../0x';
|
import { ZeroEx } from '../0x';
|
||||||
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
|
import {
|
||||||
|
DepositContractEventArgs,
|
||||||
|
EtherTokenEvents,
|
||||||
|
WithdrawalContractEventArgs,
|
||||||
|
} from '../contract_wrappers/generated/ether_token';
|
||||||
|
import {
|
||||||
|
ExchangeEvents,
|
||||||
|
LogCancelContractEventArgs,
|
||||||
|
LogFillContractEventArgs,
|
||||||
|
} from '../contract_wrappers/generated/exchange';
|
||||||
|
import {
|
||||||
|
ApprovalContractEventArgs,
|
||||||
|
TokenEvents,
|
||||||
|
TransferContractEventArgs,
|
||||||
|
} from '../contract_wrappers/generated/token';
|
||||||
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
||||||
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 {
|
||||||
ApprovalContractEventArgs,
|
|
||||||
BlockParamLiteral,
|
|
||||||
ContractEventArgs,
|
ContractEventArgs,
|
||||||
DepositContractEventArgs,
|
|
||||||
EtherTokenEvents,
|
|
||||||
ExchangeContractErrs,
|
ExchangeContractErrs,
|
||||||
ExchangeEvents,
|
|
||||||
LogCancelContractEventArgs,
|
|
||||||
LogEvent,
|
LogEvent,
|
||||||
LogFillContractEventArgs,
|
|
||||||
LogWithDecodedArgs,
|
|
||||||
OnOrderStateChangeCallback,
|
OnOrderStateChangeCallback,
|
||||||
OrderState,
|
OrderState,
|
||||||
OrderStateWatcherConfig,
|
OrderStateWatcherConfig,
|
||||||
SignedOrder,
|
SignedOrder,
|
||||||
TokenEvents,
|
|
||||||
TransferContractEventArgs,
|
|
||||||
WithdrawalContractEventArgs,
|
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
} from '../types';
|
} from '../types';
|
||||||
import { AbiDecoder } from '../utils/abi_decoder';
|
|
||||||
import { assert } from '../utils/assert';
|
import { assert } from '../utils/assert';
|
||||||
import { OrderStateUtils } from '../utils/order_state_utils';
|
import { OrderStateUtils } from '../utils/order_state_utils';
|
||||||
import { utils } from '../utils/utils';
|
import { utils } from '../utils/utils';
|
||||||
@@ -134,8 +138,12 @@ export class OrderStateWatcher {
|
|||||||
delete this._orderStateByOrderHashCache[orderHash];
|
delete this._orderStateByOrderHashCache[orderHash];
|
||||||
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
|
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
|
||||||
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
const zrxTokenAddress = exchange.getZRXTokenAddress();
|
||||||
|
|
||||||
this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
|
this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
|
||||||
this._removeFromDependentOrderHashes(signedOrder.maker, signedOrder.makerTokenAddress, orderHash);
|
if (zrxTokenAddress !== signedOrder.makerTokenAddress) {
|
||||||
|
this._removeFromDependentOrderHashes(signedOrder.maker, signedOrder.makerTokenAddress, orderHash);
|
||||||
|
}
|
||||||
|
|
||||||
this._expirationWatcher.removeOrder(orderHash);
|
this._expirationWatcher.removeOrder(orderHash);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -155,6 +163,10 @@ export class OrderStateWatcher {
|
|||||||
this._cleanupJobIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
this._cleanupJobIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(
|
||||||
this._cleanupAsync.bind(this),
|
this._cleanupAsync.bind(this),
|
||||||
this._cleanupJobInterval,
|
this._cleanupJobInterval,
|
||||||
|
(err: Error) => {
|
||||||
|
this.unsubscribe();
|
||||||
|
callback(err);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@@ -207,17 +219,25 @@ export class OrderStateWatcher {
|
|||||||
if (!_.isUndefined(this._orderByOrderHash[orderHash])) {
|
if (!_.isUndefined(this._orderByOrderHash[orderHash])) {
|
||||||
this.removeOrder(orderHash);
|
this.removeOrder(orderHash);
|
||||||
if (!_.isUndefined(this._callbackIfExists)) {
|
if (!_.isUndefined(this._callbackIfExists)) {
|
||||||
this._callbackIfExists(orderState);
|
this._callbackIfExists(null, orderState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private async _onEventWatcherCallbackAsync(log: LogEvent): Promise<void> {
|
private async _onEventWatcherCallbackAsync(err: Error | null, logIfExists?: LogEvent): Promise<void> {
|
||||||
const maybeDecodedLog = this._abiDecoder.tryToDecodeLogOrNoop(log);
|
if (!_.isNull(err)) {
|
||||||
const isLogDecoded = !_.isUndefined((maybeDecodedLog as LogWithDecodedArgs<any>).event);
|
if (!_.isUndefined(this._callbackIfExists)) {
|
||||||
|
this._callbackIfExists(err);
|
||||||
|
this.unsubscribe();
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const log = logIfExists as LogEvent; // At this moment we are sure that no error occured and log is defined.
|
||||||
|
const maybeDecodedLog = this._abiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(log);
|
||||||
|
const isLogDecoded = !_.isUndefined(((maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>).event);
|
||||||
if (!isLogDecoded) {
|
if (!isLogDecoded) {
|
||||||
return; // noop
|
return; // noop
|
||||||
}
|
}
|
||||||
const decodedLog = maybeDecodedLog as LogWithDecodedArgs<ContractEventArgs>;
|
const decodedLog = (maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>;
|
||||||
let makerToken: string;
|
let makerToken: string;
|
||||||
let makerAddress: string;
|
let makerAddress: string;
|
||||||
switch (decodedLog.event) {
|
switch (decodedLog.event) {
|
||||||
@@ -332,7 +352,7 @@ export class OrderStateWatcher {
|
|||||||
} else {
|
} else {
|
||||||
this._orderStateByOrderHashCache[orderHash] = orderState;
|
this._orderStateByOrderHashCache[orderHash] = orderState;
|
||||||
}
|
}
|
||||||
this._callbackIfExists(orderState);
|
this._callbackIfExists(null, orderState);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
private _addToDependentOrderHashes(signedOrder: SignedOrder, orderHash: string): void {
|
private _addToDependentOrderHashes(signedOrder: SignedOrder, orderHash: string): void {
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
||||||
import { BlockParamLiteral } from '../types';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy on read store for balances/proxyAllowances of tokens/accounts
|
* Copy on read store for balances/proxyAllowances of tokens/accounts
|
||||||
|
@@ -1,8 +1,8 @@
|
|||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
|
||||||
import { BlockParamLiteral } from '../types';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy on read store for filled/cancelled taker amounts
|
* Copy on read store for filled/cancelled taker amounts
|
||||||
|
@@ -1,7 +1,13 @@
|
|||||||
import { TransactionReceipt } from '@0xproject/types';
|
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
|
|
||||||
|
import { BlockParam, BlockParamLiteral, ContractEventArg, LogWithDecodedArgs } from '@0xproject/types';
|
||||||
|
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
|
import { EtherTokenContractEventArgs, EtherTokenEvents } from './contract_wrappers/generated/ether_token';
|
||||||
|
import { ExchangeContractEventArgs, ExchangeEvents } from './contract_wrappers/generated/exchange';
|
||||||
|
import { TokenContractEventArgs, TokenEvents } from './contract_wrappers/generated/token';
|
||||||
|
|
||||||
export enum ZeroExError {
|
export enum ZeroExError {
|
||||||
ExchangeContractDoesNotExist = 'EXCHANGE_CONTRACT_DOES_NOT_EXIST',
|
ExchangeContractDoesNotExist = 'EXCHANGE_CONTRACT_DOES_NOT_EXIST',
|
||||||
ZRXContractDoesNotExist = 'ZRX_CONTRACT_DOES_NOT_EXIST',
|
ZRXContractDoesNotExist = 'ZRX_CONTRACT_DOES_NOT_EXIST',
|
||||||
@@ -51,14 +57,7 @@ export interface DecodedLogEvent<ArgsType> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export type EventCallback<ArgsType> = (err: null | Error, log?: DecodedLogEvent<ArgsType>) => void;
|
export type EventCallback<ArgsType> = (err: null | Error, log?: DecodedLogEvent<ArgsType>) => void;
|
||||||
export type EventWatcherCallback = (log: LogEvent) => void;
|
export type EventWatcherCallback = (err: null | Error, log?: LogEvent) => void;
|
||||||
|
|
||||||
export enum SolidityTypes {
|
|
||||||
Address = 'address',
|
|
||||||
Uint256 = 'uint256',
|
|
||||||
Uint8 = 'uint8',
|
|
||||||
Uint = 'uint',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum ExchangeContractErrCodes {
|
export enum ExchangeContractErrCodes {
|
||||||
ERROR_FILL_EXPIRED, // Order has already expired
|
ERROR_FILL_EXPIRED, // Order has already expired
|
||||||
@@ -94,8 +93,6 @@ export enum ExchangeContractErrs {
|
|||||||
BatchOrdersMustHaveAtLeastOneItem = 'BATCH_ORDERS_MUST_HAVE_AT_LEAST_ONE_ITEM',
|
BatchOrdersMustHaveAtLeastOneItem = 'BATCH_ORDERS_MUST_HAVE_AT_LEAST_ONE_ITEM',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RawLog = Web3.LogEntry;
|
|
||||||
|
|
||||||
export interface ContractEvent {
|
export interface ContractEvent {
|
||||||
logIndex: number;
|
logIndex: number;
|
||||||
transactionIndex: number;
|
transactionIndex: number;
|
||||||
@@ -108,62 +105,7 @@ export interface ContractEvent {
|
|||||||
args: ContractEventArgs;
|
args: ContractEventArgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LogFillContractEventArgs {
|
|
||||||
maker: string;
|
|
||||||
taker: string;
|
|
||||||
feeRecipient: string;
|
|
||||||
makerToken: string;
|
|
||||||
takerToken: string;
|
|
||||||
filledMakerTokenAmount: BigNumber;
|
|
||||||
filledTakerTokenAmount: BigNumber;
|
|
||||||
paidMakerFee: BigNumber;
|
|
||||||
paidTakerFee: BigNumber;
|
|
||||||
tokens: string;
|
|
||||||
orderHash: string;
|
|
||||||
}
|
|
||||||
export interface LogCancelContractEventArgs {
|
|
||||||
maker: string;
|
|
||||||
feeRecipient: string;
|
|
||||||
makerToken: string;
|
|
||||||
takerToken: string;
|
|
||||||
cancelledMakerTokenAmount: BigNumber;
|
|
||||||
cancelledTakerTokenAmount: BigNumber;
|
|
||||||
tokens: string;
|
|
||||||
orderHash: string;
|
|
||||||
}
|
|
||||||
export interface LogErrorContractEventArgs {
|
|
||||||
errorId: BigNumber;
|
|
||||||
orderHash: string;
|
|
||||||
}
|
|
||||||
export type ExchangeContractEventArgs =
|
|
||||||
| LogFillContractEventArgs
|
|
||||||
| LogCancelContractEventArgs
|
|
||||||
| LogErrorContractEventArgs;
|
|
||||||
export interface TransferContractEventArgs {
|
|
||||||
_from: string;
|
|
||||||
_to: string;
|
|
||||||
_value: BigNumber;
|
|
||||||
}
|
|
||||||
export interface ApprovalContractEventArgs {
|
|
||||||
_owner: string;
|
|
||||||
_spender: string;
|
|
||||||
_value: BigNumber;
|
|
||||||
}
|
|
||||||
export interface DepositContractEventArgs {
|
|
||||||
_owner: string;
|
|
||||||
_value: BigNumber;
|
|
||||||
}
|
|
||||||
export interface WithdrawalContractEventArgs {
|
|
||||||
_owner: string;
|
|
||||||
_value: BigNumber;
|
|
||||||
}
|
|
||||||
export type TokenContractEventArgs = TransferContractEventArgs | ApprovalContractEventArgs;
|
|
||||||
export type EtherTokenContractEventArgs =
|
|
||||||
| TokenContractEventArgs
|
|
||||||
| DepositContractEventArgs
|
|
||||||
| WithdrawalContractEventArgs;
|
|
||||||
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
|
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
|
||||||
export type ContractEventArg = string | BigNumber;
|
|
||||||
|
|
||||||
export interface Order {
|
export interface Order {
|
||||||
maker: string;
|
maker: string;
|
||||||
@@ -205,40 +147,12 @@ export interface TokenAddressBySymbol {
|
|||||||
[symbol: string]: string;
|
[symbol: string]: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ExchangeEvents {
|
|
||||||
LogFill = 'LogFill',
|
|
||||||
LogCancel = 'LogCancel',
|
|
||||||
LogError = 'LogError',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum TokenEvents {
|
|
||||||
Transfer = 'Transfer',
|
|
||||||
Approval = 'Approval',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum EtherTokenEvents {
|
|
||||||
Transfer = 'Transfer',
|
|
||||||
Approval = 'Approval',
|
|
||||||
Deposit = 'Deposit',
|
|
||||||
Withdrawal = 'Withdrawal',
|
|
||||||
}
|
|
||||||
|
|
||||||
export type ContractEvents = TokenEvents | ExchangeEvents | EtherTokenEvents;
|
export type ContractEvents = TokenEvents | ExchangeEvents | EtherTokenEvents;
|
||||||
|
|
||||||
export interface IndexedFilterValues {
|
export interface IndexedFilterValues {
|
||||||
[index: string]: ContractEventArg;
|
[index: string]: ContractEventArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Earliest is omitted by design. It is simply an alias for the `0` constant and
|
|
||||||
// is thus not very helpful. Moreover, this type is used in places that only accept
|
|
||||||
// `latest` or `pending`.
|
|
||||||
export enum BlockParamLiteral {
|
|
||||||
Latest = 'latest',
|
|
||||||
Pending = 'pending',
|
|
||||||
}
|
|
||||||
|
|
||||||
export type BlockParam = BlockParamLiteral | number;
|
|
||||||
|
|
||||||
export interface BlockRange {
|
export interface BlockRange {
|
||||||
fromBlock: BlockParam;
|
fromBlock: BlockParam;
|
||||||
toBlock: BlockParam;
|
toBlock: BlockParam;
|
||||||
@@ -267,11 +181,6 @@ export type SyncMethod = (...args: any[]) => any;
|
|||||||
*/
|
*/
|
||||||
export type Web3Provider = Web3.Provider;
|
export type Web3Provider = Web3.Provider;
|
||||||
|
|
||||||
export interface JSONRPCPayload {
|
|
||||||
params: any[];
|
|
||||||
method: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 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. Defaults: 200
|
||||||
@@ -290,6 +199,7 @@ export interface OrderStateWatcherConfig {
|
|||||||
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 42-kovan, 50-testrpc)
|
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 42-kovan, 50-testrpc)
|
||||||
* gasPrice: Gas price to use with every transaction
|
* gasPrice: Gas price to use with every transaction
|
||||||
* exchangeContractAddress: The address of an exchange contract to use
|
* exchangeContractAddress: The address of an exchange contract to use
|
||||||
|
* zrxContractAddress: The address of the ZRX contract to use
|
||||||
* tokenRegistryContractAddress: The address of a token registry contract to use
|
* tokenRegistryContractAddress: The address of a token registry contract to use
|
||||||
* tokenTransferProxyContractAddress: The address of the token transfer proxy contract to use
|
* tokenTransferProxyContractAddress: The address of the token transfer proxy contract to use
|
||||||
* orderWatcherConfig: All the configs related to the orderWatcher
|
* orderWatcherConfig: All the configs related to the orderWatcher
|
||||||
@@ -298,28 +208,12 @@ export interface ZeroExConfig {
|
|||||||
networkId: number;
|
networkId: number;
|
||||||
gasPrice?: BigNumber;
|
gasPrice?: BigNumber;
|
||||||
exchangeContractAddress?: string;
|
exchangeContractAddress?: string;
|
||||||
|
zrxContractAddress?: string;
|
||||||
tokenRegistryContractAddress?: string;
|
tokenRegistryContractAddress?: string;
|
||||||
tokenTransferProxyContractAddress?: string;
|
tokenTransferProxyContractAddress?: string;
|
||||||
orderWatcherConfig?: OrderStateWatcherConfig;
|
orderWatcherConfig?: OrderStateWatcherConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum AbiType {
|
|
||||||
Function = 'function',
|
|
||||||
Constructor = 'constructor',
|
|
||||||
Event = 'event',
|
|
||||||
Fallback = 'fallback',
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface DecodedLogArgs {
|
|
||||||
[argName: string]: ContractEventArg;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface LogWithDecodedArgs<ArgsType> extends Web3.DecodedLogEntry<ArgsType> {}
|
|
||||||
|
|
||||||
export interface TransactionReceiptWithDecodedLogs extends TransactionReceipt {
|
|
||||||
logs: Array<LogWithDecodedArgs<DecodedLogArgs> | Web3.LogEntry>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type ArtifactContractName = 'ZRX' | 'TokenTransferProxy' | 'TokenRegistry' | 'Token' | 'Exchange' | 'EtherToken';
|
export type ArtifactContractName = 'ZRX' | 'TokenTransferProxy' | 'TokenRegistry' | 'Token' | 'Exchange' | 'EtherToken';
|
||||||
|
|
||||||
export interface Artifact {
|
export interface Artifact {
|
||||||
@@ -406,5 +300,5 @@ export interface OrderStateInvalid {
|
|||||||
|
|
||||||
export type OrderState = OrderStateValid | OrderStateInvalid;
|
export type OrderState = OrderStateValid | OrderStateInvalid;
|
||||||
|
|
||||||
export type OnOrderStateChangeCallback = (orderState: OrderState) => void;
|
export type OnOrderStateChangeCallback = (err: Error | null, orderState?: OrderState) => void;
|
||||||
// tslint:disable:max-file-line-count
|
// tslint:disable:max-file-line-count
|
||||||
|
@@ -1,9 +1,10 @@
|
|||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
|
|
||||||
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
|
||||||
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
|
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
|
||||||
import { BlockParamLiteral, ExchangeContractErrs, TradeSide, TransferType } from '../types';
|
import { ExchangeContractErrs, TradeSide, TransferType } from '../types';
|
||||||
|
|
||||||
enum FailureReason {
|
enum FailureReason {
|
||||||
Balance = 'balance',
|
Balance = 'balance',
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
|
import { 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, SolidityTypes } from '../types';
|
import { Order, SignedOrder } from '../types';
|
||||||
|
|
||||||
export const utils = {
|
export const utils = {
|
||||||
/**
|
/**
|
||||||
@@ -20,12 +21,6 @@ export const utils = {
|
|||||||
// tslint:disable-next-line: no-console
|
// tslint:disable-next-line: no-console
|
||||||
console.log(message);
|
console.log(message);
|
||||||
},
|
},
|
||||||
isParityNode(nodeVersion: string): boolean {
|
|
||||||
return _.includes(nodeVersion, 'Parity');
|
|
||||||
},
|
|
||||||
isTestRpc(nodeVersion: string): boolean {
|
|
||||||
return _.includes(nodeVersion, 'TestRPC');
|
|
||||||
},
|
|
||||||
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}`);
|
||||||
},
|
},
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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';
|
||||||
@@ -10,12 +10,13 @@ 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
|
const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false;
|
||||||
|
|
||||||
describe('ZeroEx library', () => {
|
describe('ZeroEx library', () => {
|
||||||
const web3 = web3Factory.create();
|
const web3 = web3Factory.create();
|
||||||
const config = {
|
const config = {
|
||||||
@@ -198,7 +199,11 @@ describe('ZeroEx library', () => {
|
|||||||
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
r: '0x61a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33',
|
||||||
s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254',
|
s: '0x40349190569279751135161d22529dc25add4f6069af05be04cacbda2ace2254',
|
||||||
};
|
};
|
||||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress);
|
const ecSignature = await zeroEx.signOrderHashAsync(
|
||||||
|
orderHash,
|
||||||
|
makerAddress,
|
||||||
|
SHOULD_ADD_PERSONAL_MESSAGE_PREFIX,
|
||||||
|
);
|
||||||
expect(ecSignature).to.deep.equal(expectedECSignature);
|
expect(ecSignature).to.deep.equal(expectedECSignature);
|
||||||
});
|
});
|
||||||
it('should return the correct ECSignature for signatureHex concatenated as R + S + V', async () => {
|
it('should return the correct ECSignature for signatureHex concatenated as R + S + V', async () => {
|
||||||
@@ -215,7 +220,11 @@ describe('ZeroEx library', () => {
|
|||||||
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
||||||
];
|
];
|
||||||
|
|
||||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress);
|
const ecSignature = await zeroEx.signOrderHashAsync(
|
||||||
|
orderHash,
|
||||||
|
makerAddress,
|
||||||
|
SHOULD_ADD_PERSONAL_MESSAGE_PREFIX,
|
||||||
|
);
|
||||||
expect(ecSignature).to.deep.equal(expectedECSignature);
|
expect(ecSignature).to.deep.equal(expectedECSignature);
|
||||||
});
|
});
|
||||||
it('should return the correct ECSignature for signatureHex concatenated as V + R + S', async () => {
|
it('should return the correct ECSignature for signatureHex concatenated as V + R + S', async () => {
|
||||||
@@ -232,7 +241,11 @@ describe('ZeroEx library', () => {
|
|||||||
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
|
||||||
];
|
];
|
||||||
|
|
||||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, makerAddress);
|
const ecSignature = await zeroEx.signOrderHashAsync(
|
||||||
|
orderHash,
|
||||||
|
makerAddress,
|
||||||
|
SHOULD_ADD_PERSONAL_MESSAGE_PREFIX,
|
||||||
|
);
|
||||||
expect(ecSignature).to.deep.equal(expectedECSignature);
|
expect(ecSignature).to.deep.equal(expectedECSignature);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import 'mocha';
|
import 'mocha';
|
||||||
|
|
||||||
@@ -5,7 +6,6 @@ import { ZeroEx } from '../src';
|
|||||||
import { assert } from '../src/utils/assert';
|
import { assert } from '../src/utils/assert';
|
||||||
|
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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 'mocha';
|
import 'mocha';
|
||||||
@@ -17,18 +17,16 @@ import {
|
|||||||
ZeroEx,
|
ZeroEx,
|
||||||
ZeroExError,
|
ZeroExError,
|
||||||
} from '../src';
|
} from '../src';
|
||||||
import { artifacts } from '../src/artifacts';
|
|
||||||
import { DoneCallback } from '../src/types';
|
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 { 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
// 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
|
||||||
@@ -61,7 +59,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
tokens = await zeroEx.tokenRegistry.getTokensAsync();
|
||||||
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
userAddresses = await zeroEx.getAvailableAddressesAsync();
|
||||||
addressWithETH = userAddresses[0];
|
addressWithETH = userAddresses[0];
|
||||||
wethContractAddress = (zeroEx.etherToken as any)._getContractAddress(artifacts.EtherTokenArtifact);
|
wethContractAddress = zeroEx.etherToken.getContractAddressIfExists() as string;
|
||||||
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
|
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
|
||||||
decimalPlaces = 7;
|
decimalPlaces = 7;
|
||||||
addressWithoutFunds = userAddresses[1];
|
addressWithoutFunds = userAddresses[1];
|
||||||
@@ -72,6 +70,18 @@ describe('EtherTokenWrapper', () => {
|
|||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
await blockchainLifecycle.revertAsync();
|
await blockchainLifecycle.revertAsync();
|
||||||
});
|
});
|
||||||
|
describe('#getContractAddressIfExists', async () => {
|
||||||
|
it('should return contract address if connected to a known network', () => {
|
||||||
|
const contractAddressIfExists = zeroEx.etherToken.getContractAddressIfExists();
|
||||||
|
expect(contractAddressIfExists).to.not.be.undefined();
|
||||||
|
});
|
||||||
|
it('should return undefined if connected to an unknown network', () => {
|
||||||
|
const UNKNOWN_NETWORK_NETWORK_ID = 10;
|
||||||
|
const unknownNetworkZeroEx = new ZeroEx(web3.currentProvider, { networkId: UNKNOWN_NETWORK_NETWORK_ID });
|
||||||
|
const contractAddressIfExists = unknownNetworkZeroEx.etherToken.getContractAddressIfExists();
|
||||||
|
expect(contractAddressIfExists).to.be.undefined();
|
||||||
|
});
|
||||||
|
});
|
||||||
describe('#depositAsync', () => {
|
describe('#depositAsync', () => {
|
||||||
it('should successfully deposit ETH and issue Wrapped ETH tokens', async () => {
|
it('should successfully deposit ETH and issue Wrapped ETH tokens', async () => {
|
||||||
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
|
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
|
||||||
@@ -145,7 +155,7 @@ describe('EtherTokenWrapper', () => {
|
|||||||
etherTokenAddress = etherToken.address;
|
etherTokenAddress = etherToken.address;
|
||||||
});
|
});
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
zeroEx.etherToken.unsubscribeAll();
|
zeroEx.etherToken._unsubscribeAll();
|
||||||
});
|
});
|
||||||
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
||||||
// Since we need to await the receipt of the event in the `subscribe` callback,
|
// Since we need to await the receipt of the event in the `subscribe` callback,
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
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';
|
||||||
@@ -10,7 +11,7 @@ import { EventWatcher } from '../src/order_watcher/event_watcher';
|
|||||||
import { DoneCallback } from '../src/types';
|
import { DoneCallback } from '../src/types';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { web3Factory } from './utils/web3_factory';
|
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
@@ -77,13 +78,14 @@ describe('EventWatcher', () => {
|
|||||||
const getLogsStub = Sinon.stub(web3Wrapper, 'getLogsAsync');
|
const getLogsStub = Sinon.stub(web3Wrapper, 'getLogsAsync');
|
||||||
getLogsStub.onCall(0).returns(logs);
|
getLogsStub.onCall(0).returns(logs);
|
||||||
stubs.push(getLogsStub);
|
stubs.push(getLogsStub);
|
||||||
const callback = (event: LogEvent) => {
|
const expectedToBeCalledOnce = false;
|
||||||
|
const callback = reportNodeCallbackErrors(done, expectedToBeCalledOnce)((event: LogEvent) => {
|
||||||
const expectedLogEvent = expectedLogEvents.shift();
|
const expectedLogEvent = expectedLogEvents.shift();
|
||||||
expect(event).to.be.deep.equal(expectedLogEvent);
|
expect(event).to.be.deep.equal(expectedLogEvent);
|
||||||
if (_.isEmpty(expectedLogEvents)) {
|
if (_.isEmpty(expectedLogEvents)) {
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
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) => {
|
||||||
@@ -111,13 +113,14 @@ describe('EventWatcher', () => {
|
|||||||
getLogsStub.onCall(0).returns(initialLogs);
|
getLogsStub.onCall(0).returns(initialLogs);
|
||||||
getLogsStub.onCall(1).returns(changedLogs);
|
getLogsStub.onCall(1).returns(changedLogs);
|
||||||
stubs.push(getLogsStub);
|
stubs.push(getLogsStub);
|
||||||
const callback = (event: LogEvent) => {
|
const expectedToBeCalledOnce = false;
|
||||||
|
const callback = reportNodeCallbackErrors(done, expectedToBeCalledOnce)((event: LogEvent) => {
|
||||||
const expectedLogEvent = expectedLogEvents.shift();
|
const expectedLogEvent = expectedLogEvents.shift();
|
||||||
expect(event).to.be.deep.equal(expectedLogEvent);
|
expect(event).to.be.deep.equal(expectedLogEvent);
|
||||||
if (_.isEmpty(expectedLogEvents)) {
|
if (_.isEmpty(expectedLogEvents)) {
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
eventWatcher.subscribe(callback);
|
eventWatcher.subscribe(callback);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,18 +1,18 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
|
|
||||||
import { ExchangeContractErrs, Token, ZeroEx } from '../src';
|
import { ExchangeContractErrs, Token, ZeroEx } from '../src';
|
||||||
import { BlockParamLiteral, TradeSide, TransferType } from '../src/types';
|
import { TradeSide, TransferType } from '../src/types';
|
||||||
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
|
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('ExchangeTransferSimulator', () => {
|
describe('ExchangeTransferSimulator', () => {
|
||||||
const web3 = web3Factory.create();
|
const web3 = web3Factory.create();
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as _ from 'lodash';
|
import * as _ from 'lodash';
|
||||||
@@ -18,18 +19,17 @@ import {
|
|||||||
Token,
|
Token,
|
||||||
ZeroEx,
|
ZeroEx,
|
||||||
} from '../src';
|
} from '../src';
|
||||||
import { BlockParamLiteral, DoneCallback } from '../src/types';
|
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 { 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
|
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
|
||||||
|
|
||||||
@@ -390,6 +390,29 @@ describe('ExchangeWrapper', () => {
|
|||||||
).to.not.be.rejectedWith(ExchangeContractErrs.OrderFillAmountZero);
|
).to.not.be.rejectedWith(ExchangeContractErrs.OrderFillAmountZero);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('negative fill amount', async () => {
|
||||||
|
let signedOrder: SignedOrder;
|
||||||
|
const negativeFillTakerAmount = new BigNumber(-100);
|
||||||
|
beforeEach(async () => {
|
||||||
|
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
|
||||||
|
makerTokenAddress,
|
||||||
|
takerTokenAddress,
|
||||||
|
makerAddress,
|
||||||
|
takerAddress,
|
||||||
|
fillableAmount,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should not allow the exchange wrapper to fill if amount is negative', async () => {
|
||||||
|
return expect(
|
||||||
|
zeroEx.exchange.fillOrderAsync(
|
||||||
|
signedOrder,
|
||||||
|
negativeFillTakerAmount,
|
||||||
|
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||||
|
takerAddress,
|
||||||
|
),
|
||||||
|
).to.be.rejected();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('#batchFillOrdersAsync', () => {
|
describe('#batchFillOrdersAsync', () => {
|
||||||
let signedOrder: SignedOrder;
|
let signedOrder: SignedOrder;
|
||||||
@@ -498,6 +521,30 @@ describe('ExchangeWrapper', () => {
|
|||||||
).to.not.be.rejectedWith(ExchangeContractErrs.OrderFillAmountZero);
|
).to.not.be.rejectedWith(ExchangeContractErrs.OrderFillAmountZero);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('negative batch fill amount', async () => {
|
||||||
|
beforeEach(async () => {
|
||||||
|
const negativeFillTakerAmount = new BigNumber(-100);
|
||||||
|
orderFillBatch = [
|
||||||
|
{
|
||||||
|
signedOrder,
|
||||||
|
takerTokenFillAmount,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
signedOrder: anotherSignedOrder,
|
||||||
|
takerTokenFillAmount: negativeFillTakerAmount,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
it('should not allow the exchange wrapper to batch fill if any amount is negative', async () => {
|
||||||
|
return expect(
|
||||||
|
zeroEx.exchange.batchFillOrdersAsync(
|
||||||
|
orderFillBatch,
|
||||||
|
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||||
|
takerAddress,
|
||||||
|
),
|
||||||
|
).to.be.rejected();
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('#fillOrdersUpTo', () => {
|
describe('#fillOrdersUpTo', () => {
|
||||||
let signedOrder: SignedOrder;
|
let signedOrder: SignedOrder;
|
||||||
@@ -536,7 +583,7 @@ describe('ExchangeWrapper', () => {
|
|||||||
),
|
),
|
||||||
).to.be.rejectedWith(ExchangeContractErrs.BatchOrdersMustHaveAtLeastOneItem);
|
).to.be.rejectedWith(ExchangeContractErrs.BatchOrdersMustHaveAtLeastOneItem);
|
||||||
});
|
});
|
||||||
it('should successfully fill up to specified amount', async () => {
|
it('should successfully fill up to specified amount when all orders are fully funded', async () => {
|
||||||
const txHash = await zeroEx.exchange.fillOrdersUpToAsync(
|
const txHash = await zeroEx.exchange.fillOrdersUpToAsync(
|
||||||
signedOrders,
|
signedOrders,
|
||||||
fillUpToAmount,
|
fillUpToAmount,
|
||||||
@@ -550,6 +597,37 @@ 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 even if filling all orders would fail', async () => {
|
||||||
|
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.
|
||||||
|
await zeroEx.token.transferAsync(makerTokenAddress, makerAddress, coinbase, missingBalance);
|
||||||
|
const txHash = await zeroEx.exchange.fillOrdersUpToAsync(
|
||||||
|
signedOrders,
|
||||||
|
fillUpToAmount,
|
||||||
|
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||||
|
takerAddress,
|
||||||
|
);
|
||||||
|
await zeroEx.awaitTransactionMinedAsync(txHash);
|
||||||
|
const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex);
|
||||||
|
const anotherFilledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex);
|
||||||
|
expect(filledAmount).to.be.bignumber.equal(fillableAmount);
|
||||||
|
const remainingFillAmount = fillableAmount.minus(1);
|
||||||
|
expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
describe('failed batch fills', () => {
|
||||||
|
it("should fail validation if user doesn't have enough balance without fill up to", async () => {
|
||||||
|
const missingBalance = new BigNumber(2); // User will only have enough balance to fill up to 8
|
||||||
|
await zeroEx.token.transferAsync(makerTokenAddress, makerAddress, coinbase, missingBalance);
|
||||||
|
return expect(
|
||||||
|
zeroEx.exchange.fillOrdersUpToAsync(
|
||||||
|
signedOrders,
|
||||||
|
fillUpToAmount,
|
||||||
|
shouldThrowOnInsufficientBalanceOrAllowance,
|
||||||
|
takerAddress,
|
||||||
|
),
|
||||||
|
).to.be.rejectedWith(ExchangeContractErrs.InsufficientMakerBalance);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
describe('order transaction options', () => {
|
describe('order transaction options', () => {
|
||||||
const emptyFillUpToAmount = new BigNumber(0);
|
const emptyFillUpToAmount = new BigNumber(0);
|
||||||
@@ -844,7 +922,7 @@ describe('ExchangeWrapper', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
afterEach(async () => {
|
afterEach(async () => {
|
||||||
zeroEx.exchange.unsubscribeAll();
|
zeroEx.exchange._unsubscribeAll();
|
||||||
});
|
});
|
||||||
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
||||||
// Since we need to await the receipt of the event in the `subscribe` callback,
|
// Since we need to await the receipt of the event in the `subscribe` callback,
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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';
|
||||||
@@ -13,15 +13,13 @@ import { constants } from '../src/utils/constants';
|
|||||||
import { utils } from '../src/utils/utils';
|
import { utils } from '../src/utils/utils';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants as testConstants } 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(testConstants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('ExpirationWatcher', () => {
|
describe('ExpirationWatcher', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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';
|
||||||
@@ -20,15 +20,14 @@ 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 { FillScenarios } from './utils/fill_scenarios';
|
import { FillScenarios } from './utils/fill_scenarios';
|
||||||
import { reportNoErrorCallbackErrors } 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
const TIMEOUT_MS = 150;
|
const TIMEOUT_MS = 150;
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('OrderStateWatcher', () => {
|
describe('OrderStateWatcher', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
@@ -134,7 +133,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
||||||
@@ -154,7 +153,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
);
|
);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
zeroEx.orderStateWatcher.subscribe(callback);
|
||||||
@@ -178,7 +177,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
);
|
);
|
||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
||||||
@@ -202,7 +201,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
||||||
@@ -234,7 +233,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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;
|
||||||
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
||||||
@@ -273,7 +272,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
fillableAmount,
|
fillableAmount,
|
||||||
taker,
|
taker,
|
||||||
);
|
);
|
||||||
const callback = reportNoErrorCallbackErrors(done)();
|
const callback = reportNodeCallbackErrors(done)();
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
zeroEx.orderStateWatcher.subscribe(callback);
|
zeroEx.orderStateWatcher.subscribe(callback);
|
||||||
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
|
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
|
||||||
@@ -295,7 +294,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);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
const callback = reportNoErrorCallbackErrors(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;
|
||||||
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
||||||
@@ -330,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);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
||||||
@@ -360,7 +359,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const transferAmount = makerBalance.sub(remainingAmount);
|
const transferAmount = makerBalance.sub(remainingAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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;
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
@@ -395,7 +394,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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;
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
@@ -429,7 +428,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
||||||
@@ -464,7 +463,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
|
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(done)((orderState: OrderState) => {
|
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
|
||||||
const validOrderState = orderState as OrderStateValid;
|
const validOrderState = orderState as OrderStateValid;
|
||||||
const orderRelevantState = validOrderState.orderRelevantState;
|
const orderRelevantState = validOrderState.orderRelevantState;
|
||||||
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
expect(orderRelevantState.remainingFillableMakerTokenAmount).to.be.bignumber.equal(
|
||||||
@@ -492,7 +491,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
||||||
@@ -516,7 +515,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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);
|
||||||
@@ -543,7 +542,7 @@ describe('OrderStateWatcher', () => {
|
|||||||
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
|
||||||
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
zeroEx.orderStateWatcher.addOrder(signedOrder);
|
||||||
|
|
||||||
const callback = reportNoErrorCallbackErrors(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;
|
||||||
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
expect(validOrderState.orderHash).to.be.equal(orderHash);
|
||||||
|
@@ -1,11 +1,12 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
|
import { BlockParamLiteral } from '@0xproject/types';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
import * as Sinon from 'sinon';
|
import * as Sinon from 'sinon';
|
||||||
import * as Web3 from 'web3';
|
import * as Web3 from 'web3';
|
||||||
|
|
||||||
import { ExchangeContractErrs, SignedOrder, Token, ZeroEx, ZeroExError } from '../src';
|
import { ExchangeContractErrs, SignedOrder, Token, ZeroEx, ZeroExError } from '../src';
|
||||||
import { BlockParamLiteral, TradeSide, TransferType } from '../src/types';
|
import { TradeSide, TransferType } from '../src/types';
|
||||||
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
|
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
|
||||||
import { OrderValidationUtils } from '../src/utils/order_validation_utils';
|
import { OrderValidationUtils } from '../src/utils/order_validation_utils';
|
||||||
|
|
||||||
@@ -13,11 +14,10 @@ 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('OrderValidation', () => {
|
describe('OrderValidation', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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,10 +11,9 @@ 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('SubscriptionTest', () => {
|
describe('SubscriptionTest', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
@@ -50,7 +49,7 @@ describe('SubscriptionTest', () => {
|
|||||||
tokenAddress = token.address;
|
tokenAddress = token.address;
|
||||||
});
|
});
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
zeroEx.token.unsubscribeAll();
|
zeroEx.token._unsubscribeAll();
|
||||||
_.each(stubs, s => s.restore());
|
_.each(stubs, s => s.restore());
|
||||||
stubs = [];
|
stubs = [];
|
||||||
});
|
});
|
||||||
@@ -77,7 +76,7 @@ describe('SubscriptionTest', () => {
|
|||||||
const callback = (err: Error | null, logEvent?: DecodedLogEvent<ApprovalContractEventArgs>) => _.noop;
|
const callback = (err: Error | null, logEvent?: DecodedLogEvent<ApprovalContractEventArgs>) => _.noop;
|
||||||
zeroEx.token.subscribe(tokenAddress, TokenEvents.Approval, indexFilterValues, callback);
|
zeroEx.token.subscribe(tokenAddress, TokenEvents.Approval, indexFilterValues, callback);
|
||||||
stubs = [Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync').throws(new Error('JSON RPC error'))];
|
stubs = [Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync').throws(new Error('JSON RPC error'))];
|
||||||
zeroEx.token.unsubscribeAll();
|
zeroEx.token._unsubscribeAll();
|
||||||
done();
|
done();
|
||||||
})().catch(done);
|
})().catch(done);
|
||||||
});
|
});
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } 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,11 +8,10 @@ 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
|
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
|
||||||
|
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
|
import { web3Factory } from '@0xproject/dev-utils';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
|
|
||||||
import { ZeroEx } from '../src';
|
import { ZeroEx } from '../src';
|
||||||
|
|
||||||
import { chaiSetup } from './utils/chai_setup';
|
import { chaiSetup } from './utils/chai_setup';
|
||||||
import { constants } from './utils/constants';
|
import { constants } from './utils/constants';
|
||||||
import { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
import { BlockchainLifecycle } from '@0xproject/dev-utils';
|
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
|
||||||
import { BigNumber } from '@0xproject/utils';
|
import { BigNumber } from '@0xproject/utils';
|
||||||
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
import { Web3Wrapper } from '@0xproject/web3-wrapper';
|
||||||
import * as chai from 'chai';
|
import * as chai from 'chai';
|
||||||
@@ -22,11 +22,10 @@ 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 { web3Factory } from './utils/web3_factory';
|
|
||||||
|
|
||||||
chaiSetup.configure();
|
chaiSetup.configure();
|
||||||
const expect = chai.expect;
|
const expect = chai.expect;
|
||||||
const blockchainLifecycle = new BlockchainLifecycle(constants.RPC_URL);
|
const blockchainLifecycle = new BlockchainLifecycle();
|
||||||
|
|
||||||
describe('TokenWrapper', () => {
|
describe('TokenWrapper', () => {
|
||||||
let web3: Web3;
|
let web3: Web3;
|
||||||
@@ -378,7 +377,7 @@ describe('TokenWrapper', () => {
|
|||||||
tokenAddress = token.address;
|
tokenAddress = token.address;
|
||||||
});
|
});
|
||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
zeroEx.token.unsubscribeAll();
|
zeroEx.token._unsubscribeAll();
|
||||||
});
|
});
|
||||||
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
// Hack: Mocha does not allow a test to be both async and have a `done` callback
|
||||||
// Since we need to await the receipt of the event in the `subscribe` callback,
|
// Since we need to await the receipt of the event in the `subscribe` callback,
|
||||||
|
@@ -1,11 +1,9 @@
|
|||||||
export const constants = {
|
export const constants = {
|
||||||
NULL_ADDRESS: '0x0000000000000000000000000000000000000000',
|
NULL_ADDRESS: '0x0000000000000000000000000000000000000000',
|
||||||
RPC_URL: 'http://localhost:8545/',
|
|
||||||
ROPSTEN_NETWORK_ID: 3,
|
ROPSTEN_NETWORK_ID: 3,
|
||||||
KOVAN_NETWORK_ID: 42,
|
KOVAN_NETWORK_ID: 42,
|
||||||
TESTRPC_NETWORK_ID: 50,
|
TESTRPC_NETWORK_ID: 50,
|
||||||
KOVAN_RPC_URL: 'https://kovan.infura.io/',
|
KOVAN_RPC_URL: 'https://kovan.infura.io/',
|
||||||
ROPSTEN_RPC_URL: 'https://ropsten.infura.io/',
|
ROPSTEN_RPC_URL: 'https://ropsten.infura.io/',
|
||||||
ZRX_DECIMALS: 18,
|
ZRX_DECIMALS: 18,
|
||||||
GAS_ESTIMATE: 500000,
|
|
||||||
};
|
};
|
||||||
|
@@ -3,6 +3,8 @@ import * as _ from 'lodash';
|
|||||||
|
|
||||||
import { SignedOrder, ZeroEx } from '../../src';
|
import { SignedOrder, ZeroEx } from '../../src';
|
||||||
|
|
||||||
|
const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false;
|
||||||
|
|
||||||
export const orderFactory = {
|
export const orderFactory = {
|
||||||
async createSignedOrderAsync(
|
async createSignedOrderAsync(
|
||||||
zeroEx: ZeroEx,
|
zeroEx: ZeroEx,
|
||||||
@@ -37,7 +39,7 @@ export const orderFactory = {
|
|||||||
expirationUnixTimestampSec,
|
expirationUnixTimestampSec,
|
||||||
};
|
};
|
||||||
const orderHash = ZeroEx.getOrderHashHex(order);
|
const orderHash = ZeroEx.getOrderHashHex(order);
|
||||||
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, maker);
|
const ecSignature = await zeroEx.signOrderHashAsync(orderHash, maker, SHOULD_ADD_PERSONAL_MESSAGE_PREFIX);
|
||||||
const signedOrder: SignedOrder = _.assign(order, { ecSignature });
|
const signedOrder: SignedOrder = _.assign(order, { ecSignature });
|
||||||
return signedOrder;
|
return signedOrder;
|
||||||
},
|
},
|
||||||
|
@@ -25,7 +25,7 @@ export const reportNoErrorCallbackErrors = (done: DoneCallback, expectToBeCalled
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const reportNodeCallbackErrors = (done: DoneCallback) => {
|
export const reportNodeCallbackErrors = (done: DoneCallback, expectToBeCalledOnce = true) => {
|
||||||
return <T>(f?: (value: T) => void) => {
|
return <T>(f?: (value: T) => void) => {
|
||||||
const wrapped = (error: Error | null, value: T | undefined) => {
|
const wrapped = (error: Error | null, value: T | undefined) => {
|
||||||
if (!_.isNull(error)) {
|
if (!_.isNull(error)) {
|
||||||
@@ -37,7 +37,9 @@ export const reportNodeCallbackErrors = (done: DoneCallback) => {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
f(value as T);
|
f(value as T);
|
||||||
done();
|
if (expectToBeCalledOnce) {
|
||||||
|
done();
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
done(err);
|
done(err);
|
||||||
}
|
}
|
||||||
|
@@ -7,10 +7,10 @@ const path = require('path');
|
|||||||
const production = process.env.NODE_ENV === 'production';
|
const production = process.env.NODE_ENV === 'production';
|
||||||
|
|
||||||
let entry = {
|
let entry = {
|
||||||
'index': './src/index.ts',
|
index: './src/index.ts',
|
||||||
};
|
};
|
||||||
if (production) {
|
if (production) {
|
||||||
entry = _.assign({}, entry, {'index.min': './src/index.ts'});
|
entry = _.assign({}, entry, { 'index.min': './src/index.ts' });
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
@@ -1,5 +1,10 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v0.2.0 - _February 7, 2018_
|
||||||
|
|
||||||
|
* Added CLI options for explicit specifying location of partials and main template (#346)
|
||||||
|
* Added CLI option to specify networkId, adding support for the JSON artifact format found in @0xproject/contracts (#388)
|
||||||
|
|
||||||
## v0.1.0 - _January 11, 2018_
|
## v0.1.0 - _January 11, 2018_
|
||||||
|
|
||||||
* Fixed array typings with union types (#295)
|
* Fixed array typings with union types (#295)
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/abi-gen",
|
"name": "@0xproject/abi-gen",
|
||||||
"version": "0.0.4",
|
"version": "0.2.0",
|
||||||
"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",
|
||||||
"lint": "tslint --project . 'src/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts'",
|
||||||
"clean": "shx rm -rf lib",
|
"clean": "shx rm -rf lib",
|
||||||
"build": "tsc"
|
"build": "tsc"
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x.js/packages/abi-gen/README.md",
|
"homepage": "https://github.com/0xProject/0x.js/packages/abi-gen/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/utils": "^0.1.2",
|
"@0xproject/utils": "^0.3.1",
|
||||||
"chalk": "^2.3.0",
|
"chalk": "^2.3.0",
|
||||||
"glob": "^7.1.2",
|
"glob": "^7.1.2",
|
||||||
"handlebars": "^4.0.11",
|
"handlebars": "^4.0.11",
|
||||||
@@ -33,7 +34,7 @@
|
|||||||
"yargs": "^10.0.3"
|
"yargs": "^10.0.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/tslint-config": "^0.4.0",
|
"@0xproject/tslint-config": "^0.4.7",
|
||||||
"@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",
|
||||||
@@ -42,7 +43,7 @@
|
|||||||
"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.6.1",
|
"typescript": "2.7.1",
|
||||||
"web3-typescript-typings": "^0.9.0"
|
"web3-typescript-typings": "^0.9.9"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -3,12 +3,13 @@ const packageJSON = require('../package.json');
|
|||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
const subPackageName = packageJSON.name;
|
||||||
|
|
||||||
postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
||||||
const assets = [];
|
const assets = [];
|
||||||
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
||||||
})
|
})
|
||||||
.catch (function(err) {
|
.catch(function(err) {
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
@@ -17,27 +17,57 @@ import { utils } from './utils';
|
|||||||
const ABI_TYPE_CONSTRUCTOR = 'constructor';
|
const ABI_TYPE_CONSTRUCTOR = 'constructor';
|
||||||
const ABI_TYPE_METHOD = 'function';
|
const ABI_TYPE_METHOD = 'function';
|
||||||
const ABI_TYPE_EVENT = 'event';
|
const ABI_TYPE_EVENT = 'event';
|
||||||
const MAIN_TEMPLATE_NAME = 'contract.mustache';
|
const DEFAULT_NETWORK_ID = 50;
|
||||||
|
|
||||||
const args = yargs
|
const args = yargs
|
||||||
.option('abiGlob', {
|
.option('abis', {
|
||||||
describe: 'Glob pattern to search for ABI JSON files',
|
describe: 'Glob pattern to search for ABI JSON files',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
demand: true,
|
demandOption: true,
|
||||||
})
|
|
||||||
.option('templates', {
|
|
||||||
describe: 'Folder where to search for templates',
|
|
||||||
type: 'string',
|
|
||||||
demand: true,
|
|
||||||
})
|
})
|
||||||
.option('output', {
|
.option('output', {
|
||||||
|
alias: ['o', 'out'],
|
||||||
describe: 'Folder where to put the output files',
|
describe: 'Folder where to put the output files',
|
||||||
type: 'string',
|
type: 'string',
|
||||||
demand: true,
|
normalize: true,
|
||||||
}).argv;
|
demandOption: true,
|
||||||
|
})
|
||||||
|
.option('partials', {
|
||||||
|
describe: 'Glob pattern for the partial template files',
|
||||||
|
type: 'string',
|
||||||
|
implies: 'template',
|
||||||
|
})
|
||||||
|
.option('template', {
|
||||||
|
describe: 'Path for the main template file that will be used to generate each contract',
|
||||||
|
type: 'string',
|
||||||
|
demandOption: true,
|
||||||
|
normalize: true,
|
||||||
|
})
|
||||||
|
.option('network-id', {
|
||||||
|
describe: 'ID of the network where contract ABIs are nested in artifacts',
|
||||||
|
type: 'number',
|
||||||
|
default: DEFAULT_NETWORK_ID,
|
||||||
|
})
|
||||||
|
.example(
|
||||||
|
"$0 --abis 'src/artifacts/**/*.json' --out 'src/contracts/generated/' --partials 'src/templates/partials/**/*.handlebars' --template 'src/templates/contract.handlebars'",
|
||||||
|
'Full usage example',
|
||||||
|
).argv;
|
||||||
|
|
||||||
|
function registerPartials(partialsGlob: string) {
|
||||||
|
const partialTemplateFileNames = globSync(partialsGlob);
|
||||||
|
utils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
|
||||||
|
for (const partialTemplateFileName of partialTemplateFileNames) {
|
||||||
|
const namedContent = utils.getNamedContent(partialTemplateFileName);
|
||||||
|
Handlebars.registerPartial(namedContent.name, namedContent.content);
|
||||||
|
}
|
||||||
|
return partialsGlob;
|
||||||
|
}
|
||||||
|
|
||||||
function writeOutputFile(name: string, renderedTsCode: string): void {
|
function writeOutputFile(name: string, renderedTsCode: string): void {
|
||||||
const fileName = toSnakeCase(name);
|
let fileName = toSnakeCase(name);
|
||||||
|
if (fileName === 'z_r_x_token') {
|
||||||
|
fileName = 'zrx_token';
|
||||||
|
}
|
||||||
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)}`);
|
utils.log(`Created: ${chalk.bold(filePath)}`);
|
||||||
@@ -45,15 +75,14 @@ function writeOutputFile(name: string, renderedTsCode: string): void {
|
|||||||
|
|
||||||
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input));
|
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input));
|
||||||
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output));
|
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output));
|
||||||
const partialTemplateFileNames = globSync(`${args.templates}/partials/**/*.mustache`);
|
|
||||||
for (const partialTemplateFileName of partialTemplateFileNames) {
|
|
||||||
const namedContent = utils.getNamedContent(partialTemplateFileName);
|
|
||||||
Handlebars.registerPartial(namedContent.name, namedContent.content);
|
|
||||||
}
|
|
||||||
|
|
||||||
const mainTemplate = utils.getNamedContent(`${args.templates}/${MAIN_TEMPLATE_NAME}`);
|
if (args.partials) {
|
||||||
|
registerPartials(args.partials);
|
||||||
|
}
|
||||||
|
const mainTemplate = utils.getNamedContent(args.template);
|
||||||
const template = Handlebars.compile<ContextData>(mainTemplate.content);
|
const template = Handlebars.compile<ContextData>(mainTemplate.content);
|
||||||
const abiFileNames = globSync(args.abiGlob);
|
const abiFileNames = globSync(args.abis);
|
||||||
|
|
||||||
if (_.isEmpty(abiFileNames)) {
|
if (_.isEmpty(abiFileNames)) {
|
||||||
utils.log(`${chalk.red(`No ABI files found.`)}`);
|
utils.log(`${chalk.red(`No ABI files found.`)}`);
|
||||||
utils.log(`Please make sure you've passed the correct folder name and that the files have
|
utils.log(`Please make sure you've passed the correct folder name and that the files have
|
||||||
@@ -67,12 +96,19 @@ for (const abiFileName of abiFileNames) {
|
|||||||
const namedContent = utils.getNamedContent(abiFileName);
|
const namedContent = utils.getNamedContent(abiFileName);
|
||||||
utils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
|
utils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
|
||||||
const parsedContent = JSON.parse(namedContent.content);
|
const parsedContent = JSON.parse(namedContent.content);
|
||||||
const ABI = _.isArray(parsedContent)
|
let ABI;
|
||||||
? parsedContent // ABI file
|
if (_.isArray(parsedContent)) {
|
||||||
: parsedContent.abi; // Truffle contracts file
|
ABI = parsedContent; // ABI file
|
||||||
|
} else if (!_.isUndefined(parsedContent.abi)) {
|
||||||
|
ABI = parsedContent.abi; // Truffle artifact
|
||||||
|
} else if (!_.isUndefined(parsedContent.networks) && !_.isUndefined(parsedContent.networks[args.networkId])) {
|
||||||
|
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}.`)}`);
|
utils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
|
||||||
utils.log(`Please make sure your ABI file is either an array with ABI entries or an object with the abi key`);
|
utils.log(
|
||||||
|
`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);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,10 +119,10 @@ for (const abiFileName of abiFileNames) {
|
|||||||
|
|
||||||
const methodAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_METHOD) as Web3.MethodAbi[];
|
const methodAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_METHOD) as Web3.MethodAbi[];
|
||||||
const methodsData = _.map(methodAbis, methodAbi => {
|
const methodsData = _.map(methodAbis, methodAbi => {
|
||||||
_.map(methodAbi.inputs, input => {
|
_.map(methodAbi.inputs, (input, i: number) => {
|
||||||
if (_.isEmpty(input.name)) {
|
if (_.isEmpty(input.name)) {
|
||||||
// Auto-generated getters don't have parameter names
|
// Auto-generated getters don't have parameter names
|
||||||
input.name = 'index';
|
input.name = `index_${i}`;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// This will make templates simpler
|
// This will make templates simpler
|
||||||
|
@@ -1,10 +1,11 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/assert",
|
"name": "@0xproject/assert",
|
||||||
"version": "0.0.9",
|
"version": "0.0.17",
|
||||||
"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": "tsc",
|
"build": "tsc",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp",
|
"clean": "shx rm -rf _bundles lib test_temp",
|
||||||
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
|
||||||
@@ -23,22 +24,22 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x.js/packages/assert/README.md",
|
"homepage": "https://github.com/0xProject/0x.js/packages/assert/README.md",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@0xproject/tslint-config": "^0.4.0",
|
"@0xproject/tslint-config": "^0.4.7",
|
||||||
"@types/lodash": "^4.14.86",
|
"@types/lodash": "^4.14.86",
|
||||||
"@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.1",
|
"chai-typescript-typings": "^0.0.2",
|
||||||
"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",
|
||||||
"shx": "^0.2.2",
|
"shx": "^0.2.2",
|
||||||
"tslint": "5.8.0",
|
"tslint": "5.8.0",
|
||||||
"typescript": "~2.6.1"
|
"typescript": "2.7.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/json-schemas": "^0.7.1",
|
"@0xproject/json-schemas": "^0.7.9",
|
||||||
"@0xproject/utils": "^0.1.2",
|
"@0xproject/utils": "^0.3.1",
|
||||||
"lodash": "^4.17.4",
|
"lodash": "^4.17.4",
|
||||||
"valid-url": "^1.0.9"
|
"valid-url": "^1.0.9"
|
||||||
}
|
}
|
||||||
|
@@ -3,12 +3,13 @@ const packageJSON = require('../package.json');
|
|||||||
|
|
||||||
const subPackageName = packageJSON.name;
|
const subPackageName = packageJSON.name;
|
||||||
|
|
||||||
postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
||||||
const assets = [];
|
const assets = [];
|
||||||
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
||||||
})
|
})
|
||||||
.catch (function(err) {
|
.catch(function(err) {
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
@@ -12,6 +12,8 @@ export const assert = {
|
|||||||
},
|
},
|
||||||
isValidBaseUnitAmount(variableName: string, value: BigNumber) {
|
isValidBaseUnitAmount(variableName: string, value: BigNumber) {
|
||||||
assert.isBigNumber(variableName, value);
|
assert.isBigNumber(variableName, value);
|
||||||
|
const isNegative = value.lessThan(0);
|
||||||
|
this.assert(!isNegative, `${variableName} cannot be a negative number, found value: ${value.toNumber()}`);
|
||||||
const hasDecimals = value.decimalPlaces() !== 0;
|
const hasDecimals = value.decimalPlaces() !== 0;
|
||||||
this.assert(
|
this.assert(
|
||||||
!hasDecimals,
|
!hasDecimals,
|
||||||
|
@@ -22,6 +22,20 @@ describe('Assertions', () => {
|
|||||||
invalidInputs.forEach(input => expect(assert.isBigNumber.bind(assert, variableName, input)).to.throw());
|
invalidInputs.forEach(input => expect(assert.isBigNumber.bind(assert, variableName, input)).to.throw());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
describe('#isValidBaseUnitAmount', () => {
|
||||||
|
it('should not throw for valid input', () => {
|
||||||
|
const validInputs = [new BigNumber(23), new BigNumber('45000000')];
|
||||||
|
validInputs.forEach(input =>
|
||||||
|
expect(assert.isValidBaseUnitAmount.bind(assert, variableName, input)).to.not.throw(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should throw for invalid input', () => {
|
||||||
|
const invalidInputs = [0, undefined, new BigNumber(3.145), 3.145, new BigNumber(-400)];
|
||||||
|
invalidInputs.forEach(input =>
|
||||||
|
expect(assert.isValidBaseUnitAmount.bind(assert, variableName, input)).to.throw(),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
describe('#isString', () => {
|
describe('#isString', () => {
|
||||||
it('should not throw for valid input', () => {
|
it('should not throw for valid input', () => {
|
||||||
const validInputs = ['hello', 'goodbye'];
|
const validInputs = ['hello', 'goodbye'];
|
||||||
|
@@ -3,5 +3,10 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "lib"
|
"outDir": "lib"
|
||||||
},
|
},
|
||||||
"include": ["./src/**/*", "./test/**/*", "../../node_modules/chai-typescript-typings/index.d.ts"]
|
"include": [
|
||||||
|
"./src/**/*",
|
||||||
|
"./test/**/*",
|
||||||
|
"../../node_modules/web3-typescript-typings/index.d.ts",
|
||||||
|
"../../node_modules/chai-typescript-typings/index.d.ts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v0.x.x - _TBD, 2018_
|
43
packages/chai-as-promised-typescript-typings/README.md
Normal file
43
packages/chai-as-promised-typescript-typings/README.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
## chai-as-promised-typescript-typings
|
||||||
|
|
||||||
|
Fork of type definitions for chai-as-promised that includes changes made by dirty-chai
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn add -D chai-as-promised-typescript-typings
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Add the following line within an `include` section of your `tsconfig.json`
|
||||||
|
|
||||||
|
```json
|
||||||
|
"./node_modules/chai-as-promised-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
|
||||||
|
```
|
268
packages/chai-as-promised-typescript-typings/index.d.ts
vendored
Normal file
268
packages/chai-as-promised-typescript-typings/index.d.ts
vendored
Normal file
@@ -0,0 +1,268 @@
|
|||||||
|
// Type definitions for chai-as-promised
|
||||||
|
// Project: https://github.com/domenic/chai-as-promised/
|
||||||
|
// Definitions by: jt000 <https://github.com/jt000>, Yuki Kokubun <https://github.com/Kuniwak>
|
||||||
|
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||||
|
|
||||||
|
declare module 'chai-as-promised' {
|
||||||
|
function chaiAsPromised(chai: any, utils: any): void;
|
||||||
|
namespace chaiAsPromised {
|
||||||
|
|
||||||
|
}
|
||||||
|
export = chaiAsPromised;
|
||||||
|
}
|
||||||
|
|
||||||
|
// tslint:disable:no-namespace ban-types member-ordering
|
||||||
|
declare namespace Chai {
|
||||||
|
// For BDD API
|
||||||
|
interface Assertion extends LanguageChains, NumericComparison, TypeComparison {
|
||||||
|
eventually: PromisedAssertion;
|
||||||
|
fulfilled: PromisedAssertion;
|
||||||
|
become(expected: any): PromisedAssertion;
|
||||||
|
rejected(): PromisedAssertion;
|
||||||
|
rejectedWith(expected: any, message?: string | RegExp): PromisedAssertion;
|
||||||
|
notify(fn: Function): PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Eventually does not have .then(), but PromisedAssertion have.
|
||||||
|
interface Eventually extends PromisedLanguageChains, PromisedNumericComparison, PromisedTypeComparison {
|
||||||
|
// From chai-as-promised
|
||||||
|
become(expected: PromiseLike<any>): PromisedAssertion;
|
||||||
|
fulfilled: PromisedAssertion;
|
||||||
|
rejected: () => PromisedAssertion;
|
||||||
|
rejectedWith(expected: any, message?: string | RegExp): PromisedAssertion;
|
||||||
|
notify(fn: Function): PromisedAssertion;
|
||||||
|
|
||||||
|
// From chai
|
||||||
|
not: PromisedAssertion;
|
||||||
|
deep: PromisedDeep;
|
||||||
|
all: PromisedKeyFilter;
|
||||||
|
a: PromisedTypeComparison;
|
||||||
|
an: PromisedTypeComparison;
|
||||||
|
include: PromisedInclude;
|
||||||
|
contain: PromisedInclude;
|
||||||
|
ok: PromisedAssertion;
|
||||||
|
true: () => PromisedAssertion;
|
||||||
|
false: () => PromisedAssertion;
|
||||||
|
null: PromisedAssertion;
|
||||||
|
undefined: PromisedAssertion;
|
||||||
|
exist: PromisedAssertion;
|
||||||
|
empty: PromisedAssertion;
|
||||||
|
arguments: PromisedAssertion;
|
||||||
|
Arguments: PromisedAssertion;
|
||||||
|
equal: PromisedEqual;
|
||||||
|
equals: PromisedEqual;
|
||||||
|
eq: PromisedEqual;
|
||||||
|
eql: PromisedEqual;
|
||||||
|
eqls: PromisedEqual;
|
||||||
|
property: PromisedProperty;
|
||||||
|
ownProperty: PromisedOwnProperty;
|
||||||
|
haveOwnProperty: PromisedOwnProperty;
|
||||||
|
length: PromisedLength;
|
||||||
|
lengthOf: PromisedLength;
|
||||||
|
match(regexp: RegExp | string, message?: string): PromisedAssertion;
|
||||||
|
string(string: string, message?: string): PromisedAssertion;
|
||||||
|
keys: PromisedKeys;
|
||||||
|
key(string: string): PromisedAssertion;
|
||||||
|
throw: PromisedThrow;
|
||||||
|
throws: PromisedThrow;
|
||||||
|
Throw: PromisedThrow;
|
||||||
|
respondTo(method: string, message?: string): PromisedAssertion;
|
||||||
|
itself: PromisedAssertion;
|
||||||
|
satisfy(matcher: Function, message?: string): PromisedAssertion;
|
||||||
|
closeTo(expected: number, delta: number, message?: string): PromisedAssertion;
|
||||||
|
members: PromisedMembers;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedAssertion extends Eventually, PromiseLike<any> {}
|
||||||
|
|
||||||
|
interface PromisedLanguageChains {
|
||||||
|
eventually: Eventually;
|
||||||
|
|
||||||
|
// From chai
|
||||||
|
to: PromisedAssertion;
|
||||||
|
be: PromisedAssertion;
|
||||||
|
been: PromisedAssertion;
|
||||||
|
is: PromisedAssertion;
|
||||||
|
that: PromisedAssertion;
|
||||||
|
which: PromisedAssertion;
|
||||||
|
and: PromisedAssertion;
|
||||||
|
has: PromisedAssertion;
|
||||||
|
have: PromisedAssertion;
|
||||||
|
with: PromisedAssertion;
|
||||||
|
at: PromisedAssertion;
|
||||||
|
of: PromisedAssertion;
|
||||||
|
same: PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedNumericComparison {
|
||||||
|
above: PromisedNumberComparer;
|
||||||
|
gt: PromisedNumberComparer;
|
||||||
|
greaterThan: PromisedNumberComparer;
|
||||||
|
least: PromisedNumberComparer;
|
||||||
|
gte: PromisedNumberComparer;
|
||||||
|
below: PromisedNumberComparer;
|
||||||
|
lt: PromisedNumberComparer;
|
||||||
|
lessThan: PromisedNumberComparer;
|
||||||
|
most: PromisedNumberComparer;
|
||||||
|
lte: PromisedNumberComparer;
|
||||||
|
within(start: number, finish: number, message?: string): PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
type PromisedNumberComparer = (value: number, message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
interface PromisedTypeComparison {
|
||||||
|
(type: string, message?: string): PromisedAssertion;
|
||||||
|
instanceof: PromisedInstanceOf;
|
||||||
|
instanceOf: PromisedInstanceOf;
|
||||||
|
}
|
||||||
|
|
||||||
|
type PromisedInstanceOf = (constructor: Object, message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
interface PromisedDeep {
|
||||||
|
equal: PromisedEqual;
|
||||||
|
include: PromisedInclude;
|
||||||
|
property: PromisedProperty;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedKeyFilter {
|
||||||
|
keys: PromisedKeys;
|
||||||
|
}
|
||||||
|
|
||||||
|
type PromisedEqual = (value: any, message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
type PromisedProperty = (name: string, value?: any, message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
type PromisedOwnProperty = (name: string, message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
interface PromisedLength extends PromisedLanguageChains, PromisedNumericComparison {
|
||||||
|
(length: number, message?: string): PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedInclude {
|
||||||
|
(value: Object | string | number, message?: string): PromisedAssertion;
|
||||||
|
keys: PromisedKeys;
|
||||||
|
members: PromisedMembers;
|
||||||
|
all: PromisedKeyFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedKeys {
|
||||||
|
(...keys: string[]): PromisedAssertion;
|
||||||
|
(keys: any[]): PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface PromisedThrow {
|
||||||
|
(): PromisedAssertion;
|
||||||
|
(expected: string | RegExp, message?: string): PromisedAssertion;
|
||||||
|
(constructor: Error | Function, expected?: string | RegExp, message?: string): PromisedAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
|
type PromisedMembers = (set: any[], message?: string) => PromisedAssertion;
|
||||||
|
|
||||||
|
// For Assert API
|
||||||
|
interface Assert {
|
||||||
|
eventually: PromisedAssert;
|
||||||
|
isFulfilled(promise: PromiseLike<any>, message?: string): PromiseLike<void>;
|
||||||
|
becomes(promise: PromiseLike<any>, expected: any, message?: string): PromiseLike<void>;
|
||||||
|
doesNotBecome(promise: PromiseLike<any>, expected: any, message?: string): PromiseLike<void>;
|
||||||
|
isRejected(promise: PromiseLike<any>, message?: string): PromiseLike<void>;
|
||||||
|
isRejected(promise: PromiseLike<any>, expected: any | RegExp, message?: string): PromiseLike<void>;
|
||||||
|
notify(fn: Function): PromiseLike<void>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PromisedAssert {
|
||||||
|
fail(actual?: any, expected?: any, msg?: string, operator?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
ok(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
notOk(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
equal(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
notEqual(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
strictEqual(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
notStrictEqual(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
deepEqual(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
notDeepEqual(act: any, exp: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isTrue(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isFalse(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isNull(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotNull(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isUndefined(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isDefined(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isFunction(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotFunction(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isObject(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotObject(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isArray(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotArray(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isString(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotString(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isNumber(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotNumber(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
isBoolean(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
isNotBoolean(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
typeOf(val: any, type: string, msg?: string): PromiseLike<void>;
|
||||||
|
notTypeOf(val: any, type: string, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
instanceOf(val: any, type: Function, msg?: string): PromiseLike<void>;
|
||||||
|
notInstanceOf(val: any, type: Function, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
include(exp: string | any[], inc: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
notInclude(exp: string | any[], inc: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
match(exp: any, re: RegExp, msg?: string): PromiseLike<void>;
|
||||||
|
notMatch(exp: any, re: RegExp, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
property(obj: Object, prop: string, msg?: string): PromiseLike<void>;
|
||||||
|
notProperty(obj: Object, prop: string, msg?: string): PromiseLike<void>;
|
||||||
|
deepProperty(obj: Object, prop: string, msg?: string): PromiseLike<void>;
|
||||||
|
notDeepProperty(obj: Object, prop: string, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
propertyVal(obj: Object, prop: string, val: any, msg?: string): PromiseLike<void>;
|
||||||
|
propertyNotVal(obj: Object, prop: string, val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
deepPropertyVal(obj: Object, prop: string, val: any, msg?: string): PromiseLike<void>;
|
||||||
|
deepPropertyNotVal(obj: Object, prop: string, val: any, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
lengthOf(exp: any, len: number, msg?: string): PromiseLike<void>;
|
||||||
|
// alias frenzy
|
||||||
|
throw(fn: Function, msg?: string): PromiseLike<void>;
|
||||||
|
throw(fn: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
throw(fn: Function, errType: Function, msg?: string): PromiseLike<void>;
|
||||||
|
throw(fn: Function, errType: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
|
||||||
|
throws(fn: Function, msg?: string): PromiseLike<void>;
|
||||||
|
throws(fn: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
throws(fn: Function, errType: Function, msg?: string): PromiseLike<void>;
|
||||||
|
throws(fn: Function, errType: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
|
||||||
|
Throw(fn: Function, msg?: string): PromiseLike<void>;
|
||||||
|
Throw(fn: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
Throw(fn: Function, errType: Function, msg?: string): PromiseLike<void>;
|
||||||
|
Throw(fn: Function, errType: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
|
||||||
|
doesNotThrow(fn: Function, msg?: string): PromiseLike<void>;
|
||||||
|
doesNotThrow(fn: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
doesNotThrow(fn: Function, errType: Function, msg?: string): PromiseLike<void>;
|
||||||
|
doesNotThrow(fn: Function, errType: Function, regExp: RegExp): PromiseLike<void>;
|
||||||
|
|
||||||
|
operator(val: any, operator: string, val2: any, msg?: string): PromiseLike<void>;
|
||||||
|
closeTo(act: number, exp: number, delta: number, msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
sameMembers(set1: any[], set2: any[], msg?: string): PromiseLike<void>;
|
||||||
|
includeMembers(set1: any[], set2: any[], msg?: string): PromiseLike<void>;
|
||||||
|
|
||||||
|
ifError(val: any, msg?: string): PromiseLike<void>;
|
||||||
|
}
|
||||||
|
}
|
23
packages/chai-as-promised-typescript-typings/package.json
Normal file
23
packages/chai-as-promised-typescript-typings/package.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "chai-as-promised-typescript-typings",
|
||||||
|
"version": "0.0.8",
|
||||||
|
"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.js.git"
|
||||||
|
},
|
||||||
|
"author": "Fabio Berger",
|
||||||
|
"contributors": [
|
||||||
|
"Leonid Logvinov <logvinov.leon@gmail.com>"
|
||||||
|
],
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/0xProject/0x.js/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/0xProject/0x.js/packages/chai-as-promised-typescript-typings#readme",
|
||||||
|
"dependencies": {
|
||||||
|
"chai-typescript-typings": "^0.0.2"
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,15 @@
|
|||||||
|
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
||||||
|
const packageJSON = require('../package.json');
|
||||||
|
|
||||||
|
const subPackageName = packageJSON.name;
|
||||||
|
|
||||||
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
|
.then(function(result) {
|
||||||
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
||||||
|
const assets = [];
|
||||||
|
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
throw err;
|
||||||
|
});
|
3
packages/chai-as-promised-typescript-typings/tslint.json
Normal file
3
packages/chai-as-promised-typescript-typings/tslint.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": ["tslint-config-0xproject"]
|
||||||
|
}
|
3
packages/chai-typescript-typings/CHANGELOG.md
Normal file
3
packages/chai-typescript-typings/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# CHANGELOG
|
||||||
|
|
||||||
|
## v0.x.x - _TBD, 2018_
|
43
packages/chai-typescript-typings/README.md
Normal file
43
packages/chai-typescript-typings/README.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
## 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
|
||||||
|
```
|
1254
packages/chai-typescript-typings/index.d.ts
vendored
Normal file
1254
packages/chai-typescript-typings/index.d.ts
vendored
Normal file
File diff suppressed because it is too large
Load Diff
16
packages/chai-typescript-typings/package.json
Normal file
16
packages/chai-typescript-typings/package.json
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"name": "chai-typescript-typings",
|
||||||
|
"version": "0.0.2",
|
||||||
|
"description": "Typescript type definitions for chai",
|
||||||
|
"main": "index.d.ts",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "git+https://github.com/0xProject/0x.js.git"
|
||||||
|
},
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/0xProject/0x.js/issues"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/0xProject/0x.js/packages/chai-typescript-typings#readme"
|
||||||
|
}
|
15
packages/chai-typescript-typings/scripts/postpublish.js
Normal file
15
packages/chai-typescript-typings/scripts/postpublish.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
const postpublish_utils = require('../../../scripts/postpublish_utils');
|
||||||
|
const packageJSON = require('../package.json');
|
||||||
|
|
||||||
|
const subPackageName = packageJSON.name;
|
||||||
|
|
||||||
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
|
.then(function(result) {
|
||||||
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
|
||||||
|
const assets = [];
|
||||||
|
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
|
||||||
|
})
|
||||||
|
.catch(function(err) {
|
||||||
|
throw err;
|
||||||
|
});
|
3
packages/chai-typescript-typings/tslint.json
Normal file
3
packages/chai-typescript-typings/tslint.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"extends": ["tslint-config-0xproject"]
|
||||||
|
}
|
@@ -1,6 +1,12 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
## vx.x.x
|
## v0.5.0 - _January 17, 2018_
|
||||||
|
|
||||||
|
* Sanitize api endpoint url and remove trailing slashes (#318)
|
||||||
|
* Improve error message text in HttpClient (#318)
|
||||||
|
* Stop appending '/v0' to api endpoint url in HttpClient (#318)
|
||||||
|
|
||||||
|
## v0.4.0 - _January 11, 2018_
|
||||||
|
|
||||||
* Prevent getFeesAsync method on HttpClient from mutating input (#296)
|
* Prevent getFeesAsync method on HttpClient from mutating input (#296)
|
||||||
|
|
||||||
|
@@ -1,16 +1,22 @@
|
|||||||
{
|
{
|
||||||
"name": "@0xproject/connect",
|
"name": "@0xproject/connect",
|
||||||
"version": "0.3.2",
|
"version": "0.5.6",
|
||||||
"description": "A javascript library for interacting with the standard relayer api",
|
"description": "A javascript library for interacting with the standard relayer api",
|
||||||
"keywords": ["connect", "0xproject", "ethereum", "tokens", "exchange"],
|
"keywords": [
|
||||||
|
"connect",
|
||||||
|
"0xproject",
|
||||||
|
"ethereum",
|
||||||
|
"tokens",
|
||||||
|
"exchange"
|
||||||
|
],
|
||||||
"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": "tsc",
|
"build": "tsc",
|
||||||
"clean": "shx rm -rf _bundles lib test_temp",
|
"clean": "shx rm -rf _bundles lib test_temp",
|
||||||
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
|
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
|
||||||
"upload_docs_json":
|
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json",
|
||||||
"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",
|
||||||
@@ -31,16 +37,16 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/0xProject/0x.js/packages/connect/README.md",
|
"homepage": "https://github.com/0xProject/0x.js/packages/connect/README.md",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@0xproject/assert": "^0.0.9",
|
"@0xproject/assert": "^0.0.17",
|
||||||
"@0xproject/json-schemas": "^0.7.1",
|
"@0xproject/json-schemas": "^0.7.9",
|
||||||
"@0xproject/utils": "^0.1.2",
|
"@0xproject/utils": "^0.3.1",
|
||||||
"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.0",
|
"@0xproject/tslint-config": "^0.4.7",
|
||||||
"@types/fetch-mock": "^5.12.1",
|
"@types/fetch-mock": "^5.12.1",
|
||||||
"@types/lodash": "^4.14.86",
|
"@types/lodash": "^4.14.86",
|
||||||
"@types/mocha": "^2.2.42",
|
"@types/mocha": "^2.2.42",
|
||||||
@@ -48,8 +54,8 @@
|
|||||||
"@types/websocket": "^0.0.34",
|
"@types/websocket": "^0.0.34",
|
||||||
"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.3",
|
"chai-as-promised-typescript-typings": "^0.0.8",
|
||||||
"chai-typescript-typings": "^0.0.1",
|
"chai-typescript-typings": "^0.0.2",
|
||||||
"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",
|
||||||
@@ -58,7 +64,7 @@
|
|||||||
"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.6.1",
|
"typescript": "2.7.1",
|
||||||
"web3-typescript-typings": "^0.9.0"
|
"web3-typescript-typings": "^0.9.9"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -8,22 +8,20 @@ const S3BucketPath = 's3://connect-docs-jsons/';
|
|||||||
|
|
||||||
let tag;
|
let tag;
|
||||||
let version;
|
let version;
|
||||||
postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
postpublish_utils
|
||||||
|
.getLatestTagAndVersionAsync(subPackageName)
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
tag = result.tag;
|
tag = result.tag;
|
||||||
version = result.version;
|
version = result.version;
|
||||||
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
|
||||||
return postpublish_utils.publishReleaseNotes(tag, releaseName);
|
return postpublish_utils.publishReleaseNotes(tag, releaseName);
|
||||||
})
|
})
|
||||||
.then(function(release) {
|
.then(function(release) {
|
||||||
console.log('POSTPUBLISH: Release successful, generating docs...');
|
console.log('POSTPUBLISH: Release successful, generating docs...');
|
||||||
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
|
||||||
return execAsync(
|
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json', {
|
||||||
'JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json',
|
cwd,
|
||||||
{
|
});
|
||||||
cwd,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
})
|
})
|
||||||
.then(function(result) {
|
.then(function(result) {
|
||||||
if (result.stderr !== '') {
|
if (result.stderr !== '') {
|
||||||
@@ -35,6 +33,7 @@ postpublish_utils.getLatestTagAndVersionAsync(subPackageName)
|
|||||||
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
|
||||||
cwd,
|
cwd,
|
||||||
});
|
});
|
||||||
}).catch (function(err) {
|
})
|
||||||
|
.catch(function(err) {
|
||||||
throw err;
|
throw err;
|
||||||
});
|
});
|
||||||
|
@@ -20,6 +20,7 @@ import {
|
|||||||
} from './types';
|
} from './types';
|
||||||
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
|
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
|
||||||
|
|
||||||
|
const TRAILING_SLASHES_REGEX = /\/+$/;
|
||||||
/**
|
/**
|
||||||
* This class includes all the functionality related to interacting with a set of HTTP endpoints
|
* This class includes all the functionality related to interacting with a set of HTTP endpoints
|
||||||
* that implement the standard relayer API v0
|
* that implement the standard relayer API v0
|
||||||
@@ -33,7 +34,7 @@ export class HttpClient implements Client {
|
|||||||
*/
|
*/
|
||||||
constructor(url: string) {
|
constructor(url: string) {
|
||||||
assert.isHttpUrl('url', url);
|
assert.isHttpUrl('url', url);
|
||||||
this._apiEndpointUrl = url;
|
this._apiEndpointUrl = url.replace(TRAILING_SLASHES_REGEX, ''); // remove trailing slashes
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Retrieve token pair info from the API
|
* Retrieve token pair info from the API
|
||||||
@@ -130,20 +131,22 @@ export class HttpClient implements Client {
|
|||||||
const stringifiedParams = queryString.stringify(params);
|
const stringifiedParams = queryString.stringify(params);
|
||||||
query = `?${stringifiedParams}`;
|
query = `?${stringifiedParams}`;
|
||||||
}
|
}
|
||||||
const url = `${this._apiEndpointUrl}/v0${path}${query}`;
|
const url = `${this._apiEndpointUrl}${path}${query}`;
|
||||||
const headers = new Headers({
|
const headers = new Headers({
|
||||||
'content-type': 'application/json',
|
'content-type': 'application/json',
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = await fetch(url, {
|
const response = await fetch(url, {
|
||||||
method: requestType,
|
method: requestType,
|
||||||
body: JSON.stringify(payload),
|
body: JSON.stringify(payload),
|
||||||
headers,
|
headers,
|
||||||
});
|
});
|
||||||
if (!response.ok) {
|
|
||||||
throw Error(response.statusText);
|
|
||||||
}
|
|
||||||
const json = await response.json();
|
const json = await response.json();
|
||||||
|
if (!response.ok) {
|
||||||
|
const errorString = `${response.status} - ${response.statusText}\n${requestType} ${url}\n${JSON.stringify(
|
||||||
|
json,
|
||||||
|
)}`;
|
||||||
|
throw Error(errorString);
|
||||||
|
}
|
||||||
return json;
|
return json;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -29,14 +29,23 @@ describe('HttpClient', () => {
|
|||||||
afterEach(() => {
|
afterEach(() => {
|
||||||
fetchMock.restore();
|
fetchMock.restore();
|
||||||
});
|
});
|
||||||
|
describe('#constructor', () => {
|
||||||
|
it('should remove trailing slashes from api url', async () => {
|
||||||
|
const urlWithTrailingSlash = 'https://slash.com/';
|
||||||
|
const urlWithoutTrailingSlash = 'https://slash.com';
|
||||||
|
const client = new HttpClient(urlWithTrailingSlash);
|
||||||
|
const sanitizedUrl = (client as any)._apiEndpointUrl;
|
||||||
|
expect(sanitizedUrl).to.be.deep.equal(urlWithoutTrailingSlash);
|
||||||
|
});
|
||||||
|
});
|
||||||
describe('#getTokenPairsAsync', () => {
|
describe('#getTokenPairsAsync', () => {
|
||||||
const url = `${relayUrl}/v0/token_pairs`;
|
const url = `${relayUrl}/token_pairs`;
|
||||||
it('gets token pairs', async () => {
|
it('gets token pairs', async () => {
|
||||||
fetchMock.get(url, tokenPairsResponseJSON);
|
fetchMock.get(url, tokenPairsResponseJSON);
|
||||||
const tokenPairs = await relayerClient.getTokenPairsAsync();
|
const tokenPairs = await relayerClient.getTokenPairsAsync();
|
||||||
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
|
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
|
||||||
});
|
});
|
||||||
it('gets specfic token pairs for request', async () => {
|
it('gets specific token pairs for request', async () => {
|
||||||
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
|
||||||
const tokenPairsRequest = {
|
const tokenPairsRequest = {
|
||||||
tokenA: tokenAddress,
|
tokenA: tokenAddress,
|
||||||
@@ -52,7 +61,7 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
describe('#getOrdersAsync', () => {
|
describe('#getOrdersAsync', () => {
|
||||||
const url = `${relayUrl}/v0/orders`;
|
const url = `${relayUrl}/orders`;
|
||||||
it('gets orders', async () => {
|
it('gets orders', async () => {
|
||||||
fetchMock.get(url, ordersResponseJSON);
|
fetchMock.get(url, ordersResponseJSON);
|
||||||
const orders = await relayerClient.getOrdersAsync();
|
const orders = await relayerClient.getOrdersAsync();
|
||||||
@@ -75,7 +84,7 @@ describe('HttpClient', () => {
|
|||||||
});
|
});
|
||||||
describe('#getOrderAsync', () => {
|
describe('#getOrderAsync', () => {
|
||||||
const orderHash = '0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
const orderHash = '0xabc67323774bdbd24d94f977fa9ac94a50f016026fd13f42990861238897721f';
|
||||||
const url = `${relayUrl}/v0/order/${orderHash}`;
|
const url = `${relayUrl}/order/${orderHash}`;
|
||||||
it('gets order', async () => {
|
it('gets order', async () => {
|
||||||
fetchMock.get(url, orderResponseJSON);
|
fetchMock.get(url, orderResponseJSON);
|
||||||
const order = await relayerClient.getOrderAsync(orderHash);
|
const order = await relayerClient.getOrderAsync(orderHash);
|
||||||
@@ -91,7 +100,7 @@ describe('HttpClient', () => {
|
|||||||
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
|
||||||
quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
|
||||||
};
|
};
|
||||||
const url = `${relayUrl}/v0/orderbook?baseTokenAddress=${request.baseTokenAddress}"eTokenAddress=${
|
const url = `${relayUrl}/orderbook?baseTokenAddress=${request.baseTokenAddress}"eTokenAddress=${
|
||||||
request.quoteTokenAddress
|
request.quoteTokenAddress
|
||||||
}`;
|
}`;
|
||||||
it('gets order book', async () => {
|
it('gets order book', async () => {
|
||||||
@@ -116,7 +125,7 @@ describe('HttpClient', () => {
|
|||||||
salt: new BigNumber('256'),
|
salt: new BigNumber('256'),
|
||||||
expirationUnixTimestampSec: new BigNumber('42'),
|
expirationUnixTimestampSec: new BigNumber('42'),
|
||||||
};
|
};
|
||||||
const url = `${relayUrl}/v0/fees`;
|
const url = `${relayUrl}/fees`;
|
||||||
it('gets fees', async () => {
|
it('gets fees', async () => {
|
||||||
fetchMock.post(url, feesResponseJSON);
|
fetchMock.post(url, feesResponseJSON);
|
||||||
const fees = await relayerClient.getFeesAsync(request);
|
const fees = await relayerClient.getFeesAsync(request);
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
"include": [
|
"include": [
|
||||||
"./src/**/*",
|
"./src/**/*",
|
||||||
"./test/**/*",
|
"./test/**/*",
|
||||||
|
"../../node_modules/web3-typescript-typings/index.d.ts",
|
||||||
"../../node_modules/chai-as-promised-typescript-typings/index.d.ts",
|
"../../node_modules/chai-as-promised-typescript-typings/index.d.ts",
|
||||||
"../../node_modules/chai-typescript-typings/index.d.ts"
|
"../../node_modules/chai-typescript-typings/index.d.ts"
|
||||||
]
|
]
|
||||||
|
@@ -38,6 +38,12 @@ yarn install
|
|||||||
yarn build
|
yarn build
|
||||||
```
|
```
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yarn build:watch
|
||||||
|
```
|
||||||
|
|
||||||
### Clean
|
### Clean
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -1,394 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "EtherToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "name",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "amount",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "withdraw",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "decimals",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint8"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "symbol",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "string"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "deposit",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": true,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"payable": true,
|
|
||||||
"type": "fallback"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6107598061001c6000396000f300606060405236156100935763ffffffff60e060020a60003504166306fdde0381146100a4578063095ea7b31461013457806318160ddd1461016757806323b872dd146101895780632e1a7d4d146101c2578063313ce567146101d757806370a08231146101fd57806395d89b411461022b578063a9059cbb146102bb578063d0e30db0146102ee578063dd62ed3e146102f8575b6100a25b61009f61032c565b5b565b005b34156100ac57fe5b6100b461037b565b6040805160208082528351818301528351919283929083019185019080838382156100fa575b8051825260208311156100fa57601f1990920191602091820191016100da565b505050905090810190601f1680156101265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561013c57fe5b610153600160a060020a03600435166024356103a3565b604080519115158252519081900360200190f35b341561016f57fe5b61017761040e565b60408051918252519081900360200190f35b341561019157fe5b610153600160a060020a0360043581169060243516604435610414565b604080519115158252519081900360200190f35b34156101ca57fe5b6100a2600435610537565b005b34156101df57fe5b6101e76105b8565b6040805160ff9092168252519081900360200190f35b341561020557fe5b610177600160a060020a03600435166105bd565b60408051918252519081900360200190f35b341561023357fe5b6100b46105dc565b6040805160208082528351818301528351919283929083019185019080838382156100fa575b8051825260208311156100fa57601f1990920191602091820191016100da565b505050905090810190601f1680156101265780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156102c357fe5b610153600160a060020a03600435166024356105fd565b604080519115158252519081900360200190f35b6100a261032c565b005b341561030057fe5b610177600160a060020a03600435811690602435166106af565b60408051918252519081900360200190f35b600160a060020a03331660009081526020819052604090205461034f90346106dc565b600160a060020a03331660009081526020819052604090205560025461037590346106dc565b6002555b565b60408051808201909152600b815260a960020a6a22ba3432b9102a37b5b2b702602082015281565b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a03808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906104575750828110155b801561047d5750600160a060020a03841660009081526020819052604090205483810110155b1561052957600160a060020a03808516600090815260208190526040808220805487019055918716815220805484900390556000198110156104e757600160a060020a03808616600090815260016020908152604080832033909416835292905220805484900390555b83600160a060020a031685600160a060020a031660008051602061070e833981519152856040518082815260200191505060405180910390a36001915061052e565b600091505b5b509392505050565b600160a060020a03331660009081526020819052604090205461055a90826106f6565b600160a060020a03331660009081526020819052604090205560025461058090826106f6565b600255604051600160a060020a0333169082156108fc029083906000818181858888f1935050505015156105b45760006000fd5b5b50565b601281565b600160a060020a0381166000908152602081905260409020545b919050565b604080518082019091526004815260e360020a630ae8aa8902602082015281565b600160a060020a0333166000908152602081905260408120548290108015906106405750600160a060020a03831660009081526020819052604090205482810110155b156106a057600160a060020a03338116600081815260208181526040808320805488900390559387168083529184902080548701905583518681529351919360008051602061070e833981519152929081900390910190a3506001610408565b506000610408565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000828201838110156106eb57fe5b8091505b5092915050565b60008282111561070257fe5b508082035b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582036b62e75991ca24307fbb7333dc79a1493b9acb6b3e146e3c707708262cfbe430029",
|
|
||||||
"networks": {
|
|
||||||
"1": {
|
|
||||||
"links": {},
|
|
||||||
"events": {
|
|
||||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"updated_at": 1502488087000,
|
|
||||||
"address": "0x2956356cd2a2bf3202f771f50d3d14a367b48070"
|
|
||||||
},
|
|
||||||
"42": {
|
|
||||||
"links": {},
|
|
||||||
"events": {
|
|
||||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"updated_at": 1502391794392,
|
|
||||||
"address": "0x05d090b51c40b020eab3bfcb6a2dff130df22e9c"
|
|
||||||
},
|
|
||||||
"50": {
|
|
||||||
"links": {},
|
|
||||||
"events": {
|
|
||||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"updated_at": 1513088404209,
|
|
||||||
"address": "0x48bacb9266a570d521063ef5dd96e61686dbe788"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088404209
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
@@ -1,227 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "MaliciousToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x60606040526003805460ff19166001179055341561001957fe5b5b610467806100296000396000f3006060604052361561005c5763ffffffff60e060020a600035041663095ea7b3811461005e57806318160ddd1461009157806323b872dd146100b357806370a08231146100ec578063a9059cbb1461011a578063dd62ed3e1461014d575bfe5b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561009957fe5b6100a16101ec565b60408051918252519081900360200190f35b34156100bb57fe5b61007d600160a060020a03600435811690602435166044356101f2565b604080519115158252519081900360200190f35b34156100f457fe5b6100a1600160a060020a03600435166102ee565b60408051918252519081900360200190f35b341561012257fe5b61007d600160a060020a0360043516602435610318565b604080519115158252519081900360200190f35b341561015557fe5b6100a1600160a060020a03600435811690602435166103ca565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a0383166000908152602081905260408120548290108015906102425750600160a060020a0380851660009081526001602090815260408083203390941683529290522054829010155b80156102685750600160a060020a03831660009081526020819052604090205482810110155b156102e257600160a060020a03808416600081815260208181526040808320805488019055888516808452818420805489900390556001835281842033909616845294825291829020805487900390558151868152915192939260008051602061041c8339815191529281900390910190a35060016102e6565b5060005b5b9392505050565b60006102f8610402565b50600160a060020a0381166000908152602081905260409020545b919050565b600160a060020a03331660009081526020819052604081205482901080159061035b5750600160a060020a03831660009081526020819052604090205482810110155b156103bb57600160a060020a03338116600081815260208181526040808320805488900390559387168083529184902080548701905583518681529351919360008051602061041c833981519152929081900390910190a35060016101e6565b5060006101e6565b5b92915050565b60006103d4610402565b50600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6003805460ff8082166001011660ff199091161790555b5600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582078edadabd342b34dc605a47ad9eab0ab5ad8513193a546e042b2ab9c6101d5250029",
|
|
||||||
"networks": {
|
|
||||||
"50": {
|
|
||||||
"links": {},
|
|
||||||
"events": {
|
|
||||||
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
"0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925": {
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"updated_at": 1513088404210
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088404210
|
|
||||||
}
|
|
@@ -1,72 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Migrations",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "new_address",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "upgrade",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "last_completed_migration",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "completed",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "setCompleted",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"inputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "constructor"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101a0806100396000396000f300606060405263ffffffff60e060020a6000350416630900f0108114610042578063445df0ac146100605780638da5cb5b14610082578063fdacd576146100ae575bfe5b341561004a57fe5b61005e600160a060020a03600435166100c3565b005b341561006857fe5b61007061013d565b60408051918252519081900360200190f35b341561008a57fe5b610092610143565b60408051600160a060020a039092168252519081900360200190f35b34156100b657fe5b61005e600435610152565b005b6000805433600160a060020a03908116911614156101375781905080600160a060020a031663fdacd5766001546040518263ffffffff1660e060020a02815260040180828152602001915050600060405180830381600087803b151561012557fe5b6102c65a03f1151561013357fe5b5050505b5b5b5050565b60015481565b600054600160a060020a031681565b60005433600160a060020a039081169116141561016f5760018190555b5b5b505600a165627a7a72305820721709a2522264b5277c3048b17bea0e0f660776a386bacb5f36796ba40dac1c0029",
|
|
||||||
"networks": {
|
|
||||||
"50": {
|
|
||||||
"links": {},
|
|
||||||
"events": {},
|
|
||||||
"updated_at": 1513088404203
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088404203
|
|
||||||
}
|
|
@@ -1,189 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Mintable",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "mint",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6105018061001c6000396000f300606060405236156100675763ffffffff60e060020a600035041663095ea7b3811461006957806318160ddd1461009c57806323b872dd146100be57806370a08231146100f7578063a0712d6814610125578063a9059cbb1461013a578063dd62ed3e1461016d575bfe5b341561007157fe5b610088600160a060020a03600435166024356101a1565b604080519115158252519081900360200190f35b34156100a457fe5b6100ac61020c565b60408051918252519081900360200190f35b34156100c657fe5b610088600160a060020a0360043581169060243516604435610212565b604080519115158252519081900360200190f35b34156100ff57fe5b6100ac600160a060020a0360043516610335565b60408051918252519081900360200190f35b341561012d57fe5b610138600435610354565b005b341561014257fe5b610088600160a060020a03600435166024356103bc565b604080519115158252519081900360200190f35b341561017557fe5b6100ac600160a060020a036004358116906024351661046e565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a03808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906102555750828110155b801561027b5750600160a060020a03841660009081526020819052604090205483810110155b1561032757600160a060020a03808516600090815260208190526040808220805487019055918716815220805484900390556000198110156102e557600160a060020a03808616600090815260016020908152604080832033909416835292905220805484900390555b83600160a060020a031685600160a060020a03166000805160206104b6833981519152856040518082815260200191505060405180910390a36001915061032c565b600091505b5b509392505050565b600160a060020a0381166000908152602081905260409020545b919050565b68056bc75e2d6310000081111561036b5760006000fd5b600160a060020a03331660009081526020819052604090205461038f90829061049b565b600160a060020a0333166000908152602081905260409020556002546103b5908261049b565b6002555b50565b600160a060020a0333166000908152602081905260408120548290108015906103ff5750600160a060020a03831660009081526020819052604090205482810110155b1561045f57600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191936000805160206104b6833981519152929081900390910190a3506001610206565b506000610206565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000828201838110156104aa57fe5b8091505b50929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820b1c955ed24ff28cfa482298867cac2a83e25903b0100a429152919223fdf653f0029",
|
|
||||||
"networks": {},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088402049
|
|
||||||
}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Ownable",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "owner",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "newOwner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferOwnership",
|
|
||||||
"outputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"inputs": [],
|
|
||||||
"payable": false,
|
|
||||||
"type": "constructor"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b60008054600160a060020a03191633600160a060020a03161790555b5b60f3806100386000396000f300606060405263ffffffff60e060020a6000350416638da5cb5b8114602a578063f2fde38b146053575bfe5b3415603157fe5b6037606e565b60408051600160a060020a039092168252519081900360200190f35b3415605a57fe5b606c600160a060020a0360043516607d565b005b600054600160a060020a031681565b60005433600160a060020a0390811691161460985760006000fd5b600160a060020a0381161560c25760008054600160a060020a031916600160a060020a0383161790555b5b5b505600a165627a7a7230582048ccfb6ebb285c80c8b4030a0e4f2e6ec2a0619b363a2d7cd20692a0cfb170550029",
|
|
||||||
"networks": {},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088402049
|
|
||||||
}
|
|
@@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "SafeMath",
|
|
||||||
"abi": [],
|
|
||||||
"unlinked_binary": "0x60606040523415600b57fe5b5b60338060196000396000f30060606040525bfe00a165627a7a72305820becdc80300a4dbf834bb9ab115616eb459f82b51a9133d360eb1e6e5402072eb0029",
|
|
||||||
"networks": {},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088402049
|
|
||||||
}
|
|
@@ -1,176 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "StandardToken",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6104388061001c6000396000f3006060604052361561005c5763ffffffff60e060020a600035041663095ea7b3811461005e57806318160ddd1461009157806323b872dd146100b357806370a08231146100ec578063a9059cbb1461011a578063dd62ed3e1461014d575bfe5b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561009957fe5b6100a16101ec565b60408051918252519081900360200190f35b34156100bb57fe5b61007d600160a060020a03600435811690602435166044356101f2565b604080519115158252519081900360200190f35b34156100f457fe5b6100a1600160a060020a03600435166102ee565b60408051918252519081900360200190f35b341561012257fe5b61007d600160a060020a036004351660243561030d565b604080519115158252519081900360200190f35b341561015557fe5b6100a1600160a060020a03600435811690602435166103bf565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a0383166000908152602081905260408120548290108015906102425750600160a060020a0380851660009081526001602090815260408083203390941683529290522054829010155b80156102685750600160a060020a03831660009081526020819052604090205482810110155b156102e257600160a060020a0380841660008181526020818152604080832080548801905588851680845281842080548990039055600183528184203390961684529482529182902080548790039055815186815291519293926000805160206103ed8339815191529281900390910190a35060016102e6565b5060005b5b9392505050565b600160a060020a0381166000908152602081905260409020545b919050565b600160a060020a0333166000908152602081905260408120548290108015906103505750600160a060020a03831660009081526020819052604090205482810110155b156103b057600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191936000805160206103ed833981519152929081900390910190a35060016101e6565b5060006101e6565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582056d411baf4691cc9a0a55ffa6b4a4e9308ea12187fd2fa738228bbd266709d4d0029",
|
|
||||||
"networks": {},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088402049
|
|
||||||
}
|
|
@@ -1,176 +0,0 @@
|
|||||||
{
|
|
||||||
"contract_name": "Token",
|
|
||||||
"abi": [
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "approve",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [],
|
|
||||||
"name": "totalSupply",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "supply",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transferFrom",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "balanceOf",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "balance",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "transfer",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "success",
|
|
||||||
"type": "bool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"constant": true,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "allowance",
|
|
||||||
"outputs": [
|
|
||||||
{
|
|
||||||
"name": "remaining",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"payable": false,
|
|
||||||
"type": "function"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_from",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_to",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Transfer",
|
|
||||||
"type": "event"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"anonymous": false,
|
|
||||||
"inputs": [
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_owner",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": true,
|
|
||||||
"name": "_spender",
|
|
||||||
"type": "address"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"indexed": false,
|
|
||||||
"name": "_value",
|
|
||||||
"type": "uint256"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name": "Approval",
|
|
||||||
"type": "event"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"unlinked_binary": "0x6060604052341561000c57fe5b5b6101e08061001c6000396000f3006060604052361561005c5763ffffffff60e060020a600035041663095ea7b3811461005e57806318160ddd1461009157806323b872dd146100b357806370a08231146100ec578063a9059cbb1461005e578063dd62ed3e1461014d575bfe5b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561009957fe5b6100a161018a565b60408051918252519081900360200190f35b34156100bb57fe5b61007d600160a060020a0360043581169060243516604435610190565b604080519115158252519081900360200190f35b34156100f457fe5b6100a1600160a060020a036004351661019a565b60408051918252519081900360200190f35b341561006657fe5b61007d600160a060020a0360043516602435610181565b604080519115158252519081900360200190f35b341561015557fe5b6100a1600160a060020a0360043581169060243516610181565b60408051918252519081900360200190f35b60005b92915050565b60005b90565b60005b9392505050565b60005b919050565b60005b92915050565b60005b929150505600a165627a7a72305820107c1e9e7aa669d21343c42639b4bb080602c349d00c1da14b8ea6b6dcc0b0f80029",
|
|
||||||
"networks": {},
|
|
||||||
"schema_version": "0.0.5",
|
|
||||||
"updated_at": 1513088402049
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user