Compare commits

...

990 Commits

Author SHA1 Message Date
Fabio Berger
3ba78553f0 Publish
- 0x.js@0.36.1
 - @0xproject/abi-gen@0.2.11
 - @0xproject/assert@0.2.7
 - @0xproject/base-contract@0.2.1
 - @0xproject/connect@0.6.10
 - contracts@2.1.23
 - @0xproject/deployer@0.4.1
 - @0xproject/dev-utils@0.3.6
 - @0xproject/json-schemas@0.7.21
 - @0xproject/metacoin@0.0.4
 - @0xproject/migrations@0.0.2
 - @0xproject/monorepo-scripts@0.1.18
 - @0xproject/react-docs-example@0.0.8
 - @0xproject/react-docs@0.0.8
 - @0xproject/react-shared@0.1.3
 - @0xproject/sol-cov@0.0.8
 - @0xproject/sol-resolver@0.0.2
 - @0xproject/sra-report@0.0.9
 - @0xproject/subproviders@0.9.0
 - @0xproject/testnet-faucets@1.0.24
 - @0xproject/tslint-config@0.4.16
 - @0xproject/types@0.6.1
 - @0xproject/typescript-typings@0.2.0
 - @0xproject/utils@0.5.2
 - @0xproject/web3-wrapper@0.6.1
 - @0xproject/website@0.0.26
2018-04-18 20:16:29 +09:00
Fabio Berger
4d485fc424 Print out stderr 2018-04-18 20:03:50 +09:00
Fabio Berger
85f28ade86 Updated CHANGELOGS 2018-04-18 18:36:11 +09:00
Fabio Berger
f6f2991a44 Merge pull request #535 from 0xProject/fix/commentRendering
Docs: Fix Type Comment Rendering
2018-04-18 18:19:27 +09:00
Fabio Berger
4ea222bbff Bold property names 2018-04-18 17:55:16 +09:00
Fabio Berger
f9f5e04b41 Update PR template 2018-04-18 15:33:29 +09:00
Fabio Berger
ea6706a2af Improve rendering of type definition comments 2018-04-18 15:28:36 +09:00
Fabio Berger
64c5c5eb40 Fix comments 2018-04-18 15:22:20 +09:00
Jacob Evans
823f2db09f Merge pull request #531 from 0xProject/feature/deployer/solidity-0.4.22
Solidity 0.4.22
2018-04-18 16:21:56 +10:00
Jacob Evans
a71e511f82 Update test fixtures
allow dependency compiler test to run everywhere
2018-04-18 15:46:06 +10:00
Jacob Evans
12d5c35d14 Merge pull request #532 from 0xProject/bug/0x.js/fix-formatting-and-linting
Fix linter and prettier on development
2018-04-18 14:06:49 +10:00
Jacob Evans
1a161cc02e Fix linter and prettier 2018-04-18 11:24:59 +10:00
Jacob Evans
96f19ba8da Remove prettier change on package.json 2018-04-18 11:20:49 +10:00
Fabio Berger
a63dfb7995 Merge pull request #527 from avonian/redundant_order_removal_bug
Fix redundant expired order removal bug
2018-04-18 09:31:34 +09:00
Jacob Evans
97ea1e300a Update changelog with PR 2018-04-18 10:09:27 +10:00
Jacob Evans
d87d93dfac Update deployer and contracts repo to use solidity 0.4.22 2018-04-18 10:06:13 +10:00
Ara Kevonian
3ffcb03d87 Update CHANGELOG 2018-04-17 08:03:07 -07:00
Ara Kevonian
33b08b90a3 Revert removeOrder flag in favor of noop 2018-04-17 07:42:43 -07:00
Ara Kevonian
cbca2061f7 Fix redundant expired order removal bug 2018-04-17 07:25:13 -07:00
Fabio Berger
bf4873e519 Merge pull request #510 from avonian/development
Implement `zeroEx.exchange.getOrderStateAsync`
2018-04-17 23:09:05 +09:00
Ara Kevonian
8fc1b38ff2 Use this.defaultBlock in OrderFilledCancelledLazyStore 2018-04-17 06:51:26 -07:00
Ara Kevonian
7d957538b4 Add stateLayer param to getOrderState and clean up variable names 2018-04-17 06:47:36 -07:00
Fabio Berger
7a8edb5018 Reduce wiki article padding on mobile and remove commented out code 2018-04-17 22:03:16 +09:00
Jacob Evans
2193d9ae6e Merge pull request #524 from 0xProject/feature/0x.js/remove-hd-wallet-from-test
Remove truffle-hdwallet from 0x.js tests
2018-04-17 15:06:57 +10:00
Jacob Evans
79d01fe2d7 Merge branch 'development' into feature/0x.js/remove-hd-wallet-from-test 2018-04-17 13:47:57 +10:00
Jacob Evans
0d02037a12 Change changelog note as it has no public impact 2018-04-17 13:41:45 +10:00
Leonid Logvinov
d263f7783f Merge pull request #512 from 0xProject/feature/resolver
Dependencies resolver for deployer
2018-04-16 20:47:28 +02:00
Leonid Logvinov
d8ef76fd5e Rename resolver to sol-resolver 2018-04-16 17:43:59 +02:00
Jacob Evans
bc3c7a30c4 Prettier on CHANGELOG.json 2018-04-14 13:33:06 +10:00
Jacob Evans
7b318b3cc2 Update the Changelog with pr number 2018-04-14 13:15:22 +10:00
Leonid Logvinov
e5cf41b313 Uncomment tests 2018-04-13 13:27:52 +02:00
Leonid Logvinov
74012ad584 Rename getAllContracts to getAll 2018-04-13 13:20:54 +02:00
Leonid Logvinov
06b4f007f8 Introduce packagePath 2018-04-13 13:18:59 +02:00
Leonid Logvinov
a9cf425410 Remove artifacts 2018-04-13 13:17:40 +02:00
Ara Kevonian
5355da6cad Rename BalanceAndAllowanceFetchers to BalanceAndProxyAllowanceFetchers 2018-04-13 03:17:09 -07:00
Ara Kevonian
38f7c4a0d2 Implement Simple Fetchers 2018-04-13 03:04:51 -07:00
Fabio Berger
1fcf3c5dc4 Add SignedOrder type to 0x Connect docs 2018-04-13 14:10:03 +09:00
Fabio Berger
20b0afacf5 Standardize external type links 2018-04-13 14:05:57 +09:00
Fabio Berger
6dbe8dbc50 Fix calendar text color to it shows up 2018-04-13 13:38:52 +09:00
Jacob Evans
73e23996a6 Remove truffle-hdwallet from 0x.js tests 2018-04-13 13:16:30 +10:00
Fabio Berger
e40bce253c Add /jobs endpoint to website, link to it and have it re-direct to Angellist 2018-04-13 11:14:01 +09:00
Fabio Berger
74c279ea3a Remove unneeded template strings 2018-04-13 11:13:21 +09:00
Fabio Berger
6c13b792f9 Remove legacy export 2018-04-13 10:21:33 +09:00
Leonid Logvinov
6be7466c4a Fix tests 2018-04-12 14:47:03 +02:00
Leonid Logvinov
1dbdd7ee1f Merge pull request #523 from ritave/patch-1
Remove Greenkeeper from README
2018-04-12 13:20:13 +02:00
Leonid Logvinov
eb89926cee Implement the resolver 2018-04-12 12:52:48 +02:00
Leonid Logvinov
7923ff4ac6 Use solc.compileStandardWrapper 2018-04-12 12:52:21 +02:00
Leonid Logvinov
783314c037 Improve on readability 2018-04-12 12:52:21 +02:00
Leonid Logvinov
15cf64318c Update CHANGELOG's 2018-04-12 12:52:21 +02:00
Leonid Logvinov
442017f93a Use solc.compileStandardWrapper 2018-04-12 12:51:15 +02:00
Leonid Logvinov
4dd9f29769 Add ony abi-gen changes from Greg's PR 2018-04-12 12:50:52 +02:00
Leonid Logvinov
f2f9bd2e7a Revert "Merge pull request #493 from hysz/features/deployer/multipleCodebaseSupport"
This reverts commit 70d403e6f8, reversing
changes made to 073bf738dd.
2018-04-12 12:50:38 +02:00
Olaf Tomalka
d95b8ef3e1 Remove Greenkeeper from README
Greenkeeper doesn't support Monorepos as of yet
2018-04-12 10:51:58 +02:00
Jacob Evans
ed0c64fdcf Merge pull request #507 from 0xProject/feature/subproviders/mnemonic-wallet-subprovider
Mnemonic wallet subprovider and multiple accounts in ledger
2018-04-12 17:35:32 +10:00
Jacob Evans
9a91e39b3f Revert Ledger back to assigning ledgerClient to instance variable 2018-04-12 17:26:17 +10:00
Jacob Evans
ce3f25d48f Rename to parentDerivedKeyInfo to be explicity about how we walk the tree 2018-04-12 17:10:17 +10:00
Jacob Evans
b669508c34 Pluck key off of base path branch for Mnemonic
This reduces the tree walk complexity in wallet utils as it is assumed that we always walk relative. It also removes a HACK :)
2018-04-12 16:59:57 +10:00
Fabio Berger
364d8824af Fix web3-wrapper version 2018-04-12 09:29:58 +09:00
Fabio Berger
749354b1c0 Merge pull request #520 from 0xProject/fix/installation-tests
Fix the publishing/installation test issues
2018-04-12 09:26:42 +09:00
Jacob Evans
be73084e04 Merge branch 'development' into feature/subproviders/mnemonic-wallet-subprovider 2018-04-12 10:20:52 +10:00
Fabio Berger
5eb90697c8 Merge pull request #519 from 0xProject/fix/docImprovements
Doc fixes and improvements
2018-04-12 08:56:33 +09:00
Fabio Berger
faedd2fa0b Merge branch 'development' into fix/docImprovements
* development: (31 commits)
  Prettier ignore Metacoin artifacts
  Publish
  Updated CHANGELOGS
  Improve deployer error message
  Fix 0x.js tests
  Fix lint issue
  Simply export
  Move NULL_BYTES to @0xproject/utils
  Simplify the tests
  Fix lint error
  Add step to publishing that upload staging doc jsons, deploys staging website, opens every docs page and asks the dev to confirm that each one renders properly before publishing
  Fix web3Wrapper build command
  Add top-level `yarn lerna:stage_docs` to upload docJsons to the staging S3 bucket for all packages with a docs page
  Refactor publish script to have it's main execution body be lean and discrete steps
  Removed unused command
  Remove 0x.js test artifacts
  Fix tslint
  Move migrations into separate monorepo subpackage and hook it up to 0x.js and contracts
  Remove unused var
  Refactor RedundantRpcSubprovider into RedundantSubprovider
  ...

# Conflicts:
#	packages/react-docs/CHANGELOG.json
2018-04-12 08:56:13 +09:00
Fabio Berger
c47fb8f9a8 Merge pull request #500 from 0xProject/removeMigrateStep
Run all tests against in-process Ganache
2018-04-12 08:53:32 +09:00
Fabio Berger
27b915789e Merge branch 'development' into removeMigrateStep
* development:
  Publish
  Updated CHANGELOGS

# Conflicts:
#	packages/0x.js/package.json
#	packages/deployer/package.json
#	packages/utils/CHANGELOG.json
2018-04-12 08:53:12 +09:00
Fabio Berger
ddc6dca98c Prettier ignore Metacoin artifacts 2018-04-12 08:42:02 +09:00
Leonid Logvinov
72aa3d3005 Fix some of the publishing/installation issues 2018-04-11 18:39:58 +02:00
Leonid Logvinov
e8d4f6d532 Publish
- 0x.js@0.36.0
 - @0xproject/abi-gen@0.2.10
 - @0xproject/assert@0.2.6
 - @0xproject/base-contract@0.2.0
 - @0xproject/connect@0.6.9
 - contracts@2.1.22
 - @0xproject/deployer@0.4.0
 - @0xproject/dev-utils@0.3.5
 - @0xproject/json-schemas@0.7.20
 - @0xproject/metacoin@0.0.3
 - @0xproject/monorepo-scripts@0.1.17
 - @0xproject/react-docs-example@0.0.7
 - @0xproject/react-docs@0.0.7
 - @0xproject/react-shared@0.1.2
 - @0xproject/sol-cov@0.0.7
 - @0xproject/sra-report@0.0.8
 - @0xproject/subproviders@0.8.5
 - @0xproject/testnet-faucets@1.0.23
 - @0xproject/tslint-config@0.4.15
 - @0xproject/types@0.6.0
 - @0xproject/typescript-typings@0.1.0
 - @0xproject/utils@0.5.1
 - @0xproject/web3-wrapper@0.6.0
 - @0xproject/website@0.0.25
2018-04-11 18:00:46 +02:00
Leonid Logvinov
631e7e9c58 Updated CHANGELOGS 2018-04-11 18:00:39 +02:00
Fabio Berger
3c84ce2050 Improve deployer error message 2018-04-11 22:37:39 +09:00
Fabio Berger
9db1ce7ceb Fix 0x.js tests 2018-04-11 22:37:23 +09:00
Fabio Berger
e472f7899f Fix lint issue 2018-04-11 22:04:26 +09:00
Fabio Berger
b053781453 Simply export 2018-04-11 22:01:00 +09:00
Fabio Berger
f892b7dbf6 Move NULL_BYTES to @0xproject/utils 2018-04-11 22:00:54 +09:00
Fabio Berger
b146acc69e Simplify the tests 2018-04-11 21:59:30 +09:00
Jacob Evans
63b941fbaf Update documentation and add to website docs 2018-04-11 20:59:17 +10:00
Fabio Berger
29dc22e208 Merge branch 'development' into removeMigrateStep
* development:
  Fix lint error
  Fix documentation links in some READMEs
  Fix relative link
  Add step to publishing that upload staging doc jsons, deploys staging website, opens every docs page and asks the dev to confirm that each one renders properly before publishing
  Fix web3Wrapper build command
  Add top-level `yarn lerna:stage_docs` to upload docJsons to the staging S3 bucket for all packages with a docs page
  Added a detailed description of `renameOverloadedMethods` (special thanks to @fabioberger). Updated Javascript styles in the Abi-Gen and Utils packages, around support for function overloading.
  Updated deployer to accept a list of contract directories as input. Contract directories are namespaced to a void clashes. Also in this commit is a fix for overloading contract functions.
  Refactor publish script to have it's main execution body be lean and discrete steps

# Conflicts:
#	packages/contracts/package.json
#	packages/deployer/package.json
2018-04-11 19:00:30 +09:00
Fabio Berger
c44f9e56ad Merge pull request #514 from 0xProject/publishImprovements
Add Doc Page Check To Publish Flow
2018-04-11 18:55:59 +09:00
Fabio Berger
2fe209d5ff Fix lint error 2018-04-11 18:55:42 +09:00
Fabio Berger
41bd0e30d6 Add comment about Provider type 2018-04-11 18:43:58 +09:00
Fabio Berger
40f4dd91e9 Update CHANGELOG 2018-04-11 18:33:01 +09:00
Fabio Berger
5bf43a3560 Merge branch 'development' into fix/docImprovements
* development:
  Fix documentation links in some READMEs
  Fix relative link

# Conflicts:
#	packages/0x.js/README.md
#	packages/web3-wrapper/README.md
2018-04-11 18:17:35 +09:00
Fabio Berger
f0afc0ae45 Update 0x.js and web3-wrapper doc urls so that last segment is identical to package name. Keep legacy endpoints. 2018-04-11 18:14:22 +09:00
Jacob Evans
916b4d3a26 Renamed DerivedHDKey to DerivedHDKeyInfo
Added assertions on addresses for public methods
Throw a helpful error message when signer address is not instantiated address in PrivateKeyWalletSubprovider
Update changelog and rename derivationBasePath to baseDerivationPath
When returning undefined use pattern of IfExists
Added configuration object for MnemonicWallet
Put constants back into each individual wallet rather than in walletUtils
Delete accidental package-lock.json
2018-04-11 19:08:28 +10:00
Fabio Berger
6d1a587c5c Show staging docs on development and staging 2018-04-11 18:04:02 +09:00
Fabio Berger
bce97c2543 Add support for displaying default param values 2018-04-11 17:39:30 +09:00
Fabio Berger
34446cf569 Fix sol-cov, web3-wrapper, subproviders documentation pages given recent changes to the libraries 2018-04-11 17:36:41 +09:00
Fabio Berger
1e13e927d0 Add missing space in property declaration 2018-04-11 17:36:01 +09:00
Fabio Berger
3c0fa0b7e6 Fix 0x.js docs now that many types are no longer references through the Web3 typings 2018-04-11 17:05:35 +09:00
Fabio Berger
ad894fbdbb Add missing types to 0x.js docs 2018-04-11 16:53:30 +09:00
Fabio Berger
7d9c6eafbf Add support for nested methods within type declarations. Make sure they render without a callPath. 2018-04-11 16:53:13 +09:00
Fabio Berger
de6f757ec8 Introduce type JSONRpcErrorCallback 2018-04-11 16:48:56 +09:00
Fabio Berger
3eeb8f4d6d Small fix to README 2018-04-11 16:22:10 +09:00
Jacob Evans
f44ef7ce59 Update website to support latest ledger 2018-04-11 15:12:02 +10:00
Jacob Evans
b08c616713 Move type declaration for hdkey to typescript-typings 2018-04-11 14:53:58 +10:00
Jacob Evans
3ad693d334 Test valid address format but not found 2018-04-11 14:39:55 +10:00
Brandon Millman
7d8badc86e Fix documentation links in some READMEs 2018-04-10 21:24:17 -07:00
Brandon Millman
854d65b51b Merge pull request #517 from lgedeon/development
Fix relative link
2018-04-10 21:21:31 -07:00
Jacob Evans
4aa67e2925 Update JSDoc for methods in ledger and mnemonic wallet 2018-04-11 14:12:38 +10:00
Jacob Evans
260ab2d413 Update changelog and add derivationBasePath 2018-04-11 14:04:27 +10:00
Jacob Evans
a824957de7 Follow file naming pattern for mnemonic and private key subprovider 2018-04-11 13:46:01 +10:00
Jacob Evans
4017c172a2 Iterator pattern for walking derived keys 2018-04-11 13:44:08 +10:00
Jacob Evans
65b2c936ab Tests for signed transactions and multiple accounts 2018-04-11 12:56:52 +10:00
Jacob Evans
eee190826a Test signed messages with the second account 2018-04-11 12:51:57 +10:00
Jacob Evans
20a1deb187 Throw errors when the address is not specified or invalid 2018-04-11 12:47:17 +10:00
Jacob Evans
9169913a2c Add isChildKey to derived key 2018-04-11 12:22:41 +10:00
Luke Gedeon
df773d07f3 Fix relative link
0xproject.com/docs/json-schemas  -->  https://0xproject.com/docs/json-schemas
2018-04-10 21:29:16 -04:00
Ara Kevonian
bf0ef055fb Modify lazy stores to implement abstract fetcher classes 2018-04-10 03:46:43 -07:00
Jacob Evans
4e4842a62f Improve Documentation for functions and constructors 2018-04-10 16:01:34 +10:00
Jacob Evans
a34c9095c3 Rename to IS_CHILD_KEY 2018-04-10 15:51:09 +10:00
Fabio Berger
efdbc1ff6c Add step to publishing that upload staging doc jsons, deploys staging website, opens every docs page and asks the dev to confirm that each one renders properly before publishing 2018-04-10 14:49:13 +09:00
Jacob Evans
84a4b7d1c1 Refactor ledger to support multiple accounts with from address 2018-04-10 14:39:43 +10:00
Fabio Berger
a9b5faa787 Fix web3Wrapper build command 2018-04-10 12:04:51 +09:00
Fabio Berger
49a54c0ff6 Add top-level yarn lerna:stage_docs to upload docJsons to the staging S3 bucket for all packages with a docs page 2018-04-10 12:04:11 +09:00
Amir Bandeali
70d403e6f8 Merge pull request #493 from hysz/features/deployer/multipleCodebaseSupport
Deployer: Support for External Codebases + Overloaded Function Names
2018-04-09 20:02:55 -07:00
Greg Hysen
eecf09f515 Added a detailed description of renameOverloadedMethods (special thanks to @fabioberger). Updated Javascript styles in the Abi-Gen and Utils packages, around support for function overloading. 2018-04-09 19:25:07 -07:00
Jacob Evans
5b69cd4a22 Added walletUtils and address in signMessage 2018-04-10 11:58:12 +10:00
Greg Hysen
61fc3346c2 Updated deployer to accept a list of contract directories as input. Contract directories are namespaced to a void clashes. Also in this commit is a fix for overloading contract functions. 2018-04-09 17:22:58 -07:00
Ara Kevonian
c80b42712a Lint/Prettify 2018-04-09 07:05:46 -07:00
Ara Kevonian
8d76d74a17 Implement zeroEx.exchange.getOrderStateAsync 2018-04-09 04:49:05 -07:00
Fabio Berger
b7e98abc43 Refactor publish script to have it's main execution body be lean and discrete steps 2018-04-09 19:11:18 +09:00
Fabio Berger
6f72fed8b5 Removed unused command 2018-04-09 17:23:27 +09:00
Fabio Berger
27575e9866 Remove 0x.js test artifacts 2018-04-09 17:17:05 +09:00
Fabio Berger
986ba175ce Fix tslint 2018-04-09 17:14:32 +09:00
Fabio Berger
919b327fc5 Move migrations into separate monorepo subpackage and hook it up to 0x.js and contracts 2018-04-09 17:14:25 +09:00
Fabio Berger
e05b55d4a5 merge development 2018-04-09 14:34:36 +09:00
Fabio Berger
073bf738dd Since we moved Web3Wrapper class from index to it's own file, we need to update doc mapping 2018-04-07 10:41:43 +09:00
Fabio Berger
68e8d6f304 Update ERCDex logo 2018-04-07 10:24:47 +09:00
Fabio Berger
6f24337a53 Remove unused var 2018-04-07 10:17:53 +09:00
Jacob Evans
0e8f5004d6 Add Mnemonic wallet subprovider 2018-04-06 19:03:35 +10:00
Jacob Evans
524e4707d2 Merge pull request #506 from 0xProject/feature/subproviders/pk-wallet-subprovider
Private Key subprovider
2018-04-06 16:52:44 +10:00
Fabio Berger
22fa5a57a5 Refactor RedundantRpcSubprovider into RedundantSubprovider 2018-04-06 15:46:27 +09:00
Fabio Berger
e30c76b743 Make all handleRequest methods async, rename _engine to engine to remain compliant with web3-provider-engine 2018-04-06 15:41:42 +09:00
Jacob Evans
a0fac663f7 Update shared fixture data for network 42 2018-04-06 16:07:00 +10:00
Fabio Berger
277e58c2e5 Merge pull request #505 from 0xProject/fix/readmeContributingSection
Improve README contributing sections in all packages
2018-04-06 15:05:34 +09:00
Fabio Berger
75a51af006 Use provider over web3 in deployer, dev-utils and subprovider tests, rename subprovider to ganacheSubprovider in test util 2018-04-06 15:04:17 +09:00
Fabio Berger
24454938e5 Move away from using web3 directly in 0x.js tests 2018-04-06 15:03:14 +09:00
Jacob Evans
774ab8a8ef Feedback
remove id management from testnet faucet
spread over txParams rather than modify in place
2018-04-06 15:21:08 +10:00
Brandon Millman
21dc94b709 Merge pull request #503 from 0xProject/feature/website/relayer-grid
Implement initial relayer grid
2018-04-05 12:15:16 -07:00
Brandon Millman
d6176872f7 Merge pull request #504 from 0xProject/fix/website/wallet-key-warning
Fix missing key warnings in wallet component
2018-04-05 12:14:43 -07:00
Brandon Millman
c396be42b9 Change undefined to null 2018-04-05 12:13:55 -07:00
Fabio Berger
89a72ebf0d Merge branch 'development' into removeMigrateStep
* development:
  Fix tests
  Call static functions as static
  Address feedback
  Move our contract templates to accept Provider instead of Web3Wrapper
2018-04-05 21:06:58 +09:00
Leonid Logvinov
7f7ddee0f9 Merge pull request #501 from 0xProject/feature/provider-over-wrapper
Use Provider over web3Wrapper
2018-04-05 13:52:43 +02:00
Leonid Logvinov
b99c797945 Fix tests 2018-04-05 13:52:19 +02:00
Leonid Logvinov
59edca4166 Call static functions as static 2018-04-05 13:06:16 +02:00
Leonid Logvinov
fbba5e054a Address feedback 2018-04-05 12:37:35 +02:00
Jacob Evans
ea47613d90 Use PKWalletSubprovider in testnet faucet 2018-04-05 15:33:04 +10:00
Jacob Evans
9d18f751c8 Create a private key subprovider 2018-04-05 15:18:38 +10:00
Fabio Berger
9745dfe2f4 Use depcheck async support 2018-04-05 11:43:48 +09:00
Fabio Berger
29d38593d6 Fix contributing links 2018-04-05 10:01:41 +09:00
Fabio Berger
d76bc18bb7 Improve contributing section of all packages so they include building entire monorepo on first contribution 2018-04-05 09:57:21 +09:00
Brandon Millman
cbe61ac315 Fix missing key warnings in wallet component 2018-04-04 13:35:08 -07:00
Brandon Millman
250d97a7c4 Implement initial relayer grid 2018-04-04 12:09:03 -07:00
Leonid Logvinov
249bf0163d Move our contract templates to accept Provider instead of Web3Wrapper 2018-04-04 11:56:32 +03:00
Fabio Berger
20aaab0847 Add --exit to all mocha calls so they exit when called from top-level yarn command (https://github.com/mochajs/mocha/issues/3044) 2018-04-04 16:34:23 +09:00
Fabio Berger
3e648cfb7e Move migrations over from contracts to 0x.js 2018-04-04 16:33:18 +09:00
Fabio Berger
2106d7476d Add contract artifacts to 0x.js tests 2018-04-04 16:32:32 +09:00
Fabio Berger
43e07e7ce3 Update 0x.js to run tests against in-process ganache 2018-04-04 16:31:57 +09:00
Fabio Berger
5e4e27fed5 Update dev-utils and subproviders tests to use ganache in-process provider 2018-04-04 11:35:58 +09:00
Fabio Berger
6c02722f56 Make deployer tests run on inprocess ganache 2018-04-04 09:50:24 +09:00
Fabio Berger
5cfebd2680 Fix typos 2018-04-04 09:48:54 +09:00
Fabio Berger
bd20b1747d Add top-level test command 2018-04-04 09:48:36 +09:00
Fabio Berger
674e56cea6 Merge pull request #496 from 0xProject/removeUnusedDeps
Remove unused deps + Remove Dharma from website
2018-04-04 03:58:18 +09:00
Fabio Berger
61809130a6 Merge branch 'development' into removeUnusedDeps
* development:
  Temporarily remove installation test
  Fix package.json
  Remove `isPublished` from all CHANGELOG.json filesx
  Now that every version of a package published has a corresponding entry in it's CHANGELOG we no longer need the isPublished flag. Remove it.
  Remove temporary convert_changelog script

# Conflicts:
#	packages/monorepo-scripts/package.json
2018-04-04 03:57:42 +09:00
Fabio Berger
f5e6e0eaf7 Used generic declaration to remove need for any 2018-04-04 03:56:17 +09:00
Fabio Berger
b2c423dd84 Use Results type 2018-04-04 03:54:58 +09:00
Fabio Berger
4a9752d7cd Merge pull request #495 from 0xProject/fix/publishProcess
Improve Publish Flow
2018-04-04 03:14:36 +09:00
Leonid Logvinov
7db9a01639 Temporarily remove installation test 2018-04-03 12:50:23 +03:00
Fabio Berger
e9cb5c069a Add comment about ignored packages 2018-04-03 15:44:07 +09:00
Fabio Berger
03e4205700 Remove Dharma integration from Website 2018-04-03 15:39:43 +09:00
Fabio Berger
fd9278ac02 Add find_unused_deps monorepo script 2018-04-03 15:28:07 +09:00
Fabio Berger
1b7c7037b8 Remove remaining unused deps 2018-04-03 15:27:45 +09:00
Fabio Berger
913264c811 Update yarn.lock 2018-04-03 14:54:30 +09:00
Fabio Berger
e70b6630f9 Fix TS error 2018-04-03 14:52:31 +09:00
Fabio Berger
6d53947fd8 Add missing request types 2018-04-03 14:48:05 +09:00
Fabio Berger
1c0d982398 Fix yarn 2018-04-03 13:00:40 +09:00
Fabio Berger
a88b4040ff Stop using utils 2018-04-03 12:58:45 +09:00
Fabio Berger
e8073cd6f2 Update yarn.lock 2018-04-03 12:04:08 +09:00
Fabio Berger
8281be235c Use @0xproject/utils promisify everywhere 2018-04-03 12:03:59 +09:00
Fabio Berger
9ce03e3515 Update tslint-config. To avoid circular deps, this must always be one version back and must be manually updated. 2018-04-03 12:03:10 +09:00
Fabio Berger
667938696d Remove unused contracts deps 2018-04-03 11:43:23 +09:00
Fabio Berger
a165281dcf Remove unused 0x.js deps 2018-04-03 11:43:08 +09:00
Fabio Berger
185f70f2dd Fix package.json 2018-04-03 10:04:16 +09:00
Fabio Berger
cd3e14f45a Remove isPublished from all CHANGELOG.json filesx 2018-04-03 09:45:59 +09:00
Fabio Berger
dd87588dfe Now that every version of a package published has a corresponding entry in it's CHANGELOG we no longer need the isPublished flag. Remove it. 2018-04-03 09:45:30 +09:00
Fabio Berger
29042e1939 Remove temporary convert_changelog script 2018-04-03 09:36:43 +09:00
Leonid Logvinov
4dbf6559aa After publish 2018-04-02 16:12:37 +03:00
Leonid Logvinov
b987b5988d Publish
- 0x.js@0.35.0
 - @0xproject/abi-gen@0.2.9
 - @0xproject/assert@0.2.5
 - @0xproject/base-contract@0.1.0
 - @0xproject/connect@0.6.8
 - contracts@2.1.21
 - @0xproject/deployer@0.3.5
 - @0xproject/dev-utils@0.3.4
 - @0xproject/json-schemas@0.7.19
 - @0xproject/metacoin@0.0.2
 - @0xproject/monorepo-scripts@0.1.16
 - @0xproject/react-docs-example@0.0.6
 - @0xproject/react-docs@0.0.6
 - @0xproject/react-shared@0.1.1
 - @0xproject/sol-cov@0.0.6
 - @0xproject/sra-report@0.0.7
 - @0xproject/subproviders@0.8.4
 - @0xproject/testnet-faucets@1.0.22
 - @0xproject/tslint-config@0.4.14
 - @0xproject/types@0.5.0
 - @0xproject/typescript-typings@0.0.3
 - @0xproject/utils@0.5.0
 - @0xproject/web3-wrapper@0.5.0
 - @0xproject/website@0.0.24
2018-04-02 16:01:51 +03:00
Leonid Logvinov
6ba6bec105 Updated CHANGELOGS 2018-04-02 16:01:45 +03:00
Leonid Logvinov
d95b1e2db4 Merge pull request #485 from 0xProject/feature/metacoin
Add metacoin example project
2018-04-02 14:57:44 +03:00
Leonid Logvinov
c1d6c7ff66 Fix a typo 2018-04-02 14:45:59 +03:00
Leonid Logvinov
6e12794765 Compile only the Exchange contract in compiler tests 2018-04-02 14:20:53 +03:00
Leonid Logvinov
0f4b05e374 Fix version 2018-04-02 13:20:52 +03:00
Fabio Berger
695b697cdf small README fixes 2018-04-02 19:05:27 +09:00
Fabio Berger
3aea0e3b2f Update docs list in README 2018-04-02 19:04:02 +09:00
Leonid Logvinov
c0e92d511e Fix a typo 2018-04-02 13:01:40 +03:00
Leonid Logvinov
51f2a20b2a Merge branch 'development' into feature/metacoin 2018-04-02 12:56:46 +03:00
Leonid Logvinov
333a23f222 Update CHANGELOG.json's 2018-04-02 12:52:49 +03:00
Fabio Berger
3bf3f479f5 Add manual postpublish command to all public packages and update CHANGELOG.json 2018-04-02 18:46:53 +09:00
Fabio Berger
6241d06f27 Fix postpublish util to ignore namespace 2018-04-02 18:44:40 +09:00
Leonid Logvinov
9e81d3c87b Fix contracts and artifacts paths 2018-04-02 12:35:03 +03:00
Leonid Logvinov
a9b2838c5f Stop passing _abiDecoder 2018-04-02 12:35:03 +03:00
Leonid Logvinov
fbc39614c0 Report errors locally 2018-04-02 12:35:03 +03:00
Leonid Logvinov
b2d6ac8dba move all configs to a config file 2018-04-02 12:35:03 +03:00
Leonid Logvinov
b090b7b1f2 Remove a repo section 2018-04-02 12:35:03 +03:00
Leonid Logvinov
ba0696a0d7 Incroduce the Warning constant 2018-04-02 12:35:03 +03:00
Leonid Logvinov
b57850a225 Regroup gitignore entries 2018-04-02 12:34:29 +03:00
Leonid Logvinov
4d9029bb0e Add metacoin example project 2018-04-02 12:34:29 +03:00
Fabio Berger
bc49dde4d5 Fix release notes bug 2018-04-02 18:08:55 +09:00
Fabio Berger
afe07b2926 Should print out lerna publish stdout so we can see if anything went wrong 2018-04-02 17:59:47 +09:00
Fabio Berger
2411bfc20f Publish
- 0x.js@0.34.0
 - @0xproject/abi-gen@0.2.8
 - @0xproject/assert@0.2.4
 - @0xproject/base-contract@0.0.6
 - @0xproject/connect@0.6.7
 - contracts@2.1.20
 - @0xproject/deployer@0.3.4
 - @0xproject/dev-utils@0.3.3
 - @0xproject/json-schemas@0.7.18
 - @0xproject/monorepo-scripts@0.1.15
 - @0xproject/react-docs-example@0.0.5
 - @0xproject/react-docs@0.0.5
 - @0xproject/react-shared@0.1.0
 - @0xproject/sol-cov@0.0.5
 - @0xproject/sra-report@0.0.6
 - @0xproject/subproviders@0.8.3
 - @0xproject/testnet-faucets@1.0.21
 - @0xproject/tslint-config@0.4.13
 - @0xproject/types@0.4.2
 - @0xproject/typescript-typings@0.0.2
 - @0xproject/utils@0.4.4
 - @0xproject/web3-wrapper@0.4.0
 - @0xproject/website@0.0.23
2018-04-02 17:42:10 +09:00
Fabio Berger
4d4ea8a4d0 Updated CHANGELOGS 2018-04-02 17:42:03 +09:00
Fabio Berger
595517e68b Generate CHANGELOG.json files 2018-04-02 17:35:26 +09:00
Fabio Berger
40ab2de393 Merge pull request #489 from 0xProject/refactor/publishProcess
Automate NPM Publish Process
2018-04-02 10:33:13 +02:00
Fabio Berger
723276ae3f Fix hasty find/replace 2018-04-02 16:56:14 +09:00
Fabio Berger
76c5945017 Default to 4sp 2018-04-02 16:40:02 +09:00
Fabio Berger
01c6fd92e8 Update moment, no longer need separate moment types 2018-04-02 16:06:36 +09:00
Fabio Berger
3f230a8fdb Move prettify command to utils and also call it on CHANGELOG.md 2018-04-02 15:53:31 +09:00
Fabio Berger
2a6a71ea6c Add prettier run on generated CHANGELOG.json and fix scripts 2018-04-02 15:49:48 +09:00
Fabio Berger
cd23f220a0 Remove semi-colons from monorepo-scripts package.json 2018-04-02 08:51:10 +09:00
Fabio Berger
fab88ea2cc Get rid of ; in top-level package.json 2018-04-02 08:44:27 +09:00
Fabio Berger
688f8615ff Fix TSLint error 2018-04-02 05:12:03 +09:00
Fabio Berger
d187a31e38 Make dry-run configurable from top-level package.json 2018-04-02 05:10:27 +09:00
Fabio Berger
c6f85464ce Merge branch 'development' into refactor/publishProcess
* development:
  Run prettier, update deployer CHANGELOG
  Create solc_bin dir if does not exist before attempting to compile
  Add missing type import
2018-04-02 04:28:29 +09:00
Fabio Berger
a220b56736 Merge pull request #491 from 0xProject/fix/buildErrors
Fix build errors
2018-04-01 21:15:34 +02:00
Fabio Berger
0e33f45f3d Improve naming 2018-04-02 04:10:18 +09:00
Amir Bandeali
ff7c3012a5 Run prettier, update deployer CHANGELOG 2018-04-01 10:45:30 -07:00
Amir Bandeali
20fec2943b Create solc_bin dir if does not exist before attempting to compile 2018-04-01 10:45:25 -07:00
Fabio Berger
08b30b0706 Merge branch 'development' into refactor/publishProcess
* development:
  Add HACK comment and reorganize use other wallet button
  Fixed comment(s) for PR #488
  OrderStateWatcher fixes for PR #488
  Amended comments to clarify changes on PR #488
  Monitor different state layers with OrderWatcher
  Implement wallet locked and uninstalled states
  Style changes
  Remove props that are covered by the defaults
  Implement ETH/WETH conversion and allowance toggle styling
2018-04-02 02:41:28 +09:00
Fabio Berger
bf52ce7e72 Add temp comment, clean up code 2018-04-02 02:40:48 +09:00
Amir Bandeali
1bac5019e8 Add missing type import 2018-03-31 23:54:09 -07:00
Brandon Millman
19454a92dc Merge pull request #487 from 0xProject/feature/website/wallet-setup
Implement wallet locked and uninstalled states
2018-03-30 15:01:18 -07:00
Brandon Millman
cdbb3a015f Add HACK comment and reorganize use other wallet button 2018-03-30 15:00:02 -07:00
Leonid Logvinov
644da2b0cb Merge pull request #488 from avonian/development
Monitor different state layers with OrderWatcher
2018-03-30 19:56:16 +02:00
Ara Kevonian
57446d78f1 Fixed comment(s) for PR #488 2018-03-30 10:28:13 -07:00
Ara Kevonian
3e285c0ef1 OrderStateWatcher fixes for PR #488 2018-03-30 09:59:57 -07:00
Ara Kevonian
a322148631 Amended comments to clarify changes on PR #488 2018-03-30 08:00:05 -07:00
Fabio Berger
33ec9fdf47 Fixes for clarity 2018-03-30 15:49:09 +02:00
Fabio Berger
323826111a Remove CHANGELOG from website since it's a public package 2018-03-30 15:48:54 +02:00
Fabio Berger
ddd3d284d9 Remove CHANGELOG.json files since will be generated on development 2018-03-30 15:48:39 +02:00
Fabio Berger
f55a300f43 Set IS_DRY_RUN to false 2018-03-30 15:28:08 +02:00
Fabio Berger
08a69ebd6e Add more logging 2018-03-30 15:27:47 +02:00
Fabio Berger
ddb8e26bec Expose publish command from top-level dir 2018-03-30 15:07:24 +02:00
Ara Kevonian
57ca611e12 Monitor different state layers with OrderWatcher
Allow instantiation of stand-alone OrderWatchers
that can monitor different blockchain state
layers (e.g. pending or latest)
2018-03-30 05:59:09 -07:00
Fabio Berger
1eff120f49 Remove top-level internal dep b/c it's not clear to me what it's used for 2018-03-30 14:58:11 +02:00
Fabio Berger
4bc6096ec0 Fetch Github release notes from CHANGELOG.json and update CHANGELOG once they've been successfully published to Github 2018-03-30 14:48:20 +02:00
Fabio Berger
95eb114051 rename variable called path to includePath to avoid conflict with path package 2018-03-30 14:46:15 +02:00
Fabio Berger
9c856de49c Move monorepo root constant to constants file 2018-03-30 14:45:39 +02:00
Fabio Berger
d502f79303 Rename prepublish to publish now that it goes straight to actually publishing the packages 2018-03-30 14:29:30 +02:00
Fabio Berger
5224337323 Call lerna publish and supply it with new package versions 2018-03-30 14:29:07 +02:00
Fabio Berger
ef49192170 Add check that timestamp has been set before generating MD version 2018-03-30 12:43:03 +02:00
Fabio Berger
c9df388731 Add committing and pushing CHANGELOG changes to Github 2018-03-30 12:28:48 +02:00
Brandon Millman
870da2ab22 Implement wallet locked and uninstalled states 2018-03-29 16:57:23 -07:00
Brandon Millman
6122840241 Merge pull request #476 from 0xProject/feature/website/wallet-wrap
Implement ETH/WETH conversion and allowance toggle styling
2018-03-29 14:00:37 -07:00
Brandon Millman
03b00ef8da Style changes 2018-03-29 11:25:50 -07:00
Fabio Berger
84b820abc6 Show semver diff 2018-03-29 20:03:11 +02:00
Fabio Berger
cc4ff568a9 Improve README 2018-03-29 20:02:43 +02:00
Brandon Millman
665011174b Merge branch 'development' into feature/website/wallet-wrap
* development: (35 commits)
  Fix CHANGELOG
  Update Yarn.lock
  Standardize changelog dates and format
  Fix stubbing of a non-existent property
  Remove redundant cast
  Move common types out of web3 types
  Add monorepo_scripts to npmignore
  Add typeRoots
  Add clean-state tests
  Remove nested .gitignore files since `yarn publish` gets confused by them and ignores their contents on the top-level scope
  Remove WETH hack now that updated WETH address is in TokenRegistry
  Revert TokenRegistry address on Kovan
  Improve rounding error message
  Portal fill with mixed decimals
  Add error popover if TokenRegistry on network user is browsing on don't include the requisite default tokens for 0x Portal to function
  Set timeout for compiler tests
  Remove redundant types
  Add missing param comments
  Fix a comment
  Add a comment
  ...
2018-03-29 10:02:46 -07:00
Fabio Berger
37f210e9f0 Fix changelog.json 2018-03-29 17:46:43 +02:00
Fabio Berger
9c01e3a8a0 Merge branch 'development' into refactor/publishProcess
* development:
  Fix CHANGELOG
  Update Yarn.lock
2018-03-29 17:46:24 +02:00
Fabio Berger
c4dd9658e7 Fix CHANGELOG 2018-03-29 17:44:50 +02:00
Fabio Berger
29aa09e448 Generate CHANGELOG.mds 2018-03-29 17:41:39 +02:00
Fabio Berger
1337b6928a Update Yarn.lock 2018-03-29 17:17:41 +02:00
Fabio Berger
ac35d8127e remove console.logs 2018-03-29 17:02:44 +02:00
Fabio Berger
a6ae1efadb Begin global pre-publishing script. Updates changelog.json files in packages to be published 2018-03-29 15:26:47 +02:00
Fabio Berger
bd7b5c51b2 Add 0.x.x edgecase 2018-03-29 15:18:42 +02:00
Fabio Berger
397cd77ef9 Fix semver-sort version 2018-03-29 15:02:46 +02:00
Fabio Berger
743c3dbe01 Generate CHANGELOG.json files and add convert_changelog script 2018-03-29 14:06:29 +02:00
Fabio Berger
9f1c212596 Update Yarn lock and fix dep versions 2018-03-29 13:00:42 +02:00
Fabio Berger
defd249565 Standardize changelog dates and format 2018-03-29 12:49:39 +02:00
Leonid Logvinov
8926dac78c Merge pull request #482 from 0xProject/feature/web3-types
Move common types out of web3 types
2018-03-28 16:26:05 +02:00
Fabio Berger
18cac3f092 Merge pull request #483 from 0xProject/refactor/removeHardcodedWeth
Remove WETH hack now that updated WETH address is in TokenRegistry
2018-03-28 10:41:53 +01:00
Leonid Logvinov
01e27426d6 Fix stubbing of a non-existent property 2018-03-28 10:43:42 +02:00
Leonid Logvinov
0b09cc36b0 Remove redundant cast 2018-03-28 10:26:56 +02:00
Fabio Berger
f3cb484f82 Merge pull request #484 from 0xProject/fix/gitignoreIssue
Remove nested .gitignore & add monorepo_scripts to npmignore
2018-03-27 19:16:36 +01:00
Fabio Berger
0053762760 merge developmentx 2018-03-27 19:16:13 +01:00
Leonid Logvinov
d72b7299c6 Move common types out of web3 types 2018-03-27 17:56:21 +02:00
Fabio Berger
eb89ef79eb Add monorepo_scripts to npmignore 2018-03-27 16:49:19 +01:00
Leonid Logvinov
066d13f5b7 Merge pull request #480 from 0xProject/feature/clean-state-tests
Add clean-state tests
2018-03-27 17:47:45 +02:00
Leonid Logvinov
ec06d8d606 Add typeRoots 2018-03-27 17:47:05 +02:00
Leonid Logvinov
a2e4aaa9a3 Add clean-state tests 2018-03-27 17:47:04 +02:00
Leonid Logvinov
26e9696ddb Merge pull request #460 from 0xProject/feature/deployer-improvements
@0xproject/deployer improvements
2018-03-27 17:43:50 +02:00
Fabio Berger
343191e936 Remove nested .gitignore files since yarn publish gets confused by them and ignores their contents on the top-level scope 2018-03-27 16:24:44 +01:00
Fabio Berger
3e3b667366 Remove WETH hack now that updated WETH address is in TokenRegistry 2018-03-27 11:38:22 +01:00
Fabio Berger
3b45d4727b Revert TokenRegistry address on Kovan 2018-03-26 17:33:39 +01:00
Fabio Berger
b4f3450d4a Merge pull request #479 from 0xProject/bug/website/portal-fill-mixed-decimals
Portal fill with rounding error/mixed decimals
2018-03-26 13:21:26 +01:00
Fabio Berger
0a8b7cb494 Improve rounding error message 2018-03-26 13:21:02 +01:00
Jacob Evans
125ace3519 Portal fill with mixed decimals
When the token pair has different decimal precison we can end up with a remainder when multiplying by an exchange rate (as one is in 18 decimals and the other is 6 for example)
2018-03-26 16:43:12 +11:00
Fabio Berger
109fc41474 Add error popover if TokenRegistry on network user is browsing on don't include the requisite default tokens for 0x Portal to function 2018-03-25 00:22:06 +00:00
Leonid Logvinov
f30353087f Merge branch 'development' into feature/deployer-improvements 2018-03-23 19:18:31 +01:00
Brandon Millman
d106079d9b Remove props that are covered by the defaults 2018-03-22 23:39:13 -07:00
Brandon Millman
dc3be992a3 Implement ETH/WETH conversion and allowance toggle styling 2018-03-22 23:13:49 -07:00
Fabio Berger
bed7d87b7f Get LogEntry type to show up correctly as a Web3 type 2018-03-22 21:05:09 +00:00
Fabio Berger
05daab5dea Fix typos 2018-03-22 20:13:25 +00:00
Fabio Berger
170e5589f9 Fix 0x.js docs to include types from generated contract wrappers 2018-03-22 20:03:42 +00:00
Fabio Berger
538914aa52 Fix S3 bucket name 2018-03-22 16:58:20 +00:00
Fabio Berger
81deb68c8e Use past tense in FAQ 2018-03-22 16:37:23 +00:00
Fabio Berger
36986fe9c9 Replace Auctus with ERCDEX in projects section 2018-03-22 16:22:52 +00:00
Fabio Berger
5791632933 Fix Ethfinex link, looks like they have their own domain now 2018-03-22 16:19:59 +00:00
Fabio Berger
289359bf0d Merge pull request #465 from 0xProject/addExtraDocs
Add Additional Package Doc Pages
2018-03-22 16:11:23 +00:00
Fabio Berger
81f6487865 Use _.filter instead of _.reduce 2018-03-22 16:10:01 +00:00
Fabio Berger
21b797c3f9 Improve list of improvements 2018-03-22 16:00:55 +00:00
Fabio Berger
de8450d5c9 Make handleRequest public and add comment for it 2018-03-22 15:54:13 +00:00
Fabio Berger
bcb9ee4cc2 Make setEngine public 2018-03-22 15:53:54 +00:00
Fabio Berger
7c87447241 Fix lazy load so each doc page is a separate bundle 2018-03-22 15:53:39 +00:00
Fabio Berger
b39d87f357 Remove space 2018-03-22 15:53:20 +00:00
Fabio Berger
552b14b1fa npm -> yarn 2018-03-22 15:53:13 +00:00
Fabio Berger
5779ffd01b Add assertion to notify any developer trying to render a package with files containing multiple classes 2018-03-22 15:52:40 +00:00
Fabio Berger
a7c24a17f4 Fix lint rules directory 2018-03-22 14:33:40 +00:00
Fabio Berger
8743c40911 Use isEmpty 2018-03-22 13:32:14 +00:00
Leonid Logvinov
7ef6bd4b14 Set timeout for compiler tests 2018-03-22 14:26:24 +01:00
Fabio Berger
6af0f08dfc Remove no longer existent command 2018-03-22 12:54:03 +00:00
Fabio Berger
54ae94dde0 Fix benefits list 2018-03-22 12:53:51 +00:00
Fabio Berger
c570f3865f Use yarn instead of npm 2018-03-22 12:53:41 +00:00
Fabio Berger
ed9d1da297 Add default docs icon 2018-03-22 12:46:52 +00:00
Fabio Berger
beb483ea85 Merge branch 'development' into addExtraDocs
* development:
  Change blockchain prop to not optional
  Other style changes
  Updated padding and colors
  Refactor TokenState type
  Fix a bug causing fillOrdersUpTo validation to fail because of some extra orders being passed
  Implement initial wallet interface

# Conflicts:
#	packages/react-shared/CHANGELOG.md
#	packages/website/ts/types.ts
2018-03-22 12:00:41 +00:00
Fabio Berger
46b7fecafe Create helper function for converting dashes names for display 2018-03-22 11:56:12 +00:00
Leonid Logvinov
e476682922 Remove redundant types 2018-03-22 12:37:44 +01:00
Brandon Millman
8478dc8d6d Merge pull request #468 from 0xProject/feature/website/wallet-interface
Implement initial wallet interface
2018-03-21 15:48:13 -07:00
Brandon Millman
9f8e41cbfa Change blockchain prop to not optional 2018-03-21 15:45:11 -07:00
Brandon Millman
3916383dd0 Other style changes 2018-03-21 14:21:19 -07:00
Brandon Millman
a60c8f7d8c Updated padding and colors 2018-03-21 14:17:08 -07:00
Brandon Millman
4e5cd472c2 Refactor TokenState type 2018-03-21 13:02:44 -07:00
Fabio Berger
e1341bc6d9 Move docs to page and add link to docs to README 2018-03-21 18:55:59 +00:00
Fabio Berger
d437a66019 Add comments to JSON-schemas public methods 2018-03-21 18:51:17 +00:00
Fabio Berger
542b46a22f Move usage out of README and replace with link to Docs 2018-03-21 18:40:59 +00:00
Fabio Berger
6fef533fff Improve comments 2018-03-21 18:38:45 +00:00
Fabio Berger
ec219fc395 Add comments to sol-cov 2018-03-21 18:24:54 +00:00
Fabio Berger
a555a8a374 Improve subproviders comment 2018-03-21 18:24:45 +00:00
Fabio Berger
78e9c48803 Move docs from README into docs page and add a link to it. 2018-03-21 18:04:48 +00:00
Fabio Berger
18d3e5458a Fix sectionName and menuItemName to display with spaces rather then dashes 2018-03-21 18:04:27 +00:00
Fabio Berger
ac25764d12 Add changelog entry for making handleRequest private 2018-03-21 17:38:23 +00:00
Fabio Berger
c55e7fa91a Improve all the comments for the subproviders public methods 2018-03-21 17:38:02 +00:00
Leonid Logvinov
e31ba2e12e Add missing param comments 2018-03-21 18:06:50 +01:00
Leonid Logvinov
73f8ae9a47 Fix a comment 2018-03-21 18:01:26 +01:00
Leonid Logvinov
32b85625c1 Add a comment 2018-03-21 17:23:07 +01:00
Leonid Logvinov
629edd3108 Move npm-run-all to devDependencies 2018-03-21 17:20:30 +01:00
Leonid Logvinov
ee77b81551 Revert optimizer config 2018-03-21 17:19:46 +01:00
Leonid Logvinov
2c7fdac5cd Remove .only 2018-03-21 16:39:37 +01:00
Leonid Logvinov
d118116548 Revert version range changes 2018-03-21 16:34:57 +01:00
Leonid Logvinov
8d01956c3e Merge pull request #470 from 0xProject/fix/fillOrdersUpToValidation
Fix a bug causing fillOrdersUpTo validation to fail because of some e…
2018-03-21 15:30:26 +01:00
Leonid Logvinov
1dda8c1468 Fix a bug causing fillOrdersUpTo validation to fail because of some extra orders being passed 2018-03-21 15:30:04 +01:00
Leonid Logvinov
111f7e917e Add function docs 2018-03-21 15:24:41 +01:00
Leonid Logvinov
477daf4168 Add function docs 2018-03-21 15:12:18 +01:00
Leonid Logvinov
8b52793f2f Add tests for compiler utils 2018-03-21 15:12:18 +01:00
Leonid Logvinov
18b9fe5256 Enable strictNullChecks 2018-03-21 15:11:41 +01:00
Leonid Logvinov
439e864085 Change the type of optimizerEnabled to boolean and convert it to number only before passing to a compiler 2018-03-21 15:11:41 +01:00
Leonid Logvinov
f45191d0e8 Support proper semver version ranges 2018-03-21 15:11:41 +01:00
Leonid Logvinov
32feadee42 Change version ranges to only support patch version increments 2018-03-21 15:07:51 +01:00
Leonid Logvinov
c4b4bb9e8e Compile contracts sequentially 2018-03-21 15:07:51 +01:00
Leonid Logvinov
8fd705d2af Throw an error if contract file doesn't contain the contract with the same name 2018-03-21 15:07:51 +01:00
Leonid Logvinov
3c36135d6c Stop printing help on error 2018-03-21 15:07:51 +01:00
Leonid Logvinov
02ede26893 Rename onDeployCommand to onDeployCommandAsync and onCompileCommand to onCompileCommandAsync 2018-03-21 15:07:51 +01:00
Fabio Berger
af21ad1615 Add missing DocComments to Deployer package 2018-03-21 12:33:07 +00:00
Fabio Berger
07fa01528b Move usage out of README and add add link to docs 2018-03-21 12:32:53 +00:00
Fabio Berger
38f716bd77 Make docs link more discoverable in README, move docs out of README 2018-03-20 22:24:26 +00:00
Fabio Berger
6a410b03ff Improve comments 2018-03-20 22:17:39 +00:00
Fabio Berger
3cd7bce0a3 Add DocComments to Web3Wrapper 2018-03-20 21:41:59 +00:00
Fabio Berger
6693540f43 Add changelog entry 2018-03-20 21:41:36 +00:00
Fabio Berger
647bc5a63e Rename method for clarity 2018-03-20 21:41:21 +00:00
Fabio Berger
4f76bb2a12 Remove duplicate method 2018-03-20 21:39:41 +00:00
Fabio Berger
9991ddecc2 Fix var name typo 2018-03-20 21:39:08 +00:00
Brandon Millman
3cf2cb89bb Implement initial wallet interface 2018-03-20 13:42:50 -07:00
Fabio Berger
2875cfa8c7 Move doc related types closer to one another 2018-03-20 15:41:31 +00:00
Fabio Berger
87cbbdad72 Update yarn.lock 2018-03-20 15:39:39 +00:00
Fabio Berger
07de3a1d94 Pass actual iconUrl and add default icon image 2018-03-20 15:39:32 +00:00
Fabio Berger
27880a6059 Remove s3 mapping since s3 folder names are now identical to sub-package names 2018-03-20 15:35:48 +00:00
Fabio Berger
0367e4117a Remove duplicate switch case 2018-03-20 15:34:02 +00:00
Fabio Berger
ec582d6e46 Small doc fixes: remove duplicate types and add function array 2018-03-20 15:28:25 +00:00
Fabio Berger
4ca706d4e6 Remove duplicate ECSignature type def 2018-03-20 13:06:59 +00:00
Fabio Berger
72671c1014 Refactor titleToIcon mapping to idToIcon and move to docPage 2018-03-20 12:26:04 +00:00
Fabio Berger
a3c31f4f4a Fix changelog files and add PR number 2018-03-20 12:05:31 +00:00
Fabio Berger
db8be4a66e Rename stagedocs.ts file to stage_docs.ts in keeping with our file naming conventions. postpublish.ts is the only exception and this is because it is dictated by Lerna 2018-03-20 12:00:22 +00:00
Fabio Berger
2f7c19e80d Merge branch 'development' into addExtraDocs
* development: (29 commits)
  Set Lodash dep to an exact version since newer versions introduced breaking changes
  Update Kovan Ethertoken Address
  Update deployer version since manual re-publish
  Add new entry into CHANGELOG
  Fix bad merge
  Update yarn.lock
  Change title
  Add Blake and Zach to About page
  Re-size Jacob and Tom's images
  Manually publish 0x.js back to a working state
  Publish
  Publish
  Fix 0x.js assets
  Remove assets from connect and _bundles from packages that don't generate the folder
  Publish
  Fix packages that aren't working as expected
  Make new packages default to public on publish
  Add new public packages to top-level README
  Update top-level package.json
  Fix incorrect new versions
  ...

# Conflicts:
#	packages/0x.js/package.json
#	packages/connect/package.json
#	packages/json-schemas/package.json
#	packages/sol-cov/package.json
2018-03-20 11:52:22 +00:00
Fabio Berger
7d9c357409 Merge branch 'development' of github.com:0xProject/0x-monorepo into development
* 'development' of github.com:0xProject/0x-monorepo:
  Update Kovan Ethertoken Address
2018-03-20 11:40:48 +00:00
Fabio Berger
abf41b073c Set Lodash dep to an exact version since newer versions introduced breaking changes 2018-03-20 11:40:29 +00:00
Jacob Evans
c9b07107f3 Merge pull request #464 from 0xProject/bug/0x.js/kovan-ethertoken-address
Update Kovan Ethertoken Address
2018-03-20 22:24:22 +11:00
Jacob Evans
773be348a3 Update Kovan Ethertoken Address 2018-03-20 22:23:30 +11:00
Fabio Berger
b7bb8d9b2a Update deployer version since manual re-publish 2018-03-20 11:00:52 +00:00
Brandon Millman
c7c12371ef Merge pull request #451 from 0xProject/feature/sra-report/collection-tests
Add scaffolding for sra-report collection unit tests
2018-03-19 10:28:02 -07:00
Brandon Millman
fb40b10501 Add new entry into CHANGELOG 2018-03-19 10:10:17 -07:00
Brandon Millman
d4dce41d3a Fix bad merge 2018-03-19 10:06:54 -07:00
Brandon Millman
293b55e51f Update yarn.lock 2018-03-19 10:03:21 -07:00
Brandon Millman
11bac66046 Merge branch 'development' into feature/sra-report/collection-tests
* development: (26 commits)
  Change title
  Add Blake and Zach to About page
  Re-size Jacob and Tom's images
  Manually publish 0x.js back to a working state
  Publish
  Publish
  Fix 0x.js assets
  Remove assets from connect and _bundles from packages that don't generate the folder
  Publish
  Fix packages that aren't working as expected
  Make new packages default to public on publish
  Add new public packages to top-level README
  Update top-level package.json
  Fix incorrect new versions
  Fix path to assets
  Publish
  Updated CHANGELOGS
  Fix quotation marks
  Add a complex test for ast visitor
  Move opcodes to constants
  ...
2018-03-19 09:56:46 -07:00
Fabio Berger
2a438419ab Merge pull request #461 from 0xProject/updateTeam
Add Zach & Blake to team
2018-03-19 15:28:38 +01:00
Fabio Berger
0f0aca7de5 Change title 2018-03-19 14:51:58 +01:00
Fabio Berger
f699b9a73f Add Blake and Zach to About page 2018-03-19 14:50:50 +01:00
Fabio Berger
214096de9e Re-size Jacob and Tom's images 2018-03-19 14:50:36 +01:00
Fabio Berger
a0ccb609cd Manually publish 0x.js back to a working state 2018-03-19 00:55:10 +01:00
Fabio Berger
4e05554b3e Publish
- 0x.js@0.33.5
 - contracts@2.1.19
 - @0xproject/sra-report@0.0.5
 - @0xproject/testnet-faucets@1.0.20
 - @0xproject/website@0.0.22
2018-03-19 00:48:26 +01:00
Fabio Berger
04c08b9fc8 Publish
- 0x.js@0.33.4
 - @0xproject/assert@0.2.3
 - @0xproject/connect@0.6.6
 - contracts@2.1.18
 - @0xproject/deployer@0.3.2
 - @0xproject/dev-utils@0.3.2
 - @0xproject/json-schemas@0.7.17
 - @0xproject/react-docs-example@0.0.4
 - @0xproject/react-docs@0.0.4
 - @0xproject/react-shared@0.0.4
 - @0xproject/sol-cov@0.0.4
 - @0xproject/sra-report@0.0.4
 - @0xproject/subproviders@0.8.2
 - @0xproject/testnet-faucets@1.0.19
 - @0xproject/website@0.0.21
2018-03-19 00:39:25 +01:00
Fabio Berger
86c1c8082d Fix 0x.js assets 2018-03-19 00:36:44 +01:00
Fabio Berger
c5afc5feb5 Remove assets from connect and _bundles from packages that don't generate the folder 2018-03-19 00:30:33 +01:00
Fabio Berger
8392ee4625 Publish
- 0x.js@0.33.3
 - @0xproject/abi-gen@0.2.7
 - @0xproject/assert@0.2.2
 - @0xproject/base-contract@0.0.5
 - chai-as-promised-typescript-typings@0.0.12
 - chai-typescript-typings@0.0.6
 - @0xproject/connect@0.6.5
 - contracts@2.1.17
 - @0xproject/deployer@0.3.1
 - @0xproject/dev-utils@0.3.1
 - ethers-typescript-typings@0.0.4
 - @0xproject/json-schemas@0.7.16
 - @0xproject/monorepo-scripts@0.1.14
 - @0xproject/react-docs-example@0.0.3
 - @0xproject/react-docs@0.0.3
 - @0xproject/react-shared@0.0.3
 - @0xproject/sol-cov@0.0.3
 - @0xproject/sra-report@0.0.3
 - @0xproject/subproviders@0.8.1
 - @0xproject/testnet-faucets@1.0.18
 - @0xproject/tslint-config@0.4.12
 - @0xproject/types@0.4.1
 - @0xproject/utils@0.4.3
 - web3-typescript-typings@0.10.2
 - @0xproject/web3-wrapper@0.3.1
 - @0xproject/website@0.0.20
2018-03-19 00:24:28 +01:00
Fabio Berger
ac881d149c Fix packages that aren't working as expected 2018-03-19 00:13:19 +01:00
Fabio Berger
cc4e390c91 Make new packages default to public on publish 2018-03-18 20:13:43 +01:00
Fabio Berger
26c726da45 Add new public packages to top-level README 2018-03-18 20:13:29 +01:00
Fabio Berger
358f3d9b42 Update top-level package.json 2018-03-18 20:13:16 +01:00
Fabio Berger
3337625fa0 Fix incorrect new versions 2018-03-18 19:53:37 +01:00
Fabio Berger
ae2daa5a6f Fix path to assets 2018-03-18 19:53:26 +01:00
Fabio Berger
79f521b555 Publish
- 0x.js@0.33.2
 - @0xproject/abi-gen@0.2.6
 - @0xproject/assert@0.2.1
 - @0xproject/base-contract@0.0.4
 - chai-as-promised-typescript-typings@0.0.11
 - chai-typescript-typings@0.0.5
 - @0xproject/connect@0.6.4
 - contracts@2.1.16
 - @0xproject/deployer@0.3.0
 - @0xproject/dev-utils@0.3.0
 - ethers-typescript-typings@0.0.3
 - @0xproject/json-schemas@0.7.15
 - @0xproject/monorepo-scripts@0.1.13
 - @0xproject/react-docs-example@0.0.2
 - @0xproject/react-docs@0.0.2
 - @0xproject/react-shared@0.0.2
 - @0xproject/sol-cov@0.0.2
 - @0xproject/sra-report@0.0.2
 - @0xproject/subproviders@0.8.0
 - @0xproject/testnet-faucets@1.0.17
 - @0xproject/tslint-config@0.4.11
 - @0xproject/types@0.4.0
 - @0xproject/utils@0.4.2
 - web3-typescript-typings@0.10.1
 - @0xproject/web3-wrapper@0.3.0
 - @0xproject/website@0.0.19
2018-03-18 19:49:46 +01:00
Fabio Berger
fffcb98ac4 Updated CHANGELOGS 2018-03-18 19:22:55 +01:00
Fabio Berger
5468358f21 Add Subprovider docs to website 2018-03-18 19:04:16 +01:00
Fabio Berger
87044313c2 Capitalize rather then upper-case section headers 2018-03-18 18:45:06 +01:00
Fabio Berger
794b155827 Add support for displaying exported functions 2018-03-18 18:44:52 +01:00
Fabio Berger
4941ffd354 Add functions to submenu in sidebar 2018-03-18 18:43:38 +01:00
Fabio Berger
aa8a3ee055 Re-order developers dropdown 2018-03-18 16:12:24 +01:00
Fabio Berger
c1d17c83f8 Add sol-cov docs to website 2018-03-18 16:10:02 +01:00
Fabio Berger
db030016fa Refactor CoverageSubprovider to use subproviders types 2018-03-18 16:09:37 +01:00
Fabio Berger
ae04f55882 Export ErrorCallback type from Subproviders package 2018-03-18 16:09:08 +01:00
Fabio Berger
b40fab35f6 Add doc setup to sol-cov 2018-03-18 15:08:52 +01:00
Fabio Berger
644deee8b5 Standardize all doc commands and add docs:stage shortcut 2018-03-18 15:08:37 +01:00
Fabio Berger
c7302c46e5 Add JSON Schemas docs to website 2018-03-18 14:54:12 +01:00
Fabio Berger
4948551703 merge development 2018-03-18 14:01:18 +01:00
Brandon Millman
d4c1b3b0bd Merge pull request #456 from 0xProject/feature/connect/consolidate-types
Add SignedOrder, Order, and ECSignature types to the types package
2018-03-16 11:23:28 -07:00
Brandon Millman
bbdb072634 Fix quotation marks 2018-03-16 11:22:43 -07:00
Fabio Berger
d7bf003d51 Refactor all docJSON's to reside within the same S3 bucket under different folders 2018-03-16 16:56:53 +01:00
Fabio Berger
5a827eb3d4 Fix deployer external type link to point to specific commit 2018-03-16 14:05:05 +01:00
Fabio Berger
b37076136b Add missing type 2018-03-16 14:04:38 +01:00
Fabio Berger
3574ab253f Add missing type to subproviders exports 2018-03-16 14:04:27 +01:00
Fabio Berger
312a30578b Improve deployer docs 2018-03-16 14:04:08 +01:00
Fabio Berger
8243e73413 Use named types and introduce JSONRPCRequestPayloadWithMethod type 2018-03-16 14:03:50 +01:00
Fabio Berger
5175fe8107 Handle reflection type in type rendering 2018-03-16 14:02:55 +01:00
Leonid Logvinov
2acb767640 Merge pull request #457 from 0xProject/feature/sol-cov-tests
Add tests for sol-cov
2018-03-16 13:32:21 +01:00
Leonid Logvinov
a9b1dcb32a Add a complex test for ast visitor 2018-03-16 10:49:20 +01:00
Leonid Logvinov
8f8577b7c6 Move opcodes to constants 2018-03-16 10:27:12 +01:00
Fabio Berger
0225d34b74 Fix issue with bundling subproviders for the browser by ignoring the ganache-core dependency 2018-03-15 19:51:07 +01:00
Fabio Berger
8d1e27a1a5 Merge branch 'development' into addExtraDocs
* development:
  Add changelog entry about pragma addition
  Add pragma above command-line script
  Keep console.log in monorepo-scripts
  Enable coverage for all other packages with tests
  Fix parallel coverage results reporting
  Fix linter issuesx
  Update CHANGELOGs
  Consolidate all console.log into the @0xproject/utils package

# Conflicts:
#	packages/deployer/package.json
2018-03-15 19:44:10 +01:00
Brandon Millman
e4ea6e1ec3 WIP 2018-03-15 11:33:08 -07:00
Fabio Berger
8137d41ce5 Add changelog entry about pragma addition 2018-03-15 19:25:06 +01:00
Fabio Berger
4b7f0bd374 Add pragma above command-line script 2018-03-15 19:23:57 +01:00
Fabio Berger
f9ad97b978 Add Deployer docs to website 2018-03-15 19:23:21 +01:00
Fabio Berger
b145a17d11 Add pragma above command-line script 2018-03-15 19:22:57 +01:00
Brandon Millman
3430e2bdac Fix bad merge 2018-03-15 10:14:51 -07:00
Brandon Millman
cdcf925378 Fix yarn.lock 2018-03-15 09:58:20 -07:00
Brandon Millman
76029cbf09 Merge branch 'development' into feature/sra-report/collection-tests
* development: (97 commits)
  Keep console.log in monorepo-scripts
  Enable coverage for all other packages with tests
  Fix parallel coverage results reporting
  Fix linter issuesx
  Remove outdated comment
  Add script copying to build command
  Add postpublish script to sol-cov
  Move configuration into package.json configs section
  Transform input data before encoding for callAsync and getABIEncodedTransactionData
  Update CHANGELOGs
  Consolidate all console.log into the @0xproject/utils package
  Update coverage badge to show development coverage
  Configure post build hook
  Notify coveralls after all tasks have finished
  Address feedback
  Revert "Report all coverage reports together"
  Separate published packages and typescript typings on README
  Consolidate docs generation and uploading logic
  Use async/await instead of promise syntax
  Move changelog entry
  ...
2018-03-15 09:57:27 -07:00
Brandon Millman
b9c1653c1c Fix quotation marks 2018-03-15 09:48:45 -07:00
Leonid Logvinov
f6c01520ae Add tests for sol-cov 2018-03-15 16:19:01 +01:00
Brandon Millman
0fb4de85c4 Updated CHANGELOGs 2018-03-14 16:36:21 -07:00
Brandon Millman
ffe7363776 Add SignedOrder, Order, and ECSignature types to the types package 2018-03-14 16:33:10 -07:00
Brandon Millman
4a27a7dc58 Merge pull request #452 from 0xProject/feature/utils/console-log
Consolidate all console.log utils into @0xproject/utils
2018-03-14 15:30:59 -07:00
Brandon Millman
3b3d5b12bc Keep console.log in monorepo-scripts 2018-03-14 14:58:16 -07:00
Brandon Millman
380e51ca50 Merge branch 'development' into feature/utils/console-log
* development: (25 commits)
  Enable coverage for all other packages with tests
  Fix parallel coverage results reporting
  Fix linter issuesx
  Remove outdated comment
  Add script copying to build command
  Add postpublish script to sol-cov
  Move configuration into package.json configs section
  Transform input data before encoding for callAsync and getABIEncodedTransactionData
  Consolidate docs generation and uploading logic
  Use async/await instead of promise syntax
  Move changelog entry
  remove unneeded include
  remove unused dep
  Fix lint issues
  Re-add linter to monorepo-scripts but with tslint-config dep at earlier version to avoid cyclical dependency
  small fixes
  move scripts to monorepro-scripts
  Fix gitignore
  Move abi-gen scripts to src
  Add missing dep
  ...
2018-03-14 14:36:04 -07:00
Leonid Logvinov
aea7207b9f Merge pull request #455 from 0xProject/fix/coveralls
Enable coverage reporting for all packages that have tests
2018-03-14 17:36:23 +01:00
Fabio Berger
9593739938 Ignore ganache-core from subproviders in a browser setting & remove previous hack 2018-03-14 17:29:57 +01:00
Leonid Logvinov
40ebb533b3 Enable coverage for all other packages with tests 2018-03-14 17:15:38 +01:00
Leonid Logvinov
7fe26ee719 Fix parallel coverage results reporting 2018-03-14 17:14:25 +01:00
Fabio Berger
28d63ad8e1 Add Web3Wrapper docs to website 2018-03-14 16:37:24 +01:00
Fabio Berger
56eeea1e63 Add fix to webpack for issue: https://github.com/trufflesuite/ganache-core/issues/84 and prettier the configs 2018-03-14 16:37:09 +01:00
Fabio Berger
642a2cf165 Added doc json generation and uploading to Web3Wrapper package 2018-03-14 16:36:00 +01:00
Fabio Berger
e16feb27f4 Merge pull request #450 from 0xProject/convertScriptsToTs
Convert Scripts to TS & Other Misc. Fixes
2018-03-14 15:18:16 +01:00
Fabio Berger
83ae7ba08d Fix linter issuesx 2018-03-14 14:50:09 +01:00
Fabio Berger
a86f8a81a2 Fix linter issuesx 2018-03-14 14:49:09 +01:00
Fabio Berger
28abcef1ca Remove outdated comment 2018-03-14 14:32:45 +01:00
Fabio Berger
32d15d79f1 Add script copying to build command 2018-03-14 14:30:15 +01:00
Fabio Berger
538ac604a8 Add postpublish script to sol-cov 2018-03-14 14:27:36 +01:00
Fabio Berger
009b70f5b2 Merge branch 'development' into convertScriptsToTs
* development: (71 commits)
  Transform input data before encoding for callAsync and getABIEncodedTransactionData
  Update coverage badge to show development coverage
  Configure post build hook
  Notify coveralls after all tasks have finished
  Address feedback
  Revert "Report all coverage reports together"
  Separate published packages and typescript typings on README
  Report all coverage reports together
  Add other statement types
  Properly and consistently parse ENV vars
  Add forgotten file
  Start using solidity-parser-antlr
  Fix the default always overriding to address
  Submit a TD PR
  Add an explanatory comment for making ranges unique
  Fix a typo in handling env variables
  Introduce TESTRPC_FIRST_ADDRESS
  Make BlockchainLifecycle accept only web3Wrapper
  Fix comments
  Fix deployer CHANGELOG
  ...

# Conflicts:
#	README.md
#	packages/deployer/package.json
#	packages/subproviders/src/globals.d.ts
#	yarn.lock
2018-03-14 14:16:08 +01:00
Fabio Berger
f7c1e10b5a Move configuration into package.json configs section 2018-03-14 14:07:24 +01:00
Leonid Logvinov
3f3e8be004 Merge pull request #453 from 0xProject/fix/contract-templates/transformData
Transform input data before encoding
2018-03-14 05:50:02 +01:00
Amir Bandeali
cb612360ca Transform input data before encoding for callAsync and getABIEncodedTransactionData 2018-03-13 20:41:07 -07:00
Brandon Millman
6a8c2cb717 Update CHANGELOGs 2018-03-13 18:16:31 -07:00
Brandon Millman
c8a8b851d8 Consolidate all console.log into the @0xproject/utils package 2018-03-13 18:13:48 -07:00
Brandon Millman
ba9a734ba7 Update README and CHANGELOG 2018-03-13 16:17:02 -07:00
Brandon Millman
b08374f0ba Add scaffolding for sra-report collection unit tests 2018-03-13 15:54:33 -07:00
Leonid Logvinov
c2f8858aab Update coverage badge to show development coverage 2018-03-13 20:47:21 +01:00
Leonid Logvinov
1f81fa1c6c Configure post build hook 2018-03-13 20:38:33 +01:00
Leonid Logvinov
db44a5bca7 Merge pull request #426 from 0xProject/feature/solcov
Sol-cover
2018-03-13 19:49:30 +01:00
Leonid Logvinov
53e1815c1d Notify coveralls after all tasks have finished 2018-03-13 19:30:54 +01:00
Leonid Logvinov
20985d515f Address feedback 2018-03-13 19:13:37 +01:00
Leonid Logvinov
0334004b11 Revert "Report all coverage reports together"
This reverts commit 11ed5d62ba.
2018-03-13 19:09:16 +01:00
Brandon Millman
95e2b37d62 Separate published packages and typescript typings on README 2018-03-13 09:57:28 -07:00
Fabio Berger
dba1b8a7e9 Consolidate docs generation and uploading logic 2018-03-13 17:55:16 +01:00
Fabio Berger
ee29ed26ff Use async/await instead of promise syntax 2018-03-13 17:36:12 +01:00
Fabio Berger
a08ae722c1 Move changelog entry 2018-03-13 17:04:38 +01:00
Fabio Berger
b3c1c0ccad remove unneeded include 2018-03-13 17:04:31 +01:00
Fabio Berger
e1fa65f5ef remove unused dep 2018-03-13 17:04:14 +01:00
Fabio Berger
a2e848a7fa Fix lint issues 2018-03-13 16:55:50 +01:00
Fabio Berger
67fbffc964 Re-add linter to monorepo-scripts but with tslint-config dep at earlier version to avoid cyclical dependency 2018-03-13 16:55:35 +01:00
Fabio Berger
c3b4359e87 small fixes 2018-03-13 16:36:05 +01:00
Leonid Logvinov
11ed5d62ba Report all coverage reports together 2018-03-13 16:34:37 +01:00
Leonid Logvinov
5827170815 Add other statement types 2018-03-13 15:49:46 +01:00
Fabio Berger
ca25b816fa move scripts to monorepro-scripts 2018-03-13 15:29:12 +01:00
Leonid Logvinov
a9db0e8ebe Properly and consistently parse ENV vars 2018-03-13 15:19:31 +01:00
Leonid Logvinov
a0791455e1 Add forgotten file 2018-03-13 14:41:46 +01:00
Leonid Logvinov
efb0ee4c02 Start using solidity-parser-antlr 2018-03-13 11:53:45 +01:00
Fabio Berger
df1968157c Fix gitignore 2018-03-13 10:59:53 +01:00
Fabio Berger
355aac2a1a Move abi-gen scripts to src 2018-03-13 10:42:33 +01:00
Fabio Berger
b93b66edfb Add missing dep 2018-03-13 10:42:14 +01:00
Fabio Berger
92a4e77288 Make git-ignore generic for all package scripts 2018-03-13 10:42:06 +01:00
Fabio Berger
7ac646ff94 Move monorepo_scripts into src dir removing the need for a separate globals.d.ts and tsconfig files 2018-03-13 10:25:10 +01:00
Fabio Berger
ef6aa9f41b Convert 0x.js scripts to TS, move the prepublishUtils script to dev-utils and also convert it to TS. 2018-03-12 22:13:24 +01:00
Fabio Berger
df9e7385ad Merge pull request #449 from 0xProject/bug/website/portal-history-etherscan-tx
Fix the Portal Etherscan Link always overriding to address
2018-03-12 16:53:10 +01:00
Jacob Evans
e065ac45dc Fix the default always overriding to address 2018-03-12 11:34:55 -04:00
Fabio Berger
745af5309d Add missing prettier devDep 2018-03-12 16:04:01 +01:00
Fabio Berger
952f1cf8d0 Use isMetaMask flag rather then constructor name for Metamask provider detection 2018-03-12 15:22:04 +01:00
Fabio Berger
86a55fe55a Add OrderRelevantState to public types in 0x.js docs configs 2018-03-12 13:58:15 +01:00
Leonid Logvinov
88c6694ffc Submit a TD PR 2018-03-12 13:24:07 +01:00
Leonid Logvinov
20826e0f08 Add an explanatory comment for making ranges unique 2018-03-12 12:56:22 +01:00
Leonid Logvinov
e474096119 Fix a typo in handling env variables 2018-03-12 12:53:51 +01:00
Leonid Logvinov
075f286130 Introduce TESTRPC_FIRST_ADDRESS 2018-03-12 12:53:07 +01:00
Leonid Logvinov
32e3cab116 Make BlockchainLifecycle accept only web3Wrapper 2018-03-12 12:51:37 +01:00
Leonid Logvinov
49ff4299c6 Fix comments 2018-03-12 12:42:14 +01:00
Leonid Logvinov
4d18a4802d Fix deployer CHANGELOG 2018-03-12 12:40:00 +01:00
Fabio Berger
d613791104 Merge branch 'feature/solcov' of github.com:0xProject/0x-monorepo into feature/solcov
* 'feature/solcov' of github.com:0xProject/0x-monorepo:
  Add a HACK to detect coverage of the modifiers with no parameters
2018-03-12 12:32:32 +01:00
Fabio Berger
44f7f79bd9 Improve the sol-cov readme 2018-03-12 12:32:07 +01:00
Leonid Logvinov
1cdfbbadaa Add a HACK to detect coverage of the modifiers with no parameters 2018-03-12 12:31:33 +01:00
Fabio Berger
76a31b6fd6 Merge pull request #447 from 0xProject/refactorAnalytics
Refactor Website Analytics
2018-03-12 11:28:34 +01:00
Leonid Logvinov
0ad3d06ef9 Merge pull request #448 from 0xProject/fix/abi-gen-readme
Update README for abi-gen
2018-03-12 11:28:06 +01:00
Leonid Logvinov
fb0fd8ddc4 Update README 2018-03-12 11:24:37 +01:00
Leonid Logvinov
2a9913b8fb Treap transactions to address 0x0 as contract creation 2018-03-12 06:07:01 +01:00
Leonid Logvinov
9b8d2ed469 Add sol-cov README 2018-03-12 04:03:51 +01:00
Leonid Logvinov
17148df06d Add an example deployment script 2018-03-12 03:47:46 +01:00
Leonid Logvinov
d93089fcc0 Fix subproviders CHANGELOG 2018-03-12 03:37:31 +01:00
Leonid Logvinov
870995933a Remove redundant Date.now() 2018-03-12 03:37:30 +01:00
Leonid Logvinov
d6c2e47bbd Make env variables parsing more strict and add docs 2018-03-12 03:37:30 +01:00
Leonid Logvinov
e2b2bf1e0d Fix a typo 2018-03-12 03:37:30 +01:00
Leonid Logvinov
c4a18ee64b Make Deployer configurable by jsonrpcUrl instead of jsonrpcPort 2018-03-12 03:37:30 +01:00
Leonid Logvinov
7143996d26 Use locks instead of semaphores in ledger subprovider 2018-03-12 03:37:30 +01:00
Leonid Logvinov
22f78a2c52 Don't await lock releases 2018-03-12 03:37:30 +01:00
Leonid Logvinov
bd7517cfd4 Add support for async calls under coverage 2018-03-12 03:37:30 +01:00
Leonid Logvinov
9bffce9dc5 Fix coverage:report:html 2018-03-12 03:37:30 +01:00
Leonid Logvinov
10f6a17857 Add builtin modifier 'constant' 2018-03-12 03:37:30 +01:00
Leonid Logvinov
2197c2481a Increase timeout 2018-03-12 03:37:30 +01:00
Leonid Logvinov
8d90e640b0 Keep coverage directory 2018-03-12 03:37:30 +01:00
Leonid Logvinov
368870a2fc Fix sources list generation in a compiler 2018-03-12 03:37:30 +01:00
Leonid Logvinov
945a19bb61 Fix a typo in tests 2018-03-12 03:37:30 +01:00
Leonid Logvinov
b0abc384bc Disable completed docs rule 2018-03-12 03:37:30 +01:00
Leonid Logvinov
8f45e9a518 Run coverage on CI 2018-03-12 03:37:29 +01:00
Leonid Logvinov
b06f1d1982 Use custom fork of ganache-core 2018-03-12 03:37:29 +01:00
Leonid Logvinov
4365350430 Don't do parallel calls 2018-03-12 03:37:29 +01:00
Leonid Logvinov
3b158cb726 Address feedback 2018-03-12 03:37:29 +01:00
Leonid Logvinov
2298a34c37 Make _getSingleFileCoverageForTrace a private static method 2018-03-12 03:37:29 +01:00
Leonid Logvinov
633039c528 Use better variable name 2018-03-12 03:37:29 +01:00
Leonid Logvinov
ee31d5e24d Introduce redundant vars 2018-03-12 03:37:29 +01:00
Leonid Logvinov
f590aa11f7 Throw an error if artifacts not found 2018-03-12 03:37:29 +01:00
Leonid Logvinov
6b7f48644c Fix a typo 2018-03-12 03:37:29 +01:00
Leonid Logvinov
21aac75533 Use string enum for branch types 2018-03-12 03:37:29 +01:00
Leonid Logvinov
95b02a3197 Fix a typo 2018-03-12 03:37:29 +01:00
Leonid Logvinov
be7c444959 Remove initial implementation entry 2018-03-12 03:37:29 +01:00
Leonid Logvinov
f02d3f689d Document env variables 2018-03-12 03:37:29 +01:00
Leonid Logvinov
981752059c Add double negation before using shouldUseInProcessGanache 2018-03-12 03:37:29 +01:00
Leonid Logvinov
6c87ebac01 Rename useInProcessGanache to shouldUseInProcessGanache 2018-03-12 03:37:28 +01:00
Leonid Logvinov
a9479b3c01 Make coverage a module instead of a function 2018-03-12 03:37:28 +01:00
Leonid Logvinov
c5afca53a4 Rename COVERAGE to SOLIDITY_COVERAGS 2018-03-12 03:37:28 +01:00
Leonid Logvinov
b4cb88ab26 Add better error handling in deployer constructor 2018-03-12 03:37:28 +01:00
Leonid Logvinov
ad4f607643 Move compiler URL to constants 2018-03-12 03:37:28 +01:00
Leonid Logvinov
c7d340e822 Handle an error while loading the compiler 2018-03-12 03:37:28 +01:00
Leonid Logvinov
2c501d2380 Introduce isCompilerAvailableLocally 2018-03-12 03:37:28 +01:00
Leonid Logvinov
3787e4a83c Fix variable name 2018-03-12 03:37:28 +01:00
Leonid Logvinov
3b77e4ebf1 Rename getCoverageSubprovider to getCoverageSubproviderSingleton 2018-03-12 03:37:28 +01:00
Leonid Logvinov
6eebf717d5 Improve migrations comment 2018-03-12 03:37:28 +01:00
Leonid Logvinov
98f32d6f1f Stop making an assumption that contract code is immutable 2018-03-12 03:37:28 +01:00
Leonid Logvinov
62f45f7b41 Cache code parsing 2018-03-12 03:37:28 +01:00
Leonid Logvinov
a7d8f6599a use sourceList instead of sources 2018-03-12 03:37:28 +01:00
Leonid Logvinov
4da6db8418 Improve compiler output type 2018-03-12 03:37:28 +01:00
Leonid Logvinov
d991291f2a Use in-process Ganache in contracts 2018-03-12 03:37:27 +01:00
Leonid Logvinov
392fb42973 Revert mocha timeout increase 2018-03-12 03:37:27 +01:00
Leonid Logvinov
13299158d1 Add sol-cover implementation 2018-03-12 03:37:27 +01:00
Fabio Berger
a6571b09d2 Improve README 2018-03-11 13:24:34 +01:00
Fabio Berger
870ba445b8 Merge pull request #444 from 0xProject/dedupWeb3Wrapper
Remove custom web3Wrapper from website
2018-03-11 12:49:15 +01:00
Fabio Berger
caaa70f630 Fix getTokenBalanceAndAllowanceAsync to take ownerAddressIfExists so that we don't sometimes pass an empty string and sometimes undefined 2018-03-11 12:33:34 +01:00
Fabio Berger
56a8e0a09a Fix userAddress bugs 2018-03-11 12:04:46 +01:00
Fabio Berger
4c08667a07 Replace local PRECISION constants with global config.AMOUNT_DISPLAY_PRECISION 2018-03-10 22:43:13 +01:00
Fabio Berger
4ac6b6828c Get rid of getFirstAccountIfExistsAsync since no longer needed 2018-03-10 22:38:31 +01:00
Fabio Berger
c050186014 Use undefined rather then an empty string in blockchainWatcher 2018-03-10 22:36:54 +01:00
Fabio Berger
63f2606863 Refactor blockchain to store userAddress as address or undefined 2018-03-10 22:31:19 +01:00
Fabio Berger
5160e0ba18 Add pr number to changelog 2018-03-10 22:24:13 +01:00
Fabio Berger
0aad2ee005 Merge pull request #442 from 0xProject/addPackagePublishConfig
Add Package Publish Config
2018-03-10 17:07:38 +01:00
Fabio Berger
8a58ffda86 Fix tslint issues 2018-03-10 16:59:59 +01:00
Fabio Berger
cea8dcae3d Refactor Analytics so that calls to ReactGA are all in a single module, combining the provider type util function, moving GA id to configs and using utils.onPageLoadAsync 2018-03-10 16:53:42 +01:00
Brandon Millman
fc7e7d9331 Merge pull request #445 from 0xProject/feature/web3-logging
Fixed merge issue
2018-03-09 16:19:01 -08:00
Tom Schmidt
494bff4bc0 Fixed merge issue 2018-03-09 16:10:25 -08:00
Tom Schmidt
824ee8a3dc Merge pull request #441 from 0xProject/feature/website/web3-logging
Add web3 provider logging to GA
2018-03-09 15:31:21 -08:00
Tom Schmidt
47af38ecb8 Merge branch 'development' into feature/website/web3-logging 2018-03-09 15:22:59 -08:00
Tom Schmidt
654c790c3d Fixed Parity detection 2018-03-09 12:44:11 -08:00
Fabio Berger
7ebebb5bd9 Create blockchainWatcher class and refactor Portal such that Ether amounts are always passed around as baseUnits 2018-03-09 19:02:07 +01:00
Fabio Berger
8f921a61da Add getProvider method to web3Wrapper 2018-03-09 18:52:02 +01:00
Fabio Berger
cfd734d84f remove remaining declaration 2018-03-09 15:09:25 +01:00
Fabio Berger
342a697e42 Remove _exchangeAddress instance var from blockchain class 2018-03-09 15:08:22 +01:00
Fabio Berger
918f3cde94 Remove duplicitous methods from website's webWrapper 2018-03-09 15:08:02 +01:00
Fabio Berger
7b82a8669d Fix comment 2018-03-09 15:07:39 +01:00
Leonid Logvinov
7116f100ee Fix tests by passing DummyToken args 2018-03-09 14:16:38 +01:00
Fabio Berger
42fce45585 Merge pull request #443 from 0xProject/moveReactDocExample
Move `react-doc` example to separate sub-package
2018-03-09 14:10:56 +01:00
Fabio Berger
9da57daa7f Fix tslint error 2018-03-09 13:51:44 +01:00
Fabio Berger
e302d23317 Extend top-level tsconfigs 2018-03-09 13:44:56 +01:00
Fabio Berger
0edfa83951 Update README 2018-03-09 13:44:25 +01:00
Fabio Berger
a5ba049427 Update README 2018-03-09 13:41:31 +01:00
Fabio Berger
adba69a589 rm unnecessary npmignore 2018-03-09 11:06:03 +01:00
Fabio Berger
cc73f72d13 remove example top-level dir 2018-03-09 11:00:47 +01:00
Fabio Berger
e4f90996af Remove example from react-docs package to react-docs-example package 2018-03-09 10:49:57 +01:00
Fabio Berger
974c0d2b95 Fix isse of sourceMapLoader looking at node_modules 2018-03-09 10:18:15 +01:00
Fabio Berger
d1fc2a115e Export DocsState 2018-03-09 10:17:49 +01:00
Fabio Berger
a9373c7fb0 Remove unused dep from subproviders 2018-03-09 10:17:35 +01:00
Fabio Berger
8b604462ac Add missing dependencies 2018-03-09 10:17:23 +01:00
Fabio Berger
51e4a73439 Add missing package.json fields 2018-03-09 09:48:49 +01:00
Fabio Berger
d42cdcfd43 Improve README 2018-03-09 09:38:50 +01:00
Fabio Berger
c18acd0859 Remove screenshot and host it on S3 2018-03-09 09:37:03 +01:00
Fabio Berger
9699ee4eff Merge branch 'development' into addPackagePublishConfig
* development: (94 commits)
  Update CHANGELOG
  Add solc 0.4.20 and 0.4.21
  Prettier sra-report README
  Add new packages to top level README
  Updated @0xproject/utils in top level package.json
  Publish
  Updated CHANGELOGs
  Detail tests in the README
  Add support for ropsten and rinkeby
  Fix yarn.lock
  Update list of packages and organize them alphabetically
  Fix prettier issues
  Add support for going back to previous hashes via the browser back button to wiki
  Scroll to previous hashed elements when user clicks back button
  Add back strict null checks to react-shared package and fix issues
  remove ability to have implicit dependencies and add missing deps
  update license
  remove no-implicit-this
  Add example & screenshot to npmignore
  Remove `;` to be nice to windows users
  ...
2018-03-09 08:39:38 +01:00
Tom Schmidt
c78e504bfb Fixed lint 2018-03-08 17:08:43 -08:00
Amir Bandeali
0eeaac1f2b Update CHANGELOG 2018-03-08 17:01:02 -08:00
Amir Bandeali
b578517f91 Add solc 0.4.20 and 0.4.21 2018-03-08 16:43:32 -08:00
Tom Schmidt
c009e9979e Added web3 provider logging 2018-03-08 16:06:44 -08:00
Brandon Millman
22b6097e95 Prettier sra-report README 2018-03-08 10:44:49 -08:00
Brandon Millman
8e3446a389 Add new packages to top level README 2018-03-08 10:43:54 -08:00
Brandon Millman
1747d7a1bb Updated @0xproject/utils in top level package.json 2018-03-08 10:30:52 -08:00
Brandon Millman
8e5a876b37 Publish
- 0x.js@0.33.1
 - @0xproject/abi-gen@0.2.5
 - @0xproject/assert@0.2.0
 - @0xproject/base-contract@0.0.3
 - @0xproject/connect@0.6.3
 - contracts@2.1.15
 - @0xproject/deployer@0.2.1
 - @0xproject/dev-utils@0.2.1
 - @0xproject/json-schemas@0.7.14
 - @0xproject/react-docs@0.0.1
 - @0xproject/react-shared@0.0.1
 - @0xproject/sra-report@0.0.1
 - @0xproject/subproviders@0.7.0
 - @0xproject/testnet-faucets@1.0.16
 - @0xproject/types@0.3.1
 - @0xproject/utils@0.4.1
 - @0xproject/web3-wrapper@0.2.1
 - @0xproject/website@0.0.18
2018-03-08 10:20:46 -08:00
Brandon Millman
c71b710d7e Updated CHANGELOGs 2018-03-08 10:14:51 -08:00
Brandon Millman
7440b87596 Merge pull request #412 from 0xProject/feature/sra-reporter
Implement initial sra-report command line tool
2018-03-08 08:49:21 -08:00
Brandon Millman
583a17d627 Detail tests in the README 2018-03-08 08:45:05 -08:00
Brandon Millman
caf1a22084 Add support for ropsten and rinkeby 2018-03-08 08:44:45 -08:00
Brandon Millman
29abc5e921 Fix yarn.lock 2018-03-08 08:43:53 -08:00
Brandon Millman
098dae9a7e Merge branch 'development' into feature/sra-reporter
* development: (68 commits)
  Update list of packages and organize them alphabetically
  Fix prettier issues
  Add support for going back to previous hashes via the browser back button to wiki
  Scroll to previous hashed elements when user clicks back button
  Add back strict null checks to react-shared package and fix issues
  remove ability to have implicit dependencies and add missing deps
  update license
  remove no-implicit-this
  Add example & screenshot to npmignore
  Remove `;` to be nice to windows users
  Use unencoded @ symbol, browser will fix
  Fix external type links
  Add comment about commented out CSS exception
  Update prettier since the previous version had a bug when dealing with css files
  Fix css files with prettier
  Added base-contract package to README
  Prettify test jsons
  Update yarn.lock
  Improve README
  Feedback
  ...
2018-03-08 08:43:16 -08:00
Fabio Berger
aaa7affa46 Update list of packages and organize them alphabetically 2018-03-08 17:20:45 +01:00
Fabio Berger
40ca846cdc Merge pull request #438 from 0xProject/extractDocs
Extract Docs Template To Separate Package
2018-03-08 16:58:16 +01:00
Fabio Berger
da277f5b27 Add package.json publishConfig so that these packages are published as public. 2018-03-08 16:57:09 +01:00
Fabio Berger
2a24f6e2ea Fix prettier issues 2018-03-08 16:47:49 +01:00
Fabio Berger
98e8105ec5 Merge branch 'development' into extractDocs
* development:
  Added base-contract package to README
  Update yarn.lock
  Improve README
  Feedback
  README on derivation path
  Use our dev seed derivation path.
  README
  Add ledger-node package as optional dependency
  Force shouldGetChainCode to true in types
  Nuke tests for now
  Remove old ledger
  Update ledgerco packages
  Remove only
  Fix a typo
  Add PR name
  Improve an error message when an inorrect number of constructor params is passed
2018-03-08 16:40:46 +01:00
Fabio Berger
4a94a2b4e8 Add support for going back to previous hashes via the browser back button to wiki 2018-03-08 16:38:25 +01:00
Fabio Berger
2011349eb1 Scroll to previous hashed elements when user clicks back button 2018-03-08 16:35:33 +01:00
Fabio Berger
8057f4a678 Add back strict null checks to react-shared package and fix issues 2018-03-08 16:19:39 +01:00
Fabio Berger
f9ec8a0828 remove ability to have implicit dependencies and add missing deps 2018-03-08 16:00:15 +01:00
Fabio Berger
a0030c7bdb update license 2018-03-08 15:56:56 +01:00
Fabio Berger
0e4448fd3f remove no-implicit-this 2018-03-08 15:56:49 +01:00
Fabio Berger
21d2d59b50 Add example & screenshot to npmignore 2018-03-08 15:51:07 +01:00
Fabio Berger
295f177271 Remove ; to be nice to windows users 2018-03-08 14:44:58 +01:00
Fabio Berger
f3154313a8 Use unencoded @ symbol, browser will fix 2018-03-08 14:43:33 +01:00
Fabio Berger
e37f3b4fa3 Fix external type links 2018-03-08 14:43:09 +01:00
Fabio Berger
7e5c35d06e Add comment about commented out CSS exception 2018-03-08 14:39:28 +01:00
Fabio Berger
60756aa02b Update prettier since the previous version had a bug when dealing with css files 2018-03-08 14:37:25 +01:00
Fabio Berger
3779ab90de Fix css files with prettier 2018-03-08 14:37:05 +01:00
Fabio Berger
5b5037a844 Add publish config to package.json 2018-03-08 13:07:19 +01:00
Leonid Logvinov
03902b0b26 Merge pull request #419 from 0xProject/fix/deployer-args
Improve an error message when an incorrect number of constructor param…
2018-03-08 01:25:31 -08:00
Jacob Evans
883feabb8b Merge pull request #437 from 0xProject/feature/subproviders/update-ledgerco
Update ledgerco packages
2018-03-07 19:11:16 -05:00
Brandon Millman
5fb79e3253 Added base-contract package to README 2018-03-07 14:29:24 -08:00
Fabio Berger
c44811fbc2 Prettify test jsons 2018-03-07 22:01:37 +01:00
Fabio Berger
c3eaa694dd Update yarn.lock 2018-03-07 21:58:18 +01:00
Fabio Berger
bd8b8abfea Improve README 2018-03-07 21:44:11 +01:00
Jacob Evans
1a6c2e2bac Feedback 2018-03-07 15:20:06 -05:00
Jacob Evans
e2e6ae937d README on derivation path 2018-03-07 13:01:55 -05:00
Jacob Evans
5b9c5d2790 Use our dev seed derivation path.
Ensuring our signer address is 0x5409ed021d9299bf6814279a6a1411a7e866a631
2018-03-07 12:03:25 -05:00
Fabio Berger
896a57d4ed Flesh out the README 2018-03-07 16:48:28 +01:00
Fabio Berger
c3de8d3a67 Fix source line numbers in docJson since source needs to be identical to Github version tag for them to line up. 2018-03-07 16:15:10 +01:00
Fabio Berger
d1a92a0a2e fix source link 2018-03-07 16:05:20 +01:00
Fabio Berger
5f626495fd Add command to deploy react-docs example 2018-03-07 16:05:13 +01:00
Fabio Berger
238f3c89a7 Make sure we apply the appropriate syntax highlighting depending on the language of the docs 2018-03-07 15:32:37 +01:00
Fabio Berger
6e724eb8a5 Fix link color 2018-03-07 15:21:33 +01:00
Fabio Berger
9aec1feae3 Move remaining type configs to topLevel DocsInfoConfigs 2018-03-07 15:19:59 +01:00
Fabio Berger
8517de128b Update 0.1.12 json to add types 2018-03-07 14:27:12 +01:00
Fabio Berger
a3e15c910c Update 0.2.0 doc json to include types 2018-03-07 14:23:00 +01:00
Fabio Berger
a6303de4d1 Move RawLogEntry to types package 2018-03-07 14:22:15 +01:00
Fabio Berger
5356b0e118 Small improvements to docs 2018-03-07 14:11:14 +01:00
Fabio Berger
e31309f213 Allow user to change versions in demo example 2018-03-07 13:57:17 +01:00
Fabio Berger
6f8a70834b Add onSelectedVersion callback so it can be handled in any way the caller wishes 2018-03-07 13:25:15 +01:00
Fabio Berger
327cc307b3 Add back icons to example so that link icon renders 2018-03-07 11:05:48 +01:00
Fabio Berger
f191ba6e69 hide sidebar scrollbar unless onHover 2018-03-07 10:50:51 +01:00
Fabio Berger
a2b89411b0 Move example to it's own folder 2018-03-07 10:50:38 +01:00
Fabio Berger
f66efed777 Add example docs to react-docs package 2018-03-07 10:20:15 +01:00
Brandon Millman
f61b59fa89 Disable completed docs linting for globals 2018-03-07 00:17:39 -08:00
Brandon Millman
6288a72036 Add name to environment 2018-03-06 23:55:58 -08:00
Jacob Evans
a941f0ffb6 README 2018-03-06 21:01:39 -05:00
Jacob Evans
d7373a5c04 Add ledger-node package as optional dependency 2018-03-06 20:37:09 -05:00
Brandon Millman
2ff485d2e0 Add relevant newman typings 2018-03-06 16:25:51 -08:00
Brandon Millman
5a67068348 Random fixes 2018-03-06 15:39:38 -08:00
Brandon Millman
d39af6c9eb Print error message when no orders are found from /orders 2018-03-06 15:34:32 -08:00
Brandon Millman
1789025da9 Refactor environment factory and generalize token environment keys 2018-03-06 15:22:56 -08:00
Brandon Millman
696f49497b Flesh out README 2018-03-06 14:46:32 -08:00
Fabio Berger
e88eba1877 Fix tslint errors 2018-03-06 20:55:57 +01:00
Fabio Berger
f8b8a10b8f Make sidebar header configurable 2018-03-06 20:38:45 +01:00
Fabio Berger
01e505a5f4 Add publishConfig to package.json so that packages are published as public under the @0xproject namespace 2018-03-06 20:14:55 +01:00
Fabio Berger
5b2d9a4668 re-org index.ts 2018-03-06 19:50:33 +01:00
Fabio Berger
71008dc819 Remove menuSubsectionsBySection prop from Documentation component 2018-03-06 19:49:00 +01:00
Tom Schmidt
f27e943258 Added provider canonical name mapping 2018-03-06 09:47:13 -08:00
Fabio Berger
9301173f7d Rename docsVersion prop to selectedVersion and docsVersions to versions for clarity 2018-03-06 16:46:07 +01:00
Fabio Berger
60d95475eb Move DocsInfo out of the components folder 2018-03-06 16:45:25 +01:00
Fabio Berger
c8ace2edc0 Remove location prop 2018-03-06 16:37:37 +01:00
Fabio Berger
0b1ba9f997 Move Documentation to the @0xproject/react-docs package 2018-03-06 16:31:55 +01:00
Jacob Evans
f3026e33fd Force shouldGetChainCode to true in types 2018-03-06 08:57:54 -05:00
Fabio Berger
f014a97e9a Merge branch 'development' into extractDocs
* development:
  Also show staging 0x.js docs on development
  Fix source links in docs with a hack to support old and new versions of the TypeDoc JSON files
  remove from devDeps
  Remove date for now
  Add ethers typescript typings to 0x.js deps. The library works without this atm since another dep of 0x.js has it as a dep. But it's more robust to have it here.
  Add  missing instructions to add external types to tsconfig.json after installing the package
2018-03-06 11:11:35 +01:00
Brandon Millman
ddad09a936 Add support for custom environment file 2018-03-06 00:44:18 -08:00
Fabio Berger
5dd0654105 Also show staging 0x.js docs on development 2018-03-06 09:34:22 +01:00
Fabio Berger
b4b664e97a Fix source links in docs with a hack to support old and new versions of the TypeDoc JSON files 2018-03-06 09:33:35 +01:00
Brandon Millman
551771235b Prettier 2018-03-06 00:20:36 -08:00
Brandon Millman
eb201c4084 Add options for exporting environment and collection files 2018-03-06 00:18:58 -08:00
Jacob Evans
7bfc499ec8 Nuke tests for now 2018-03-05 22:36:53 -05:00
Jacob Evans
71e7e9c9c3 Remove old ledger 2018-03-05 21:07:07 -05:00
Jacob Evans
8521775389 Update ledgerco packages 2018-03-05 21:05:30 -05:00
Brandon Millman
61ad8d4c10 Add comment to environment factory 2018-03-05 16:31:39 -08:00
Brandon Millman
38a4ccd9f2 Change all globals in environment variables 2018-03-05 16:13:47 -08:00
Brandon Millman
cf342dd00e Change url command line option to endpoint-url 2018-03-05 15:31:42 -08:00
Brandon Millman
08ab81c54c Rename isHttpUrl to isWebUri in assert package 2018-03-05 15:24:55 -08:00
Brandon Millman
d355382f70 Update 0x package versions and fix yarn.lock 2018-03-05 15:15:03 -08:00
Brandon Millman
d171ce4fba Merge branch 'development' into feature/sra-reporter
* development: (79 commits)
  remove from devDeps
  Remove date for now
  Add ethers typescript typings to 0x.js deps. The library works without this atm since another dep of 0x.js has it as a dep. But it's more robust to have it here.
  Add  missing instructions to add external types to tsconfig.json after installing the package
  Fix bugs in postpublish_utils.js
  Update @0xproject/utils in top-level package.json
  Changelog tweaks
  Publish
  Updated CHANGELOGS
  Fix typo
  Add PR number to changelog entry
  Add changelog update to subproviders package
  Add `numberOfAccounts` param to `LedgerSubprovider` method `getAccountsAsync` and add tests
  Remove unnecessary type assertion
  Fix comments
  Add comments
  Don't need any external packages for 0x connect docs yet
  Instead of adding `@0xproject/types` to tsconfig.json, let's only add it when calling TypeDoc
  Fix styling
  Make prettier ignore postpublish_utils
  ...
2018-03-05 15:08:56 -08:00
Fabio Berger
5a90fece80 Moved over all pages/shared components and dependencies to react-shared 2018-03-05 13:53:13 +01:00
Fabio Berger
994935b5da Merge pull request #434 from 0xProject/addMissingReadmeInstructions
Add Missing README Instructions
2018-03-05 09:38:24 +01:00
Fabio Berger
874e667849 Bug fixes 2018-03-05 07:10:55 +01:00
Fabio Berger
1817f6eaf6 Merge branch 'development' into extractDocs
* development: (22 commits)
  Fix bugs in postpublish_utils.js
  Update @0xproject/utils in top-level package.json
  Changelog tweaks
  Publish
  Updated CHANGELOGS
  Fix typo
  Add PR number to changelog entry
  Add changelog update to subproviders package
  Add `numberOfAccounts` param to `LedgerSubprovider` method `getAccountsAsync` and add tests
  Remove unnecessary type assertion
  Move web3 typings from devDeps to deps
  remove extrenuous comma
  Add PR number
  Add changelog entries from types and utils
  Add changelog entry to subproviders
  Remove extra comma
  Move web3 and ethers types to deps for utils package
  Make web3 typings a dep for web3Wrapper
  Make web3 typings a dep for subproviders
  reorder deps
  ...

# Conflicts:
#	packages/website/package.json
2018-03-05 06:20:15 +01:00
Fabio Berger
2e19930178 remove from devDeps 2018-03-05 06:17:57 +01:00
Fabio Berger
2b01461748 Remove date for now 2018-03-05 06:17:19 +01:00
Fabio Berger
24b9df475c Add ethers typescript typings to 0x.js deps. The library works without this atm since another dep of 0x.js has it as a dep. But it's more robust to have it here. 2018-03-05 06:12:36 +01:00
Fabio Berger
011bab3c80 Add missing instructions to add external types to tsconfig.json after installing the package 2018-03-05 06:11:53 +01:00
Fabio Berger
699c0c3e05 Fix bugs in postpublish_utils.js 2018-03-04 21:24:47 +01:00
Fabio Berger
5f4b28960e Update @0xproject/utils in top-level package.json 2018-03-04 19:38:32 +01:00
Fabio Berger
3837913855 Changelog tweaks 2018-03-04 19:38:16 +01:00
Fabio Berger
65eb3997d9 Publish
- 0x.js@0.33.0
 - @0xproject/abi-gen@0.2.4
 - @0xproject/assert@0.1.0
 - @0xproject/base-contract@0.0.2
 - chai-as-promised-typescript-typings@0.0.10
 - chai-typescript-typings@0.0.4
 - @0xproject/connect@0.6.2
 - contracts@2.1.14
 - @0xproject/deployer@0.2.0
 - @0xproject/dev-utils@0.2.0
 - ethers-typescript-typings@0.0.2
 - @0xproject/json-schemas@0.7.13
 - @0xproject/monorepo-scripts@0.1.12
 - @0xproject/subproviders@0.6.0
 - @0xproject/testnet-faucets@1.0.15
 - @0xproject/tslint-config@0.4.10
 - @0xproject/types@0.3.0
 - @0xproject/utils@0.4.0
 - web3-typescript-typings@0.10.0
 - @0xproject/web3-wrapper@0.2.0
 - @0xproject/website@0.0.17
2018-03-04 19:35:59 +01:00
Fabio Berger
47411b406d Updated CHANGELOGS 2018-03-04 17:02:50 +01:00
Fabio Berger
f710026a8f Merge pull request #432 from 0xProject/improveLedgerSubprovider
Allow LedgerSubprovider to return any number of accounts
2018-03-04 16:57:25 +01:00
Fabio Berger
925e133f50 Fix typo 2018-03-04 16:42:16 +01:00
Fabio Berger
2bdd60ed72 Add PR number to changelog entry 2018-03-04 16:39:18 +01:00
Fabio Berger
9ac1cce26f Merge branch 'development' into improveLedgerSubprovider
* development: (28 commits)
  Remove unnecessary type assertion
  Fix comments
  Add comments
  Don't need any external packages for 0x connect docs yet
  Instead of adding `@0xproject/types` to tsconfig.json, let's only add it when calling TypeDoc
  Fix styling
  Make prettier ignore postpublish_utils
  Add hack comment
  Add comment about typeDoc versions
  Add support for merging multiple topLevel packages under a single section. For now, we simply merge the two package's children (works well for merging 0x.js types and @0xproject/types)
  Because we now include non-0x.js source, the keys changed. Needed to add both for backward compatibility with old doc JSON's
  Add support for backward compatibility for TypeDoc versions <0.9.0
  Consolidate all same exports together
  Add @0xproject/types to 0x.js tsconfig `include` so that TypeDoc also includes these types in the generated doc JSON
  Fix small bug where onHover type declarations with comments was taking up the entire window width
  Update to custom typeDoc fork with latest version (TS 2.7.0 support) + a bug fix allowing us to defer to the `include` in tsconfig.json on which files to run through TypeDoc
  Move web3 typings from devDeps to deps
  remove extrenuous comma
  Add PR number
  Add changelog entries from types and utils
  ...

# Conflicts:
#	packages/subproviders/CHANGELOG.md
2018-03-04 16:33:58 +01:00
Fabio Berger
0a597c94d6 Merge pull request #430 from 0xProject/0x.js/updateTypeDoc
Upgrade TypeDoc Dep & Add Missing @0xproject/types To Docs
2018-03-04 16:32:44 +01:00
Fabio Berger
02f82be094 Add changelog update to subproviders package 2018-03-04 15:52:52 +01:00
Fabio Berger
86e26240a1 Add numberOfAccounts param to LedgerSubprovider method getAccountsAsync and add tests 2018-03-04 15:52:16 +01:00
Fabio Berger
82c5be2564 Remove unnecessary type assertion 2018-03-04 15:29:14 +01:00
Fabio Berger
42f4f07268 Merge pull request #429 from 0xProject/fix/incorrectDeps
Move required typing from devDeps to deps
2018-03-04 15:21:32 +01:00
Fabio Berger
df4db8fa4c Merge branch '0x.js/updateTypeDoc' into extractDocs
* 0x.js/updateTypeDoc:
  Fix comments
  Add comments
  Don't need any external packages for 0x connect docs yet
  Instead of adding `@0xproject/types` to tsconfig.json, let's only add it when calling TypeDoc
  Fix styling
  Make prettier ignore postpublish_utils
  Update yarn.lock
2018-03-03 21:44:44 +01:00
Fabio Berger
bd85fe0af3 Fix comments 2018-03-03 21:43:11 +01:00
Fabio Berger
aee15e5dff Add comments 2018-03-03 21:37:42 +01:00
Fabio Berger
d7a803d9fd Don't need any external packages for 0x connect docs yet 2018-03-03 21:37:36 +01:00
Fabio Berger
839e5895e4 Instead of adding @0xproject/types to tsconfig.json, let's only add it when calling TypeDoc 2018-03-03 21:34:13 +01:00
Fabio Berger
49a4f0c74c Fix styling 2018-03-03 21:33:44 +01:00
Fabio Berger
5bea8e63de Make prettier ignore postpublish_utils 2018-03-03 21:32:10 +01:00
Fabio Berger
e64be284dd Merge branch 'development' into 0x.js/updateTypeDoc
* development:
  Update yarn.lock
  Update yarn.lock
  Update all mentions of the repo name being `0x.js` to `0x-monorepo`
2018-03-03 20:29:40 +01:00
Fabio Berger
e11e26a352 Add clean command 2018-03-03 20:29:24 +01:00
Fabio Berger
bee90abbc4 Add changelog and readme 2018-03-03 20:29:17 +01:00
Fabio Berger
8782559c33 remove top-level configs 2018-03-03 20:29:07 +01:00
Fabio Berger
223ddc0f68 Add react-shared as dep of website 2018-03-03 20:15:48 +01:00
Fabio Berger
4445d1d5a0 Update yarn.lock 2018-03-03 20:09:09 +01:00
Fabio Berger
b7d001da88 Setup initial react-shared sub-package 2018-03-03 19:58:30 +01:00
Fabio Berger
3592ebef08 Move over AnchorTitle and associated elements 2018-03-03 19:55:40 +01:00
Fabio Berger
a783d21409 Merge branch 'development' into extractDocs
* development:
  Update yarn.lock
  Update all mentions of the repo name being `0x.js` to `0x-monorepo`
2018-03-03 19:20:56 +01:00
Fabio Berger
a716e3de74 Update yarn.lock 2018-03-03 19:18:58 +01:00
Fabio Berger
c797c720be Update all mentions of the repo name being 0x.js to 0x-monorepo 2018-03-03 19:11:09 +01:00
Fabio Berger
1b5742fbf0 Add hack comment 2018-03-03 17:03:51 +01:00
Fabio Berger
5794349d97 Add comment about typeDoc versions 2018-03-03 17:02:12 +01:00
Fabio Berger
456f094913 Add support for merging multiple topLevel packages under a single section. For now, we simply merge the two package's children (works well for merging 0x.js types and @0xproject/types) 2018-03-03 16:52:59 +01:00
Fabio Berger
abb9eb0df4 Because we now include non-0x.js source, the keys changed. Needed to add both for backward compatibility with old doc JSON's 2018-03-03 16:51:45 +01:00
Fabio Berger
9e7b45ea4c Add support for backward compatibility for TypeDoc versions <0.9.0 2018-03-03 16:50:58 +01:00
Fabio Berger
6c6bd60a48 Consolidate all same exports together 2018-03-03 16:50:17 +01:00
Fabio Berger
cef82e72dc Add @0xproject/types to 0x.js tsconfig include so that TypeDoc also includes these types in the generated doc JSON 2018-03-03 16:49:56 +01:00
Fabio Berger
45b9647ba0 Fix small bug where onHover type declarations with comments was taking up the entire window width 2018-03-03 13:47:39 +01:00
Fabio Berger
160f74d53e Update to custom typeDoc fork with latest version (TS 2.7.0 support) + a bug fix allowing us to defer to the include in tsconfig.json on which files to run through TypeDoc 2018-03-03 13:46:42 +01:00
Fabio Berger
3ab6139522 Move web3 typings from devDeps to deps 2018-03-03 10:59:43 +01:00
Fabio Berger
9aa54257e7 remove extrenuous comma 2018-03-03 10:38:51 +01:00
Fabio Berger
8eafa62bbe Add PR number 2018-03-03 10:36:53 +01:00
Fabio Berger
968c24f0bc Add changelog entries from types and utils 2018-03-03 10:32:01 +01:00
Fabio Berger
e5c755b1fc Add changelog entry to subproviders 2018-03-03 10:29:14 +01:00
Fabio Berger
6d56f01c40 Remove extra comma 2018-03-03 10:28:51 +01:00
Fabio Berger
eefce48e68 Move web3 and ethers types to deps for utils package 2018-03-03 10:24:29 +01:00
Fabio Berger
c7d97c733a Make web3 typings a dep for web3Wrapper 2018-03-03 10:20:53 +01:00
Fabio Berger
3db42deb42 Make web3 typings a dep for subproviders 2018-03-03 10:20:30 +01:00
Fabio Berger
02603e8926 reorder deps 2018-03-03 10:20:04 +01:00
Fabio Berger
c5003554f4 Move ethers and web3 types to deps since both are required when interacting with this package 2018-03-03 10:06:02 +01:00
Fabio Berger
eb223805ca Move web3 typings to dependencies since the types package cannot function without them being available when imported 2018-03-03 10:02:48 +01:00
Fabio Berger
244c148a80 Improve repo description in README 2018-03-03 07:47:27 +01:00
Fabio Berger
4dbb2ed167 Merge pull request #427 from 0xProject/fix/doc_bugs
Miscellaneous Doc Fixes
2018-03-03 06:07:00 +01:00
Fabio Berger
212d680a47 Small stylistic improvements 2018-03-03 05:46:12 +01:00
Fabio Berger
a853e35dec Improve icon sizes 2018-03-03 05:42:32 +01:00
Fabio Berger
fdaf9f0bfc Fix comment and use named variable in conditional 2018-03-03 05:36:26 +01:00
Fabio Berger
0afe45b3a8 Hash hash instead of prefixedHash to scrollToHash function 2018-03-03 05:36:08 +01:00
Fabio Berger
f9a37168b0 Fix link to intro tutorial wiki article 2018-03-02 17:07:32 +01:00
Fabio Berger
52232e98c7 Make sure the page has loaded (including all images) before scrolling to hash 2018-03-02 17:02:14 +01:00
Fabio Berger
0fbb443e4b Move onPageLoadAsync to utils 2018-03-02 17:01:46 +01:00
Fabio Berger
8021694b81 Give all container files the proper file suffix: ts 2018-03-02 16:21:10 +01:00
Fabio Berger
a2b262c9df Add hash to URL onClick 2018-03-02 15:10:44 +01:00
Fabio Berger
5906f4c995 Add underline to internal linksx 2018-03-02 15:02:50 +01:00
Fabio Berger
da8edd2226 Undo config changes 2018-03-02 14:47:43 +01:00
Fabio Berger
406aedfdc2 Merge branch 'development' into fix/doc_bugs
* development: (21 commits)
  Adjust the tests
  Move tutorials to adhere to current dir structure
  Make tests slightly nicer
  Remove only
  Improve the comments
  Improve the comments
  Add comments to Arbitrage contract
  Don't pass tokenGet and tokenGive because we can get them from 0x order
  Pretty-print ED contracts
  Make external
  Fix a typo
  Change type to uint256
  Make setAllowances external
  Fix the comment
  Put all ED contracts in one folder
  Move tutorials contracts to src folder
  Remove false-positive linter failure because of chai-as-pronmised incorrect types
  Assert that the balances don't change if arbitrage fails
  Initial implementation of Arbitrage contract with tests
  Set max to 2 ETH/2 ZRX
  ...
2018-03-02 14:44:53 +01:00
Fabio Berger
67c834841e Update react-markdown, properly scroll to section for wiki internal links, consolidate scrollTo logic and make external links open in new tabs 2018-03-02 14:40:26 +01:00
Fabio Berger
edaa0b0e34 Update yarn lock 2018-03-02 14:38:46 +01:00
Fabio Berger
31f03fcf3a Use custom fork of react-highlight with support for Solidity syntax highlighting 2018-03-02 02:17:23 +01:00
Leonid Logvinov
4a57f2a762 Merge pull request #425 from 0xProject/feature/build_watch
Arbitrage tutorial contract
2018-03-01 16:57:58 -08:00
Brandon Millman
92b9dbd706 Fix up some postman tests 2018-03-01 14:41:16 -08:00
Leonid Logvinov
6edd7682a9 Adjust the tests 2018-03-01 13:25:01 -08:00
Leonid Logvinov
447891b396 Move tutorials to adhere to current dir structure 2018-03-01 13:23:29 -08:00
Brandon Millman
89bfcafb80 Add ethers types 2018-03-01 13:17:49 -08:00
Brandon Millman
a74a04c5d5 Fix yarn.lock 2018-03-01 13:06:08 -08:00
Brandon Millman
0c16f0ea22 Merge branch 'development' into feature/sra-reporter
* development: (71 commits)
  Set max to 2 ETH/2 ZRX
  Add missing types from website
  Add dependencies
  Update the README
  Move BaseContract to its own package
  Upgrate prettier
  remove unused import
  Move more configs into docsInfo and remove logic that does not belong there elsewhere
  Fix a bug with displaying solidity functions returning multiple return values
  Add ethers-contracts as a dependency
  Include types for ethers-contracts
  Fix the version
  Include types for ethers-contracts
  Rename idx to i
  Remove tslint disable
  Move BaseContract to web3Wrapper
  Merge ifs
  Fix an option description
  Add link to the docs
  Improve CHANGELOG entry
  ...
2018-03-01 13:04:55 -08:00
Brandon Millman
003d43b03a Flesh out postman test cases 2018-03-01 13:02:12 -08:00
Leonid Logvinov
6323496945 Make tests slightly nicer 2018-03-01 12:21:09 -08:00
Leonid Logvinov
fd5e231a93 Remove only 2018-03-01 12:21:09 -08:00
Leonid Logvinov
ae209677de Improve the comments 2018-03-01 12:21:09 -08:00
Leonid Logvinov
d5ca00de95 Improve the comments 2018-03-01 12:21:09 -08:00
Leonid Logvinov
7be84c6ad3 Add comments to Arbitrage contract 2018-03-01 12:21:09 -08:00
Leonid Logvinov
425039e4d3 Don't pass tokenGet and tokenGive because we can get them from 0x order 2018-03-01 12:21:09 -08:00
Leonid Logvinov
6c5333180d Pretty-print ED contracts 2018-03-01 12:21:09 -08:00
Leonid Logvinov
cb47a51b70 Make external 2018-03-01 12:21:09 -08:00
Leonid Logvinov
e36fb654b0 Fix a typo 2018-03-01 12:21:09 -08:00
Leonid Logvinov
6325fac020 Change type to uint256 2018-03-01 12:21:09 -08:00
Leonid Logvinov
c6358d5f22 Make setAllowances external 2018-03-01 12:21:09 -08:00
Leonid Logvinov
413e8b6062 Fix the comment 2018-03-01 12:21:09 -08:00
Leonid Logvinov
e113a8e7af Put all ED contracts in one folder 2018-03-01 12:21:08 -08:00
Leonid Logvinov
e42891ae5b Move tutorials contracts to src folder 2018-03-01 12:21:08 -08:00
Leonid Logvinov
c90770472e Remove false-positive linter failure because of chai-as-pronmised incorrect types 2018-03-01 12:21:08 -08:00
Leonid Logvinov
45df9de5b5 Assert that the balances don't change if arbitrage fails 2018-03-01 12:21:08 -08:00
Leonid Logvinov
2d0940589e Initial implementation of Arbitrage contract with tests 2018-03-01 12:21:08 -08:00
Fabio Berger
5908f189a7 Fix bug where contract event anchor ids were incorrect 2018-03-01 09:18:46 +01:00
Brandon Millman
17328bce53 Add more globals 2018-02-28 16:39:23 -08:00
Jacob Evans
451a0dacbe Merge pull request #418 from 0xProject/feature/facuet/balance-check
Prevent a single account from draining the faucet
2018-02-28 14:40:17 -08:00
Jacob Evans
a46199e37d Set max to 2 ETH/2 ZRX 2018-02-28 14:25:07 -08:00
Fabio Berger
e25cc301fd Add missing types from website 2018-02-28 17:20:09 +01:00
Leonid Logvinov
5bbb0d1f60 Merge pull request #422 from 0xProject/feature/new-prettier
Upgrade prettier
2018-02-27 22:34:23 -08:00
Leonid Logvinov
a5b8875356 Merge pull request #423 from 0xProject/feature/base-contract
Move BaseContract to its own package
2018-02-27 18:44:23 -08:00
Leonid Logvinov
3e86df311d Add dependencies 2018-02-27 18:34:00 -08:00
Leonid Logvinov
002f9ebde7 Update the README 2018-02-27 18:33:05 -08:00
Leonid Logvinov
72e6e1ce8b Move BaseContract to its own package 2018-02-27 17:51:31 -08:00
Brandon Millman
a3c7af95e1 Add stringified order object into globals 2018-02-27 17:25:42 -08:00
Brandon Millman
0987c9a7cf Write to provided output directory 2018-02-27 17:12:45 -08:00
Fabio Berger
bbd87daf6d Merge pull request #421 from 0xProject/moveOutDocGenerator
Docs Refactor Prepping For Moving To Separate Package
2018-02-27 15:49:58 -08:00
Leonid Logvinov
30e4613d0a Upgrate prettier 2018-02-27 15:08:52 -08:00
Fabio Berger
79593f52b0 remove unused import 2018-02-27 14:50:35 -08:00
Leonid Logvinov
bab8c1eeff Remove only 2018-02-27 14:43:29 -08:00
Leonid Logvinov
8b6cc95c1b Fix a typo 2018-02-27 14:42:49 -08:00
Leonid Logvinov
90236b87de Add PR name 2018-02-27 14:42:49 -08:00
Leonid Logvinov
b6a133cc64 Improve an error message when an inorrect number of constructor params is passed 2018-02-27 14:42:49 -08:00
Leonid Logvinov
7aa070f9ea Merge pull request #413 from 0xProject/feature/ethers-contracts
abi-gen V2 abi and ethers-contracts
2018-02-27 14:41:59 -08:00
Leonid Logvinov
c2ec2291e8 Merge pull request #420 from 0xProject/fix/multiple-return-docs
Fix a bug with displaying solidity functions returning multiple retur…
2018-02-27 14:36:59 -08:00
Fabio Berger
97fcfb7f6c Move more configs into docsInfo and remove logic that does not belong there elsewhere 2018-02-27 14:29:22 -08:00
Leonid Logvinov
ce677fd55a Fix a bug with displaying solidity functions returning multiple return values 2018-02-27 14:23:36 -08:00
Brandon Millman
e48a3edacb Get orderHash via 0x connect 2018-02-27 14:11:45 -08:00
Leonid Logvinov
ce0b92d681 Add ethers-contracts as a dependency 2018-02-27 13:19:17 -08:00
Leonid Logvinov
29c5ba5639 Include types for ethers-contracts 2018-02-27 12:50:58 -08:00
Leonid Logvinov
cdea618457 Fix the version 2018-02-27 12:20:44 -08:00
Leonid Logvinov
425a519f97 Include types for ethers-contracts 2018-02-27 12:18:52 -08:00
Leonid Logvinov
c07d64c6ff Rename idx to i 2018-02-27 12:07:59 -08:00
Leonid Logvinov
c07e3a76bb Remove tslint disable 2018-02-27 12:07:58 -08:00
Leonid Logvinov
8fe844bcc9 Move BaseContract to web3Wrapper 2018-02-27 12:07:58 -08:00
Leonid Logvinov
a0390956a9 Merge ifs 2018-02-27 12:07:06 -08:00
Leonid Logvinov
4f1e6296ca Fix an option description 2018-02-27 12:07:06 -08:00
Leonid Logvinov
0ef372e531 Add link to the docs 2018-02-27 12:07:06 -08:00
Leonid Logvinov
06e2894750 Improve CHANGELOG entry 2018-02-27 12:07:06 -08:00
Leonid Logvinov
10e2d4b99c Remove unused param 2018-02-27 12:07:06 -08:00
Leonid Logvinov
ef40cb9687 Add txData to async calls 2018-02-27 12:07:06 -08:00
Leonid Logvinov
758604fc1a Include ethers types 2018-02-27 12:06:02 -08:00
Leonid Logvinov
34c1134b55 Create ethers-typescript-typings 2018-02-27 12:06:02 -08:00
Leonid Logvinov
a5ef1db0c5 Rewrite templates to decode call data on transactions 2018-02-27 12:06:02 -08:00
Leonid Logvinov
748ed40321 Add to context data 2018-02-27 12:06:02 -08:00
Leonid Logvinov
42063f785e Use as a backend to decode event args 2018-02-27 12:06:02 -08:00
Leonid Logvinov
1657451f37 Add as an option to 2018-02-27 12:06:02 -08:00
Leonid Logvinov
0bb0bff0b3 Change backend for contracts contracts 2018-02-27 12:06:02 -08:00
Leonid Logvinov
747732118c Fix namings 2018-02-27 12:06:02 -08:00
Leonid Logvinov
2aec1501d0 Update template link 2018-02-27 12:06:02 -08:00
Leonid Logvinov
39c6bc1106 Add PR number 2018-02-27 12:06:01 -08:00
Leonid Logvinov
4e451479f8 Fix build 2018-02-27 12:05:46 -08:00
Leonid Logvinov
93b2736d65 Use the same templates as 0x.js 2018-02-27 12:05:46 -08:00
Leonid Logvinov
34274a1042 Pass components to parameterType 2018-02-27 12:05:46 -08:00
Leonid Logvinov
fa822caa62 Apply prettier after generating contracts 2018-02-27 12:05:46 -08:00
Leonid Logvinov
ddc30cc2c0 Add CHANGELOG entry 2018-02-27 12:05:46 -08:00
Leonid Logvinov
9d9cab1711 Fix build by using local events types 2018-02-27 12:05:23 -08:00
Leonid Logvinov
fe8f2d8d89 Add support for ABIv2 to abi-gen 2018-02-27 12:05:23 -08:00
Leonid Logvinov
2d561bc8a0 Allow users to specify the contracts backend in abi-gen 2018-02-27 12:05:23 -08:00
Leonid Logvinov
f5275d3ad7 Add data to TxData 2018-02-27 12:05:23 -08:00
Leonid Logvinov
5fbdf9cfb9 Pass whole txData to estimateGas 2018-02-27 12:05:22 -08:00
Leonid Logvinov
0409c9c1e5 Fix default contract set calculation 2018-02-27 12:05:22 -08:00
Leonid Logvinov
42a5da1df4 Fix default paths 2018-02-27 12:05:22 -08:00
Leonid Logvinov
0b326a8bbe Add web3Wrapper.callAsync and remove web3Wrapper.getContractInstance 2018-02-27 12:05:22 -08:00
Brandon Millman
9c8501a84e Refactor environment factory and promisify newman 2018-02-27 11:51:05 -08:00
Leonid Logvinov
2da7f82171 Merge pull request #415 from 0xProject/fix/unsubscribeAll
Rename _unsubscribeAll to unsubscribeAll
2018-02-27 10:25:52 -08:00
Leonid Logvinov
593474031d Merge branch 'development' into fix/unsubscribeAll 2018-02-27 10:24:36 -08:00
Fabio Berger
fce10548d2 Merge pull request #373 from 0xProject/feature/0x.js/lowercase-addresses
Lowercase addresses in the Public API
2018-02-27 09:58:09 -08:00
Jacob Evans
addca63938 Prevent a single account from draining the faucet 2018-02-26 21:15:11 -08:00
Jacob Evans
6961169f89 Merge branch 'development' into feature/0x.js/lowercase-addresses 2018-02-26 18:47:09 -08:00
Jacob Evans
3d66feb89f Lowercase web3 wrapper addresses
Ensure all of the user account addresses are lower case when returned from web3wrapper
2018-02-26 18:10:27 -08:00
Brandon Millman
bb157eefc6 Add exchange contract address to environment files 2018-02-26 17:13:14 -08:00
Leonid Logvinov
7f8f4df0a0 Rename _unsubscribeAll to unsubscribeAll 2018-02-26 14:38:17 -08:00
Brandon Millman
4b325676f7 Add schema validation to each collection folder and flesh out params 2018-02-26 13:32:57 -08:00
Fabio Berger
ecba95250d Update missed docsJsonRoot variables 2018-02-26 10:09:22 -08:00
Fabio Berger
dd116b3cd6 remove docsJsonRoot from docsInfo 2018-02-26 09:52:08 -08:00
Jacob Evans
eabe96fd19 Check isETHAddressHex before lowercase
Flip the check so assertion happens before lowercase
2018-02-26 09:39:46 -08:00
Fabio Berger
7dd9ce2e32 Remove unused props 2018-02-26 07:57:41 -08:00
Fabio Berger
fffaafe4c9 Merge branch 'development' into moveOutDocGenerator
* development: (36 commits)
  Fix english translations
  Fix footer on mobile
  re-add google analytics code
  Fix Russian translation
  Move all dependencies on @0xproject/types out of devDependencies
  Slight improvement to footer
  Fix a few Korean translations
  Address feedback
  Use source tree hash instead of compile flag
  Fix race condition
  Update CHANGELOG
  Delete artifacts directory
  Add generated contract artifacts to gitignore
  Check dependencies when determining if should be recompiled
  Update CHANGELOG
  Remove unused CHANGELOG entry
  Remove unused import
  Change assert.doesConformToShema interface
  Remove a type assertion
  Publish
  ...
2018-02-25 18:32:12 -08:00
Brandon Millman
0b9646136a Update postman collection to load json schemas into tv4 before every test run 2018-02-23 14:26:24 -08:00
Brandon Millman
55f38b9c35 Add an array of schemaKeys to the globals 2018-02-23 14:25:48 -08:00
Fabio Berger
709fa9e02e Fix english translations 2018-02-23 14:15:53 -08:00
Fabio Berger
f42bdb8bab Fix footer on mobile 2018-02-23 14:15:39 -08:00
Fabio Berger
10aed46062 Merge branch 'development' of github.com:0xProject/0x.js into development
* 'development' of github.com:0xProject/0x.js:
  Update CHANGELOG
  Remove unused CHANGELOG entry
  Remove unused import
  Change assert.doesConformToShema interface
  Remove a type assertion
  Remove type-level validation
  Access property over this
  Add type cast
  Fix tests
  Add entries to the CHANGELOG
  Better validate ZeroExConfig on public networks
2018-02-23 14:15:29 -08:00
Fabio Berger
6e43e89b2d re-add google analytics code 2018-02-23 13:49:24 -08:00
Leonid Logvinov
10c0c0b6d2 Merge pull request #385 from 0xProject/feature/0x_config_validation
Better validate ZeroExConfig on private networks
2018-02-23 13:20:28 -08:00
Brandon Millman
e13924cd2d Remove url from kovan environment json 2018-02-23 11:57:33 -08:00
Brandon Millman
7afe00f06a Use Schema interface from @0xproject/json-schemas 2018-02-23 11:56:50 -08:00
Brandon Millman
87b9caa7dc Fix README typo 2018-02-23 11:47:45 -08:00
Jacob Evans
f689d335c0 Check maker is valid address 2018-02-22 18:43:01 -08:00
Jacob Evans
31f9a848f9 Lowercase public addresses
Normalize the public api addresses to lowercase to prevent an avoidable
error
2018-02-22 18:43:00 -08:00
Fabio Berger
3d2c5d67af Fix Russian translation 2018-02-22 16:32:19 -08:00
Brandon Millman
63f8f469b0 Fix @types/lodash version 2018-02-22 13:54:39 -08:00
Brandon Millman
9929f1acf0 Merge pull request #411 from 0xProject/fix/types/dev-dependencies
Move all dependencies on @0xproject/types out of devDependencies
2018-02-22 13:30:35 -08:00
Brandon Millman
42ecc087cb Implement initial sra-report command line tool 2018-02-22 13:12:44 -08:00
Brandon Millman
93adee36b0 Move all dependencies on @0xproject/types out of devDependencies 2018-02-22 00:35:16 -08:00
Fabio Berger
0e95fd0b9b Slight improvement to footer 2018-02-21 17:40:07 -08:00
Fabio Berger
611ddfeeb8 Fix a few Korean translations 2018-02-21 17:17:09 -08:00
Fabio Berger
dfe2579eeb Merge pull request #410 from 0xProject/translateHomepage
Translate Landing Page
2018-02-21 17:09:33 -08:00
Fabio Berger
66b36f6d8f Begin refactoring out doc generator template 2018-02-21 16:34:14 -08:00
Fabio Berger
1b3a9102f1 Move from storing translations in TS files to JSON files 2018-02-21 14:22:02 -08:00
Fabio Berger
9993a50903 Remove Segment.io 2018-02-21 12:06:53 -08:00
Fabio Berger
c226509be0 Remove unused var 2018-02-21 11:56:10 -08:00
Fabio Berger
ef6f52e722 Remove extenuous defaultProps 2018-02-21 11:54:03 -08:00
Fabio Berger
7d8cad8e3a Make translate required by footer 2018-02-21 11:51:41 -08:00
Fabio Berger
15507d3827 Make translate a required prop of TopBar 2018-02-21 11:49:54 -08:00
Fabio Berger
e2d17d122e Keep topBar and footer language to the one picked by the user 2018-02-21 11:46:16 -08:00
Fabio Berger
0d7bf50581 Re-set language to browser 2018-02-21 10:31:31 -08:00
Fabio Berger
a50618fcb0 Fix rocket.chat key 2018-02-21 10:31:15 -08:00
Fabio Berger
fc2a9a756a Mobile optimize translated landing page 2018-02-21 09:59:09 -08:00
Leonid Logvinov
07721eb99f Improve russian translations 2018-02-20 20:15:36 -08:00
Fabio Berger
13fed15e0c Improve homepage and add translations in chinese, russian, korean and spanish 2018-02-20 19:53:07 -08:00
Fabio Berger
38a308ce5b Move translate to redux 2018-02-20 19:52:28 -08:00
Amir Bandeali
be19316dfb Merge pull request #408 from 0xProject/fix/deployer/checkDependencies
Check dependencies when compiling contracts
2018-02-20 15:21:29 -08:00
Fabio Berger
c4f65681a1 Add translation infra and replace english text with calls to translate 2018-02-20 14:11:19 -08:00
Fabio Berger
f600226aa9 Move tsconfig package to devDeps 2018-02-20 14:10:07 -08:00
Amir Bandeali
67f2864501 Address feedback 2018-02-20 13:42:35 -08:00
Amir Bandeali
c1bbcaba73 Use source tree hash instead of compile flag 2018-02-20 13:19:12 -08:00
Amir Bandeali
6685cb3fba Fix race condition 2018-02-20 13:19:12 -08:00
Amir Bandeali
d770e46208 Update CHANGELOG 2018-02-20 13:19:12 -08:00
Amir Bandeali
665636e642 Delete artifacts directory 2018-02-20 13:19:12 -08:00
Amir Bandeali
0028e71ab2 Add generated contract artifacts to gitignore 2018-02-20 13:19:12 -08:00
Amir Bandeali
7fb66bf71a Check dependencies when determining if should be recompiled 2018-02-20 13:19:12 -08:00
Leonid Logvinov
3120d854f8 Update CHANGELOG 2018-02-20 12:09:39 -08:00
Leonid Logvinov
c85c14210f Remove unused CHANGELOG entry 2018-02-20 12:03:33 -08:00
Leonid Logvinov
0fb81a11a8 Remove unused import 2018-02-20 12:03:21 -08:00
Leonid Logvinov
7b67afae06 Change assert.doesConformToShema interface 2018-02-20 11:39:36 -08:00
Leonid Logvinov
fe9e319a61 Remove a type assertion 2018-02-20 11:34:29 -08:00
Leonid
097fc477a2 Merge pull request #401 from 0xProject/feature/web3-abi-v2-types
Add types for ABIv2
2018-02-20 11:55:29 -07:00
Leonid
f60b00d116 Merge branch 'development' into feature/web3-abi-v2-types 2018-02-20 11:55:10 -07:00
Brandon Millman
3a36e0621f Publish
- @0xproject/connect@0.6.1
2018-02-16 22:54:28 -07:00
Brandon Millman
b482473e23 Updated CHANGELOGs 2018-02-16 22:51:29 -07:00
Brandon Millman
9a5fd3f784 Merge pull request #407 from 0xProject/fix/connect/empty-response
Do not JSON parse empty reponse
2018-02-16 21:50:39 -08:00
Brandon Millman
b703ccde9b Do not JSON parse empty reponse 2018-02-16 22:43:37 -07:00
Brandon Millman
80eca30725 Fix incorrect comment on WebSocketOrderbookChannel constructor 2018-02-16 10:11:40 -07:00
Brandon Millman
7dbc14dc43 Fix broken postpublish script in connect 2018-02-16 10:06:47 -07:00
Brandon Millman
b3f9010eb5 Updated top level @0xproject/utils dependency 2018-02-16 10:00:39 -07:00
Brandon Millman
f62d72e548 Publish
- 0x.js@0.32.4
 - @0xproject/abi-gen@0.2.3
 - @0xproject/assert@0.0.20
 - @0xproject/connect@0.6.0
 - contracts@2.1.13
 - @0xproject/deployer@0.1.0
 - @0xproject/dev-utils@0.1.0
 - @0xproject/json-schemas@0.7.12
 - @0xproject/subproviders@0.5.0
 - @0xproject/testnet-faucets@1.0.14
 - @0xproject/types@0.2.3
 - @0xproject/utils@0.3.4
 - web3-typescript-typings@0.9.11
 - @0xproject/web3-wrapper@0.1.14
 - @0xproject/website@0.0.16
2018-02-16 09:53:35 -07:00
Brandon Millman
d12352972e Updated CHANGELOGs 2018-02-16 09:49:02 -07:00
Brandon Millman
03d3d84db3 Merge pull request #406 from 0xProject/feature/connect/heartbeat
Add configurable heartbeat to WebSocketOrderbookChannel
2018-02-16 08:10:00 -08:00
Brandon Millman
6d818c25c7 Add an enforced minimum for the heartbeat interval 2018-02-16 08:48:15 -07:00
Fabio Berger
6a8f624e75 Add Rinkeby network to smart contract docs 2018-02-16 08:47:27 -07:00
Fabio Berger
0801b1ddf9 Updated CHANGELOG 2018-02-16 08:47:10 -07:00
Fabio Berger
4fd64ca492 Merge pull request #405 from 0xProject/refactor/docs-redesign
Re-design Wiki + Doc pages
2018-02-16 07:45:55 -08:00
Brandon Millman
c4bcf24640 Add configurable heartbeat to WebSocketOrderbookChannel 2018-02-16 01:20:27 -07:00
Fabio Berger
0114fc9608 remove hard-coded color 2018-02-16 00:12:27 -07:00
Fabio Berger
8db098eaec Remove section links until they go somewhere 2018-02-16 00:09:10 -07:00
Fabio Berger
05c3a66543 Add more padding on top of section title 2018-02-16 00:08:57 -07:00
Fabio Berger
9349752baa Add hack comment explaining param count short-cut 2018-02-15 23:56:19 -07:00
Fabio Berger
974fab7284 replace repeated conditionals with variable 2018-02-15 23:54:36 -07:00
Fabio Berger
8a52ffe7b7 Remove unneeded props 2018-02-15 23:52:49 -07:00
Fabio Berger
c6ecdbd86e use const over hard-coding 2018-02-15 23:52:40 -07:00
Fabio Berger
03797545f9 uncomment dev logic 2018-02-15 23:51:10 -07:00
Fabio Berger
2778f96483 Re-design docs pages 2018-02-15 21:51:49 -07:00
Fabio Berger
6cd4e7a17e Add icons for all doc pages 2018-02-15 21:51:37 -07:00
Fabio Berger
5c91b4bfc6 Re-designed Wiki and half-redesigned docs pages 2018-02-15 20:12:47 -07:00
Fabio Berger
e2b51c5dc4 Merge branch 'development' of github.com:0xProject/0x.js into development
* 'development' of github.com:0xProject/0x.js: (24 commits)
  Rename variables
  Update CHANGELOG
  Add npm config for contracts list
  Run prettier
  Fix checks, add contract list to compile script in package.json
  Add contracts to compiler options
  Add missing public types from connect docs
  Change imports order
  Change default page params in connect to page 1 and perPage 100
  Add docs staging to 0x.js package
  Fix a typo
  Add an assertion
  Add PR numbers
  Fix entry points
  Add tests for dev-utils package
  Move subproviders from dev-utils to subproviders
  Add missing CHANGELOG entry
  Add support for intersection types in docs
  Add stagedocs script to connect package
  web3 typings fix - web3.net.peerCount returns number
  ...
2018-02-15 20:09:53 -07:00
Fabio Berger
b610b7c192 Prettier fixes 2018-02-15 20:09:24 -07:00
Amir Bandeali
b75fdd6b66 Merge pull request #400 from 0xProject/feature/deployer/selectContracts
Pass in contracts to compile in deployer
2018-02-15 12:27:43 -08:00
Amir Bandeali
060b02eaed Rename variables 2018-02-15 10:20:03 -08:00
Amir Bandeali
003e5da00d Update CHANGELOG 2018-02-15 10:13:06 -08:00
Amir Bandeali
02951d4813 Add npm config for contracts list 2018-02-15 10:13:06 -08:00
Amir Bandeali
db52ed9941 Run prettier 2018-02-15 10:13:06 -08:00
Amir Bandeali
af333b1838 Fix checks, add contract list to compile script in package.json 2018-02-15 10:13:06 -08:00
Amir Bandeali
f62762bd0e Add contracts to compiler options 2018-02-15 10:13:06 -08:00
Brandon Millman
4b67352278 Add missing public types from connect docs 2018-02-15 00:18:48 -08:00
Leonid Logvinov
76afb6b116 Add types for ABIv2 2018-02-14 15:52:06 -08:00
Leonid Logvinov
db52e87740 Remove type-level validation 2018-02-14 15:25:30 -08:00
Leonid
e22788abe8 Merge pull request #392 from 0xProject/feature/subproviders_move
Move subproviders from dev-utils to subproviders package and add tests for dev-utils
2018-02-15 00:13:12 +01:00
Leonid Logvinov
bbfbfcda85 Change imports order 2018-02-14 15:03:52 -08:00
Brandon Millman
0dfb36e675 Merge pull request #398 from 0xProject/feature/website/stage-documentation
Add support for intersection types and staged connect documentation
2018-02-14 14:45:33 -08:00
Brandon Millman
95a9d77301 Change default page params in connect to page 1 and perPage 100 2018-02-14 14:43:43 -08:00
Leonid
ab1f070901 Merge pull request #386 from 0xProject/fix/windows_install
Use system-independent rm command
2018-02-14 23:38:48 +01:00
Brandon Millman
8201d5d1f8 Add docs staging to 0x.js package 2018-02-14 14:35:31 -08:00
Leonid Logvinov
8704c34a0f Fix a typo 2018-02-14 11:54:20 -08:00
Leonid Logvinov
599adaf1bf Add an assertion 2018-02-14 11:53:40 -08:00
Leonid Logvinov
778e399438 Add PR numbers 2018-02-14 11:51:26 -08:00
Leonid Logvinov
485ae4d997 Fix entry points 2018-02-14 11:51:26 -08:00
Leonid Logvinov
8cd2ba3ad6 Add tests for dev-utils package 2018-02-14 11:51:26 -08:00
Leonid Logvinov
dbad7d1869 Move subproviders from dev-utils to subproviders 2018-02-14 11:51:26 -08:00
Leonid Logvinov
4d482438f5 Access property over this 2018-02-14 11:24:42 -08:00
Leonid Logvinov
b53a1b51d6 Add type cast 2018-02-14 11:22:37 -08:00
Leonid Logvinov
49375c73d4 Fix tests 2018-02-14 11:22:36 -08:00
Leonid Logvinov
98b78c56c5 Add entries to the CHANGELOG 2018-02-14 11:22:36 -08:00
Leonid Logvinov
f3e6ef0fa9 Better validate ZeroExConfig on public networks 2018-02-14 11:22:36 -08:00
Leonid Logvinov
18e1c2dea5 Add missing CHANGELOG entry 2018-02-14 10:23:20 -08:00
Leonid
91ae01e484 Merge pull request #397 from gagarin55/typings-fix
web3-typescript-typings fix - web3.net.peerCount returns number
2018-02-14 19:19:48 +01:00
Brandon Millman
2897b72967 Add support for intersection types in docs 2018-02-14 10:16:00 -08:00
Brandon Millman
3510985cf4 Add stagedocs script to connect package 2018-02-14 10:15:53 -08:00
gagarin55
5927e65045 web3 typings fix - web3.net.peerCount returns number 2018-02-14 16:18:49 +03:00
Brandon Millman
13e2041d50 Merge pull request #394 from 0xProject/feature/connect/add-pagination
Add page options to relevant HttpClient methods
2018-02-13 17:30:46 -08:00
Brandon Millman
4bf530ed9e Fix error in paged request schema 2018-02-13 16:55:48 -08:00
Brandon Millman
4c797405ad Addressed PR feedback 2018-02-13 15:50:28 -08:00
Brandon Millman
713c922e35 Add page options to relevant HttpClient methods 2018-02-13 14:15:54 -08:00
Leonid
7f1e789264 Merge branch 'development' into fix/windows_install 2018-02-12 15:01:24 +01:00
Fabio Berger
07d00cc515 Publish
- 0x.js@0.32.3
 - @0xproject/abi-gen@0.2.2
 - @0xproject/assert@0.0.19
 - @0xproject/connect@0.5.8
 - contracts@2.1.12
 - @0xproject/deployer@0.0.9
 - @0xproject/dev-utils@0.0.13
 - @0xproject/json-schemas@0.7.11
 - @0xproject/monorepo-scripts@0.1.11
 - @0xproject/subproviders@0.4.2
 - @0xproject/testnet-faucets@1.0.13
 - @0xproject/tslint-config@0.4.9
 - @0xproject/types@0.2.2
 - @0xproject/utils@0.3.3
 - @0xproject/web3-wrapper@0.1.13
 - @0xproject/website@0.0.15
2018-02-09 18:36:51 -08:00
Fabio Berger
cd55e346af Move tslint and tslint-eslint-rules to dev deps since this package needs them to function 2018-02-09 18:12:29 -08:00
Fabio Berger
6746428fb1 Update utils in top-level package.json 2018-02-09 16:29:09 -08:00
Fabio Berger
634032d5be Publish
- 0x.js@0.32.2
 - @0xproject/abi-gen@0.2.1
 - @0xproject/assert@0.0.18
 - chai-as-promised-typescript-typings@0.0.9
 - chai-typescript-typings@0.0.3
 - @0xproject/connect@0.5.7
 - contracts@2.1.11
 - @0xproject/deployer@0.0.8
 - @0xproject/dev-utils@0.0.12
 - @0xproject/json-schemas@0.7.10
 - @0xproject/monorepo-scripts@0.1.10
 - @0xproject/subproviders@0.4.1
 - @0xproject/testnet-faucets@1.0.12
 - @0xproject/tslint-config@0.4.8
 - @0xproject/types@0.2.1
 - @0xproject/utils@0.3.2
 - web3-typescript-typings@0.9.10
 - @0xproject/web3-wrapper@0.1.12
 - @0xproject/website@0.0.14
2018-02-09 16:19:43 -08:00
Leonid Logvinov
ba57c34adb Use system-independent rm command 2018-02-09 11:49:01 +01:00
808 changed files with 49223 additions and 19706 deletions

View File

@@ -27,6 +27,15 @@ jobs:
key: repo-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo
test-installation:
docker:
- image: circleci/node:6.12
working_directory: ~/repo
steps:
- restore_cache:
keys:
- repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn test:installation
test-0xjs:
docker:
- image: circleci/node:6.12
@@ -40,6 +49,10 @@ jobs:
command: npm run testrpc -- --db testrpc_snapshot
background: true
- run: yarn lerna:run --scope 0x.js test:circleci
- save_cache:
key: coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/0x.js/coverage/lcov.info
test-contracts:
docker:
- image: circleci/node:6.12
@@ -53,6 +66,10 @@ jobs:
command: npm run testrpc -- --db testrpc_snapshot
background: true
- run: yarn lerna:run --scope contracts test:circleci
- save_cache:
key: coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/contracts/coverage/lcov.info
test-deployer:
docker:
- image: circleci/node:6.12
@@ -66,6 +83,10 @@ jobs:
command: npm run testrpc -- --db testrpc_snapshot
background: true
- run: yarn lerna:run --scope @0xproject/deployer test:circleci
- save_cache:
key: coverage-deployer-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/deployer/coverage/lcov.info
test-rest:
docker:
- image: circleci/node:6.12
@@ -79,6 +100,34 @@ jobs:
command: npm run testrpc -- --db testrpc_snapshot
background: true
- run: yarn lerna:run --ignore contracts --ignore 0x.js --ignore @0xproject/deployer test:circleci
- save_cache:
key: coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/assert/coverage/lcov.info
- save_cache:
key: coverage-connect-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/connect/coverage/lcov.info
- save_cache:
key: coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/dev-utils/coverage/lcov.info
- save_cache:
key: coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/json-schemas/coverage/lcov.info
- save_cache:
key: coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/subproviders/coverage/lcov.info
- save_cache:
key: coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/sol-cov/coverage/lcov.info
- save_cache:
key: coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }}
paths:
- ~/repo/packages/metacoin/coverage/lcov.info
lint:
working_directory: ~/repo
docker:
@@ -97,11 +146,53 @@ jobs:
keys:
- repo-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn prettier:ci
submit-coverage:
docker:
- image: circleci/node:6.12
working_directory: ~/repo
steps:
- restore_cache:
keys:
- repo-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-contracts-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-assert-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-connect-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-dev-utils-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-json-schemas-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-subproviders-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-sol-cov-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-deployer-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-0xjs-{{ .Environment.CIRCLE_SHA1 }}
- restore_cache:
keys:
- coverage-metacoin-{{ .Environment.CIRCLE_SHA1 }}
- run: yarn report_coverage
workflows:
version: 2
main:
jobs:
- build
- test-installation:
requires:
- build
- test-0xjs:
requires:
- build
@@ -120,3 +211,9 @@ workflows:
- lint:
requires:
- build
- submit-coverage:
requires:
- test-0xjs
- test-deployer
- test-rest
- test-contracts

18
.gitignore vendored
View File

@@ -68,6 +68,24 @@ generated_docs/
TODO.md
packages/website/public/bundle*
packages/react-docs/example/public/bundle*
# generated binaries
bin/
# generated contract artifacts
packages/sol-cov/test/fixtures/artifacts
packages/metacoin/artifacts
packages/0x.js/test/artifacts
packages/migrations/src/artifacts
# generated contract wrappers
packages/0x.js/src/contract_wrappers/generated/
packages/contracts/src/contract_wrappers/generated/
packages/metacoin/src/contract_wrappers
# solc-bin in deployer
packages/deployer/solc_bin/
# Monorepo scripts
packages/*/scripts/

View File

@@ -1,5 +1,7 @@
lib
generated
.nyc_output
/packages/contracts/build/contracts
/packages/contracts/src/artifacts
/packages/metacoin/artifacts
/packages/migrations/src/artifacts
package.json
scripts/postpublish_utils.js

View File

@@ -8,9 +8,9 @@ If you'd like to contribute to 0x protocol, please fork the repo, fix, commit an
We encourage a “PR early” approach so create the PR as early as possible even without the fix/feature ready, so that devs and other contributors know you have picked up the issue. These early PRs should indicate an 'in progress' status by adding the '[WIP]' prefix to the PR title. Please make sure your contributions adhere to our coding guidelines:
* Pull requests adding features or refactoring should be opened against the `development` branch
* Pull requests fixing bugs in the latest release version should be opened again the `master` branch
* Write [good commit messages](https://chris.beams.io/posts/git-commit/)
* Pull requests adding features or refactoring should be opened against the `development` branch
* Pull requests fixing bugs in the latest release version should be opened again the `master` branch
* Write [good commit messages](https://chris.beams.io/posts/git-commit/)
### Code quality
@@ -23,7 +23,7 @@ If the sub-package you are modifying has a `CHANGELOG.md` file, make sure to add
### Styleguide
We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x.js/tree/development/packages/tslint-config) to keep our code style consistent.
We use [TSLint](https://palantir.github.io/tslint/) with [custom configs](https://github.com/0xProject/0x-monorepo/tree/development/packages/tslint-config) to keep our code style consistent.
To lint your code just run: `yarn lint`
@@ -31,10 +31,10 @@ We also use [Prettier](https://prettier.io/) to auto-format our code. Be sure to
If using the Atom text editor, we recommend you install the following packages:
* [atom-typescript](https://atom.io/packages/atom-typescript)
* [linter-tslint](https://atom.io/packages/linter-tslint)
* [prettier-atom](https://atom.io/packages/prettier-atom)
* [language-ethereum](https://atom.io/packages/language-ethereum)
* [atom-typescript](https://atom.io/packages/atom-typescript)
* [linter-tslint](https://atom.io/packages/linter-tslint)
* [prettier-atom](https://atom.io/packages/prettier-atom)
* [language-ethereum](https://atom.io/packages/language-ethereum)
Our CI will also run TSLint and Prettier as a part of the test run when you submit your PR. Make sure that the CI tests pass for your contribution.

View File

@@ -24,9 +24,9 @@
<!--- 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)
* [ ] 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:
@@ -34,9 +34,8 @@
<!--- 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.
* [ ] Added new entries to the relevant CHANGELOGs.
* [ ] Updated the new versions of the changed packages in the relevant CHANGELOGs.
* [ ] Labeled this PR with the 'WIP' label if it is a work in progress.
* [ ] Labeled this PR with the labels corresponding to the changed package.
* [ ] Change requires a change to the documentation.
* [ ] Added tests to cover my changes.
* [ ] Added new entries to the relevant CHANGELOG.jsons.
* [ ] Labeled this PR with the 'WIP' label if it is a work in progress.
* [ ] Labeled this PR with the labels corresponding to the changed package.

108
README.md
View File

@@ -4,60 +4,76 @@
[0x][website-url] is an open protocol that facilitates trustless, low friction exchange of Ethereum-based assets. A full description of the protocol may be found in our [whitepaper][whitepaper-url].
This repository contains all the 0x developer tools written in TypeScript. Our hope is that these tools make it easy to build Relayers and other DApps that use the 0x protocol.
This repository is a monorepo including the 0x protocol smart contracts and numerous developer tools. Each public sub-package is independently published to NPM.
[website-url]: https://0xproject.com/
[whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf
[![CircleCI](https://circleci.com/gh/0xProject/0x.js.svg?style=svg&circle-token=61bf7cd8c9b4e11b132089dfcffdd1be277d1e0c)](https://circleci.com/gh/0xProject/0x.js)
[![Coverage Status](https://coveralls.io/repos/github/0xProject/0x.js/badge.svg?branch=master&t=fp0cXD)](https://coveralls.io/github/0xProject/0x.js?branch=master)
[![CircleCI](https://circleci.com/gh/0xProject/0x-monorepo.svg?style=svg&circle-token=61bf7cd8c9b4e11b132089dfcffdd1be277d1e0c)](https://circleci.com/gh/0xProject/0x-monorepo)
[![Coverage Status](https://coveralls.io/repos/github/0xProject/0x-monorepo/badge.svg?branch=development)](https://coveralls.io/github/0xProject/0x-monorepo?branch=development)
[![Discord](https://img.shields.io/badge/chat-rocket.chat-yellow.svg?style=flat)](https://chat.0xproject.com)
[![Join the chat at https://gitter.im/0xProject/Lobby](https://badges.gitter.im/0xProject/Lobby.svg)](https://gitter.im/0xProject/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
[![Greenkeeper badge](https://badges.greenkeeper.io/0xProject/0x.js.svg?token=7c22e5c72acf39d3ead8d29c5d9bb38f9096df3e643024dcedd53ab732847be1&ts=1496426342666)](https://greenkeeper.io/)
### Published Packages
| Package | Version | Description |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| [`0x.js`](/packages/0x.js) | [![npm](https://img.shields.io/npm/v/0x.js.svg)](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol |
| [`chai-as-promised-typescript-typings`](/packages/chai-as-promised-typescript-typings) | [![npm](https://img.shields.io/npm/v/chai-as-promised-typescript-typings.svg)](https://www.npmjs.com/package/chai-as-promised-typescript-typings) | Chai as promised typescript typings |
| [`chai-typescript-typings`](/packages/chai-typescript-typings) | [![npm](https://img.shields.io/npm/v/chai-typescript-typings.svg)](https://www.npmjs.com/package/chai-typescript-typings) | Chai typescript typings |
| [`web3-typescript-typings`](/packages/web3-typescript-typings) | [![npm](https://img.shields.io/npm/v/web3-typescript-typings.svg)](https://www.npmjs.com/package/web3-typescript-typings) | Web3 typescript typings |
| [`@0xproject/abi-gen`](/packages/abi-gen) | [![npm](https://img.shields.io/npm/v/@0xproject/abi-gen.svg)](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
| [`@0xproject/assert`](/packages/assert) | [![npm](https://img.shields.io/npm/v/@0xproject/assert.svg)](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
| [`@0xproject/connect`](/packages/connect) | [![npm](https://img.shields.io/npm/v/@0xproject/connect.svg)](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the standard relayer api |
| [`@0xproject/dev-utils`](/packages/dev-utils) | [![npm](https://img.shields.io/npm/v/@0xproject/dev-utils.svg)](https://www.npmjs.com/package/@0xproject/dev-utils) | Dev utils to be shared across 0x projects and packages |
| [`@0xproject/json-schemas`](/packages/json-schemas) | [![npm](https://img.shields.io/npm/v/@0xproject/json-schemas.svg)](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
| [`@0xproject/subproviders`](/packages/subproviders) | [![npm](https://img.shields.io/npm/v/@0xproject/subproviders.svg)](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
| [`@0xproject/tslint-config`](/packages/tslint-config) | [![npm](https://img.shields.io/npm/v/@0xproject/tslint-config.svg)](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
| [`@0xproject/types`](/packages/types) | [![npm](https://img.shields.io/npm/v/@0xproject/types.svg)](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
| [`@0xproject/utils`](/packages/utils) | [![npm](https://img.shields.io/npm/v/@0xproject/utils.svg)](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities |
| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [![npm](https://img.shields.io/npm/v/@0xproject/web3-wrapper.svg)](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper |
| Package | Version | Description |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| [`0x.js`](/packages/0x.js) | [![npm](https://img.shields.io/npm/v/0x.js.svg)](https://www.npmjs.com/package/0x.js) | A Javascript library for interacting with the 0x protocol |
| [`@0xproject/abi-gen`](/packages/abi-gen) | [![npm](https://img.shields.io/npm/v/@0xproject/abi-gen.svg)](https://www.npmjs.com/package/@0xproject/abi-gen) | Tool to generate TS wrappers from smart contract ABIs |
| [`@0xproject/assert`](/packages/assert) | [![npm](https://img.shields.io/npm/v/@0xproject/assert.svg)](https://www.npmjs.com/package/@0xproject/assert) | Type and schema assertions used by our packages |
| [`@0xproject/base-contract`](/packages/base-contract) | [![npm](https://img.shields.io/npm/v/@0xproject/base-contract.svg)](https://www.npmjs.com/package/@0xproject/base-contract) | BaseContract used by auto-generated `abi-gen` wrapper contracts |
| [`@0xproject/connect`](/packages/connect) | [![npm](https://img.shields.io/npm/v/@0xproject/connect.svg)](https://www.npmjs.com/package/@0xproject/connect) | A Javascript library for interacting with the Standard Relayer API |
| [`@0xproject/deployer`](/packages/deployer) | [![npm](https://img.shields.io/npm/v/@0xproject/deployer.svg)](https://www.npmjs.com/package/@0xproject/deployer) | Solidity project compiler and deployer framework |
| [`@0xproject/dev-utils`](/packages/dev-utils) | [![npm](https://img.shields.io/npm/v/@0xproject/dev-utils.svg)](https://www.npmjs.com/package/@0xproject/dev-utils) | Dev utils to be shared across 0x projects and packages |
| [`@0xproject/json-schemas`](/packages/json-schemas) | [![npm](https://img.shields.io/npm/v/@0xproject/json-schemas.svg)](https://www.npmjs.com/package/@0xproject/json-schemas) | 0x-related json schemas |
| [`@0xproject/monorepo-scripts`](/packages/monorepo-scripts) | [![npm](https://img.shields.io/npm/v/@0xproject/monorepo-scripts.svg)](https://www.npmjs.com/package/@0xproject/monorepo-scripts) | Monorepo scripts |
| [`@0xproject/react-docs`](/packages/react-docs) | [![npm](https://img.shields.io/npm/v/@0xproject/react-docs.svg)](https://www.npmjs.com/package/@0xproject/react-docs) | React documentation component for rendering TypeDoc & Doxity generated JSON |
| [`@0xproject/react-shared`](/packages/react-shared) | [![npm](https://img.shields.io/npm/v/@0xproject/react-shared.svg)](https://www.npmjs.com/package/@0xproject/react-shared) | 0x shared react components |
| [`@0xproject/sra-report`](/packages/sra-report) | [![npm](https://img.shields.io/npm/v/@0xproject/sra-report.svg)](https://www.npmjs.com/package/@0xproject/sra-report) | Generate reports for standard relayer API compliance |
| [`@0xproject/sol-cov`](/packages/sol-cov) | [![npm](https://img.shields.io/npm/v/@0xproject/sol-cov.svg)](https://www.npmjs.com/package/@0xproject/sol-cov) | Solidity test coverage tool |
| [`@0xproject/subproviders`](/packages/subproviders) | [![npm](https://img.shields.io/npm/v/@0xproject/subproviders.svg)](https://www.npmjs.com/package/@0xproject/subproviders) | Useful web3 subproviders (e.g LedgerSubprovider) |
| [`@0xproject/tslint-config`](/packages/tslint-config) | [![npm](https://img.shields.io/npm/v/@0xproject/tslint-config.svg)](https://www.npmjs.com/package/@0xproject/tslint-config) | Custom 0x development TSLint rules |
| [`@0xproject/types`](/packages/types) | [![npm](https://img.shields.io/npm/v/@0xproject/types.svg)](https://www.npmjs.com/package/@0xproject/types) | Shared type declarations |
| [`@0xproject/typescript-typings`](/packages/typescript-typings) | [![npm](https://img.shields.io/npm/v/@0xproject/typescript-typings.svg)](https://www.npmjs.com/package/@0xproject/typescript-typings) | Repository of types for external packages |
| [`@0xproject/utils`](/packages/utils) | [![npm](https://img.shields.io/npm/v/@0xproject/utils.svg)](https://www.npmjs.com/package/@0xproject/utils) | Shared utilities |
| [`@0xproject/web3-wrapper`](/packages/web3-wrapper) | [![npm](https://img.shields.io/npm/v/@0xproject/web3-wrapper.svg)](https://www.npmjs.com/package/@0xproject/web3-wrapper) | Web3 wrapper |
### Private Packages
| Package | Description |
| ----------------------------------------------------------- | ---------------------------------------------------------------- |
| [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests |
| [`@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 |
| Package | Description |
| --------------------------------------------------------------- | ---------------------------------------------------------------- |
| [`@0xproject/contracts`](/packages/contracts) | 0x solidity smart contracts & tests |
| [`@0xproject/react-docs-example`](/packages/react-docs-example) | Example documentation site created with `@0xproject/react-docs` |
| [`@0xproject/testnet-faucets`](/packages/testnet-faucets) | A faucet micro-service that dispenses test ERC20 tokens or Ether |
| [`@0xproject/website`](/packages/website) | 0x website & Portal DApp |
## Usage
Dedicated documentation pages:
* [0x.js Library](https://0xproject.com/docs/0xjs)
* [0x Connect](https://0xproject.com/docs/connect)
* [Smart contracts](https://0xproject.com/docs/contracts)
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
* [0x.js Library](https://0xproject.com/docs/0xjs)
* [0x Connect](https://0xproject.com/docs/connect)
* [Smart contracts](https://0xproject.com/docs/contracts)
* [Subproviders](https://0xproject.com/docs/subproviders)
* [Deployer](https://0xproject.com/docs/deployer)
* [Web3-wrapper](https://0xproject.com/docs/web3-wrapper)
* [JSON-schemas](https://0xproject.com/docs/json-schemas)
* [Sol-cov](https://0xproject.com/docs/sol-cov)
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
Most of the packages require additional typings for external dependencies.
You can include those by prepending @0xproject/typescript-typings package to your [`typeRoots`](http://www.typescriptlang.org/docs/handbook/tsconfig-json.html) config.
```json
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
```
## Contributing
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
Please read our [contribution guidelines](./CONTRIBUTING.md) before getting started.
#### Read our [contribution guidelines](./CONTRIBUTING.md).
### Install dependencies
@@ -75,13 +91,17 @@ yarn install
### Build
Build all packages
Build all packages. You need to do this before working on any given package. Although these packages
as independent, when run from within the monorepo, they are internally symlinked, to make development
easier. You can change several packages and run the changes without publishing them first to NPM. When
running `rebuild`, Lerna will figure out the dependency order of all the packages, and build them in
this order.
```bash
yarn lerna:run build
yarn lerna:rebuild
```
Continuously rebuild on exchange
Or continuously rebuild on change:
```bash
yarn dev
@@ -97,24 +117,6 @@ yarn lerna:run lint
### Run Tests
Before running the tests, you will need to spin up a [TestRPC](https://www.npmjs.com/package/ethereumjs-testrpc) instance and deploy all the 0x smart contracts.
In a separate terminal, start TestRPC (a convenience command is provided as part of this repo)
```bash
yarn testrpc
```
Then in your main terminal run
```
cd packages/contracts
yarn migrate
cd ..
```
And finally from the root project directory run
```bash
yarn lerna:run test
yarn lerna:test
```

View File

@@ -1,6 +1,11 @@
{
"lerna": "2.5.1",
"packages": ["packages/*"],
"commands": {
"publish": {
"allowBranch": "development"
}
},
"version": "independent",
"commands": {
"publish": {

View File

@@ -1,27 +1,38 @@
{
"private": true,
"name": "0x.js",
"workspaces": ["packages/*"],
"name": "0x-monorepo",
"workspaces": [
"packages/*"
],
"scripts": {
"dev": "lerna run --parallel build:watch",
"testrpc": "testrpc -p 8545 --networkId 50 -m \"${npm_package_config_mnemonic}\"",
"prettier": "prettier --write '**/*.{ts,tsx,json,md}' --config .prettierrc",
"prettier:ci": "prettier --list-different '**/*.{ts,tsx,json,md}' --config .prettierrc",
"report_coverage": "lcov-result-merger 'packages/*/coverage/lcov.info' | coveralls",
"test:installation": "node ./packages/monorepo-scripts/lib/test_installation.js",
"lerna:install": "yarn install",
"lerna:run": "lerna run",
"lerna:rebuild": "lerna run clean; lerna run build;",
"lerna:publish":
"yarn install; lerna run clean; lerna run build; lerna publish --registry=https://registry.npmjs.org/"
"lerna:test": "lerna run test",
"lerna:clean": "lerna run clean",
"lerna:build": "lerna run build",
"lerna:rebuild": "run-s lerna:clean lerna:build",
"lerna:publish": "run-s lerna:install lerna:rebuild script:publish",
"lerna:publish:dry": "run-s lerna:install lerna:rebuild script:publish:dry",
"lerna:stage_docs": "lerna run docs:stage",
"script:publish": "node ./packages/monorepo-scripts/lib/publish.js",
"script:publish:dry": "IS_DRY_RUN=true yarn script:publish"
},
"config": {
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
},
"devDependencies": {
"@0xproject/utils": "^0.3.1",
"async-child-process": "^1.1.1",
"coveralls": "^3.0.0",
"ethereumjs-testrpc": "^6.0.3",
"lcov-result-merger": "^2.0.0",
"lerna": "^2.5.1",
"prettier": "1.9.2",
"publish-release": "0xproject/publish-release",
"semver-sort": "^0.0.4"
"npm-run-all": "^4.1.2",
"prettier": "^1.11.1"
}
}

View File

@@ -8,3 +8,4 @@ test/
/contract_templates/
/generated_docs/
/scripts/
/lib/src/monorepo_scripts/

View File

@@ -0,0 +1,995 @@
[
{
"version": "0.36.1",
"changes": [
{
"note": "Internal changes and refactoring"
},
{
"note": "Fix redundant expired order removal bug",
"pr": 527
}
],
"timestamp": 1524044013
},
{
"version": "0.36.0",
"changes": [
{
"note": "Moved Web3.Provider to `@0xproject/types:Provider`",
"pr": 501
},
{
"note":
"Add `zeroEx.exchange.getOrderStateAsync` to allow obtaining current OrderState for a signedOrder",
"pr": 510
}
],
"timestamp": 1523462196
},
{
"version": "0.35.0",
"changes": [
{
"note":
"Removed `ZeroExError.TransactionMiningTimeout` and moved it to '@0xproject/web3-wrapper' `Web3WrapperErrors.TransactionMiningTimeout`",
"pr": 485
}
],
"timestamp": 1522673609
},
{
"version": "0.34.0",
"changes": [
{
"note":
"Fix the bug causing `zeroEx.exchange.fillOrdersUpToAsync` validation to fail if there were some extra orders passed",
"pr": 470
},
{
"note": "Remove automatic instantiation of `zeroEx.orderStateWatcher`",
"pr": 488
},
{
"note": "Add `zeroEx.createOrderStateWatcher` to allow creating arbitrary number of OrderStateWatchers",
"pr": 488
},
{
"note":
"Added `stateLayer` setting to `OrderStateWatcherConfig` so OrderStateWatcher can be set to monitor different blockchain state layers",
"pr": 488
}
],
"timestamp": 1522658513
},
{
"version": "0.33.2",
"changes": [
{
"note": "Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package",
"pr": 452
},
{
"note": "Consolidate `Order`, `SignedOrder`, and `ECSignature` into the `@0xproject/types` package",
"pr": 456
}
],
"timestamp": 1521298800
},
{
"version": "0.33.1",
"changes": [
{
"note": "Add missing EthersJs typescript typings as dependency"
}
],
"timestamp": 1520434800
},
{
"version": "0.33.0",
"changes": [
{
"note": "Validate and lowercase all addresses in public methods",
"pr": 373
},
{
"note": "Improve validation to force passing contract addresses on private networks",
"pr": 385
},
{
"note": "Change `LogErrorContractEventArgs.errorId` type from `BigNumber` to `number`",
"pr": 413
},
{
"note": "Rename all public `_unsubscribeAll` methods to `unsubscribeAll`",
"pr": 415
},
{
"note": "Move web3 typings from devDep to dep since cannot use this package without it",
"pr": 429
}
],
"timestamp": 1520089200
},
{
"version": "0.32.2",
"changes": [
{
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
"pr": 389
}
],
"timestamp": 1518102000
},
{
"version": "0.32.1",
"changes": [
{
"note": "Reorganized `BlockParamLiteral` export into `@0xproject/types` package",
"pr": 355
},
{
"note": "Now using `abi-gen` package to generate ContractEventArgs types",
"pr": 371
}
],
"timestamp": 1517929200
},
{
"version": "0.32.0",
"changes": [
{
"note": "Add `zeroEx.etherToken.getContractAddressIfExists`",
"pr": 350
},
{
"note":
"Fixed the bug causing order watcher to throw if there is an event with the same signature but different indexed fields",
"pr": 366
}
],
"timestamp": 1517756400
},
{
"version": "0.31.1",
"changes": [
{
"note": "Fix the bug causing order watcher to throw if makerToken === zrx",
"pr": 357
}
],
"timestamp": 1517410800
},
{
"version": "0.31.0",
"changes": [
{
"note":
"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.",
"pr": 349
}
],
"timestamp": 1517238000
},
{
"version": "0.30.2",
"changes": [
{
"note": "Add Rinkeby testnet addresses to artifacts ",
"pr": 337
},
{
"note": "Move @0xproject/types to dependencies from devDependencies fixing missing type errors"
}
],
"timestamp": 1517151600
},
{
"version": "0.30.1",
"changes": [
{
"note": "Fix a bug allowing negative fill values ",
"pr": 212
},
{
"note": "Fix a bug that made it impossible to pass a custom ZRX address ",
"pr": 341
}
],
"timestamp": 1516719600
},
{
"version": "0.30.0",
"changes": [
{
"note": "Add an error parameter to the order watcher callback",
"pr": 312
},
{
"note": "Fix a bug making it impossible to catch some errors from awaitTransactionMinedAsync",
"pr": 312
},
{
"note":
"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",
"pr": 321
}
],
"timestamp": 1516114800
},
{
"version": "0.29.1",
"changes": [
{
"note": "Fixed bignumber config issue #301",
"pr": 305
}
],
"timestamp": 1515596400
},
{
"version": "0.29.0",
"changes": [
{
"note": "Assert baseUnit amount supplied to `toUnitAmount` is integer amount.",
"pr": 287
},
{
"note": "`toBaseUnitAmount` throws if amount supplied has too many decimals",
"pr": 287
}
],
"timestamp": 1514386800
},
{
"version": "0.28.0",
"changes": [
{
"note":
"Add `etherTokenAddress` arg to `depositAsync` and `withdrawAsync` methods on `zeroEx.etherToken`",
"pr": 267
},
{
"note":
"Removed accidentally included `unsubscribeAll` method from `zeroEx.proxy`, `zeroEx.etherToken` and `zeroEx.tokenRegistry`",
"pr": 267
},
{
"note": "Removed `etherTokenContractAddress` from `ZeroEx` constructor arg `ZeroExConfig`",
"pr": 267
},
{
"note": "Rename `SubscriptionOpts` to `BlockRange`",
"pr": 272
},
{
"note":
"Add `zeroEx.etherToken.subscribe`, `zeroEx.etherToken.unsubscribe`, `zeroEx.etherToken.unsubscribeAll`",
"pr": 277
},
{
"note": "Add `zeroEx.etherToken.getLogsAsync`",
"pr": 277
},
{
"note":
"Add new public types `BlockParamLiteral`, `EtherTokenEvents`, `EtherTokenContractEventArgs`, `DepositContractEventArgs`, `WithdrawalContractEventArgs`",
"pr": 277
},
{
"note": "Support `Deposit` and `Withdraw` events on etherToken",
"pr": 277
},
{
"note": "Improve the error message when taker is not a string",
"pr": 278
}
],
"timestamp": 1513695600
},
{
"version": "0.27.1",
"changes": [
{
"note": "Export `TransactionOpts` type"
}
],
"timestamp": 1511794800
},
{
"version": "0.27.0",
"changes": [
{
"note": "Make `ZeroExConfig` required parameter of `ZeroEx` constructor",
"pr": 233
},
{
"note": "Add a required property `networkId` to `ZeroExConfig`",
"pr": 233
},
{
"note":
"Make all `getContractAddress` functions, `zeroEx.exchange.subscribe`, `zeroEx.exchange.getZRXTokenAddress` sync",
"pr": 233
},
{
"note": "Remove `ZeroExError.ContractNotFound` and replace it with contract-specific errors",
"pr": 233
},
{
"note":
"Make `DecodedLogEvent<A>` contain `LogWithDecodedArgs<A>` under log key instead of merging it in like web3 does",
"pr": 234
},
{
"note": "Rename `removed` to `isRemoved` in `DecodedLogEvent<A>`",
"pr": 234
},
{
"note": "Add config allowing to specify gasPrice and gasLimit for every transaction sending method",
"pr": 235
},
{
"note": "All transaction sending methods now call `estimateGas` if no gas amount was supplied",
"pr": 235
},
{
"note":
"Modify order validation methods to validate against the `latest` block, not against the `pending` block",
"pr": 236
}
],
"timestamp": 1511794800
},
{
"version": "0.26.0",
"changes": [
{
"note":
"Add post-formatter for logs converting `blockNumber`, `logIndex`, `transactionIndex` from hexes to numbers",
"pr": 231
},
{
"note": "Remove support for Async callback types when used in Subscribe functions",
"pr": 222
},
{
"note":
"In OrderWatcher subscribe to ZRX Token Transfer and Approval events when maker token is different",
"pr": 225
}
],
"timestamp": 1511190000
},
{
"version": "0.25.1",
"changes": [
{
"note": "Standardise on Cancelled over Canceled",
"pr": 217
},
{
"note": "Add missing `DecodedLogEvent` type to exported types",
"pr": 205
},
{
"note":
"Normalized the transactionReceipt status to be `null|0|1`, 1 meaning transaction execution successful, 0 unsuccessful and `null` if it is a pre-byzantinium transaction.",
"pr": 200
}
],
"timestamp": 1510498800
},
{
"version": "0.23.0",
"changes": [
{
"note": "Fixed unhandled promise rejection error in subscribe methods",
"pr": 209
},
{
"note": "Subscribe callbacks now receive an error object as their first argument"
}
],
"timestamp": 1510412400
},
{
"version": "0.22.6",
"changes": [
{
"note": "Add a timeout parameter to transaction awaiting",
"pr": 206
}
],
"timestamp": 1510239600
},
{
"version": "0.22.5",
"changes": [
{
"note": "Re-publish v0.22.4 to fix publishing issue"
}
],
"timestamp": 1509980400
},
{
"version": "0.22.4",
"changes": [
{
"note": "Upgraded bignumber.js to a new version that ships with native typings"
}
],
"timestamp": 1508857200
},
{
"version": "0.22.3",
"changes": [
{
"note": "Fixed an issue with new version of testrpc and unlimited proxy allowance",
"pr": 199
}
],
"timestamp": 1508857200
},
{
"version": "0.22.2",
"changes": [
{
"note": "Fixed rounding of maker fill amount and incorrect validation of partial fees",
"pr": 197
}
],
"timestamp": 1508770800
},
{
"version": "0.22.0",
"changes": [
{
"note":
"Started using `OrderFillRequest` interface instead of `OrderFillOrKillRequest` interface for `zeroEx.exchange.batchFillOrKill`",
"pr": 187
},
{
"note": "Removed `OrderFillOrKillRequest`",
"pr": 187
}
],
"timestamp": 1508079600
},
{
"version": "0.21.4",
"changes": [
{
"note":
"Made 0x.js more type-safe by making `getLogsAsync` and `subscribe/subscribeAsync` generics parametrized with arg type",
"pr": 194
}
],
"timestamp": 1507820400
},
{
"version": "0.21.3",
"changes": [
{
"note": "Fixed a bug causing order fills to throw `INSUFFICIENT_TAKER_ALLOWANCE`",
"pr": 193
}
],
"timestamp": 1507734000
},
{
"version": "0.21.2",
"changes": [
{
"note": "Exported `ContractEventArg` as a public type",
"pr": 190
}
],
"timestamp": 1507647600
},
{
"version": "0.21.1",
"changes": [
{
"note": "Fixed a bug in subscriptions",
"pr": 189
}
],
"timestamp": 1507647600
},
{
"version": "0.21.0",
"changes": [
{
"note": "Complete rewrite of subscription logic",
"pr": 182
},
{
"note": "Subscriptions no longer return historical logs. If you want them - use `getLogsAsync`"
},
{
"note":
"Subscriptions now use [ethereumjs-blockstream](https://github.com/ethereumjs/ethereumjs-blockstream) under the hood"
},
{
"note": "Subscriptions correctly handle block re-orgs (forks)"
},
{
"note": "Subscriptions correctly backfill logs (connection problems)"
},
{
"note":
"They no longer setup filters on the underlying nodes, so you can use them with infura without a filter Subprovider"
},
{
"note": "Removed `ContractEventEmitter` and added `LogEvent`"
},
{
"note": "Renamed `zeroEx.token.subscribeAsync` to `zeroEx.token.subscribe`"
},
{
"note": "Added `zeroEx.token.unsubscribe` and `zeroEx.exchange.unsubscribe`"
},
{
"note": "Renamed `zeroEx.exchange.stopWatchingAllEventsAsync` to `zeroEx.exhange.unsubscribeAll`"
},
{
"note": "Renamed `zeroEx.token.stopWatchingAllEventsAsync` to `zeroEx.token.unsubscribeAll`"
},
{
"note": "Fixed the batch fills validation by emulating all balance & proxy allowance changes",
"pr": 185
}
],
"timestamp": 1507561200
},
{
"version": "0.20.0",
"changes": [
{
"note": "Add `zeroEx.token.getLogsAsync`",
"pr": 178
},
{
"note": "Add `zeroEx.exchange.getLogsAsync`",
"pr": 178
},
{
"note": "Fixed fees validation when one of the tokens transferred is ZRX",
"pr": 181
}
],
"timestamp": 1507129200
},
{
"version": "0.19.0",
"changes": [
{
"note": "Made order validation optional ",
"pr": 172
},
{
"note": "Added Ropsten testnet support",
"pr": 173
},
{
"note": "Fixed a bug causing awaitTransactionMinedAsync to DDos backend nodes",
"pr": 175
}
],
"timestamp": 1506610800
},
{
"version": "0.18.0",
"changes": [
{
"note": "Added `zeroEx.exchange.validateOrderFillableOrThrowAsync` to simplify orderbook pruning",
"pr": 170
}
],
"timestamp": 1506351600
},
{
"version": "0.17.0",
"changes": [
{
"note": "Made `zeroEx.exchange.getZRXTokenAddressAsync` public",
"pr": 171
}
],
"timestamp": 1506351600
},
{
"version": "0.16.0",
"changes": [
{
"note": "Added the ability to specify custom contract addresses to be used with 0x.js",
"pr": 165
},
{
"note": "ZeroExConfig.exchangeContractAddress"
},
{
"note": "ZeroExConfig.tokenRegistryContractAddress"
},
{
"note": "ZeroExConfig.etherTokenContractAddress"
},
{
"note": "Added `zeroEx.tokenRegistry.getContractAddressAsync`",
"pr": 165
}
],
"timestamp": 1505833200
},
{
"version": "0.15.0",
"changes": [
{
"note":
"Added the ability to specify a historical `blockNumber` at which to query the blockchain's state when calling a token or exchange method",
"pr": 161
}
],
"timestamp": 1504796400
},
{
"version": "0.14.2",
"changes": [
{
"note": "Fixed an issue with bignumber.js types not found",
"pr": 160
}
],
"timestamp": 1504710000
},
{
"version": "0.14.1",
"changes": [
{
"note": "Fixed an issue with Artifact type not found",
"pr": 159
}
],
"timestamp": 1504710000
},
{
"version": "0.14.0",
"changes": [
{
"note": "Added `zeroEx.exchange.throwLogErrorsAsErrors` method to public interface",
"pr": 157
},
{
"note": "Fixed an issue with overlapping async intervals in `zeroEx.awaitTransactionMinedAsync`",
"pr": 157
},
{
"note": "Fixed an issue with log decoder returning `BigNumber`s as `strings`",
"pr": 157
}
],
"timestamp": 1504623600
},
{
"version": "0.13.0",
"changes": [
{
"note":
"Made all the functions submitting transactions to the network to immediately return transaction hash",
"pr": 151
},
{
"note": "Added `zeroEx.awaitTransactionMinedAsync`",
"pr": 151
},
{
"note":
"Added `TransactionReceiptWithDecodedLogs`, `LogWithDecodedArgs`, `DecodedLogArgs` to public types",
"pr": 151
},
{
"note": "Added signature validation to `validateFillOrderThrowIfInvalidAsync`",
"pr": 152
}
],
"timestamp": 1504623600
},
{
"version": "0.12.1",
"changes": [
{
"note": "Added the support for web3@1.x.x provider",
"pr": 142
},
{
"note": "Added the optional `zeroExConfig` parameter to the constructor of `ZeroEx`",
"pr": 139
},
{
"note": "Added the ability to specify `gasPrice` when instantiating `ZeroEx`",
"pr": 139
}
],
"timestamp": 1504278000
},
{
"version": "0.11.0",
"changes": [
{
"note": "Added `zeroEx.token.setUnlimitedProxyAllowanceAsync`",
"pr": 137
},
{
"note": "Added `zeroEx.token.setUnlimitedAllowanceAsync`",
"pr": 137
},
{
"note": "Added `zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS`",
"pr": 137
}
],
"timestamp": 1503500400
},
{
"version": "0.10.4",
"changes": [
{
"note": "Fixed a bug where checksummed addresses were being pulled from artifacts and not lower-cased.",
"pr": 135
}
],
"timestamp": 1503500400
},
{
"version": "0.10.1",
"changes": [
{
"note": "Added `zeroEx.exchange.validateFillOrderThrowIfInvalidAsync`",
"pr": 128
},
{
"note": "Added `zeroEx.exchange.validateFillOrKillOrderThrowIfInvalidAsync`",
"pr": 128
},
{
"note": "Added `zeroEx.exchange.validateCancelOrderThrowIfInvalidAsync`",
"pr": 128
},
{
"note": "Added `zeroEx.exchange.isRoundingErrorAsync`",
"pr": 128
},
{
"note": "Added `zeroEx.proxy.getContractAddressAsync`",
"pr": 130
},
{
"note": "Added `zeroEx.tokenRegistry.getTokenAddressesAsync`",
"pr": 132
},
{
"note": "Added `zeroEx.tokenRegistry.getTokenAddressBySymbolIfExistsAsync`",
"pr": 132
},
{
"note": "Added `zeroEx.tokenRegistry.getTokenAddressByNameIfExistsAsync`",
"pr": 132
},
{
"note": "Added `zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync`",
"pr": 132
},
{
"note": "Added `zeroEx.tokenRegistry.getTokenByNameIfExistsAsync`",
"pr": 132
},
{
"note": "Added clear error message when checksummed address is passed to a public method",
"pr": 124
},
{
"note": "Fixes the description of `shouldThrowOnInsufficientBalanceOrAllowance` in docs",
"pr": 127
}
],
"timestamp": 1503500400
},
{
"version": "0.9.3",
"changes": [
{
"note": "Update contract artifacts to include latest Kovan and Mainnet deploys",
"pr": 118
}
],
"timestamp": 1503327600
},
{
"version": "0.9.2",
"changes": [
{
"note": "*This version was unpublished because of a publishing issue.*"
},
{
"note": "Update contract artifacts to include latest Kovan and Mainnet deploys",
"pr": 118
}
],
"timestamp": 1503241200
},
{
"version": "0.9.1",
"changes": [
{
"note": "Fixed the bug causing `zeroEx.token.getBalanceAsync()` to fail if no addresses available",
"pr": 120
}
],
"timestamp": 1502809200
},
{
"version": "0.9.0",
"changes": [
{
"note": "Migrated to the new version of smart contracts",
"pr": 101
},
{
"note": "Removed the ability to call methods on multiple authorized Exchange smart contracts",
"pr": 106
},
{
"note": "Made `zeroEx.getOrderHashHex` a static method",
"pr": 107
},
{
"note": "Cached `net_version` requests and invalidate the cache on calls to `setProvider`",
"pr": 95
},
{
"note": "Renamed `zeroEx.exchange.batchCancelOrderAsync` to `zeroEx.exchange.batchCancelOrdersAsync`"
},
{
"note": "Renamed `zeroEx.exchange.batchFillOrderAsync` to `zeroEx.exchange.batchFillOrdersAsync`"
},
{
"note": "Updated to typescript v2.4",
"pr": 104
},
{
"note":
"Fixed an issue with incorrect balance/allowance validation when ZRX is one of the tokens traded",
"pr": 109
}
],
"timestamp": 1500994800
},
{
"version": "0.8.0",
"changes": [
{
"note":
"Added the ability to call methods on different authorized versions of the Exchange smart contract",
"pr": 82
},
{
"note":
"Updated contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59)"
},
{
"note": "Added `zeroEx.proxy.isAuthorizedAsync` and `zeroEx.proxy.getAuthorizedAddressesAsync`",
"pr": 89
},
{
"note": "Added `zeroEx.token.subscribeAsync`",
"pr": 90
},
{
"note": "Made contract invalidation functions private",
"pr": 90
},
{
"note": "`zeroEx.token.invalidateContractInstancesAsync`"
},
{
"note": "`zeroEx.exchange.invalidateContractInstancesAsync`"
},
{
"note": "`zeroEx.proxy.invalidateContractInstance`"
},
{
"note": "`zeroEx.tokenRegistry.invalidateContractInstance`"
},
{
"note": "Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance"
}
],
"timestamp": 1499094000
},
{
"version": "0.7.1",
"changes": [
{
"note":
"Added the ability to convert Ether to wrapped Ether tokens and back via `zeroEx.etherToken.depostAsync` and `zeroEx.etherToken.withdrawAsync`",
"pr": 81
}
],
"timestamp": 1498402800
},
{
"version": "0.7.0",
"changes": [
{
"note": "Added Kovan smart contract artifacts",
"pr": 78
},
{
"note": "Started returning fillAmount from `fillOrderAsync` and `fillUpToAsync`",
"pr": 72
},
{
"note": "Started returning cancelledAmount from `cancelOrderAsync`",
"pr": 72
},
{
"note":
"Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`"
}
],
"timestamp": 1498057200
},
{
"version": "0.6.2",
"changes": [
{
"note": "Reduced bundle size"
},
{
"note": "Improved documentation"
}
],
"timestamp": 1497970800
},
{
"version": "0.6.1",
"changes": [
{
"note": "Improved documentation"
}
],
"timestamp": 1497798000
},
{
"version": "0.6.0",
"changes": [
{
"note": "Made `ZeroEx` class accept `Web3Provider` instance instead of `Web3` instance"
},
{
"note": "Added types for contract event arguments"
}
],
"timestamp": 1497798000
},
{
"version": "0.5.2",
"changes": [
{
"note":
"Fixed the bug in `postpublish` script that caused that only unminified UMD bundle was uploaded to release page"
}
],
"timestamp": 1497452400
},
{
"version": "0.5.1",
"changes": [
{
"note": "Added `postpublish` script to publish to Github Releases with assets."
}
],
"timestamp": 1497452400
}
]

View File

@@ -1,4 +1,47 @@
# CHANGELOG
<!--
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
Edit the package's CHANGELOG.json file only.
-->
CHANGELOG
## v0.36.1 - _April 18, 2018_
* Internal changes and refactoring
* Fix redundant expired order removal bug (#527)
## v0.36.0 - _April 12, 2018_
* Moved Web3.Provider to `@0xproject/types:Provider` (#501)
* Add `zeroEx.exchange.getOrderStateAsync` to allow obtaining current OrderState for a signedOrder (#510)
## v0.35.0 - _April 2, 2018_
* Removed `ZeroExError.TransactionMiningTimeout` and moved it to '@0xproject/web3-wrapper' `Web3WrapperErrors.TransactionMiningTimeout` (#485)
## v0.34.0 - _April 2, 2018_
* Fix the bug causing `zeroEx.exchange.fillOrdersUpToAsync` validation to fail if there were some extra orders passed (#470)
* Remove automatic instantiation of `zeroEx.orderStateWatcher` (#488)
* Add `zeroEx.createOrderStateWatcher` to allow creating arbitrary number of OrderStateWatchers (#488)
* Added `stateLayer` setting to `OrderStateWatcherConfig` so OrderStateWatcher can be set to monitor different blockchain state layers (#488)
## v0.33.2 - _March 18, 2018_
* Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package (#452)
* Consolidate `Order`, `SignedOrder`, and `ECSignature` into the `@0xproject/types` package (#456)
## v0.33.1 - _March 8, 2018_
* Add missing EthersJs typescript typings as dependency
## v0.33.0 - _March 4, 2018_
* Validate and lowercase all addresses in public methods (#373)
* Improve validation to force passing contract addresses on private networks (#385)
* Change `LogErrorContractEventArgs.errorId` type from `BigNumber` to `number` (#413)
* Rename all public `_unsubscribeAll` methods to `unsubscribeAll` (#415)
* Move web3 typings from devDep to dep since cannot use this package without it (#429)
## v0.32.2 - _February 9, 2018_
@@ -20,10 +63,7 @@
## 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)
* 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_
@@ -139,16 +179,16 @@
## v0.21.0 - _October 10, 2017_
* Complete rewrite of subscription logic (#182)
* Subscriptions no longer return historical logs. If you want them - use `getLogsAsync`
* Subscriptions now use [ethereumjs-blockstream](https://github.com/ethereumjs/ethereumjs-blockstream) under the hood
* Subscriptions correctly handle block re-orgs (forks)
* Subscriptions correctly backfill logs (connection problems)
* They no longer setup filters on the underlying nodes, so you can use them with infura without a filter Subprovider
* Removed `ContractEventEmitter` and added `LogEvent`
* Renamed `zeroEx.token.subscribeAsync` to `zeroEx.token.subscribe`
* Added `zeroEx.token.unsubscribe` and `zeroEx.exchange.unsubscribe`
* Renamed `zeroEx.exchange.stopWatchingAllEventsAsync` to `zeroEx.exhange.unsubscribeAll`
* Renamed `zeroEx.token.stopWatchingAllEventsAsync` to `zeroEx.token.unsubscribeAll`
* Subscriptions no longer return historical logs. If you want them - use `getLogsAsync`
* Subscriptions now use [ethereumjs-blockstream](https://github.com/ethereumjs/ethereumjs-blockstream) under the hood
* Subscriptions correctly handle block re-orgs (forks)
* Subscriptions correctly backfill logs (connection problems)
* They no longer setup filters on the underlying nodes, so you can use them with infura without a filter Subprovider
* Removed `ContractEventEmitter` and added `LogEvent`
* Renamed `zeroEx.token.subscribeAsync` to `zeroEx.token.subscribe`
* Added `zeroEx.token.unsubscribe` and `zeroEx.exchange.unsubscribe`
* Renamed `zeroEx.exchange.stopWatchingAllEventsAsync` to `zeroEx.exhange.unsubscribeAll`
* Renamed `zeroEx.token.stopWatchingAllEventsAsync` to `zeroEx.token.unsubscribeAll`
* Fixed the batch fills validation by emulating all balance & proxy allowance changes (#185)
## v0.20.0 - _October 5, 2017_
@@ -174,9 +214,9 @@
## v0.16.0 - _September 20, 2017_
* Added the ability to specify custom contract addresses to be used with 0x.js (#165)
* ZeroExConfig.exchangeContractAddress
* ZeroExConfig.tokenRegistryContractAddress
* ZeroExConfig.etherTokenContractAddress
* ZeroExConfig.exchangeContractAddress
* ZeroExConfig.tokenRegistryContractAddress
* ZeroExConfig.etherTokenContractAddress
* Added `zeroEx.tokenRegistry.getContractAddressAsync` (#165)
## v0.15.0 - _September 8, 2017_
@@ -216,11 +256,11 @@
* Added `zeroEx.token.setUnlimitedAllowanceAsync` (#137)
* Added `zeroEx.token.UNLIMITED_ALLOWANCE_IN_BASE_UNITS` (#137)
## v0.10.4 - _Aug 24, 2017_
## v0.10.4 - _August 24, 2017_
* Fixed a bug where checksummed addresses were being pulled from artifacts and not lower-cased. (#135)
## v0.10.1 - _Aug 24, 2017_
## v0.10.1 - _August 24, 2017_
* Added `zeroEx.exchange.validateFillOrderThrowIfInvalidAsync` (#128)
* Added `zeroEx.exchange.validateFillOrKillOrderThrowIfInvalidAsync` (#128)
@@ -235,20 +275,20 @@
* Added clear error message when checksummed address is passed to a public method (#124)
* Fixes the description of `shouldThrowOnInsufficientBalanceOrAllowance` in docs (#127)
## v0.9.3 - _Aug 22, 2017_
## v0.9.3 - _August 22, 2017_
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
## v0.9.2 - _Aug 21, 2017_
## v0.9.2 - _August 21, 2017_
* *This version was unpublished because of a publishing issue.*
* Update contract artifacts to include latest Kovan and Mainnet deploys (#118)
## v0.9.1 - _Aug. 16, 2017_
## v0.9.1 - _August 16, 2017_
* Fixed the bug causing `zeroEx.token.getBalanceAsync()` to fail if no addresses available (#120)
## v0.9.0 - _Jul. 26, 2017_
## v0.9.0 - _July 26, 2017_
* Migrated to the new version of smart contracts (#101)
* Removed the ability to call methods on multiple authorized Exchange smart contracts (#106)
@@ -259,48 +299,48 @@
* Updated to typescript v2.4 (#104)
* Fixed an issue with incorrect balance/allowance validation when ZRX is one of the tokens traded (#109)
## v0.8.0 - _Jul. 4, 2017_
## v0.8.0 - _July 4, 2017_
* Added the ability to call methods on different authorized versions of the Exchange smart contract (#82)
* Updated contract artifacts to reflect latest changes to the smart contracts (0xproject/contracts#59)
* Added `zeroEx.proxy.isAuthorizedAsync` and `zeroEx.proxy.getAuthorizedAddressesAsync` (#89)
* Added `zeroEx.token.subscribeAsync` (#90)
* Made contract invalidation functions private (#90)
* `zeroEx.token.invalidateContractInstancesAsync`
* `zeroEx.exchange.invalidateContractInstancesAsync`
* `zeroEx.proxy.invalidateContractInstance`
* `zeroEx.tokenRegistry.invalidateContractInstance`
* `zeroEx.token.invalidateContractInstancesAsync`
* `zeroEx.exchange.invalidateContractInstancesAsync`
* `zeroEx.proxy.invalidateContractInstance`
* `zeroEx.tokenRegistry.invalidateContractInstance`
* Fixed the bug where `zeroEx.setProviderAsync` didn't invalidate etherToken contract's instance
## v0.7.1 - _Jun. 26, 2017_
## v0.7.1 - _June 26, 2017_
* Added the ability to convert Ether to wrapped Ether tokens and back via `zeroEx.etherToken.depostAsync` and `zeroEx.etherToken.withdrawAsync` (#81)
## v0.7.0 - _Jun. 22, 2017_
## v0.7.0 - _June 22, 2017_
* Added Kovan smart contract artifacts (#78)
* Started returning fillAmount from `fillOrderAsync` and `fillUpToAsync` (#72)
* Started returning cancelledAmount from `cancelOrderAsync` (#72)
* Renamed type `LogCancelArgs` to `LogCancelContractEventArgs` and `LogFillArgs` to `LogFillContractEventArgs`
## v0.6.2 - _Jun. 21, 2017_
## v0.6.2 - _June 21, 2017_
* Reduced bundle size
* Improved documentation
## v0.6.1 - _Jun. 19, 2017_
## v0.6.1 - _June 19, 2017_
* Improved documentation
## v0.6.0 - _Jun. 19, 2017_
## v0.6.0 - _June 19, 2017_
* Made `ZeroEx` class accept `Web3Provider` instance instead of `Web3` instance
* Added types for contract event arguments
## v0.5.2 - _Jun. 15, 2017_
## v0.5.2 - _June 15, 2017_
* Fixed the bug in `postpublish` script that caused that only unminified UMD bundle was uploaded to release page
## v0.5.1 - _Jun. 15, 2017_
## v0.5.1 - _June 15, 2017_
* Added `postpublish` script to publish to Github Releases with assets.

View File

@@ -1,5 +1,9 @@
## 0x.js
A TypeScript/Javascript library for interacting with the 0x protocol.
### Read the [Documentation](https://0xproject.com/docs/0x.js).
## Installation
0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package.
@@ -18,11 +22,19 @@ npm install 0x.js --save
import { ZeroEx } from '0x.js';
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
```json
"compilerOptions": {
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
}
```
#### UMD:
**Install**
Download the UMD module from our [releases page](https://github.com/0xProject/0x.js/releases) and add it to your project.
Download the UMD module from our [releases page](https://github.com/0xProject/0x-monorepo/releases) and add it to your project.
**Import**
@@ -30,10 +42,66 @@ Download the UMD module from our [releases page](https://github.com/0xProject/0x
<script type="text/javascript" src="0x.js"></script>
```
## Documentation
## Contributing
Extensive documentation of 0x.js can be found on [our website][docs-url].
We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
[website-url]: https://0xproject.com/
[whitepaper-url]: https://0xproject.com/pdfs/0x_white_paper.pdf
[docs-url]: https://0xproject.com/docs/0xjs
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
### Install dependencies
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
```bash
yarn config set workspaces-experimental true
```
Then install dependencies
```bash
yarn install
```
### Build
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
```bash
yarn lerna:rebuild
```
Or continuously rebuild on change:
```bash
yarn dev
```
You can also build this specific package by running the following from within its directory:
```bash
yarn build
```
or continuously rebuild on change:
```bash
yarn build:watch
```
### Clean
```bash
yarn clean
```
### Lint
```bash
yarn lint
```
### Run Tests
```bash
yarn test
```

View File

@@ -1,15 +0,0 @@
public {{this.name}} = {
async callAsync(
{{> typed_params inputs=inputs}}
defaultBlock?: Web3.BlockParam,
): Promise<{{> return_type outputs=outputs}}> {
const self = this as {{contractName}}Contract;
const result = await promisify<{{> return_type outputs=outputs}}>(
self._web3ContractInstance.{{this.name}}.call,
self._web3ContractInstance,
)(
{{> params inputs=inputs}}
);
return result;
},
};

View File

@@ -1,6 +0,0 @@
{{#singleReturnValue}}
{{#returnType outputs.0.type}}{{/returnType}}
{{/singleReturnValue}}
{{^singleReturnValue}}
[{{#each outputs}}{{#returnType type}}{{/returnType}}{{#unless @last}}, {{/unless}}{{/each}}]
{{/singleReturnValue}}

View File

@@ -1,51 +0,0 @@
public {{this.name}} = {
async sendTransactionAsync(
{{> typed_params inputs=inputs}}
{{#this.payable}}
txData: TxDataPayable = {},
{{/this.payable}}
{{^this.payable}}
txData: TxData = {},
{{/this.payable}}
): Promise<string> {
const self = this as {{contractName}}Contract;
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
txData,
self.{{this.name}}.estimateGasAsync.bind(
self,
{{> params inputs=inputs}}
),
);
const txHash = await promisify<string>(
self._web3ContractInstance.{{this.name}}, self._web3ContractInstance,
)(
{{> params inputs=inputs}}
txDataWithDefaults,
);
return txHash;
},
async estimateGasAsync(
{{> typed_params inputs=inputs}}
txData: TxData = {},
): Promise<number> {
const self = this as {{contractName}}Contract;
const txDataWithDefaults = await self._applyDefaultsToTxDataAsync(
txData,
);
const gas = await promisify<number>(
self._web3ContractInstance.{{this.name}}.estimateGas, self._web3ContractInstance,
)(
{{> params inputs=inputs}}
txDataWithDefaults,
);
return gas;
},
getABIEncodedTransactionData(
{{> typed_params inputs=inputs}}
txData: TxData = {},
): string {
const self = this as {{contractName}}Contract;
const abiEncodedTransactionData = self._web3ContractInstance.{{this.name}}.getData();
return abiEncodedTransactionData;
},
};

View File

@@ -1,3 +0,0 @@
{{#each inputs}}
{{name}}: {{#parameterType type}}{{/parameterType}},
{{/each}}

View File

View File

@@ -1,6 +1,6 @@
{
"name": "0x.js",
"version": "0.32.1",
"version": "0.36.1",
"description": "A javascript library for interacting with the 0x protocol",
"keywords": [
"0x.js",
@@ -15,85 +15,109 @@
"build:watch": "tsc -w",
"prebuild": "run-s clean generate_contract_wrappers",
"build": "run-p build:umd:prod build:commonjs; exit 0;",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json",
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template contract_templates/contract.handlebars --partials 'contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated",
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/compact_artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
"test:circleci": "run-s test:coverage report_test_coverage",
"test:circleci": "run-s test:coverage",
"test": "run-s clean test:commonjs",
"test:coverage": "nyc npm run test --all",
"report_test_coverage": "nyc report --reporter=text-lcov | coveralls",
"update_contracts": "for i in ${npm_package_config_artifacts}; do copyfiles -u 4 ../contracts/build/contracts/$i.json ../0x.js/src/artifacts; done;",
"clean": "shx rm -rf _bundles lib test_temp",
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
"update_artifacts": "for i in ${npm_package_config_contracts}; do copyfiles -u 4 ../migrations/src/artifacts/$i.json test/artifacts; done;",
"clean": "shx rm -rf _bundles lib test_temp scripts",
"build:umd:prod": "NODE_ENV=production webpack",
"build:commonjs": "tsc && copyfiles -u 2 './src/artifacts/**/*.json' ./lib/src/artifacts;",
"build:commonjs": "tsc && yarn update_artifacts && copyfiles -u 2 './src/compact_artifacts/**/*.json' ./lib/src/compact_artifacts && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
"test:commonjs": "run-s build:commonjs run_mocha",
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit"
"run_mocha": "mocha lib/test/**/*_test.js --timeout 10000 --bail --exit",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js",
"docs:stage": "yarn build && node ./scripts/stage_docs.js",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json"
},
"config": {
"artifacts": "TokenTransferProxy Exchange TokenRegistry Token EtherToken"
"compact_artifacts": "Exchange DummyToken ZRXToken Token EtherToken TokenTransferProxy TokenRegistry",
"contracts": "Exchange DummyToken ZRXToken Token WETH9 TokenTransferProxy MultiSigWallet MultiSigWalletWithTimeLock MultiSigWalletWithTimeLockExceptRemoveAuthorizedAddress MaliciousToken TokenRegistry Arbitrage EtherDelta AccountLevels",
"postpublish": {
"assets": [
"packages/0x.js/_bundles/index.js",
"packages/0x.js/_bundles/index.min.js"
],
"docPublishConfigs": {
"extraFileIncludes": [
"../types/src/index.ts",
"./src/contract_wrappers/generated/ether_token.ts",
"./src/contract_wrappers/generated/token.ts",
"./src/contract_wrappers/generated/exchange.ts"
],
"s3BucketPath": "s3://doc-jsons/0x.js/",
"s3StagingBucketPath": "s3://staging-doc-jsons/0x.js/"
}
}
},
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x.js"
"url": "https://github.com/0xProject/0x-monorepo"
},
"license": "Apache-2.0",
"engines": {
"node": ">=6.0.0"
},
"devDependencies": {
"@0xproject/abi-gen": "^0.2.0",
"@0xproject/dev-utils": "^0.0.11",
"@0xproject/tslint-config": "^0.4.7",
"@0xproject/deployer": "^0.4.1",
"@0xproject/dev-utils": "^0.3.6",
"@0xproject/monorepo-scripts": "^0.1.18",
"@0xproject/subproviders": "^0.9.0",
"@0xproject/tslint-config": "^0.4.16",
"@types/bintrees": "^1.0.2",
"@types/jsonschema": "^1.1.1",
"@types/lodash": "^4.14.86",
"@types/lodash": "4.14.104",
"@types/mocha": "^2.2.42",
"@types/node": "^8.0.53",
"@types/request": "2.47.0",
"@types/sinon": "^2.2.2",
"@types/uuid": "^3.4.2",
"awesome-typescript-loader": "^3.1.3",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
"chai-as-promised-typescript-typings": "^0.0.8",
"chai-bignumber": "^2.0.1",
"chai-typescript-typings": "^0.0.2",
"copyfiles": "^1.2.0",
"coveralls": "^3.0.0",
"dirty-chai": "^2.0.1",
"json-loader": "^0.5.4",
"mocha": "^4.0.1",
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"opn-cli": "^3.1.0",
"prettier": "^1.11.1",
"request": "^2.81.0",
"request-promise-native": "^1.0.5",
"shx": "^0.2.2",
"sinon": "^4.0.0",
"source-map-support": "^0.5.0",
"truffle-hdwallet-provider": "^0.0.3",
"tslint": "5.8.0",
"typedoc": "~0.8.0",
"types-bn": "^0.0.1",
"typedoc": "0xProject/typedoc",
"typescript": "2.7.1",
"web3-provider-engine": "^13.0.1",
"web3-typescript-typings": "^0.9.9",
"webpack": "^3.1.0"
},
"dependencies": {
"@0xproject/assert": "^0.0.17",
"@0xproject/json-schemas": "^0.7.9",
"@0xproject/types": "^0.2.0",
"@0xproject/utils": "^0.3.1",
"@0xproject/web3-wrapper": "^0.1.11",
"@0xproject/assert": "^0.2.7",
"@0xproject/base-contract": "^0.2.1",
"@0xproject/json-schemas": "^0.7.21",
"@0xproject/types": "^0.6.1",
"@0xproject/typescript-typings": "^0.2.0",
"@0xproject/utils": "^0.5.2",
"@0xproject/web3-wrapper": "^0.6.1",
"bintrees": "^1.0.2",
"bn.js": "^4.11.8",
"ethereumjs-abi": "^0.6.4",
"ethereumjs-blockstream": "^2.0.6",
"ethereumjs-util": "^5.1.1",
"ethers-contracts": "^2.2.1",
"js-sha3": "^0.7.0",
"lodash": "^4.17.4",
"uuid": "^3.1.0",
"web3": "^0.20.0"
},
"optionalDependencies": {
"@0xproject/migrations": "^0.0.1"
},
"publishConfig": {
"access": "public"
}
}

View File

@@ -1,40 +0,0 @@
const execAsync = require('async-child-process').execAsync;
const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const cwd = __dirname + '/..';
const subPackageName = packageJSON.name;
const S3BucketPath = 's3://0xjs-docs-jsons/';
let tag;
let version;
postpublish_utils
.getLatestTagAndVersionAsync(subPackageName)
.then(function(result) {
tag = result.tag;
version = result.version;
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
const assets = [__dirname + '/../_bundles/index.js', __dirname + '/../_bundles/index.min.js'];
return postpublish_utils.publishReleaseNotesAsync(tag, releaseName, assets);
})
.then(function(release) {
console.log('POSTPUBLISH: Release successful, generating docs...');
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json', {
cwd,
});
})
.then(function(result) {
if (result.stderr !== '') {
throw new Error(result.stderr);
}
const fileName = 'v' + version + '.json';
console.log('POSTPUBLISH: Doc generation successful, uploading docs... as ', fileName);
const s3Url = S3BucketPath + fileName;
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
cwd,
});
})
.catch(function(err) {
throw err;
});

View File

@@ -1,5 +1,5 @@
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
import { TransactionReceiptWithDecodedLogs } from '@0xproject/types';
import { ECSignature, Order, Provider, SignedOrder, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
import { AbiDecoder, BigNumber, intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as ethUtil from 'ethereumjs-util';
@@ -13,7 +13,9 @@ import { TokenTransferProxyWrapper } from './contract_wrappers/token_transfer_pr
import { TokenWrapper } from './contract_wrappers/token_wrapper';
import { OrderStateWatcher } from './order_watcher/order_state_watcher';
import { zeroExConfigSchema } from './schemas/zero_ex_config_schema';
import { ECSignature, Order, SignedOrder, Web3Provider, ZeroExConfig, ZeroExError } from './types';
import { zeroExPrivateNetworkConfigSchema } from './schemas/zero_ex_private_network_config_schema';
import { zeroExPublicNetworkConfigSchema } from './schemas/zero_ex_public_network_config_schema';
import { OrderStateWatcherConfig, ZeroExConfig, ZeroExError } from './types';
import { assert } from './utils/assert';
import { constants } from './utils/constants';
import { decorators } from './utils/decorators';
@@ -55,13 +57,7 @@ export class ZeroEx {
* tokenTransferProxy smart contract.
*/
public proxy: TokenTransferProxyWrapper;
/**
* An instance of the OrderStateWatcher class containing methods for watching a set of orders for relevant
* blockchain state changes.
*/
public orderStateWatcher: OrderStateWatcher;
private _web3Wrapper: Web3Wrapper;
private _abiDecoder: AbiDecoder;
/**
* Verifies that the elliptic curve signature `signature` was generated
* by signing `data` with the private key corresponding to the `signerAddress` address.
@@ -74,13 +70,14 @@ export class ZeroEx {
assert.isHexString('data', data);
assert.doesConformToSchema('signature', signature, schemas.ecSignatureSchema);
assert.isETHAddressHex('signerAddress', signerAddress);
const normalizedSignerAddress = signerAddress.toLowerCase();
const isValidSignature = signatureUtils.isValidSignature(data, signature, signerAddress);
const isValidSignature = signatureUtils.isValidSignature(data, signature, normalizedSignerAddress);
return isValidSignature;
}
/**
* Generates a pseudo-random 256-bit salt.
* The salt can be included in an 0x order, ensuring that the order generates a unique orderHash
* The salt can be included in a 0x order, ensuring that the order generates a unique orderHash
* and will not collide with other outstanding orders that are identical in all other parameters.
* @return A pseudo-random 256-bit number that can be used as a salt.
*/
@@ -118,10 +115,8 @@ export class ZeroEx {
public static toUnitAmount(amount: BigNumber, decimals: number): BigNumber {
assert.isValidBaseUnitAmount('amount', amount);
assert.isNumber('decimals', decimals);
const aUnit = new BigNumber(10).pow(decimals);
const unit = amount.div(aUnit);
return unit;
const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals);
return unitAmount;
}
/**
* A baseUnit is defined as the smallest denomination of a token. An amount expressed in baseUnits
@@ -134,13 +129,7 @@ export class ZeroEx {
public static toBaseUnitAmount(amount: BigNumber, decimals: number): BigNumber {
assert.isBigNumber('amount', amount);
assert.isNumber('decimals', decimals);
const unit = new BigNumber(10).pow(decimals);
const baseUnitAmount = amount.times(unit);
const hasDecimals = baseUnitAmount.decimalPlaces() !== 0;
if (hasDecimals) {
throw new Error(`Invalid unit amount: ${amount.toString()} - Too many decimal places`);
}
const baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amount, decimals);
return baseUnitAmount;
}
/**
@@ -156,31 +145,35 @@ export class ZeroEx {
}
/**
* Instantiates a new ZeroEx instance that provides the public interface to the 0x.js library.
* @param provider The Web3.js Provider instance you would like the 0x.js library to use for interacting with
* @param provider The Provider instance you would like the 0x.js library to use for interacting with
* the Ethereum network.
* @param config The configuration object. Look up the type for the description.
* @return An instance of the 0x.js ZeroEx class.
*/
constructor(provider: Web3Provider, config: ZeroExConfig) {
constructor(provider: Provider, config: ZeroExConfig) {
assert.isWeb3Provider('provider', provider);
assert.doesConformToSchema('config', config, zeroExConfigSchema);
assert.doesConformToSchema('config', config, zeroExConfigSchema, [
zeroExPrivateNetworkConfigSchema,
zeroExPublicNetworkConfigSchema,
]);
const artifactJSONs = _.values(artifacts);
const abiArrays = _.map(artifactJSONs, artifact => artifact.abi);
this._abiDecoder = new AbiDecoder(abiArrays);
const defaults = {
gasPrice: config.gasPrice,
};
this._web3Wrapper = new Web3Wrapper(provider, defaults);
_.forEach(abiArrays, abi => {
this._web3Wrapper.abiDecoder.addABI(abi);
});
this.proxy = new TokenTransferProxyWrapper(
this._web3Wrapper,
config.networkId,
config.tokenTransferProxyContractAddress,
);
this.token = new TokenWrapper(this._web3Wrapper, config.networkId, this._abiDecoder, this.proxy);
this.token = new TokenWrapper(this._web3Wrapper, config.networkId, this.proxy);
this.exchange = new ExchangeWrapper(
this._web3Wrapper,
config.networkId,
this._abiDecoder,
this.token,
config.exchangeContractAddress,
config.zrxContractAddress,
@@ -190,14 +183,7 @@ export class ZeroEx {
config.networkId,
config.tokenRegistryContractAddress,
);
this.etherToken = new EtherTokenWrapper(this._web3Wrapper, config.networkId, this._abiDecoder, this.token);
this.orderStateWatcher = new OrderStateWatcher(
this._web3Wrapper,
this._abiDecoder,
this.token,
this.exchange,
config.orderWatcherConfig,
);
this.etherToken = new EtherTokenWrapper(this._web3Wrapper, config.networkId, this.token);
}
/**
* Sets a new web3 provider for 0x.js. Updating the provider will stop all
@@ -205,7 +191,7 @@ export class ZeroEx {
* @param provider The Web3Provider you would like the 0x.js library to use from now on.
* @param networkId The id of the network your provider is connected to
*/
public setProvider(provider: Web3Provider, networkId: number): void {
public setProvider(provider: Provider, networkId: number): void {
this._web3Wrapper.setProvider(provider);
(this.exchange as any)._invalidateContractInstances();
(this.exchange as any)._setNetworkId(networkId);
@@ -231,7 +217,7 @@ export class ZeroEx {
* This method currently supports TestRPC, Geth and Parity above and below V1.6.6
* @param orderHash Hex encoded orderHash to sign.
* @param signerAddress The hex encoded Ethereum address you wish to sign it with. This address
* must be available via the Web3.Provider supplied to 0x.js.
* must be available via the Provider supplied to 0x.js.
* @param shouldAddPersonalMessagePrefix Some signers add the personal message prefix `\x19Ethereum Signed Message`
* 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
@@ -245,6 +231,7 @@ export class ZeroEx {
): Promise<ECSignature> {
assert.isHexString('orderHash', orderHash);
await assert.isSenderAddressAsync('signerAddress', signerAddress, this._web3Wrapper);
const normalizedSignerAddress = signerAddress.toLowerCase();
let msgHashHex = orderHash;
if (shouldAddPersonalMessagePrefix) {
@@ -253,7 +240,7 @@ export class ZeroEx {
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
}
const signature = await this._web3Wrapper.signTransactionAsync(signerAddress, msgHashHex);
const signature = await this._web3Wrapper.signMessageAsync(normalizedSignerAddress, msgHashHex);
// HACK: There is no consensus on whether the signatureHex string should be formatted as
// v + r + s OR r + s + v, and different clients (even different versions of the same client)
@@ -262,7 +249,7 @@ export class ZeroEx {
const validVParamValues = [27, 28];
const ecSignatureVRS = signatureUtils.parseSignatureHexAsVRS(signature);
if (_.includes(validVParamValues, ecSignatureVRS.v)) {
const isValidVRSSignature = ZeroEx.isValidSignature(orderHash, ecSignatureVRS, signerAddress);
const isValidVRSSignature = ZeroEx.isValidSignature(orderHash, ecSignatureVRS, normalizedSignerAddress);
if (isValidVRSSignature) {
return ecSignatureVRS;
}
@@ -270,7 +257,7 @@ export class ZeroEx {
const ecSignatureRSV = signatureUtils.parseSignatureHexAsRSV(signature);
if (_.includes(validVParamValues, ecSignatureRSV.v)) {
const isValidRSVSignature = ZeroEx.isValidSignature(orderHash, ecSignatureRSV, signerAddress);
const isValidRSVSignature = ZeroEx.isValidSignature(orderHash, ecSignatureRSV, normalizedSignerAddress);
if (isValidRSVSignature) {
return ecSignatureRSV;
}
@@ -290,44 +277,21 @@ export class ZeroEx {
pollingIntervalMs = 1000,
timeoutMs?: number,
): Promise<TransactionReceiptWithDecodedLogs> {
let timeoutExceeded = false;
if (timeoutMs) {
setTimeout(() => (timeoutExceeded = true), timeoutMs);
}
const txReceiptPromise = new Promise(
(resolve: (receipt: TransactionReceiptWithDecodedLogs) => void, reject) => {
const intervalId = intervalUtils.setAsyncExcludingInterval(
async () => {
if (timeoutExceeded) {
intervalUtils.clearAsyncExcludingInterval(intervalId);
return reject(ZeroExError.TransactionMiningTimeout);
}
const transactionReceipt = await this._web3Wrapper.getTransactionReceiptAsync(txHash);
if (!_.isNull(transactionReceipt)) {
intervalUtils.clearAsyncExcludingInterval(intervalId);
const logsWithDecodedArgs = _.map(
transactionReceipt.logs,
this._abiDecoder.tryToDecodeLogOrNoop.bind(this._abiDecoder),
);
const transactionReceiptWithDecodedLogArgs: TransactionReceiptWithDecodedLogs = {
...transactionReceipt,
logs: logsWithDecodedArgs,
};
resolve(transactionReceiptWithDecodedLogArgs);
}
},
pollingIntervalMs,
(err: Error) => {
intervalUtils.clearAsyncExcludingInterval(intervalId);
reject(err);
},
);
},
const transactionReceiptWithDecodedLogs = await this._web3Wrapper.awaitTransactionMinedAsync(
txHash,
pollingIntervalMs,
timeoutMs,
);
const txReceipt = await txReceiptPromise;
return txReceipt;
return transactionReceiptWithDecodedLogs;
}
/**
* Instantiates and returns a new OrderStateWatcher instance.
* Defaults to watching the pending state.
* @param config The configuration object. Look up the type for the description.
* @return An instance of the 0x.js OrderStateWatcher class.
*/
public createOrderStateWatcher(config?: OrderStateWatcherConfig) {
return new OrderStateWatcher(this._web3Wrapper, this.token, this.exchange, config);
}
/*
* HACK: `TokenWrapper` needs a token transfer proxy address. `TokenTransferProxy` address is fetched from

View File

@@ -0,0 +1,6 @@
import { BigNumber } from '@0xproject/utils';
export abstract class BalanceAndProxyAllowanceFetcher {
public abstract async getBalanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber>;
public abstract async getProxyAllowanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber>;
}

View File

@@ -0,0 +1,6 @@
import { BigNumber } from '@0xproject/utils';
export abstract class OrderFilledCancelledFetcher {
public abstract async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
public abstract async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber>;
}

View File

@@ -1,10 +1,10 @@
import * as DummyTokenArtifact from './artifacts/DummyToken.json';
import * as EtherTokenArtifact from './artifacts/EtherToken.json';
import * as ExchangeArtifact from './artifacts/Exchange.json';
import * as TokenArtifact from './artifacts/Token.json';
import * as TokenRegistryArtifact from './artifacts/TokenRegistry.json';
import * as TokenTransferProxyArtifact from './artifacts/TokenTransferProxy.json';
import * as ZRXArtifact from './artifacts/ZRX.json';
import * as DummyTokenArtifact from './compact_artifacts/DummyToken.json';
import * as EtherTokenArtifact from './compact_artifacts/EtherToken.json';
import * as ExchangeArtifact from './compact_artifacts/Exchange.json';
import * as TokenArtifact from './compact_artifacts/Token.json';
import * as TokenRegistryArtifact from './compact_artifacts/TokenRegistry.json';
import * as TokenTransferProxyArtifact from './compact_artifacts/TokenTransferProxy.json';
import * as ZRXArtifact from './compact_artifacts/ZRX.json';
import { Artifact } from './types';
export const artifacts = {

View File

@@ -1,4 +1,4 @@
import { BlockParamLiteral, LogWithDecodedArgs, RawLog } from '@0xproject/types';
import { BlockParamLiteral, ContractAbi, FilterObject, LogEntry, LogWithDecodedArgs, RawLog } from '@0xproject/types';
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import { Block, BlockAndLogStreamer } from 'ethereumjs-blockstream';
@@ -32,19 +32,17 @@ const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {
export class ContractWrapper {
protected _web3Wrapper: Web3Wrapper;
protected _networkId: number;
private _abiDecoder?: AbiDecoder;
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
private _filters: { [filterToken: string]: Web3.FilterObject };
private _filters: { [filterToken: string]: FilterObject };
private _filterCallbacks: {
[filterToken: string]: EventCallback<ContractEventArgs>;
};
private _onLogAddedSubscriptionToken: string | undefined;
private _onLogRemovedSubscriptionToken: string | undefined;
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder?: AbiDecoder) {
constructor(web3Wrapper: Web3Wrapper, networkId: number) {
this._web3Wrapper = web3Wrapper;
this._networkId = networkId;
this._abiDecoder = abiDecoder;
this._filters = {};
this._filterCallbacks = {};
this._blockAndLogStreamerIfExists = undefined;
@@ -75,7 +73,7 @@ export class ContractWrapper {
address: string,
eventName: ContractEvents,
indexFilterValues: IndexedFilterValues,
abi: Web3.ContractAbi,
abi: ContractAbi,
callback: EventCallback<ArgsType>,
): string {
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi);
@@ -92,7 +90,7 @@ export class ContractWrapper {
eventName: ContractEvents,
blockRange: BlockRange,
indexFilterValues: IndexedFilterValues,
abi: Web3.ContractAbi,
abi: ContractAbi,
): Promise<Array<LogWithDecodedArgs<ArgsType>>> {
const filter = filterUtils.getFilter(address, eventName, indexFilterValues, abi, blockRange);
const logs = await this._web3Wrapper.getLogsAsync(filter);
@@ -100,18 +98,18 @@ export class ContractWrapper {
return logsWithDecodedArguments;
}
protected _tryToDecodeLogOrNoop<ArgsType extends ContractEventArgs>(
log: Web3.LogEntry,
log: LogEntry,
): LogWithDecodedArgs<ArgsType> | RawLog {
if (_.isUndefined(this._abiDecoder)) {
if (_.isUndefined(this._web3Wrapper.abiDecoder)) {
throw new Error(InternalZeroExError.NoAbiDecoder);
}
const logWithDecodedArgs = this._abiDecoder.tryToDecodeLogOrNoop(log);
const logWithDecodedArgs = this._web3Wrapper.abiDecoder.tryToDecodeLogOrNoop(log);
return logWithDecodedArgs;
}
protected async _instantiateContractIfExistsAsync(
protected async _getContractAbiAndAddressFromArtifactsAsync(
artifact: Artifact,
addressIfExists?: string,
): Promise<Web3.ContractInstance> {
): Promise<[ContractAbi, string]> {
let contractAddress: string;
if (_.isUndefined(addressIfExists)) {
if (_.isUndefined(artifact.networks[this._networkId])) {
@@ -125,8 +123,8 @@ export class ContractWrapper {
if (!doesContractExist) {
throw new Error(CONTRACT_NAME_TO_NOT_FOUND_ERROR[artifact.contract_name]);
}
const contractInstance = this._web3Wrapper.getContractInstance(artifact.abi, contractAddress);
return contractInstance;
const abiAndAddress: [ContractAbi, string] = [artifact.abi, contractAddress];
return abiAndAddress;
}
protected _getContractAddress(artifact: Artifact, addressIfExists?: string): string {
if (_.isUndefined(addressIfExists)) {
@@ -139,8 +137,8 @@ export class ContractWrapper {
return addressIfExists;
}
}
private _onLogStateChanged<ArgsType extends ContractEventArgs>(isRemoved: boolean, log: Web3.LogEntry): void {
_.forEach(this._filters, (filter: Web3.FilterObject, filterToken: string) => {
private _onLogStateChanged<ArgsType extends ContractEventArgs>(isRemoved: boolean, log: LogEntry): void {
_.forEach(this._filters, (filter: FilterObject, filterToken: string) => {
if (filterUtils.matchesFilter(log, filter)) {
const decodedLog = this._tryToDecodeLogOrNoop(log) as LogWithDecodedArgs<ArgsType>;
const logEvent = {

View File

@@ -21,8 +21,8 @@ export class EtherTokenWrapper extends ContractWrapper {
[address: string]: EtherTokenContract;
} = {};
private _tokenWrapper: TokenWrapper;
constructor(web3Wrapper: Web3Wrapper, networkId: number, abiDecoder: AbiDecoder, tokenWrapper: TokenWrapper) {
super(web3Wrapper, networkId, abiDecoder);
constructor(web3Wrapper: Web3Wrapper, networkId: number, tokenWrapper: TokenWrapper) {
super(web3Wrapper, networkId);
this._tokenWrapper = tokenWrapper;
}
/**
@@ -41,15 +41,18 @@ export class EtherTokenWrapper extends ContractWrapper {
depositor: string,
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isETHAddressHex('etherTokenAddress', etherTokenAddress);
assert.isValidBaseUnitAmount('amountInWei', amountInWei);
await assert.isSenderAddressAsync('depositor', depositor, this._web3Wrapper);
const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase();
const normalizedDepositorAddress = depositor.toLowerCase();
const ethBalanceInWei = await this._web3Wrapper.getBalanceInWeiAsync(depositor);
const ethBalanceInWei = await this._web3Wrapper.getBalanceInWeiAsync(normalizedDepositorAddress);
assert.assert(ethBalanceInWei.gte(amountInWei), ZeroExError.InsufficientEthBalanceForDeposit);
const wethContract = await this._getEtherTokenContractAsync(etherTokenAddress);
const wethContract = await this._getEtherTokenContractAsync(normalizedEtherTokenAddress);
const txHash = await wethContract.deposit.sendTransactionAsync({
from: depositor,
from: normalizedDepositorAddress,
value: amountInWei,
gas: txOpts.gasLimit,
gasPrice: txOpts.gasPrice,
@@ -61,7 +64,7 @@ export class EtherTokenWrapper extends ContractWrapper {
* equivalent number of wrapped ETH tokens.
* @param etherTokenAddress EtherToken address you wish to withdraw from.
* @param amountInWei Amount of ETH in Wei the caller wishes to withdraw.
* @param withdrawer The hex encoded user Ethereum address that would like to make the withdrawl.
* @param withdrawer The hex encoded user Ethereum address that would like to make the withdrawal.
* @param txOpts Transaction parameters.
* @return Transaction hash.
*/
@@ -72,14 +75,20 @@ export class EtherTokenWrapper extends ContractWrapper {
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isValidBaseUnitAmount('amountInWei', amountInWei);
assert.isETHAddressHex('etherTokenAddress', etherTokenAddress);
await assert.isSenderAddressAsync('withdrawer', withdrawer, this._web3Wrapper);
const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase();
const normalizedWithdrawerAddress = withdrawer.toLowerCase();
const WETHBalanceInBaseUnits = await this._tokenWrapper.getBalanceAsync(etherTokenAddress, withdrawer);
const WETHBalanceInBaseUnits = await this._tokenWrapper.getBalanceAsync(
normalizedEtherTokenAddress,
normalizedWithdrawerAddress,
);
assert.assert(WETHBalanceInBaseUnits.gte(amountInWei), ZeroExError.InsufficientWEthBalanceForWithdrawal);
const wethContract = await this._getEtherTokenContractAsync(etherTokenAddress);
const wethContract = await this._getEtherTokenContractAsync(normalizedEtherTokenAddress);
const txHash = await wethContract.withdraw.sendTransactionAsync(amountInWei, {
from: withdrawer,
from: normalizedWithdrawerAddress,
gas: txOpts.gasLimit,
gasPrice: txOpts.gasPrice,
});
@@ -87,7 +96,7 @@ export class EtherTokenWrapper extends ContractWrapper {
}
/**
* Gets historical logs without creating a subscription
* @param etherTokenAddress An address of the ether token that emmited the logs.
* @param etherTokenAddress An address of the ether token that emitted the logs.
* @param eventName The ether token contract event you would like to subscribe to.
* @param blockRange Block range to get logs from.
* @param indexFilterValues An object where the keys are indexed args returned by the event and
@@ -101,11 +110,12 @@ export class EtherTokenWrapper extends ContractWrapper {
indexFilterValues: IndexedFilterValues,
): Promise<Array<LogWithDecodedArgs<ArgsType>>> {
assert.isETHAddressHex('etherTokenAddress', etherTokenAddress);
const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase();
assert.doesBelongToStringEnum('eventName', eventName, EtherTokenEvents);
assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema);
assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema);
const logs = await this._getLogsAsync<ArgsType>(
etherTokenAddress,
normalizedEtherTokenAddress,
eventName,
blockRange,
indexFilterValues,
@@ -129,11 +139,12 @@ export class EtherTokenWrapper extends ContractWrapper {
callback: EventCallback<ArgsType>,
): string {
assert.isETHAddressHex('etherTokenAddress', etherTokenAddress);
const normalizedEtherTokenAddress = etherTokenAddress.toLowerCase();
assert.doesBelongToStringEnum('eventName', eventName, EtherTokenEvents);
assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema);
assert.isFunction('callback', callback);
const subscriptionToken = this._subscribe<ArgsType>(
etherTokenAddress,
normalizedEtherTokenAddress,
eventName,
indexFilterValues,
artifacts.EtherTokenArtifact.abi,
@@ -151,7 +162,7 @@ export class EtherTokenWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
@@ -168,7 +179,7 @@ export class EtherTokenWrapper extends ContractWrapper {
return contractAddressIfExists;
}
private _invalidateContractInstance(): void {
this._unsubscribeAll();
this.unsubscribeAll();
this._etherTokenContractsByAddress = {};
}
private async _getEtherTokenContractAsync(etherTokenAddress: string): Promise<EtherTokenContract> {
@@ -176,11 +187,16 @@ export class EtherTokenWrapper extends ContractWrapper {
if (!_.isUndefined(etherTokenContract)) {
return etherTokenContract;
}
const web3ContractInstance = await this._instantiateContractIfExistsAsync(
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(
artifacts.EtherTokenArtifact,
etherTokenAddress,
);
const contractInstance = new EtherTokenContract(web3ContractInstance, this._web3Wrapper.getContractDefaults());
const contractInstance = new EtherTokenContract(
abi,
address,
this._web3Wrapper.getProvider(),
this._web3Wrapper.getContractDefaults(),
);
etherTokenContract = contractInstance;
this._etherTokenContractsByAddress[etherTokenAddress] = etherTokenContract;
return etherTokenContract;

View File

@@ -1,31 +1,39 @@
import { schemas } from '@0xproject/json-schemas';
import { BlockParamLiteral, DecodedLogArgs, LogWithDecodedArgs } from '@0xproject/types';
import {
BlockParamLiteral,
DecodedLogArgs,
ECSignature,
LogEntry,
LogWithDecodedArgs,
Order,
SignedOrder,
} from '@0xproject/types';
import { AbiDecoder, BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import * as Web3 from 'web3';
import { artifacts } from '../artifacts';
import { SimpleBalanceAndProxyAllowanceFetcher } from '../fetchers/simple_balance_and_proxy_allowance_fetcher';
import { SimpleOrderFilledCancelledFetcher } from '../fetchers/simple_order_filled_cancelled_fetcher';
import {
BlockRange,
ECSignature,
EventCallback,
ExchangeContractErrCodes,
ExchangeContractErrs,
IndexedFilterValues,
MethodOpts,
Order,
OrderAddresses,
OrderCancellationRequest,
OrderFillRequest,
OrderState,
OrderTransactionOpts,
OrderValues,
SignedOrder,
ValidateOrderFillableOpts,
} from '../types';
import { assert } from '../utils/assert';
import { decorators } from '../utils/decorators';
import { ExchangeTransferSimulator } from '../utils/exchange_transfer_simulator';
import { OrderStateUtils } from '../utils/order_state_utils';
import { OrderValidationUtils } from '../utils/order_validation_utils';
import { utils } from '../utils/utils';
@@ -37,7 +45,6 @@ import {
LogErrorContractEventArgs,
} from './generated/exchange';
import { TokenWrapper } from './token_wrapper';
const SHOULD_VALIDATE_BY_DEFAULT = true;
interface ExchangeContractErrCodesToMsgs {
@@ -83,12 +90,11 @@ export class ExchangeWrapper extends ContractWrapper {
constructor(
web3Wrapper: Web3Wrapper,
networkId: number,
abiDecoder: AbiDecoder,
tokenWrapper: TokenWrapper,
contractAddressIfExists?: string,
zrxContractAddressIfExists?: string,
) {
super(web3Wrapper, networkId, abiDecoder);
super(web3Wrapper, networkId);
this._tokenWrapper = tokenWrapper;
this._orderValidationUtils = new OrderValidationUtils(this);
this._contractAddressIfExists = contractAddressIfExists;
@@ -108,8 +114,10 @@ export class ExchangeWrapper extends ContractWrapper {
const exchangeContract = await this._getExchangeContractAsync();
const defaultBlock = _.isUndefined(methodOpts) ? undefined : methodOpts.defaultBlock;
const txData = {};
let unavailableTakerTokenAmount = await exchangeContract.getUnavailableTakerTokenAmount.callAsync(
orderHash,
txData,
defaultBlock,
);
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
@@ -127,7 +135,8 @@ export class ExchangeWrapper extends ContractWrapper {
const exchangeContract = await this._getExchangeContractAsync();
const defaultBlock = _.isUndefined(methodOpts) ? undefined : methodOpts.defaultBlock;
let fillAmountInBaseUnits = await exchangeContract.filled.callAsync(orderHash, defaultBlock);
const txData = {};
let fillAmountInBaseUnits = await exchangeContract.filled.callAsync(orderHash, txData, defaultBlock);
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
fillAmountInBaseUnits = new BigNumber(fillAmountInBaseUnits);
return fillAmountInBaseUnits;
@@ -144,7 +153,8 @@ export class ExchangeWrapper extends ContractWrapper {
const exchangeContract = await this._getExchangeContractAsync();
const defaultBlock = _.isUndefined(methodOpts) ? undefined : methodOpts.defaultBlock;
let cancelledAmountInBaseUnits = await exchangeContract.cancelled.callAsync(orderHash, defaultBlock);
const txData = {};
let cancelledAmountInBaseUnits = await exchangeContract.cancelled.callAsync(orderHash, txData, defaultBlock);
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
cancelledAmountInBaseUnits = new BigNumber(cancelledAmountInBaseUnits);
return cancelledAmountInBaseUnits;
@@ -163,7 +173,7 @@ export class ExchangeWrapper extends ContractWrapper {
* @param shouldThrowOnInsufficientBalanceOrAllowance Whether or not you wish for the contract call to throw
* if upon execution the tokens cannot be transferred.
* @param takerAddress The user Ethereum address who would like to fill this order.
* Must be available via the supplied Web3.Provider
* Must be available via the supplied Provider
* passed to 0x.js.
* @param orderTransactionOpts Optional arguments this method accepts.
* @return Transaction hash.
@@ -180,6 +190,7 @@ export class ExchangeWrapper extends ContractWrapper {
assert.isValidBaseUnitAmount('fillTakerTokenAmount', fillTakerTokenAmount);
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const exchangeInstance = await this._getExchangeContractAsync();
const shouldValidate = _.isUndefined(orderTransactionOpts.shouldValidate)
@@ -192,7 +203,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -208,7 +219,7 @@ export class ExchangeWrapper extends ContractWrapper {
signedOrder.ecSignature.r,
signedOrder.ecSignature.s,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -227,7 +238,7 @@ export class ExchangeWrapper extends ContractWrapper {
* If set to false, the call will continue to fill subsequent
* signedOrders even when some cannot be filled.
* @param takerAddress The user Ethereum address who would like to fill these
* orders. Must be available via the supplied Web3.Provider
* orders. Must be available via the supplied Provider
* passed to 0x.js.
* @param orderTransactionOpts Optional arguments this method accepts.
* @return Transaction hash.
@@ -254,6 +265,7 @@ export class ExchangeWrapper extends ContractWrapper {
assert.isValidBaseUnitAmount('fillTakerTokenAmount', fillTakerTokenAmount);
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const shouldValidate = _.isUndefined(orderTransactionOpts.shouldValidate)
? SHOULD_VALIDATE_BY_DEFAULT
@@ -267,10 +279,13 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount.minus(filledTakerTokenAmount),
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
if (filledTakerTokenAmount.eq(fillTakerTokenAmount)) {
break;
}
}
}
@@ -301,7 +316,7 @@ export class ExchangeWrapper extends ContractWrapper {
rArray,
sArray,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -323,7 +338,7 @@ export class ExchangeWrapper extends ContractWrapper {
* cannot be filled.
* @param takerAddress The user Ethereum address who would like to fill
* these orders. Must be available via the supplied
* Web3.Provider passed to 0x.js.
* Provider passed to 0x.js.
* @param orderTransactionOpts Optional arguments this method accepts.
* @return Transaction hash.
*/
@@ -345,6 +360,7 @@ export class ExchangeWrapper extends ContractWrapper {
);
assert.isBoolean('shouldThrowOnInsufficientBalanceOrAllowance', shouldThrowOnInsufficientBalanceOrAllowance);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const shouldValidate = _.isUndefined(orderTransactionOpts.shouldValidate)
? SHOULD_VALIDATE_BY_DEFAULT
: orderTransactionOpts.shouldValidate;
@@ -356,7 +372,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
orderFillRequest.signedOrder,
orderFillRequest.takerTokenFillAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -389,7 +405,7 @@ export class ExchangeWrapper extends ContractWrapper {
rArray,
sArray,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -403,7 +419,7 @@ export class ExchangeWrapper extends ContractWrapper {
* signedOrder you wish to fill.
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
* @param takerAddress The user Ethereum address who would like to fill this order.
* Must be available via the supplied Web3.Provider passed to 0x.js.
* Must be available via the supplied Provider passed to 0x.js.
* @param orderTransactionOpts Optional arguments this method accepts.
* @return Transaction hash.
*/
@@ -417,6 +433,7 @@ export class ExchangeWrapper extends ContractWrapper {
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
assert.isValidBaseUnitAmount('fillTakerTokenAmount', fillTakerTokenAmount);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const exchangeInstance = await this._getExchangeContractAsync();
@@ -430,7 +447,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -444,7 +461,7 @@ export class ExchangeWrapper extends ContractWrapper {
signedOrder.ecSignature.r,
signedOrder.ecSignature.s,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -456,7 +473,7 @@ export class ExchangeWrapper extends ContractWrapper {
* filled (each to the specified fillAmount) or aborted.
* @param orderFillRequests An array of objects that conform to the OrderFillRequest interface.
* @param takerAddress The user Ethereum address who would like to fill there orders.
* Must be available via the supplied Web3.Provider passed to 0x.js.
* Must be available via the supplied Provider passed to 0x.js.
* @param orderTransactionOpts Optional arguments this method accepts.
* @return Transaction hash.
*/
@@ -476,6 +493,7 @@ export class ExchangeWrapper extends ContractWrapper {
ExchangeContractErrs.BatchOrdersMustHaveSameExchangeAddress,
);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
if (_.isEmpty(orderFillRequests)) {
throw new Error(ExchangeContractErrs.BatchOrdersMustHaveAtLeastOneItem);
}
@@ -492,7 +510,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
orderFillRequest.signedOrder,
orderFillRequest.takerTokenFillAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -520,7 +538,7 @@ export class ExchangeWrapper extends ContractWrapper {
rParams,
sParams,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -544,6 +562,7 @@ export class ExchangeWrapper extends ContractWrapper {
assert.doesConformToSchema('order', order, schemas.orderSchema);
assert.isValidBaseUnitAmount('takerTokenCancelAmount', cancelTakerTokenAmount);
await assert.isSenderAddressAsync('order.maker', order.maker, this._web3Wrapper);
const normalizedMakerAddress = order.maker.toLowerCase();
const exchangeInstance = await this._getExchangeContractAsync();
@@ -566,7 +585,7 @@ export class ExchangeWrapper extends ContractWrapper {
orderValues,
cancelTakerTokenAmount,
{
from: order.maker,
from: normalizedMakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -603,6 +622,8 @@ export class ExchangeWrapper extends ContractWrapper {
assert.hasAtMostOneUniqueValue(makers, ExchangeContractErrs.MultipleMakersInSingleCancelBatchDisallowed);
const maker = makers[0];
await assert.isSenderAddressAsync('maker', maker, this._web3Wrapper);
const normalizedMakerAddress = maker.toLowerCase();
const shouldValidate = _.isUndefined(orderTransactionOpts.shouldValidate)
? SHOULD_VALIDATE_BY_DEFAULT
: orderTransactionOpts.shouldValidate;
@@ -636,7 +657,7 @@ export class ExchangeWrapper extends ContractWrapper {
orderValues,
cancelTakerTokenAmounts,
{
from: maker,
from: normalizedMakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -679,7 +700,7 @@ export class ExchangeWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
@@ -747,7 +768,7 @@ export class ExchangeWrapper extends ContractWrapper {
* signedOrder you wish to fill.
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
* @param takerAddress The user Ethereum address who would like to fill this order.
* Must be available via the supplied Web3.Provider passed to 0x.js.
* Must be available via the supplied Provider passed to 0x.js.
*/
public async validateFillOrderThrowIfInvalidAsync(
signedOrder: SignedOrder,
@@ -757,13 +778,14 @@ export class ExchangeWrapper extends ContractWrapper {
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
assert.isValidBaseUnitAmount('fillTakerTokenAmount', fillTakerTokenAmount);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const zrxTokenAddress = this.getZRXTokenAddress();
const exchangeTradeEmulator = new ExchangeTransferSimulator(this._tokenWrapper, BlockParamLiteral.Latest);
await this._orderValidationUtils.validateFillOrderThrowIfInvalidAsync(
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -793,7 +815,7 @@ export class ExchangeWrapper extends ContractWrapper {
* signedOrder you wish to fill.
* @param fillTakerTokenAmount The total amount of the takerTokens you would like to fill.
* @param takerAddress The user Ethereum address who would like to fill this order.
* Must be available via the supplied Web3.Provider passed to 0x.js.
* Must be available via the supplied Provider passed to 0x.js.
*/
public async validateFillOrKillOrderThrowIfInvalidAsync(
signedOrder: SignedOrder,
@@ -803,13 +825,14 @@ export class ExchangeWrapper extends ContractWrapper {
assert.doesConformToSchema('signedOrder', signedOrder, schemas.signedOrderSchema);
assert.isValidBaseUnitAmount('fillTakerTokenAmount', fillTakerTokenAmount);
await assert.isSenderAddressAsync('takerAddress', takerAddress, this._web3Wrapper);
const normalizedTakerAddress = takerAddress.toLowerCase();
const zrxTokenAddress = this.getZRXTokenAddress();
const exchangeTradeEmulator = new ExchangeTransferSimulator(this._tokenWrapper, BlockParamLiteral.Latest);
await this._orderValidationUtils.validateFillOrKillOrderThrowIfInvalidAsync(
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -839,20 +862,42 @@ export class ExchangeWrapper extends ContractWrapper {
return isRoundingError;
}
/**
* Checks if logs contain LogError, which is emmited by Exchange contract on transaction failure.
* Checks if logs contain LogError, which is emitted by Exchange contract on transaction failure.
* @param logs Transaction logs as returned by `zeroEx.awaitTransactionMinedAsync`
*/
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | Web3.LogEntry>): void {
public throwLogErrorsAsErrors(logs: Array<LogWithDecodedArgs<DecodedLogArgs> | LogEntry>): void {
const errLog = _.find(logs, {
event: ExchangeEvents.LogError,
});
if (!_.isUndefined(errLog)) {
const logArgs = (errLog as LogWithDecodedArgs<LogErrorContractEventArgs>).args;
const errCode = logArgs.errorId.toNumber();
const errCode = logArgs.errorId;
const errMessage = this._exchangeContractErrCodesToMsg[errCode];
throw new Error(errMessage);
}
}
/**
* Gets the latest OrderState of a signedOrder
* @param signedOrder The signedOrder
* @param stateLayer Optional, desired blockchain state layer (defaults to latest).
* @return OrderState of the signedOrder
*/
public async getOrderStateAsync(
signedOrder: SignedOrder,
stateLayer: BlockParamLiteral = BlockParamLiteral.Latest,
): Promise<OrderState> {
const simpleBalanceAndProxyAllowanceFetcher = new SimpleBalanceAndProxyAllowanceFetcher(
this._tokenWrapper,
stateLayer,
);
const simpleOrderFilledCancelledFetcher = new SimpleOrderFilledCancelledFetcher(this, stateLayer);
const orderStateUtils = new OrderStateUtils(
simpleBalanceAndProxyAllowanceFetcher,
simpleOrderFilledCancelledFetcher,
);
const orderState = orderStateUtils.getOrderStateAsync(signedOrder);
return orderState;
}
/**
* Returns the ZRX token address used by the exchange contract.
* @return Address of ZRX token
@@ -862,7 +907,7 @@ export class ExchangeWrapper extends ContractWrapper {
return contractAddress;
}
private _invalidateContractInstances(): void {
this._unsubscribeAll();
this.unsubscribeAll();
delete this._exchangeContractIfExists;
}
private async _isValidSignatureUsingContractCallAsync(
@@ -873,11 +918,12 @@ export class ExchangeWrapper extends ContractWrapper {
assert.isHexString('dataHex', dataHex);
assert.doesConformToSchema('ecSignature', ecSignature, schemas.ecSignatureSchema);
assert.isETHAddressHex('signerAddressHex', signerAddressHex);
const normalizedSignerAddress = signerAddressHex.toLowerCase();
const exchangeInstance = await this._getExchangeContractAsync();
const isValidSignature = await exchangeInstance.isValidSignature.callAsync(
signerAddressHex,
normalizedSignerAddress,
dataHex,
ecSignature.v,
ecSignature.r,
@@ -895,11 +941,16 @@ export class ExchangeWrapper extends ContractWrapper {
if (!_.isUndefined(this._exchangeContractIfExists)) {
return this._exchangeContractIfExists;
}
const web3ContractInstance = await this._instantiateContractIfExistsAsync(
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(
artifacts.ExchangeArtifact,
this._contractAddressIfExists,
);
const contractInstance = new ExchangeContract(web3ContractInstance, this._web3Wrapper.getContractDefaults());
const contractInstance = new ExchangeContract(
abi,
address,
this._web3Wrapper.getProvider(),
this._web3Wrapper.getContractDefaults(),
);
this._exchangeContractIfExists = contractInstance;
return this._exchangeContractIfExists;
}

View File

@@ -1,6 +0,0 @@
dummy_token.ts
ether_token.ts
exchange.ts
token_registry.ts
token_transfer_proxy.ts
token.ts

View File

@@ -1,33 +0,0 @@
import {TxData, TxDataPayable} from '@0xproject/types';
import * as _ from 'lodash';
import * as Web3 from 'web3';
export class BaseContract {
protected _web3ContractInstance: Web3.ContractInstance;
protected _defaults: Partial<TxData>;
protected async _applyDefaultsToTxDataAsync<T extends TxData|TxDataPayable>(
txData: T,
estimateGasAsync?: (txData: T) => Promise<number>,
): Promise<TxData> {
// Gas amount sourced with the following priorities:
// 1. Optional param passed in to public method call
// 2. Global config passed in at library instantiation
// 3. Gas estimate calculation + safety margin
const removeUndefinedProperties = _.pickBy;
const txDataWithDefaults = {
...removeUndefinedProperties(this._defaults),
...removeUndefinedProperties(txData as any),
// HACK: TS can't prove that T is spreadable.
// Awaiting https://github.com/Microsoft/TypeScript/pull/13288 to be merged
};
if (_.isUndefined(txDataWithDefaults.gas) && !_.isUndefined(estimateGasAsync)) {
const estimatedGas = await estimateGasAsync(txData);
txDataWithDefaults.gas = estimatedGas;
}
return txDataWithDefaults;
}
constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<TxData>) {
this._web3ContractInstance = web3ContractInstance;
this._defaults = defaults;
}
}

View File

@@ -23,7 +23,7 @@ export class TokenRegistryWrapper extends ContractWrapper {
address: metadata[0],
name: metadata[1],
symbol: metadata[2],
decimals: metadata[3].toNumber(),
decimals: metadata[3],
};
return token;
}
@@ -50,7 +50,8 @@ export class TokenRegistryWrapper extends ContractWrapper {
public async getTokenAddressesAsync(): Promise<string[]> {
const tokenRegistryContract = await this._getTokenRegistryContractAsync();
const addresses = await tokenRegistryContract.getTokenAddresses.callAsync();
return addresses;
const lowerCaseAddresses = _.map(addresses, address => address.toLowerCase());
return lowerCaseAddresses;
}
/**
* Retrieves a token by address currently listed in the Token Registry smart contract
@@ -58,9 +59,10 @@ export class TokenRegistryWrapper extends ContractWrapper {
*/
public async getTokenIfExistsAsync(address: string): Promise<Token | undefined> {
assert.isETHAddressHex('address', address);
const normalizedAddress = address.toLowerCase();
const tokenRegistryContract = await this._getTokenRegistryContractAsync();
const metadata = await tokenRegistryContract.getTokenMetaData.callAsync(address);
const metadata = await tokenRegistryContract.getTokenMetaData.callAsync(normalizedAddress);
const token = TokenRegistryWrapper._createTokenFromMetadata(metadata);
return token;
}
@@ -115,12 +117,14 @@ export class TokenRegistryWrapper extends ContractWrapper {
if (!_.isUndefined(this._tokenRegistryContractIfExists)) {
return this._tokenRegistryContractIfExists;
}
const web3ContractInstance = await this._instantiateContractIfExistsAsync(
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(
artifacts.TokenRegistryArtifact,
this._contractAddressIfExists,
);
const contractInstance = new TokenRegistryContract(
web3ContractInstance,
abi,
address,
this._web3Wrapper.getProvider(),
this._web3Wrapper.getContractDefaults(),
);
this._tokenRegistryContractIfExists = contractInstance;

View File

@@ -2,6 +2,7 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { artifacts } from '../artifacts';
import { assert } from '../utils/assert';
import { ContractWrapper } from './contract_wrapper';
import { TokenTransferProxyContract } from './generated/token_transfer_proxy';
@@ -22,8 +23,12 @@ export class TokenTransferProxyWrapper extends ContractWrapper {
* @return Whether the exchangeContractAddress is authorized.
*/
public async isAuthorizedAsync(exchangeContractAddress: string): Promise<boolean> {
assert.isETHAddressHex('exchangeContractAddress', exchangeContractAddress);
const normalizedExchangeContractAddress = exchangeContractAddress.toLowerCase();
const tokenTransferProxyContractInstance = await this._getTokenTransferProxyContractAsync();
const isAuthorized = await tokenTransferProxyContractInstance.authorized.callAsync(exchangeContractAddress);
const isAuthorized = await tokenTransferProxyContractInstance.authorized.callAsync(
normalizedExchangeContractAddress,
);
return isAuthorized;
}
/**
@@ -54,12 +59,14 @@ export class TokenTransferProxyWrapper extends ContractWrapper {
if (!_.isUndefined(this._tokenTransferProxyContractIfExists)) {
return this._tokenTransferProxyContractIfExists;
}
const web3ContractInstance = await this._instantiateContractIfExistsAsync(
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(
artifacts.TokenTransferProxyArtifact,
this._contractAddressIfExists,
);
const contractInstance = new TokenTransferProxyContract(
web3ContractInstance,
abi,
address,
this._web3Wrapper.getProvider(),
this._web3Wrapper.getContractDefaults(),
);
this._tokenTransferProxyContractIfExists = contractInstance;

View File

@@ -22,13 +22,8 @@ export class TokenWrapper extends ContractWrapper {
public UNLIMITED_ALLOWANCE_IN_BASE_UNITS = constants.UNLIMITED_ALLOWANCE_IN_BASE_UNITS;
private _tokenContractsByAddress: { [address: string]: TokenContract };
private _tokenTransferProxyWrapper: TokenTransferProxyWrapper;
constructor(
web3Wrapper: Web3Wrapper,
networkId: number,
abiDecoder: AbiDecoder,
tokenTransferProxyWrapper: TokenTransferProxyWrapper,
) {
super(web3Wrapper, networkId, abiDecoder);
constructor(web3Wrapper: Web3Wrapper, networkId: number, tokenTransferProxyWrapper: TokenTransferProxyWrapper) {
super(web3Wrapper, networkId);
this._tokenContractsByAddress = {};
this._tokenTransferProxyWrapper = tokenTransferProxyWrapper;
}
@@ -46,10 +41,13 @@ export class TokenWrapper extends ContractWrapper {
): Promise<BigNumber> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
const tokenContract = await this._getTokenContractAsync(tokenAddress);
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const defaultBlock = _.isUndefined(methodOpts) ? undefined : methodOpts.defaultBlock;
let balance = await tokenContract.balanceOf.callAsync(ownerAddress, defaultBlock);
const txData = {};
let balance = await tokenContract.balanceOf.callAsync(normalizedOwnerAddress, txData, defaultBlock);
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
balance = new BigNumber(balance);
return balance;
@@ -72,14 +70,17 @@ export class TokenWrapper extends ContractWrapper {
amountInBaseUnits: BigNumber,
txOpts: TransactionOpts = {},
): Promise<string> {
await assert.isSenderAddressAsync('ownerAddress', ownerAddress, this._web3Wrapper);
assert.isETHAddressHex('spenderAddress', spenderAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
await assert.isSenderAddressAsync('ownerAddress', ownerAddress, this._web3Wrapper);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedSpenderAddress = spenderAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
assert.isValidBaseUnitAmount('amountInBaseUnits', amountInBaseUnits);
const tokenContract = await this._getTokenContractAsync(tokenAddress);
const txHash = await tokenContract.approve.sendTransactionAsync(spenderAddress, amountInBaseUnits, {
from: ownerAddress,
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const txHash = await tokenContract.approve.sendTransactionAsync(normalizedSpenderAddress, amountInBaseUnits, {
from: normalizedOwnerAddress,
gas: txOpts.gasLimit,
gasPrice: txOpts.gasPrice,
});
@@ -103,10 +104,16 @@ export class TokenWrapper extends ContractWrapper {
spenderAddress: string,
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
assert.isETHAddressHex('spenderAddress', spenderAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
const normalizedSpenderAddress = spenderAddress.toLowerCase();
const txHash = await this.setAllowanceAsync(
tokenAddress,
ownerAddress,
spenderAddress,
normalizedTokenAddress,
normalizedOwnerAddress,
normalizedSpenderAddress,
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
txOpts,
);
@@ -128,10 +135,20 @@ export class TokenWrapper extends ContractWrapper {
): Promise<BigNumber> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
assert.isETHAddressHex('spenderAddress', spenderAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
const normalizedSpenderAddress = spenderAddress.toLowerCase();
const tokenContract = await this._getTokenContractAsync(tokenAddress);
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const defaultBlock = _.isUndefined(methodOpts) ? undefined : methodOpts.defaultBlock;
let allowanceInBaseUnits = await tokenContract.allowance.callAsync(ownerAddress, spenderAddress, defaultBlock);
const txData = {};
let allowanceInBaseUnits = await tokenContract.allowance.callAsync(
normalizedOwnerAddress,
normalizedSpenderAddress,
txData,
defaultBlock,
);
// Wrap BigNumbers returned from web3 with our own (later) version of BigNumber
allowanceInBaseUnits = new BigNumber(allowanceInBaseUnits);
return allowanceInBaseUnits;
@@ -149,9 +166,16 @@ export class TokenWrapper extends ContractWrapper {
): Promise<BigNumber> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
const proxyAddress = this._tokenTransferProxyWrapper.getContractAddress();
const allowanceInBaseUnits = await this.getAllowanceAsync(tokenAddress, ownerAddress, proxyAddress, methodOpts);
const allowanceInBaseUnits = await this.getAllowanceAsync(
normalizedTokenAddress,
normalizedOwnerAddress,
proxyAddress,
methodOpts,
);
return allowanceInBaseUnits;
}
/**
@@ -172,12 +196,14 @@ export class TokenWrapper extends ContractWrapper {
): Promise<string> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
assert.isValidBaseUnitAmount('amountInBaseUnits', amountInBaseUnits);
const proxyAddress = this._tokenTransferProxyWrapper.getContractAddress();
const txHash = await this.setAllowanceAsync(
tokenAddress,
ownerAddress,
normalizedTokenAddress,
normalizedOwnerAddress,
proxyAddress,
amountInBaseUnits,
txOpts,
@@ -200,9 +226,13 @@ export class TokenWrapper extends ContractWrapper {
ownerAddress: string,
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isETHAddressHex('ownerAddress', ownerAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedOwnerAddress = ownerAddress.toLowerCase();
const txHash = await this.setProxyAllowanceAsync(
tokenAddress,
ownerAddress,
normalizedTokenAddress,
normalizedOwnerAddress,
this.UNLIMITED_ALLOWANCE_IN_BASE_UNITS,
txOpts,
);
@@ -225,19 +255,22 @@ export class TokenWrapper extends ContractWrapper {
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isETHAddressHex('tokenAddress', tokenAddress);
await assert.isSenderAddressAsync('fromAddress', fromAddress, this._web3Wrapper);
assert.isETHAddressHex('toAddress', toAddress);
await assert.isSenderAddressAsync('fromAddress', fromAddress, this._web3Wrapper);
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedFromAddress = fromAddress.toLowerCase();
const normalizedToAddress = toAddress.toLowerCase();
assert.isValidBaseUnitAmount('amountInBaseUnits', amountInBaseUnits);
const tokenContract = await this._getTokenContractAsync(tokenAddress);
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const fromAddressBalance = await this.getBalanceAsync(tokenAddress, fromAddress);
const fromAddressBalance = await this.getBalanceAsync(normalizedTokenAddress, normalizedFromAddress);
if (fromAddressBalance.lessThan(amountInBaseUnits)) {
throw new Error(ZeroExError.InsufficientBalanceForTransfer);
}
const txHash = await tokenContract.transfer.sendTransactionAsync(toAddress, amountInBaseUnits, {
from: fromAddress,
const txHash = await tokenContract.transfer.sendTransactionAsync(normalizedToAddress, amountInBaseUnits, {
from: normalizedFromAddress,
gas: txOpts.gasLimit,
gasPrice: txOpts.gasPrice,
});
@@ -265,30 +298,38 @@ export class TokenWrapper extends ContractWrapper {
amountInBaseUnits: BigNumber,
txOpts: TransactionOpts = {},
): Promise<string> {
assert.isETHAddressHex('tokenAddress', tokenAddress);
assert.isETHAddressHex('fromAddress', fromAddress);
assert.isETHAddressHex('toAddress', toAddress);
assert.isETHAddressHex('fromAddress', fromAddress);
assert.isETHAddressHex('tokenAddress', tokenAddress);
await assert.isSenderAddressAsync('senderAddress', senderAddress, this._web3Wrapper);
const normalizedToAddress = toAddress.toLowerCase();
const normalizedFromAddress = fromAddress.toLowerCase();
const normalizedTokenAddress = tokenAddress.toLowerCase();
const normalizedSenderAddress = senderAddress.toLowerCase();
assert.isValidBaseUnitAmount('amountInBaseUnits', amountInBaseUnits);
const tokenContract = await this._getTokenContractAsync(tokenAddress);
const tokenContract = await this._getTokenContractAsync(normalizedTokenAddress);
const fromAddressAllowance = await this.getAllowanceAsync(tokenAddress, fromAddress, senderAddress);
const fromAddressAllowance = await this.getAllowanceAsync(
normalizedTokenAddress,
normalizedFromAddress,
normalizedSenderAddress,
);
if (fromAddressAllowance.lessThan(amountInBaseUnits)) {
throw new Error(ZeroExError.InsufficientAllowanceForTransfer);
}
const fromAddressBalance = await this.getBalanceAsync(tokenAddress, fromAddress);
const fromAddressBalance = await this.getBalanceAsync(normalizedTokenAddress, normalizedFromAddress);
if (fromAddressBalance.lessThan(amountInBaseUnits)) {
throw new Error(ZeroExError.InsufficientBalanceForTransfer);
}
const txHash = await tokenContract.transferFrom.sendTransactionAsync(
fromAddress,
toAddress,
normalizedFromAddress,
normalizedToAddress,
amountInBaseUnits,
{
from: senderAddress,
from: normalizedSenderAddress,
gas: txOpts.gasLimit,
gasPrice: txOpts.gasPrice,
},
@@ -311,11 +352,12 @@ export class TokenWrapper extends ContractWrapper {
callback: EventCallback<ArgsType>,
): string {
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
assert.doesBelongToStringEnum('eventName', eventName, TokenEvents);
assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema);
assert.isFunction('callback', callback);
const subscriptionToken = this._subscribe<ArgsType>(
tokenAddress,
normalizedTokenAddress,
eventName,
indexFilterValues,
artifacts.TokenArtifact.abi,
@@ -333,12 +375,12 @@ export class TokenWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
* Gets historical logs without creating a subscription
* @param tokenAddress An address of the token that emmited the logs.
* @param tokenAddress An address of the token that emitted the logs.
* @param eventName The token contract event you would like to subscribe to.
* @param blockRange Block range to get logs from.
* @param indexFilterValues An object where the keys are indexed args returned by the event and
@@ -352,11 +394,12 @@ export class TokenWrapper extends ContractWrapper {
indexFilterValues: IndexedFilterValues,
): Promise<Array<LogWithDecodedArgs<ArgsType>>> {
assert.isETHAddressHex('tokenAddress', tokenAddress);
const normalizedTokenAddress = tokenAddress.toLowerCase();
assert.doesBelongToStringEnum('eventName', eventName, TokenEvents);
assert.doesConformToSchema('blockRange', blockRange, schemas.blockRangeSchema);
assert.doesConformToSchema('indexFilterValues', indexFilterValues, schemas.indexFilterValuesSchema);
const logs = await this._getLogsAsync<ArgsType>(
tokenAddress,
normalizedTokenAddress,
eventName,
blockRange,
indexFilterValues,
@@ -365,21 +408,27 @@ export class TokenWrapper extends ContractWrapper {
return logs;
}
private _invalidateContractInstances(): void {
this._unsubscribeAll();
this.unsubscribeAll();
this._tokenContractsByAddress = {};
}
private async _getTokenContractAsync(tokenAddress: string): Promise<TokenContract> {
let tokenContract = this._tokenContractsByAddress[tokenAddress];
const normalizedTokenAddress = tokenAddress.toLowerCase();
let tokenContract = this._tokenContractsByAddress[normalizedTokenAddress];
if (!_.isUndefined(tokenContract)) {
return tokenContract;
}
const web3ContractInstance = await this._instantiateContractIfExistsAsync(
const [abi, address] = await this._getContractAbiAndAddressFromArtifactsAsync(
artifacts.TokenArtifact,
tokenAddress,
normalizedTokenAddress,
);
const contractInstance = new TokenContract(
abi,
address,
this._web3Wrapper.getProvider(),
this._web3Wrapper.getContractDefaults(),
);
const contractInstance = new TokenContract(web3ContractInstance, this._web3Wrapper.getContractDefaults());
tokenContract = contractInstance;
this._tokenContractsByAddress[tokenAddress] = tokenContract;
this._tokenContractsByAddress[normalizedTokenAddress] = tokenContract;
return tokenContract;
}
}

View File

@@ -0,0 +1,28 @@
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
export class SimpleBalanceAndProxyAllowanceFetcher implements BalanceAndProxyAllowanceFetcher {
private _tokenWrapper: TokenWrapper;
private _defaultBlock: BlockParamLiteral;
constructor(token: TokenWrapper, defaultBlock: BlockParamLiteral) {
this._tokenWrapper = token;
this._defaultBlock = defaultBlock;
}
public async getBalanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber> {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const balance = this._tokenWrapper.getBalanceAsync(tokenAddress, userAddress, methodOpts);
return balance;
}
public async getProxyAllowanceAsync(tokenAddress: string, userAddress: string): Promise<BigNumber> {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const proxyAllowance = this._tokenWrapper.getProxyAllowanceAsync(tokenAddress, userAddress, methodOpts);
return proxyAllowance;
}
}

View File

@@ -0,0 +1,28 @@
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
export class SimpleOrderFilledCancelledFetcher implements OrderFilledCancelledFetcher {
private _exchangeWrapper: ExchangeWrapper;
private _defaultBlock: BlockParamLiteral;
constructor(exchange: ExchangeWrapper, defaultBlock: BlockParamLiteral) {
this._exchangeWrapper = exchange;
this._defaultBlock = defaultBlock;
}
public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const filledTakerAmount = this._exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
return filledTakerAmount;
}
public async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const cancelledTakerAmount = this._exchangeWrapper.getCancelledTakerAmountAsync(orderHash, methodOpts);
return cancelledTakerAmount;
}
}

View File

@@ -1,43 +1,6 @@
declare module 'web3_beta';
declare module 'chai-bignumber';
declare module 'dirty-chai';
declare module 'request-promise-native';
declare module 'web3-provider-engine';
declare module 'web3-provider-engine/subproviders/rpc';
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
// disallow `namespace`, we disable tslint for the following.
/* tslint:disable */
declare namespace Chai {
interface Assertion {
bignumber: Assertion;
// HACK: In order to comply with chai-as-promised we make eventually a `PromisedAssertion` not an `Assertion`
eventually: PromisedAssertion;
}
}
/* tslint:enable */
declare module '*.json' {
const json: any;
/* tslint:disable */
export default json;
/* tslint:enable */
}
declare module 'ethereumjs-abi' {
const soliditySHA3: (argTypes: string[], args: any[]) => Buffer;
}
// truffle-hdwallet-provider declarations
declare module 'truffle-hdwallet-provider' {
import * as Web3 from 'web3';
class HDWalletProvider implements Web3.Provider {
constructor(mnemonic: string, rpcUrl: string);
public sendAsync(
payload: Web3.JSONRPCRequestPayload,
callback: (err: Error, result: Web3.JSONRPCResponsePayload) => void,
): void;
}
export = HDWalletProvider;
}

View File

@@ -1,23 +0,0 @@
import { BigNumber } from '@0xproject/utils';
// HACK: This module overrides the Chai namespace so that we can use BigNumber types inside.
// Source: https://github.com/Microsoft/TypeScript/issues/7352#issuecomment-191547232
declare global {
// HACK: In order to merge the bignumber declaration added by chai-bignumber to the chai Assertion
// interface we must use `namespace` as the Chai definitelyTyped definition does. Since we otherwise
// disallow `namespace`, we disable tslint for the following.
/* tslint:disable */
namespace Chai {
interface NumberComparer {
(value: number | BigNumber, message?: string): Assertion;
}
interface NumericComparison {
greaterThan: NumberComparer;
}
}
/* tslint:enable */
interface DecodedLogArg {
name: string;
value: string | BigNumber;
}
}

View File

@@ -1,9 +1,6 @@
export { ZeroEx } from './0x';
export {
Order,
SignedOrder,
ECSignature,
ZeroExError,
EventCallback,
ExchangeContractErrs,
@@ -14,12 +11,10 @@ export {
OrderCancellationRequest,
OrderFillRequest,
ContractEventArgs,
Web3Provider,
ZeroExConfig,
MethodOpts,
OrderTransactionOpts,
TransactionOpts,
FilterObject,
LogEvent,
DecodedLogEvent,
EventWatcherCallback,
@@ -31,9 +26,15 @@ export {
export {
BlockParamLiteral,
FilterObject,
BlockParam,
ContractEventArg,
LogWithDecodedArgs,
Order,
Provider,
SignedOrder,
ECSignature,
TransactionReceipt,
TransactionReceiptWithDecodedLogs,
} from '@0xproject/types';
@@ -58,5 +59,3 @@ export {
ExchangeContractEventArgs,
ExchangeEvents,
} from './contract_wrappers/generated/exchange';
export { TransactionReceipt } from '@0xproject/types';

View File

@@ -0,0 +1,8 @@
import { postpublishUtils } from '@0xproject/monorepo-scripts';
import * as packageJSON from '../package.json';
import * as tsConfigJSON from '../tsconfig.json';
const cwd = `${__dirname}/..`;
// tslint:disable-next-line:no-floating-promises
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);

View File

@@ -0,0 +1,8 @@
import { postpublishUtils } from '@0xproject/monorepo-scripts';
import * as packageJSON from '../package.json';
import * as tsConfigJSON from '../tsconfig.json';
const cwd = `${__dirname}/..`;
// tslint:disable-next-line:no-floating-promises
postpublishUtils.publishDocsToStagingAsync(packageJSON, tsConfigJSON, cwd);

View File

@@ -1,9 +1,7 @@
import { BlockParamLiteral, LogEntry } from '@0xproject/types';
import { intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import * as Web3 from 'web3';
import { BlockParamLiteral } from '@0xproject/types';
import { EventWatcherCallback, ZeroExError } from '../types';
import { assert } from '../utils/assert';
@@ -15,7 +13,7 @@ enum LogEventState {
Added,
}
/*
/**
* The EventWatcher watches for blockchain events at the specified block confirmation
* depth.
*/
@@ -23,9 +21,15 @@ export class EventWatcher {
private _web3Wrapper: Web3Wrapper;
private _pollingIntervalMs: number;
private _intervalIdIfExists?: NodeJS.Timer;
private _lastEvents: Web3.LogEntry[] = [];
constructor(web3Wrapper: Web3Wrapper, pollingIntervalIfExistsMs: undefined | number) {
private _lastEvents: LogEntry[] = [];
private _stateLayer: BlockParamLiteral;
constructor(
web3Wrapper: Web3Wrapper,
pollingIntervalIfExistsMs: undefined | number,
stateLayer: BlockParamLiteral = BlockParamLiteral.Latest,
) {
this._web3Wrapper = web3Wrapper;
this._stateLayer = stateLayer;
this._pollingIntervalMs = _.isUndefined(pollingIntervalIfExistsMs)
? DEFAULT_EVENT_POLLING_INTERVAL_MS
: pollingIntervalIfExistsMs;
@@ -69,16 +73,16 @@ export class EventWatcher {
await this._emitDifferencesAsync(newEvents, LogEventState.Added, callback);
this._lastEvents = pendingEvents;
}
private async _getEventsAsync(): Promise<Web3.LogEntry[]> {
private async _getEventsAsync(): Promise<LogEntry[]> {
const eventFilter = {
fromBlock: BlockParamLiteral.Pending,
toBlock: BlockParamLiteral.Pending,
fromBlock: this._stateLayer,
toBlock: this._stateLayer,
};
const events = await this._web3Wrapper.getLogsAsync(eventFilter);
return events;
}
private async _emitDifferencesAsync(
logs: Web3.LogEntry[],
logs: LogEntry[],
logEventState: LogEventState,
callback: EventWatcherCallback,
): Promise<void> {

View File

@@ -48,6 +48,9 @@ export class ExpirationWatcher {
this._orderHashByExpirationRBTree.insert(orderHash);
}
public removeOrder(orderHash: string): void {
if (_.isUndefined(this._expiration[orderHash])) {
return; // noop since order already removed
}
this._orderHashByExpirationRBTree.remove(orderHash);
delete this._expiration[orderHash];
}

View File

@@ -1,5 +1,5 @@
import { schemas } from '@0xproject/json-schemas';
import { BlockParamLiteral, LogWithDecodedArgs } from '@0xproject/types';
import { BlockParamLiteral, LogWithDecodedArgs, SignedOrder } from '@0xproject/types';
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
@@ -31,7 +31,6 @@ import {
OnOrderStateChangeCallback,
OrderState,
OrderStateWatcherConfig,
SignedOrder,
ZeroExError,
} from '../types';
import { assert } from '../utils/assert';
@@ -60,7 +59,7 @@ const DEFAULT_CLEANUP_JOB_INTERVAL_MS = 1000 * 60 * 60; // 1h
/**
* This class includes all the functionality related to watching a set of orders
* for potential changes in order validity/fillability. The orderWatcher notifies
* the subscriber of these changes so that a final decison can be made on whether
* the subscriber of these changes so that a final decision can be made on whether
* the order should be deemed invalid.
*/
export class OrderStateWatcher {
@@ -70,7 +69,6 @@ export class OrderStateWatcher {
private _callbackIfExists?: OnOrderStateChangeCallback;
private _eventWatcher: EventWatcher;
private _web3Wrapper: Web3Wrapper;
private _abiDecoder: AbiDecoder;
private _expirationWatcher: ExpirationWatcher;
private _orderStateUtils: OrderStateUtils;
private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
@@ -79,20 +77,17 @@ export class OrderStateWatcher {
private _cleanupJobIntervalIdIfExists?: NodeJS.Timer;
constructor(
web3Wrapper: Web3Wrapper,
abiDecoder: AbiDecoder,
token: TokenWrapper,
exchange: ExchangeWrapper,
config?: OrderStateWatcherConfig,
) {
this._abiDecoder = abiDecoder;
this._web3Wrapper = web3Wrapper;
const pollingIntervalIfExistsMs = _.isUndefined(config) ? undefined : config.eventPollingIntervalMs;
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs);
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(
token,
BlockParamLiteral.Pending,
);
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange);
const stateLayer =
_.isUndefined(config) || _.isUndefined(config.stateLayer) ? BlockParamLiteral.Latest : config.stateLayer;
this._eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalIfExistsMs, stateLayer);
this._balanceAndProxyAllowanceLazyStore = new BalanceAndProxyAllowanceLazyStore(token, stateLayer);
this._orderFilledCancelledLazyStore = new OrderFilledCancelledLazyStore(exchange, stateLayer);
this._orderStateUtils = new OrderStateUtils(
this._balanceAndProxyAllowanceLazyStore,
this._orderFilledCancelledLazyStore,
@@ -136,7 +131,7 @@ export class OrderStateWatcher {
}
delete this._orderByOrderHash[orderHash];
delete this._orderStateByOrderHashCache[orderHash];
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
const exchange = (this._orderFilledCancelledLazyStore as any)._exchangeWrapper as ExchangeWrapper;
const zrxTokenAddress = exchange.getZRXTokenAddress();
this._removeFromDependentOrderHashes(signedOrder.maker, zrxTokenAddress, orderHash);
@@ -232,7 +227,7 @@ export class OrderStateWatcher {
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 maybeDecodedLog = this._web3Wrapper.abiDecoder.tryToDecodeLogOrNoop<ContractEventArgs>(log);
const isLogDecoded = !_.isUndefined(((maybeDecodedLog as any) as LogWithDecodedArgs<ContractEventArgs>).event);
if (!isLogDecoded) {
return; // noop
@@ -379,7 +374,7 @@ export class OrderStateWatcher {
}
}
private _getZRXTokenAddress(): string {
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
const exchange = (this._orderFilledCancelledLazyStore as any)._exchangeWrapper as ExchangeWrapper;
const zrxTokenAddress = exchange.getZRXTokenAddress();
return zrxTokenAddress;
}

View File

@@ -1,7 +1,6 @@
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { SignedOrder } from '../types';
export class RemainingFillableCalculator {
private _signedOrder: SignedOrder;
private _isMakerTokenZRX: boolean;

View File

@@ -1,27 +1,5 @@
export const zeroExConfigSchema = {
id: '/ZeroExConfig',
properties: {
networkId: {
type: 'number',
minimum: 0,
},
gasPrice: { $ref: '/Number' },
exchangeContractAddress: { $ref: '/Address' },
tokenRegistryContractAddress: { $ref: '/Address' },
orderWatcherConfig: {
type: 'object',
properties: {
pollingIntervalMs: {
type: 'number',
minimum: 0,
},
numConfirmations: {
type: 'number',
minimum: 0,
},
},
},
},
oneOf: [{ $ref: '/ZeroExPrivateNetworkConfig' }, { $ref: '/ZeroExPublicNetworkConfig' }],
type: 'object',
required: ['networkId'],
};

View File

@@ -0,0 +1,35 @@
export const zeroExPrivateNetworkConfigSchema = {
id: '/ZeroExPrivateNetworkConfig',
properties: {
networkId: {
type: 'number',
minimum: 1,
},
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
tokenRegistryContractAddress: { $ref: '/Address' },
tokenTransferProxyContractAddress: { $ref: '/Address' },
orderWatcherConfig: {
type: 'object',
properties: {
pollingIntervalMs: {
type: 'number',
minimum: 0,
},
numConfirmations: {
type: 'number',
minimum: 0,
},
},
},
},
type: 'object',
required: [
'networkId',
'zrxContractAddress',
'exchangeContractAddress',
'tokenRegistryContractAddress',
'tokenTransferProxyContractAddress',
],
};

View File

@@ -0,0 +1,29 @@
export const zeroExPublicNetworkConfigSchema = {
id: '/ZeroExPublicNetworkConfig',
properties: {
networkId: {
type: 'number',
enum: [1, 3, 4, 42, 50],
},
gasPrice: { $ref: '/Number' },
zrxContractAddress: { $ref: '/Address' },
exchangeContractAddress: { $ref: '/Address' },
tokenRegistryContractAddress: { $ref: '/Address' },
tokenTransferProxyContractAddress: { $ref: '/Address' },
orderWatcherConfig: {
type: 'object',
properties: {
pollingIntervalMs: {
type: 'number',
minimum: 0,
},
numConfirmations: {
type: 'number',
minimum: 0,
},
},
},
},
type: 'object',
required: ['networkId'],
};

View File

@@ -2,13 +2,14 @@ import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
/**
* Copy on read store for balances/proxyAllowances of tokens/accounts
*/
export class BalanceAndProxyAllowanceLazyStore {
private _token: TokenWrapper;
export class BalanceAndProxyAllowanceLazyStore implements BalanceAndProxyAllowanceFetcher {
private _tokenWrapper: TokenWrapper;
private _defaultBlock: BlockParamLiteral;
private _balance: {
[tokenAddress: string]: {
@@ -21,7 +22,7 @@ export class BalanceAndProxyAllowanceLazyStore {
};
};
constructor(token: TokenWrapper, defaultBlock: BlockParamLiteral) {
this._token = token;
this._tokenWrapper = token;
this._defaultBlock = defaultBlock;
this._balance = {};
this._proxyAllowance = {};
@@ -31,7 +32,7 @@ export class BalanceAndProxyAllowanceLazyStore {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const balance = await this._token.getBalanceAsync(tokenAddress, userAddress, methodOpts);
const balance = await this._tokenWrapper.getBalanceAsync(tokenAddress, userAddress, methodOpts);
this.setBalance(tokenAddress, userAddress, balance);
}
const cachedBalance = this._balance[tokenAddress][userAddress];
@@ -59,7 +60,11 @@ export class BalanceAndProxyAllowanceLazyStore {
const methodOpts = {
defaultBlock: this._defaultBlock,
};
const proxyAllowance = await this._token.getProxyAllowanceAsync(tokenAddress, userAddress, methodOpts);
const proxyAllowance = await this._tokenWrapper.getProxyAllowanceAsync(
tokenAddress,
userAddress,
methodOpts,
);
this.setProxyAllowance(tokenAddress, userAddress, proxyAllowance);
}
const cachedProxyAllowance = this._proxyAllowance[tokenAddress][userAddress];

View File

@@ -2,30 +2,33 @@ import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
/**
* Copy on read store for filled/cancelled taker amounts
*/
export class OrderFilledCancelledLazyStore {
private _exchange: ExchangeWrapper;
export class OrderFilledCancelledLazyStore implements OrderFilledCancelledFetcher {
private _exchangeWrapper: ExchangeWrapper;
private _defaultBlock: BlockParamLiteral;
private _filledTakerAmount: {
[orderHash: string]: BigNumber;
};
private _cancelledTakerAmount: {
[orderHash: string]: BigNumber;
};
constructor(exchange: ExchangeWrapper) {
this._exchange = exchange;
constructor(exchange: ExchangeWrapper, defaultBlock: BlockParamLiteral) {
this._exchangeWrapper = exchange;
this._defaultBlock = defaultBlock;
this._filledTakerAmount = {};
this._cancelledTakerAmount = {};
}
public async getFilledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
if (_.isUndefined(this._filledTakerAmount[orderHash])) {
const methodOpts = {
defaultBlock: BlockParamLiteral.Pending,
defaultBlock: this._defaultBlock,
};
const filledTakerAmount = await this._exchange.getFilledTakerAmountAsync(orderHash, methodOpts);
const filledTakerAmount = await this._exchangeWrapper.getFilledTakerAmountAsync(orderHash, methodOpts);
this.setFilledTakerAmount(orderHash, filledTakerAmount);
}
const cachedFilled = this._filledTakerAmount[orderHash];
@@ -40,9 +43,12 @@ export class OrderFilledCancelledLazyStore {
public async getCancelledTakerAmountAsync(orderHash: string): Promise<BigNumber> {
if (_.isUndefined(this._cancelledTakerAmount[orderHash])) {
const methodOpts = {
defaultBlock: BlockParamLiteral.Pending,
defaultBlock: this._defaultBlock,
};
const cancelledTakerAmount = await this._exchange.getCancelledTakerAmountAsync(orderHash, methodOpts);
const cancelledTakerAmount = await this._exchangeWrapper.getCancelledTakerAmountAsync(
orderHash,
methodOpts,
);
this.setCancelledTakerAmount(orderHash, cancelledTakerAmount);
}
const cachedCancelled = this._cancelledTakerAmount[orderHash];

View File

@@ -1,6 +1,16 @@
import { BigNumber } from '@0xproject/utils';
import { BlockParam, BlockParamLiteral, ContractEventArg, LogWithDecodedArgs } from '@0xproject/types';
import {
BlockParam,
BlockParamLiteral,
ContractAbi,
ContractEventArg,
FilterObject,
LogEntryEvent,
LogWithDecodedArgs,
Order,
SignedOrder,
} from '@0xproject/types';
import * as Web3 from 'web3';
@@ -28,7 +38,6 @@ export enum ZeroExError {
NoNetworkId = 'NO_NETWORK_ID',
SubscriptionNotFound = 'SUBSCRIPTION_NOT_FOUND',
SubscriptionAlreadyPresent = 'SUBSCRIPTION_ALREADY_PRESENT',
TransactionMiningTimeout = 'TRANSACTION_MINING_TIMEOUT',
}
export enum InternalZeroExError {
@@ -37,20 +46,11 @@ export enum InternalZeroExError {
WethNotInTokenRegistry = 'WETH_NOT_IN_TOKEN_REGISTRY',
}
/**
* Elliptic Curve signature
*/
export interface ECSignature {
v: number;
r: string;
s: string;
}
export type OrderAddresses = [string, string, string, string, string];
export type OrderValues = [BigNumber, BigNumber, BigNumber, BigNumber, BigNumber, BigNumber];
export type LogEvent = Web3.LogEntryEvent;
export type LogEvent = LogEntryEvent;
export interface DecodedLogEvent<ArgsType> {
isRemoved: boolean;
log: LogWithDecodedArgs<ArgsType>;
@@ -107,27 +107,8 @@ export interface ContractEvent {
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
export interface Order {
maker: string;
taker: string;
makerFee: BigNumber;
takerFee: BigNumber;
makerTokenAmount: BigNumber;
takerTokenAmount: BigNumber;
makerTokenAddress: string;
takerTokenAddress: string;
salt: BigNumber;
exchangeContractAddress: string;
feeRecipient: string;
expirationUnixTimestampSec: BigNumber;
}
export interface SignedOrder extends Order {
ecSignature: ECSignature;
}
// [address, name, symbol, decimals, ipfsHash, swarmHash]
export type TokenMetadata = [string, string, string, BigNumber, string, string];
export type TokenMetadata = [string, string, string, number, string, string];
export interface Token {
name: string;
@@ -174,29 +155,23 @@ export type AsyncMethod = (...args: any[]) => Promise<any>;
export type SyncMethod = (...args: any[]) => any;
/**
* We re-export the `Web3.Provider` type specified in the Web3 Typescript typings
* since it is the type of the `provider` argument to the `ZeroEx` constructor.
* It is however a `Web3` library type, not a native `0x.js` type. To learn more
* about providers, visit https://0xproject.com/wiki#Web3-Provider-Explained
*/
export type Web3Provider = Web3.Provider;
/*
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default: 50
* eventPollingIntervalMs: How often to poll the Ethereum node for new events. Defaults: 200
* orderExpirationCheckingIntervalMs: How often to check for expired orders. Default=50.
* eventPollingIntervalMs: How often to poll the Ethereum node for new events. Default=200.
* expirationMarginMs: Amount of time before order expiry that you'd like to be notified
* of an orders expiration. Defaults: 0
* cleanupJobIntervalMs: How often to run a cleanup job which revalidates all the orders. Defaults: 1h
* of an orders expiration. Default=0.
* cleanupJobIntervalMs: How often to run a cleanup job which revalidates all the orders. Default=1hr.
* stateLayer: Optional blockchain state layer OrderWatcher will monitor for new events. Default=latest.
*/
export interface OrderStateWatcherConfig {
orderExpirationCheckingIntervalMs?: number;
eventPollingIntervalMs?: number;
expirationMarginMs?: number;
cleanupJobIntervalMs?: number;
stateLayer: BlockParamLiteral;
}
/*
* 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, 3-ropsten, 4-rinkeby, 42-kovan, 50-testrpc)
* gasPrice: Gas price to use with every transaction
* exchangeContractAddress: The address of an exchange contract to use
* zrxContractAddress: The address of the ZRX contract to use
@@ -218,7 +193,7 @@ export type ArtifactContractName = 'ZRX' | 'TokenTransferProxy' | 'TokenRegistry
export interface Artifact {
contract_name: ArtifactContractName;
abi: Web3.ContractAbi;
abi: ContractAbi;
networks: {
[networkId: number]: {
address: string;
@@ -226,7 +201,7 @@ export interface Artifact {
};
}
/*
/**
* expectedFillTakerTokenAmount: If specified, the validation method will ensure that the
* supplied order maker has a sufficient allowance/balance to fill this amount of the order's
* takerTokenAmount. If not specified, the validation method ensures that the maker has a sufficient
@@ -236,17 +211,17 @@ export interface ValidateOrderFillableOpts {
expectedFillTakerTokenAmount?: BigNumber;
}
/*
/**
* defaultBlock: The block up to which to query the blockchain state. Setting this to a historical block number
* let's the user query the blockchain's state at an arbitrary point in time. In order for this to work, the
* backing Ethereum node must keep the entire historical state of the chain (e.g setting `--pruning=archive`
* flag when running Parity).
*/
export interface MethodOpts {
defaultBlock?: Web3.BlockParam;
defaultBlock?: BlockParam;
}
/*
/**
* gasPrice: Gas price in Wei to use for a transaction
* gasLimit: The amount of gas to send with a transaction
*/
@@ -255,16 +230,14 @@ export interface TransactionOpts {
gasLimit?: number;
}
/*
/**
* shouldValidate: Flag indicating whether the library should make attempts to validate a transaction before
* broadcasting it. For example, order has a valid signature, maker has sufficient funds, etc. Default: true
* broadcasting it. For example, order has a valid signature, maker has sufficient funds, etc. Default=true.
*/
export interface OrderTransactionOpts extends TransactionOpts {
shouldValidate?: boolean;
}
export type FilterObject = Web3.FilterObject;
export enum TradeSide {
Maker = 'maker',
Taker = 'taker',

View File

@@ -3,11 +3,11 @@ import { assert as sharedAssert } from '@0xproject/assert';
// tslint:disable-next-line:no-unused-variable
import { Schema } from '@0xproject/json-schemas';
// tslint:disable-next-line:no-unused-variable
import { ECSignature } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { ECSignature } from '../types';
import { signatureUtils } from '../utils/signature_utils';
export const assert = {

View File

@@ -1,8 +1,16 @@
import {
ConstructorAbi,
ContractAbi,
EventAbi,
FallbackAbi,
FilterObject,
LogEntry,
MethodAbi,
} from '@0xproject/types';
import * as ethUtil from 'ethereumjs-util';
import * as jsSHA3 from 'js-sha3';
import * as _ from 'lodash';
import * as uuid from 'uuid/v4';
import * as Web3 from 'web3';
import { BlockRange, ContractEvents, IndexedFilterValues } from '../types';
@@ -16,15 +24,15 @@ export const filterUtils = {
address: string,
eventName: ContractEvents,
indexFilterValues: IndexedFilterValues,
abi: Web3.ContractAbi,
abi: ContractAbi,
blockRange?: BlockRange,
): Web3.FilterObject {
const eventAbi = _.find(abi, { name: eventName }) as Web3.EventAbi;
): FilterObject {
const eventAbi = _.find(abi, { name: eventName }) as EventAbi;
const eventSignature = filterUtils.getEventSignatureFromAbiByName(eventAbi, eventName);
const topicForEventSignature = ethUtil.addHexPrefix(jsSHA3.keccak256(eventSignature));
const topicsForIndexedArgs = filterUtils.getTopicsForIndexedArgs(eventAbi, indexFilterValues);
const topics = [topicForEventSignature, ...topicsForIndexedArgs];
let filter: Web3.FilterObject = {
let filter: FilterObject = {
address,
topics,
};
@@ -36,12 +44,12 @@ export const filterUtils = {
}
return filter;
},
getEventSignatureFromAbiByName(eventAbi: Web3.EventAbi, eventName: ContractEvents): string {
getEventSignatureFromAbiByName(eventAbi: EventAbi, eventName: ContractEvents): string {
const types = _.map(eventAbi.inputs, 'type');
const signature = `${eventAbi.name}(${types.join(',')})`;
return signature;
},
getTopicsForIndexedArgs(abi: Web3.EventAbi, indexFilterValues: IndexedFilterValues): Array<string | null> {
getTopicsForIndexedArgs(abi: EventAbi, indexFilterValues: IndexedFilterValues): Array<string | null> {
const topics: Array<string | null> = [];
for (const eventInput of abi.inputs) {
if (!eventInput.indexed) {
@@ -60,7 +68,7 @@ export const filterUtils = {
}
return topics;
},
matchesFilter(log: Web3.LogEntry, filter: Web3.FilterObject): boolean {
matchesFilter(log: LogEntry, filter: FilterObject): boolean {
if (!_.isUndefined(filter.address) && log.address !== filter.address) {
return false;
}

View File

@@ -1,25 +1,19 @@
import { SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { ZeroEx } from '../0x';
import { BalanceAndProxyAllowanceFetcher } from '../abstract/balance_and_proxy_allowance_fetcher';
import { OrderFilledCancelledFetcher } from '../abstract/order_filled_cancelled_fetcher';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
import { RemainingFillableCalculator } from '../order_watcher/remaining_fillable_calculator';
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
import {
ExchangeContractErrs,
OrderRelevantState,
OrderState,
OrderStateInvalid,
OrderStateValid,
SignedOrder,
} from '../types';
import { ExchangeContractErrs, OrderRelevantState, OrderState, OrderStateInvalid, OrderStateValid } from '../types';
const ACCEPTABLE_RELATIVE_ROUNDING_ERROR = 0.0001;
export class OrderStateUtils {
private _balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore;
private _orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore;
private _balanceAndProxyAllowanceFetcher: BalanceAndProxyAllowanceFetcher;
private _orderFilledCancelledFetcher: OrderFilledCancelledFetcher;
private static _validateIfOrderIsValid(signedOrder: SignedOrder, orderRelevantState: OrderRelevantState): void {
const unavailableTakerTokenAmount = orderRelevantState.cancelledTakerTokenAmount.add(
orderRelevantState.filledTakerTokenAmount,
@@ -55,11 +49,11 @@ export class OrderStateUtils {
}
}
constructor(
balanceAndProxyAllowanceLazyStore: BalanceAndProxyAllowanceLazyStore,
orderFilledCancelledLazyStore: OrderFilledCancelledLazyStore,
balanceAndProxyAllowanceFetcher: BalanceAndProxyAllowanceFetcher,
orderFilledCancelledFetcher: OrderFilledCancelledFetcher,
) {
this._balanceAndProxyAllowanceLazyStore = balanceAndProxyAllowanceLazyStore;
this._orderFilledCancelledLazyStore = orderFilledCancelledLazyStore;
this._balanceAndProxyAllowanceFetcher = balanceAndProxyAllowanceFetcher;
this._orderFilledCancelledFetcher = orderFilledCancelledFetcher;
}
public async getOrderStateAsync(signedOrder: SignedOrder): Promise<OrderState> {
const orderRelevantState = await this.getOrderRelevantStateAsync(signedOrder);
@@ -86,27 +80,27 @@ export class OrderStateUtils {
// If we pass it from the instantiator - there is no opportunity to get it there
// because JS doesn't support async constructors.
// Moreover - it's cached under the hood so it's equivalent to an async constructor.
const exchange = (this._orderFilledCancelledLazyStore as any)._exchange as ExchangeWrapper;
const exchange = (this._orderFilledCancelledFetcher as any)._exchangeWrapper as ExchangeWrapper;
const zrxTokenAddress = exchange.getZRXTokenAddress();
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
const makerBalance = await this._balanceAndProxyAllowanceLazyStore.getBalanceAsync(
const makerBalance = await this._balanceAndProxyAllowanceFetcher.getBalanceAsync(
signedOrder.makerTokenAddress,
signedOrder.maker,
);
const makerProxyAllowance = await this._balanceAndProxyAllowanceLazyStore.getProxyAllowanceAsync(
const makerProxyAllowance = await this._balanceAndProxyAllowanceFetcher.getProxyAllowanceAsync(
signedOrder.makerTokenAddress,
signedOrder.maker,
);
const makerFeeBalance = await this._balanceAndProxyAllowanceLazyStore.getBalanceAsync(
const makerFeeBalance = await this._balanceAndProxyAllowanceFetcher.getBalanceAsync(
zrxTokenAddress,
signedOrder.maker,
);
const makerFeeProxyAllowance = await this._balanceAndProxyAllowanceLazyStore.getProxyAllowanceAsync(
const makerFeeProxyAllowance = await this._balanceAndProxyAllowanceFetcher.getProxyAllowanceAsync(
zrxTokenAddress,
signedOrder.maker,
);
const filledTakerTokenAmount = await this._orderFilledCancelledLazyStore.getFilledTakerAmountAsync(orderHash);
const cancelledTakerTokenAmount = await this._orderFilledCancelledLazyStore.getCancelledTakerAmountAsync(
const filledTakerTokenAmount = await this._orderFilledCancelledFetcher.getFilledTakerAmountAsync(orderHash);
const cancelledTakerTokenAmount = await this._orderFilledCancelledFetcher.getCancelledTakerAmountAsync(
orderHash,
);
const unavailableTakerTokenAmount = await exchange.getUnavailableTakerAmountAsync(orderHash);

View File

@@ -1,9 +1,10 @@
import { Order, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { ZeroEx } from '../0x';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
import { ExchangeContractErrs, Order, SignedOrder, TradeSide, TransferType, ZeroExError } from '../types';
import { ExchangeContractErrs, TradeSide, TransferType, ZeroExError } from '../types';
import { constants } from '../utils/constants';
import { utils } from '../utils/utils';

View File

@@ -1,7 +1,6 @@
import { ECSignature } from '@0xproject/types';
import * as ethUtil from 'ethereumjs-util';
import { ECSignature } from '../types';
export const signatureUtils = {
isValidSignature(data: string, signature: ECSignature, signerAddress: string): boolean {
const dataBuff = ethUtil.toBuffer(data);

View File

@@ -1,12 +1,10 @@
import { SolidityTypes } from '@0xproject/types';
import { Order, SignedOrder, SolidityTypes } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import BN = require('bn.js');
import * as ethABI from 'ethereumjs-abi';
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
import { Order, SignedOrder } from '../types';
export const utils = {
/**
* Converts BigNumber instance to BN
@@ -17,10 +15,6 @@ export const utils = {
bigNumberToBN(value: BigNumber) {
return new BN(value.toString(), 10);
},
consoleLog(message: string): void {
// tslint:disable-next-line: no-console
console.log(message);
},
spawnSwitchErr(name: string, value: any): Error {
return new Error(`Unexpected switch value: ${value} encountered for ${name}`);
},

View File

@@ -1,28 +1,39 @@
import { Deployer } from '@0xproject/deployer';
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
// HACK: This dependency is optional since it is only available when run from within
// the monorepo. tslint doesn't handle optional dependencies
// tslint:disable-next-line:no-implicit-dependencies
import { runMigrationsAsync } from '@0xproject/migrations';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
import * as path from 'path';
import * as Sinon from 'sinon';
import { ApprovalContractEventArgs, LogWithDecodedArgs, Order, TokenEvents, ZeroEx } from '../src';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { deployer } from './utils/deployer';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
chaiSetup.configure();
const expect = chai.expect;
const SHOULD_ADD_PERSONAL_MESSAGE_PREFIX = false;
describe('ZeroEx library', () => {
const web3 = web3Factory.create();
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
const zeroEx = new ZeroEx(web3.currentProvider, config);
let zeroEx: ZeroEx;
before(async () => {
await runMigrationsAsync(deployer);
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
zeroEx = new ZeroEx(provider, config);
});
describe('#setProvider', () => {
it('overrides provider in nested web3s and invalidates contractInstances', async () => {
// Instantiate the contract instances with the current provider
@@ -31,21 +42,20 @@ describe('ZeroEx library', () => {
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.not.be.undefined();
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.not.be.undefined();
const newProvider = web3Factory.getRpcProvider();
// Add property to newProvider so that we can differentiate it from old provider
(newProvider as any).zeroExTestId = 1;
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
(provider as any).zeroExTestId = 1;
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
// Check that contractInstances with old provider are removed after provider update
expect((zeroEx.exchange as any)._exchangeContractIfExists).to.be.undefined();
expect((zeroEx.tokenRegistry as any)._tokenRegistryContractIfExists).to.be.undefined();
// Check that all nested web3 wrapper instances return the updated provider
const nestedWeb3WrapperProvider = (zeroEx as any)._web3Wrapper.getCurrentProvider();
const nestedWeb3WrapperProvider = (zeroEx as any)._web3Wrapper.getProvider();
expect(nestedWeb3WrapperProvider.zeroExTestId).to.be.a('number');
const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getCurrentProvider();
const exchangeWeb3WrapperProvider = (zeroEx.exchange as any)._web3Wrapper.getProvider();
expect(exchangeWeb3WrapperProvider.zeroExTestId).to.be.a('number');
const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getCurrentProvider();
const tokenRegistryWeb3WrapperProvider = (zeroEx.tokenRegistry as any)._web3Wrapper.getProvider();
expect(tokenRegistryWeb3WrapperProvider.zeroExTestId).to.be.a('number');
});
});
@@ -216,7 +226,7 @@ describe('ZeroEx library', () => {
s: '0x050aa3cc1f2c435e67e114cdce54b9527b4f50548342401bc5d2b77adbdacb02',
};
stubs = [
Sinon.stub((zeroEx as any)._web3Wrapper, 'signTransactionAsync').returns(Promise.resolve(signature)),
Sinon.stub((zeroEx as any)._web3Wrapper, 'signMessageAsync').returns(Promise.resolve(signature)),
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
];
@@ -237,7 +247,7 @@ describe('ZeroEx library', () => {
s: '0x2dea66f25a608bbae457e020fb6decb763deb8b7192abab624997242da248960',
};
stubs = [
Sinon.stub((zeroEx as any)._web3Wrapper, 'signTransactionAsync').returns(Promise.resolve(signature)),
Sinon.stub((zeroEx as any)._web3Wrapper, 'signMessageAsync').returns(Promise.resolve(signature)),
Sinon.stub(ZeroEx, 'isValidSignature').returns(true),
];
@@ -278,7 +288,7 @@ describe('ZeroEx library', () => {
exchangeContractAddress: ZeroEx.NULL_ADDRESS,
networkId: constants.TESTRPC_NETWORK_ID,
};
const zeroExWithWrongExchangeAddress = new ZeroEx(web3.currentProvider, zeroExConfig);
const zeroExWithWrongExchangeAddress = new ZeroEx(provider, zeroExConfig);
expect(zeroExWithWrongExchangeAddress.exchange.getContractAddress()).to.be.equal(ZeroEx.NULL_ADDRESS);
});
it('allows to specify token registry token contract address', async () => {
@@ -286,7 +296,7 @@ describe('ZeroEx library', () => {
tokenRegistryContractAddress: ZeroEx.NULL_ADDRESS,
networkId: constants.TESTRPC_NETWORK_ID,
};
const zeroExWithWrongTokenRegistryAddress = new ZeroEx(web3.currentProvider, zeroExConfig);
const zeroExWithWrongTokenRegistryAddress = new ZeroEx(provider, zeroExConfig);
expect(zeroExWithWrongTokenRegistryAddress.tokenRegistry.getContractAddress()).to.be.equal(
ZeroEx.NULL_ADDRESS,
);

View File

@@ -1,5 +1,5 @@
import { web3Factory } from '@0xproject/dev-utils';
import * as fs from 'fs';
import HDWalletProvider = require('truffle-hdwallet-provider');
import { ZeroEx } from '../src';
@@ -14,14 +14,11 @@ const TIMEOUT = 10000;
describe('Artifacts', () => {
describe('contracts are deployed on kovan', () => {
const kovanRpcUrl = constants.KOVAN_RPC_URL;
const packageJSONContent = fs.readFileSync('package.json', 'utf-8');
const packageJSON = JSON.parse(packageJSONContent);
const mnemonic = packageJSON.config.mnemonic;
const web3Provider = new HDWalletProvider(mnemonic, kovanRpcUrl);
const provider = web3Factory.create({ rpcUrl: kovanRpcUrl }).currentProvider;
const config = {
networkId: constants.KOVAN_NETWORK_ID,
};
const zeroEx = new ZeroEx(web3Provider, config);
const zeroEx = new ZeroEx(provider, config);
it('token registry contract is deployed', async () => {
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
}).timeout(TIMEOUT);
@@ -34,14 +31,11 @@ describe('Artifacts', () => {
});
describe('contracts are deployed on ropsten', () => {
const ropstenRpcUrl = constants.ROPSTEN_RPC_URL;
const packageJSONContent = fs.readFileSync('package.json', 'utf-8');
const packageJSON = JSON.parse(packageJSONContent);
const mnemonic = packageJSON.config.mnemonic;
const web3Provider = new HDWalletProvider(mnemonic, ropstenRpcUrl);
const provider = web3Factory.create({ rpcUrl: ropstenRpcUrl }).currentProvider;
const config = {
networkId: constants.ROPSTEN_NETWORK_ID,
};
const zeroEx = new ZeroEx(web3Provider, config);
const zeroEx = new ZeroEx(provider, config);
it('token registry contract is deployed', async () => {
await (zeroEx.tokenRegistry as any)._getTokenRegistryContractAsync();
}).timeout(TIMEOUT);

View File

@@ -6,15 +6,15 @@ import { ZeroEx } from '../src';
import { assert } from '../src/utils/assert';
import { constants } from './utils/constants';
import { provider } from './utils/web3_wrapper';
const expect = chai.expect;
describe('Assertion library', () => {
const web3 = web3Factory.create();
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
const zeroEx = new ZeroEx(web3.currentProvider, config);
const zeroEx = new ZeroEx(provider, config);
describe('#isSenderAddressHexAsync', () => {
it('throws when address is invalid', async () => {
const address = '0xdeadbeef';

View File

@@ -1,8 +1,8 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import 'mocha';
import * as Web3 from 'web3';
import {
ApprovalContractEventArgs,
@@ -23,10 +23,11 @@ import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
// Since the address depositing/withdrawing ETH/WETH also needs to pay gas costs for the transaction,
// a small amount of ETH will be used to pay this gas cost. We therefore check that the difference between
@@ -35,7 +36,6 @@ const blockchainLifecycle = new BlockchainLifecycle();
const MAX_REASONABLE_GAS_COST_IN_WEI = 62517;
describe('EtherTokenWrapper', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let tokens: Token[];
let userAddresses: string[];
@@ -54,13 +54,12 @@ describe('EtherTokenWrapper', () => {
const depositAmount = new BigNumber(42);
const withdrawalAmount = new BigNumber(42);
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);
zeroEx = new ZeroEx(provider, zeroExConfig);
tokens = await zeroEx.tokenRegistry.getTokensAsync();
userAddresses = await zeroEx.getAvailableAddressesAsync();
addressWithETH = userAddresses[0];
wethContractAddress = zeroEx.etherToken.getContractAddressIfExists() as string;
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
depositWeiAmount = Web3Wrapper.toWei(new BigNumber(5));
decimalPlaces = 7;
addressWithoutFunds = userAddresses[1];
});
@@ -75,11 +74,14 @@ describe('EtherTokenWrapper', () => {
const contractAddressIfExists = zeroEx.etherToken.getContractAddressIfExists();
expect(contractAddressIfExists).to.not.be.undefined();
});
it('should return undefined if connected to an unknown network', () => {
it('should throw if connected to a private network and contract addresses are not specified', () => {
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();
expect(
() =>
new ZeroEx(provider, {
networkId: UNKNOWN_NETWORK_NETWORK_ID,
} as any),
).to.throw();
});
});
describe('#depositAsync', () => {
@@ -103,7 +105,7 @@ describe('EtherTokenWrapper', () => {
it('should throw if user has insufficient ETH balance for deposit', async () => {
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
const extraETHBalance = (zeroEx as any)._web3Wrapper.toWei(5, 'ether');
const extraETHBalance = Web3Wrapper.toWei(new BigNumber(5));
const overETHBalanceinWei = preETHBalance.add(extraETHBalance);
return expect(
@@ -135,7 +137,7 @@ describe('EtherTokenWrapper', () => {
gasCost = expectedETHBalance.minus(postETHBalance);
expect(gasCost).to.be.bignumber.lte(MAX_REASONABLE_GAS_COST_IN_WEI);
});
it('should throw if user has insufficient WETH balance for withdrawl', async () => {
it('should throw if user has insufficient WETH balance for withdrawal', async () => {
const preWETHBalance = await zeroEx.token.getBalanceAsync(wethContractAddress, addressWithETH);
expect(preWETHBalance).to.be.bignumber.equal(0);
@@ -155,7 +157,7 @@ describe('EtherTokenWrapper', () => {
etherTokenAddress = etherToken.address;
});
afterEach(() => {
zeroEx.etherToken._unsubscribeAll();
zeroEx.etherToken.unsubscribeAll();
});
// 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,
@@ -258,8 +260,7 @@ describe('EtherTokenWrapper', () => {
callbackNeverToBeCalled,
);
const callbackToBeCalled = reportNodeCallbackErrors(done)();
const newProvider = web3Factory.getRpcProvider();
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
await zeroEx.etherToken.depositAsync(etherTokenAddress, transferAmount, addressWithETH);
zeroEx.etherToken.subscribe(
etherTokenAddress,

View File

@@ -1,10 +1,10 @@
import { web3Factory } from '@0xproject/dev-utils';
import { LogEntry } from '@0xproject/types';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
import * as Sinon from 'sinon';
import * as Web3 from 'web3';
import { LogEvent } from '../src';
import { EventWatcher } from '../src/order_watcher/event_watcher';
@@ -12,16 +12,16 @@ import { DoneCallback } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
import { provider } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
describe('EventWatcher', () => {
let web3: Web3;
let stubs: Sinon.SinonStub[] = [];
let eventWatcher: EventWatcher;
let web3Wrapper: Web3Wrapper;
const logA: Web3.LogEntry = {
const logA: LogEntry = {
address: '0x71d271f8b14adef568f8f28f1587ce7271ac4ca5',
blockHash: null,
blockNumber: null,
@@ -31,7 +31,7 @@ describe('EventWatcher', () => {
transactionHash: '0x004881d38cd4a8f72f1a0d68c8b9b8124504706041ff37019c1d1ed6bfda8e17',
transactionIndex: 0,
};
const logB: Web3.LogEntry = {
const logB: LogEntry = {
address: '0x8d12a197cb00d4747a1fe03395095ce2a5cc6819',
blockHash: null,
blockNumber: null,
@@ -41,7 +41,7 @@ describe('EventWatcher', () => {
transactionHash: '0x01ef3c048b18d9b09ea195b4ed94cf8dd5f3d857a1905ff886b152cfb1166f25',
transactionIndex: 0,
};
const logC: Web3.LogEntry = {
const logC: LogEntry = {
address: '0x1d271f8b174adef58f1587ce68f8f27271ac4ca5',
blockHash: null,
blockNumber: null,
@@ -52,9 +52,8 @@ describe('EventWatcher', () => {
transactionIndex: 0,
};
before(async () => {
web3 = web3Factory.create();
const pollingIntervalMs = 10;
web3Wrapper = new Web3Wrapper(web3.currentProvider);
web3Wrapper = new Web3Wrapper(provider);
eventWatcher = new EventWatcher(web3Wrapper, pollingIntervalMs);
});
afterEach(() => {
@@ -64,7 +63,7 @@ describe('EventWatcher', () => {
eventWatcher.unsubscribe();
});
it('correctly emits initial log events', (done: DoneCallback) => {
const logs: Web3.LogEntry[] = [logA, logB];
const logs: LogEntry[] = [logA, logB];
const expectedLogEvents = [
{
removed: false,
@@ -89,8 +88,8 @@ describe('EventWatcher', () => {
eventWatcher.subscribe(callback);
});
it('correctly computes the difference and emits only changes', (done: DoneCallback) => {
const initialLogs: Web3.LogEntry[] = [logA, logB];
const changedLogs: Web3.LogEntry[] = [logA, logC];
const initialLogs: LogEntry[] = [logA, logB];
const changedLogs: LogEntry[] = [logA, logC];
const expectedLogEvents = [
{
removed: false,

View File

@@ -1,4 +1,4 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
@@ -9,17 +9,17 @@ import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simula
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('ExchangeTransferSimulator', () => {
const web3 = web3Factory.create();
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
const zeroEx = new ZeroEx(web3.currentProvider, config);
const zeroEx = new ZeroEx(provider, config);
const transferAmount = new BigNumber(5);
let userAddresses: string[];
let tokens: Token[];

View File

@@ -4,7 +4,6 @@ import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
import * as Web3 from 'web3';
import {
BlockRange,
@@ -15,6 +14,7 @@ import {
LogFillContractEventArgs,
OrderCancellationRequest,
OrderFillRequest,
OrderState,
SignedOrder,
Token,
ZeroEx,
@@ -26,15 +26,15 @@ import { constants } from './utils/constants';
import { FillScenarios } from './utils/fill_scenarios';
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
const NON_EXISTENT_ORDER_HASH = '0x79370342234e7acd6bbeac335bd3bb1d368383294b64b8160a00f4060e4d3777';
describe('ExchangeWrapper', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let tokenUtils: TokenUtils;
let tokens: Token[];
@@ -46,8 +46,7 @@ describe('ExchangeWrapper', () => {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
exchangeContractAddress = zeroEx.exchange.getContractAddress();
userAddresses = await zeroEx.getAvailableAddressesAsync();
tokens = await zeroEx.tokenRegistry.getTokensAsync();
@@ -597,6 +596,19 @@ describe('ExchangeWrapper', () => {
const remainingFillAmount = fillableAmount.minus(1);
expect(anotherFilledAmount).to.be.bignumber.equal(remainingFillAmount);
});
it('should successfully fill up to specified amount and leave the rest of the orders untouched', async () => {
const txHash = await zeroEx.exchange.fillOrdersUpToAsync(
signedOrders,
fillableAmount,
shouldThrowOnInsufficientBalanceOrAllowance,
takerAddress,
);
await zeroEx.awaitTransactionMinedAsync(txHash);
const filledAmount = await zeroEx.exchange.getFilledTakerAmountAsync(signedOrderHashHex);
const zeroAmount = await zeroEx.exchange.getFilledTakerAmountAsync(anotherOrderHashHex);
expect(filledAmount).to.be.bignumber.equal(fillableAmount);
expect(zeroAmount).to.be.bignumber.equal(0);
});
it('should successfully fill up to specified amount even if filling all orders would fail', async () => {
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.
@@ -922,7 +934,7 @@ describe('ExchangeWrapper', () => {
);
});
afterEach(async () => {
zeroEx.exchange._unsubscribeAll();
zeroEx.exchange.unsubscribeAll();
});
// 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,
@@ -965,8 +977,7 @@ describe('ExchangeWrapper', () => {
);
zeroEx.exchange.subscribe(ExchangeEvents.LogFill, indexFilterValues, callbackNeverToBeCalled);
const newProvider = web3Factory.getRpcProvider();
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
const callback = reportNodeCallbackErrors(done)(
(logEvent: DecodedLogEvent<LogFillContractEventArgs>) => {
@@ -1144,4 +1155,41 @@ describe('ExchangeWrapper', () => {
expect(args.maker).to.be.equal(differentMakerAddress);
});
});
describe('#getOrderStateAsync', () => {
let maker: string;
let taker: string;
let makerToken: Token;
let takerToken: Token;
let signedOrder: SignedOrder;
let orderState: OrderState;
const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), constants.ZRX_DECIMALS);
before(async () => {
[, maker, taker] = userAddresses;
tokens = await zeroEx.tokenRegistry.getTokensAsync();
[makerToken, takerToken] = tokenUtils.getDummyTokens();
});
it('should report orderStateValid when order is fillable', async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
makerToken.address,
takerToken.address,
maker,
taker,
fillableAmount,
);
orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
expect(orderState.isValid).to.be.true();
});
it('should report orderStateInvalid when maker allowance set to 0', async () => {
signedOrder = await fillScenarios.createFillableSignedOrderAsync(
makerToken.address,
takerToken.address,
maker,
taker,
fillableAmount,
);
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
orderState = await zeroEx.exchange.getOrderStateAsync(signedOrder);
expect(orderState.isValid).to.be.false();
});
});
}); // tslint:disable:max-file-line-count

View File

@@ -1,28 +1,27 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
import * as Sinon from 'sinon';
import * as Web3 from 'web3';
import { ZeroEx } from '../src/0x';
import { ExpirationWatcher } from '../src/order_watcher/expiration_watcher';
import { DoneCallback, Token } from '../src/types';
import { constants } from '../src/utils/constants';
import { utils } from '../src/utils/utils';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { FillScenarios } from './utils/fill_scenarios';
import { reportNoErrorCallbackErrors } from './utils/report_callback_errors';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('ExpirationWatcher', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let tokenUtils: TokenUtils;
let tokens: Token[];
@@ -41,11 +40,10 @@ describe('ExpirationWatcher', () => {
let timer: Sinon.SinonFakeTimers;
let expirationWatcher: ExpirationWatcher;
before(async () => {
web3 = web3Factory.create();
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
exchangeContractAddress = zeroEx.exchange.getContractAddress();
userAddresses = await zeroEx.getAvailableAddressesAsync();
tokens = await zeroEx.tokenRegistry.getTokensAsync();

View File

@@ -1,9 +1,8 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
import 'mocha';
import * as Web3 from 'web3';
import {
ExchangeContractErrs,
@@ -15,6 +14,7 @@ import {
ZeroEx,
ZeroExError,
} from '../src';
import { OrderStateWatcher } from '../src/order_watcher/order_state_watcher';
import { DoneCallback } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
@@ -22,15 +22,15 @@ import { constants } from './utils/constants';
import { FillScenarios } from './utils/fill_scenarios';
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
const TIMEOUT_MS = 150;
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('OrderStateWatcher', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let tokens: Token[];
let tokenUtils: TokenUtils;
@@ -43,14 +43,15 @@ describe('OrderStateWatcher', () => {
let maker: string;
let taker: string;
let signedOrder: SignedOrder;
let orderStateWatcher: OrderStateWatcher;
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
const decimals = constants.ZRX_DECIMALS;
const fillableAmount = ZeroEx.toBaseUnitAmount(new BigNumber(5), decimals);
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
orderStateWatcher = zeroEx.createOrderStateWatcher();
exchangeContractAddress = zeroEx.exchange.getContractAddress();
userAddresses = await zeroEx.getAvailableAddressesAsync();
[, maker, taker] = userAddresses;
@@ -77,17 +78,17 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
expect((zeroEx.orderStateWatcher as any)._orderByOrderHash).to.include({
orderStateWatcher.addOrder(signedOrder);
expect((orderStateWatcher as any)._orderByOrderHash).to.include({
[orderHash]: signedOrder,
});
let dependentOrderHashes = (zeroEx.orderStateWatcher as any)._dependentOrderHashes;
let dependentOrderHashes = (orderStateWatcher as any)._dependentOrderHashes;
expect(dependentOrderHashes[signedOrder.maker][signedOrder.makerTokenAddress]).to.have.keys(orderHash);
zeroEx.orderStateWatcher.removeOrder(orderHash);
expect((zeroEx.orderStateWatcher as any)._orderByOrderHash).to.not.include({
orderStateWatcher.removeOrder(orderHash);
expect((orderStateWatcher as any)._orderByOrderHash).to.not.include({
[orderHash]: signedOrder,
});
dependentOrderHashes = (zeroEx.orderStateWatcher as any)._dependentOrderHashes;
dependentOrderHashes = (orderStateWatcher as any)._dependentOrderHashes;
expect(dependentOrderHashes[signedOrder.maker]).to.be.undefined();
});
it('should no-op when removing a non-existing order', async () => {
@@ -104,23 +105,23 @@ describe('OrderStateWatcher', () => {
.split('')
.reverse()
.join('')}`;
zeroEx.orderStateWatcher.removeOrder(nonExistentOrderHash);
orderStateWatcher.removeOrder(nonExistentOrderHash);
});
});
describe('#subscribe', async () => {
afterEach(async () => {
zeroEx.orderStateWatcher.unsubscribe();
orderStateWatcher.unsubscribe();
});
it('should fail when trying to subscribe twice', async () => {
zeroEx.orderStateWatcher.subscribe(_.noop);
expect(() => zeroEx.orderStateWatcher.subscribe(_.noop)).to.throw(ZeroExError.SubscriptionAlreadyPresent);
orderStateWatcher.subscribe(_.noop);
expect(() => orderStateWatcher.subscribe(_.noop)).to.throw(ZeroExError.SubscriptionAlreadyPresent);
});
});
describe('tests with cleanup', async () => {
afterEach(async () => {
zeroEx.orderStateWatcher.unsubscribe();
orderStateWatcher.unsubscribe();
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.removeOrder(orderHash);
orderStateWatcher.removeOrder(orderHash);
});
it('should emit orderStateInvalid when maker allowance set to 0 for watched order', (done: DoneCallback) => {
(async () => {
@@ -132,14 +133,14 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerAllowance);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, new BigNumber(0));
})().catch(done);
});
@@ -152,11 +153,11 @@ describe('OrderStateWatcher', () => {
taker,
fillableAmount,
);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
throw new Error('OrderState callback fired for irrelevant order');
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
const notTheMaker = userAddresses[0];
const anyRecipient = taker;
const transferAmount = new BigNumber(2);
@@ -176,14 +177,14 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
const invalidOrderState = orderState as OrderStateInvalid;
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.InsufficientMakerBalance);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
const anyRecipient = taker;
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
await zeroEx.token.transferAsync(makerToken.address, maker, anyRecipient, makerBalance);
@@ -199,7 +200,7 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
@@ -207,7 +208,7 @@ describe('OrderStateWatcher', () => {
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
const shouldThrowOnInsufficientBalanceOrAllowance = true;
await zeroEx.exchange.fillOrderAsync(
@@ -231,7 +232,7 @@ describe('OrderStateWatcher', () => {
const makerBalance = await zeroEx.token.getBalanceAsync(makerToken.address, maker);
const fillAmountInBaseUnits = new BigNumber(2);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
@@ -248,7 +249,7 @@ describe('OrderStateWatcher', () => {
);
expect(orderRelevantState.makerBalance).to.be.bignumber.equal(remainingMakerBalance);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
const shouldThrowOnInsufficientBalanceOrAllowance = true;
await zeroEx.exchange.fillOrderAsync(
signedOrder,
@@ -273,8 +274,8 @@ describe('OrderStateWatcher', () => {
taker,
);
const callback = reportNodeCallbackErrors(done)();
zeroEx.orderStateWatcher.addOrder(signedOrder);
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.subscribe(callback);
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, new BigNumber(0));
})().catch(done);
});
@@ -293,7 +294,7 @@ describe('OrderStateWatcher', () => {
);
const fillAmountInBaseUnits = ZeroEx.toBaseUnitAmount(new BigNumber(2), decimals);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
const validOrderState = orderState as OrderStateValid;
@@ -306,7 +307,7 @@ describe('OrderStateWatcher', () => {
ZeroEx.toBaseUnitAmount(new BigNumber(8), decimals),
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
const shouldThrowOnInsufficientBalanceOrAllowance = true;
await zeroEx.exchange.fillOrderAsync(
signedOrder,
@@ -327,7 +328,7 @@ describe('OrderStateWatcher', () => {
);
const changedMakerApprovalAmount = ZeroEx.toBaseUnitAmount(new BigNumber(3), decimals);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
@@ -339,7 +340,7 @@ describe('OrderStateWatcher', () => {
changedMakerApprovalAmount,
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.token.setProxyAllowanceAsync(makerToken.address, maker, changedMakerApprovalAmount);
})().catch(done);
});
@@ -357,7 +358,7 @@ describe('OrderStateWatcher', () => {
const remainingAmount = ZeroEx.toBaseUnitAmount(new BigNumber(1), decimals);
const transferAmount = makerBalance.sub(remainingAmount);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
@@ -370,7 +371,7 @@ describe('OrderStateWatcher', () => {
remainingAmount,
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.token.transferAsync(makerToken.address, maker, ZeroEx.NULL_ADDRESS, transferAmount);
})().catch(done);
});
@@ -392,7 +393,7 @@ describe('OrderStateWatcher', () => {
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
@@ -402,7 +403,7 @@ describe('OrderStateWatcher', () => {
remainingTokenAmount,
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.exchange.cancelOrderAsync(signedOrder, transferTokenAmount);
})().catch(done);
});
@@ -426,7 +427,7 @@ describe('OrderStateWatcher', () => {
const remainingTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(4), decimals);
const transferTokenAmount = makerFee.sub(remainingTokenAmount);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
@@ -435,7 +436,7 @@ describe('OrderStateWatcher', () => {
remainingFeeAmount,
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.token.setProxyAllowanceAsync(zrxTokenAddress, maker, remainingFeeAmount);
await zeroEx.token.transferAsync(
makerToken.address,
@@ -461,7 +462,7 @@ describe('OrderStateWatcher', () => {
feeRecipient,
);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
const validOrderState = orderState as OrderStateValid;
@@ -470,7 +471,7 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.token.setProxyAllowanceAsync(
makerToken.address,
maker,
@@ -489,7 +490,7 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
@@ -497,7 +498,7 @@ describe('OrderStateWatcher', () => {
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderRemainingFillAmountZero);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.exchange.cancelOrderAsync(signedOrder, fillableAmount);
})().catch(done);
@@ -513,7 +514,7 @@ describe('OrderStateWatcher', () => {
fillableAmount,
);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.false();
@@ -521,7 +522,7 @@ describe('OrderStateWatcher', () => {
expect(invalidOrderState.orderHash).to.be.equal(orderHash);
expect(invalidOrderState.error).to.be.equal(ExchangeContractErrs.OrderFillRoundingError);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.exchange.cancelOrderAsync(
signedOrder,
fillableAmount.minus(remainingFillableAmountInBaseUnits),
@@ -540,7 +541,7 @@ describe('OrderStateWatcher', () => {
const cancelAmountInBaseUnits = new BigNumber(2);
const orderHash = ZeroEx.getOrderHashHex(signedOrder);
zeroEx.orderStateWatcher.addOrder(signedOrder);
orderStateWatcher.addOrder(signedOrder);
const callback = reportNodeCallbackErrors(done)((orderState: OrderState) => {
expect(orderState.isValid).to.be.true();
@@ -549,7 +550,7 @@ describe('OrderStateWatcher', () => {
const orderRelevantState = validOrderState.orderRelevantState;
expect(orderRelevantState.cancelledTakerTokenAmount).to.be.bignumber.equal(cancelAmountInBaseUnits);
});
zeroEx.orderStateWatcher.subscribe(callback);
orderStateWatcher.subscribe(callback);
await zeroEx.exchange.cancelOrderAsync(signedOrder, cancelAmountInBaseUnits);
})().catch(done);
});

View File

@@ -1,9 +1,8 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as Sinon from 'sinon';
import * as Web3 from 'web3';
import { ExchangeContractErrs, SignedOrder, Token, ZeroEx, ZeroExError } from '../src';
import { TradeSide, TransferType } from '../src/types';
@@ -14,13 +13,13 @@ import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { FillScenarios } from './utils/fill_scenarios';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('OrderValidation', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let userAddresses: string[];
let tokens: Token[];
@@ -40,8 +39,7 @@ describe('OrderValidation', () => {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
exchangeContractAddress = zeroEx.exchange.getContractAddress();
userAddresses = await zeroEx.getAvailableAddressesAsync();
[coinbase, makerAddress, takerAddress, feeRecipient] = userAddresses;

View File

@@ -1,10 +1,10 @@
import { ECSignature, SignedOrder } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import 'mocha';
import { ZeroEx } from '../src/0x';
import { RemainingFillableCalculator } from '../src/order_watcher/remaining_fillable_calculator';
import { ECSignature, SignedOrder } from '../src/types';
import { chaiSetup } from './utils/chai_setup';

View File

@@ -1,9 +1,8 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import 'mocha';
import * as Sinon from 'sinon';
import * as Web3 from 'web3';
import { ApprovalContractEventArgs, DecodedLogEvent, Token, TokenEvents, ZeroEx } from '../src';
import { DoneCallback } from '../src/types';
@@ -11,12 +10,12 @@ import { DoneCallback } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { assertNodeCallbackError } from './utils/report_callback_errors';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('SubscriptionTest', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let userAddresses: string[];
let tokens: Token[];
@@ -26,8 +25,7 @@ describe('SubscriptionTest', () => {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
userAddresses = await zeroEx.getAvailableAddressesAsync();
tokens = await zeroEx.tokenRegistry.getTokensAsync();
coinbase = userAddresses[0];
@@ -49,7 +47,7 @@ describe('SubscriptionTest', () => {
tokenAddress = token.address;
});
afterEach(() => {
zeroEx.token._unsubscribeAll();
zeroEx.token.unsubscribeAll();
_.each(stubs, s => s.restore());
stubs = [];
});
@@ -76,7 +74,7 @@ describe('SubscriptionTest', () => {
const callback = (err: Error | null, logEvent?: DecodedLogEvent<ApprovalContractEventArgs>) => _.noop;
zeroEx.token.subscribe(tokenAddress, TokenEvents.Approval, indexFilterValues, callback);
stubs = [Sinon.stub((zeroEx as any)._web3Wrapper, 'getBlockAsync').throws(new Error('JSON RPC error'))];
zeroEx.token._unsubscribeAll();
zeroEx.token.unsubscribeAll();
done();
})().catch(done);
});

View File

@@ -1,4 +1,4 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { schemas, SchemaValidator } from '@0xproject/json-schemas';
import * as chai from 'chai';
import * as _ from 'lodash';
@@ -8,10 +8,11 @@ import { Token, ZeroEx } from '../src';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
const TOKEN_REGISTRY_SIZE_AFTER_MIGRATION = 7;
@@ -30,8 +31,7 @@ describe('TokenRegistryWrapper', () => {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
const web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
tokens = await zeroEx.tokenRegistry.getTokensAsync();
_.map(tokens, token => {
tokenAddressBySymbol[token.symbol] = token.address;

View File

@@ -1,10 +1,10 @@
import { web3Factory } from '@0xproject/dev-utils';
import * as chai from 'chai';
import { ZeroEx } from '../src';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { provider } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
@@ -15,8 +15,7 @@ describe('TokenTransferProxyWrapper', () => {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
const web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
zeroEx = new ZeroEx(provider, config);
});
describe('#isAuthorizedAsync', () => {
it('should return false if the address is not authorized', async () => {

View File

@@ -1,9 +1,10 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockchainLifecycle, devConstants } from '@0xproject/dev-utils';
import { EmptyWalletSubprovider } from '@0xproject/subproviders';
import { Provider } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as chai from 'chai';
import 'mocha';
import * as Web3 from 'web3';
import Web3ProviderEngine = require('web3-provider-engine');
import {
ApprovalContractEventArgs,
@@ -22,27 +23,24 @@ import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
import { reportNodeCallbackErrors } from './utils/report_callback_errors';
import { TokenUtils } from './utils/token_utils';
import { provider, web3Wrapper } from './utils/web3_wrapper';
chaiSetup.configure();
const expect = chai.expect;
const blockchainLifecycle = new BlockchainLifecycle();
const blockchainLifecycle = new BlockchainLifecycle(web3Wrapper);
describe('TokenWrapper', () => {
let web3: Web3;
let zeroEx: ZeroEx;
let userAddresses: string[];
let tokens: Token[];
let tokenUtils: TokenUtils;
let coinbase: string;
let addressWithoutFunds: string;
let web3Wrapper: Web3Wrapper;
const config = {
networkId: constants.TESTRPC_NETWORK_ID,
};
before(async () => {
web3 = web3Factory.create();
zeroEx = new ZeroEx(web3.currentProvider, config);
web3Wrapper = new Web3Wrapper(web3.currentProvider);
zeroEx = new ZeroEx(provider, config);
userAddresses = await zeroEx.getAvailableAddressesAsync();
tokens = await zeroEx.tokenRegistry.getTokensAsync();
tokenUtils = new TokenUtils(tokens);
@@ -167,7 +165,7 @@ describe('TokenWrapper', () => {
});
});
describe('#getBalanceAsync', () => {
describe('With web3 provider with accounts', () => {
describe('With provider with accounts', () => {
it('should return the balance for an existing ERC20 token', async () => {
const token = tokens[0];
const ownerAddress = coinbase;
@@ -190,14 +188,14 @@ describe('TokenWrapper', () => {
return expect(balance).to.be.bignumber.equal(expectedBalance);
});
});
describe('With web3 provider without accounts', () => {
describe('With provider without accounts', () => {
let zeroExWithoutAccounts: ZeroEx;
before(async () => {
const hasAddresses = false;
const web3WithoutAccounts = web3Factory.create(hasAddresses);
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
const emptyWalletProvider = addEmptyWalletSubprovider(provider);
zeroExWithoutAccounts = new ZeroEx(emptyWalletProvider, config);
});
it('should return balance even when called with Web3 provider instance without addresses', async () => {
it('should return balance even when called with provider instance without addresses', async () => {
const token = tokens[0];
const ownerAddress = coinbase;
const balance = await zeroExWithoutAccounts.token.getBalanceAsync(token.address, ownerAddress);
@@ -280,7 +278,7 @@ describe('TokenWrapper', () => {
});
});
describe('#getAllowanceAsync', () => {
describe('With web3 provider with accounts', () => {
describe('With provider with accounts', () => {
it('should get the proxy allowance', async () => {
const token = tokens[0];
const ownerAddress = coinbase;
@@ -302,12 +300,12 @@ describe('TokenWrapper', () => {
return expect(allowance).to.be.bignumber.equal(expectedAllowance);
});
});
describe('With web3 provider without accounts', () => {
describe('With provider without accounts', () => {
let zeroExWithoutAccounts: ZeroEx;
before(async () => {
const hasAddresses = false;
const web3WithoutAccounts = web3Factory.create(hasAddresses);
zeroExWithoutAccounts = new ZeroEx(web3WithoutAccounts.currentProvider, config);
const emptyWalletProvider = addEmptyWalletSubprovider(provider);
zeroExWithoutAccounts = new ZeroEx(emptyWalletProvider, config);
});
it('should get the proxy allowance', async () => {
const token = tokens[0];
@@ -377,7 +375,7 @@ describe('TokenWrapper', () => {
tokenAddress = token.address;
});
afterEach(() => {
zeroEx.token._unsubscribeAll();
zeroEx.token.unsubscribeAll();
});
// 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,
@@ -427,8 +425,7 @@ describe('TokenWrapper', () => {
);
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackNeverToBeCalled);
const callbackToBeCalled = reportNodeCallbackErrors(done)();
const newProvider = web3Factory.getRpcProvider();
zeroEx.setProvider(newProvider, constants.TESTRPC_NETWORK_ID);
zeroEx.setProvider(provider, constants.TESTRPC_NETWORK_ID);
zeroEx.token.subscribe(tokenAddress, TokenEvents.Transfer, indexFilterValues, callbackToBeCalled);
await zeroEx.token.transferAsync(tokenAddress, coinbase, addressWithoutFunds, transferAmount);
})().catch(done);
@@ -518,3 +515,14 @@ describe('TokenWrapper', () => {
});
});
// tslint:disable:max-file-line-count
function addEmptyWalletSubprovider(p: Provider): Provider {
const providerEngine = new Web3ProviderEngine();
providerEngine.addProvider(new EmptyWalletSubprovider());
const currentSubproviders = (p as any)._providers;
for (const subprovider of currentSubproviders) {
providerEngine.addProvider(subprovider);
}
providerEngine.start();
return providerEngine;
}

View File

@@ -0,0 +1,18 @@
import { Deployer } from '@0xproject/deployer';
import { devConstants } from '@0xproject/dev-utils';
import * as path from 'path';
import { constants } from './constants';
import { provider } from './web3_wrapper';
const artifactsDir = path.resolve('test', 'artifacts');
const deployerOpts = {
artifactsDir,
provider,
networkId: constants.TESTRPC_NETWORK_ID,
defaults: {
gas: devConstants.GAS_ESTIMATE,
},
};
export const deployer = new Deployer(deployerOpts);

View File

@@ -35,12 +35,13 @@ export class FillScenarios {
const web3Wrapper = (this._zeroEx as any)._web3Wrapper as Web3Wrapper;
for (const token of this._tokens) {
if (token.symbol !== 'ZRX' && token.symbol !== 'WETH') {
const contractInstance = web3Wrapper.getContractInstance(
const defaults = {};
const dummyToken = new DummyTokenContract(
artifacts.DummyTokenArtifact.abi,
token.address,
web3Wrapper.getProvider(),
web3Wrapper.getContractDefaults(),
);
const defaults = {};
const dummyToken = new DummyTokenContract(contractInstance, defaults);
const tokenSupply = ZeroEx.toBaseUnitAmount(INITIAL_COINBASE_TOKEN_SUPPLY_IN_UNITS, token.decimals);
const txHash = await dummyToken.setBalance.sendTransactionAsync(this._coinbase, tokenSupply, {
from: this._coinbase,

View File

@@ -0,0 +1,12 @@
import { devConstants, web3Factory } from '@0xproject/dev-utils';
import { Provider } from '@0xproject/types';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as Web3 from 'web3';
import { constants } from './constants';
const web3 = web3Factory.create({ shouldUseInProcessGanache: true });
const provider: Provider = web3.currentProvider;
const web3Wrapper = new Web3Wrapper(web3.currentProvider);
export { provider, web3Wrapper };

View File

@@ -1,16 +1,7 @@
{
"extends": "../../tsconfig",
"compilerOptions": {
"outDir": "lib",
"noImplicitThis": false
"outDir": "lib"
},
"include": [
"./src/**/*",
"./test/**/*",
"../../node_modules/types-bn/index.d.ts",
"../../node_modules/types-ethereumjs-util/index.d.ts",
"../../node_modules/web3-typescript-typings/index.d.ts",
"../../node_modules/chai-typescript-typings/index.d.ts",
"../../node_modules/chai-as-promised-typescript-typings/index.d.ts"
]
"include": ["./src/**/*", "./test/**/*"]
}

View File

@@ -3,3 +3,4 @@ yarn-error.log
/src/
/scripts/
tsconfig.json
/lib/monorepo_scripts/

View File

@@ -0,0 +1,111 @@
[
{
"timestamp": 1524044013,
"version": "0.2.11",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1523462196,
"version": "0.2.10",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1522673609,
"version": "0.2.9",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1522658513,
"version": "0.2.8",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "0.2.5",
"changes": [
{
"note": "Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package",
"pr": 452
}
],
"timestamp": 1521298800
},
{
"version": "0.2.4",
"changes": [
{
"note":
"Add a `backend` parameter that allows you to specify the Ethereum library you use in your templates (`web3` or `ethers`). Ethers auto-converts small ints to numbers whereas Web3 doesn't. Defaults to `web3`",
"pr": 413
},
{
"note":
"Add support for [tuple types](https://solidity.readthedocs.io/en/develop/abi-spec.html#handling-tuple-types)",
"pr": 413
},
{
"note": "Add `hasReturnValue` to context data",
"pr": 413
}
],
"timestamp": 1520089200
},
{
"version": "0.2.1",
"changes": [
{
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
"pr": 389
}
],
"timestamp": 1518102000
},
{
"version": "0.2.0",
"changes": [
{
"note": "Added CLI options for explicit specifying location of partials and main template",
"pr": 346
},
{
"note":
"Added CLI option to specify networkId, adding support for the JSON artifact format found in @0xproject/contracts",
"pr": 388
}
],
"timestamp": 1517929200
},
{
"version": "0.1.0",
"changes": [
{
"note": "Fixed array typings with union types",
"pr": 295
},
{
"note": "Add event ABIs to context data passed to templates",
"pr": 302
},
{
"note": "Add constructor ABIs to context data passed to templates",
"pr": 304
}
],
"timestamp": 1515596400
}
]

View File

@@ -1,4 +1,35 @@
# CHANGELOG
<!--
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
Edit the package's CHANGELOG.json file only.
-->
CHANGELOG
## v0.2.11 - _April 18, 2018_
* Dependencies updated
## v0.2.10 - _April 12, 2018_
* Dependencies updated
## v0.2.9 - _April 2, 2018_
* Dependencies updated
## v0.2.8 - _April 2, 2018_
* Dependencies updated
## v0.2.5 - _March 18, 2018_
* Consolidate all `console.log` calls into `logUtils` in the `@0xproject/utils` package (#452)
## v0.2.4 - _March 4, 2018_
* Add a `backend` parameter that allows you to specify the Ethereum library you use in your templates (`web3` or `ethers`). Ethers auto-converts small ints to numbers whereas Web3 doesn't. Defaults to `web3` (#413)
* Add support for [tuple types](https://solidity.readthedocs.io/en/develop/abi-spec.html#handling-tuple-types) (#413)
* Add `hasReturnValue` to context data (#413)
## v0.2.1 - _February 9, 2018_

View File

@@ -4,8 +4,8 @@ This package allows you to generate TypeScript contract wrappers from ABI files.
It's heavily inspired by [Geth abigen](https://github.com/ethereum/go-ethereum/wiki/Native-DApps:-Go-bindings-to-Ethereum-contracts) but takes a different approach.
You can write your custom handlebars templates which will allow you to seamlessly integrate the generated code into your existing codebase with existing conventions.
For an example of the generated [wrapper files](https://github.com/0xProject/0x.js/tree/development/packages/0x.js/src/contract_wrappers/generated) check out 0x.js.
[Here](https://github.com/0xProject/0x.js/tree/development/packages/0x.js/contract_templates) are the templates used to generate those files.
For an example of the generated [wrapper files](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/src/contract_wrappers/generated) check out 0x.js.
[Here](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) are the templates used to generate those files.
## Installation
@@ -16,35 +16,102 @@ For an example of the generated [wrapper files](https://github.com/0xProject/0x.
```
abi-gen
Options:
--help Show help [boolean]
--version Show version number [boolean]
--abiGlob Glob pattern to search for ABI JSON files [string] [required]
--templates Folder where to search for templates [string] [required]
--output Folder where to put the output files [string] [required]
--help Show help [boolean]
--version Show version number [boolean]
--abis Glob pattern to search for ABI JSON files
[string] [required]
--output, -o, --out Folder where to put the output files [string] [required]
--partials Glob pattern for the partial template files [string]
--template Path for the main template file that will be used to
generate each contract [string] [required]
--backend The backing Ethereum library your app uses. Either 'web3'
or 'ethers'. Ethers auto-converts small ints to numbers
whereas Web3 doesn't.
[string] [choices: "web3", "ethers"] [default: "web3"]
--network-id ID of the network where contract ABIs are nested in
artifacts [number] [default: 50]
```
## ABI files
You're required to pass a [glob](<https://en.wikipedia.org/wiki/Glob_(programming)>) template where your abi files are located.
TL;DR - here is the example from 0x.js.
`--abiGlob 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry).json`
`--abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry).json`
We could've just used `--abiGlob 'src/artifacts/*.json` but we wanted to exclude some of the abi files.
We could've just used `--abis 'src/artifacts/*.json` but we wanted to exclude some of the abi files.
The abi file should be either a [Truffle](http://truffleframework.com/) contract artifact (a JSON object with an abi key) or a JSON abi array.
You need to also specify the location of your main template used for every contract `--template` as well as the partial templates `--partials` that can later be used from the main one.
## How to write custom templates?
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x.js/tree/development/packages/0x.js/contract_templates) and start adjusting them for your needs.
The best way to get started is to copy [0x.js templates](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js/contract_templates) and start adjusting them for your needs.
We use [handlebars](http://handlebarsjs.com/) template engine under the hood.
You need to have a master template called `contract.mustache`. it will be used to generate each contract wrapper. Although - you don't need and probably shouldn't write all your logic in a single template file. You can write [partial templates](http://handlebarsjs.com/partials.html) and as long as they are within a partials folder - they will be registered and available.
## Which data/context do I get in my templates?
For now you don't get much on top of methods abi, some useful helpers and a contract name because it was enough for our use-case, but if you need something else - create a PR.
See the [type definition](https://github.com/0xProject/0x.js/tree/development/packages/abi-gen/src/types.ts) of what we pass to the render method.
See the [type definition](https://github.com/0xProject/0x-monorepo/tree/development/packages/abi-gen/src/types.ts) of what we pass to the render method.
## Output files
Output files will be generated within an output folder with names converted to camel case and taken from abi file names. If you already have some files in that folder they will be overwritten.
## Contributing
We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
### Install dependencies
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
```bash
yarn config set workspaces-experimental true
```
Then install dependencies
```bash
yarn install
```
### Build
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
```bash
yarn lerna:rebuild
```
Or continuously rebuild on change:
```bash
yarn dev
```
You can also build this specific package by running the following from within its directory:
```bash
yarn build
```
or continuously rebuild on change:
```bash
yarn build:watch
```
### Clean
```bash
yarn clean
```
### Lint
```bash
yarn lint
```

View File

@@ -1,49 +1,55 @@
{
"name": "@0xproject/abi-gen",
"version": "0.2.0",
"version": "0.2.11",
"description": "Generate contract wrappers from ABI and handlebars templates",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"build:watch": "tsc -w",
"lint": "tslint --project . 'src/**/*.ts'",
"clean": "shx rm -rf lib",
"build": "tsc"
"clean": "shx rm -rf lib scripts",
"build": "tsc && copyfiles -u 2 './lib/monorepo_scripts/**/*' ./scripts",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
},
"bin": {
"abi-gen": "lib/index.js"
},
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x.js.git"
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/0xProject/0x.js/issues"
"url": "https://github.com/0xProject/0x-monorepo/issues"
},
"homepage": "https://github.com/0xProject/0x.js/packages/abi-gen/README.md",
"homepage": "https://github.com/0xProject/0x-monorepo/packages/abi-gen/README.md",
"dependencies": {
"@0xproject/utils": "^0.3.1",
"@0xproject/types": "^0.6.1",
"@0xproject/typescript-typings": "^0.2.0",
"@0xproject/utils": "^0.5.2",
"chalk": "^2.3.0",
"glob": "^7.1.2",
"handlebars": "^4.0.11",
"lodash": "^4.17.4",
"mkdirp": "^0.5.1",
"to-snake-case": "^1.0.0",
"web3": "^0.20.0",
"yargs": "^10.0.3"
},
"devDependencies": {
"@0xproject/tslint-config": "^0.4.7",
"@0xproject/monorepo-scripts": "^0.1.18",
"@0xproject/tslint-config": "^0.4.16",
"@types/glob": "^5.0.33",
"@types/handlebars": "^4.0.36",
"@types/mkdirp": "^0.5.1",
"@types/node": "^8.0.53",
"@types/yargs": "^10.0.0",
"copyfiles": "^1.2.0",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "2.7.1",
"web3-typescript-typings": "^0.9.9"
"typescript": "2.7.1"
},
"publishConfig": {
"access": "public"
}
}

View File

@@ -1,5 +0,0 @@
const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -1,4 +1,6 @@
declare function toSnakeCase(str: string): string;
declare module 'to-snake-case' {
export = toSnakeCase;
declare module '*.json' {
const json: any;
/* tslint:disable */
export default json;
/* tslint:enable */
}

View File

@@ -1,5 +1,7 @@
#!/usr/bin/env node
import { AbiDefinition, ConstructorAbi, EventAbi, MethodAbi } from '@0xproject/types';
import { abiUtils, logUtils } from '@0xproject/utils';
import chalk from 'chalk';
import * as fs from 'fs';
import { sync as globSync } from 'glob';
@@ -9,15 +11,15 @@ import * as mkdirp from 'mkdirp';
import * as yargs from 'yargs';
import toSnakeCase = require('to-snake-case');
import * as Web3 from 'web3';
import { ContextData, ParamKind } from './types';
import { ContextData, ContractsBackend, Method, ParamKind } from './types';
import { utils } from './utils';
const ABI_TYPE_CONSTRUCTOR = 'constructor';
const ABI_TYPE_METHOD = 'function';
const ABI_TYPE_EVENT = 'event';
const DEFAULT_NETWORK_ID = 50;
const DEFAULT_BACKEND = 'web3';
const args = yargs
.option('abis', {
@@ -43,6 +45,12 @@ const args = yargs
demandOption: true,
normalize: true,
})
.option('backend', {
describe: `The backing Ethereum library your app uses. Either 'web3' or 'ethers'. Ethers auto-converts small ints to numbers whereas Web3 doesn't.`,
type: 'string',
choices: [ContractsBackend.Web3, ContractsBackend.Ethers],
default: DEFAULT_BACKEND,
})
.option('network-id', {
describe: 'ID of the network where contract ABIs are nested in artifacts',
type: 'number',
@@ -55,7 +63,7 @@ const args = yargs
function registerPartials(partialsGlob: string) {
const partialTemplateFileNames = globSync(partialsGlob);
utils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
logUtils.log(`Found ${chalk.green(`${partialTemplateFileNames.length}`)} ${chalk.bold('partial')} templates`);
for (const partialTemplateFileName of partialTemplateFileNames) {
const namedContent = utils.getNamedContent(partialTemplateFileName);
Handlebars.registerPartial(namedContent.name, namedContent.content);
@@ -70,12 +78,11 @@ function writeOutputFile(name: string, renderedTsCode: string): void {
}
const filePath = `${args.output}/${fileName}.ts`;
fs.writeFileSync(filePath, renderedTsCode);
utils.log(`Created: ${chalk.bold(filePath)}`);
logUtils.log(`Created: ${chalk.bold(filePath)}`);
}
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input));
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output));
Handlebars.registerHelper('parameterType', utils.solTypeToTsType.bind(utils, ParamKind.Input, args.backend));
Handlebars.registerHelper('returnType', utils.solTypeToTsType.bind(utils, ParamKind.Output, args.backend));
if (args.partials) {
registerPartials(args.partials);
}
@@ -84,17 +91,17 @@ const template = Handlebars.compile<ContextData>(mainTemplate.content);
const abiFileNames = globSync(args.abis);
if (_.isEmpty(abiFileNames)) {
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
logUtils.log(`${chalk.red(`No ABI files found.`)}`);
logUtils.log(`Please make sure you've passed the correct folder name and that the files have
${chalk.bold('*.json')} extensions`);
process.exit(1);
} else {
utils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`);
logUtils.log(`Found ${chalk.green(`${abiFileNames.length}`)} ${chalk.bold('ABI')} files`);
mkdirp.sync(args.output);
}
for (const abiFileName of abiFileNames) {
const namedContent = utils.getNamedContent(abiFileName);
utils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
logUtils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
const parsedContent = JSON.parse(namedContent.content);
let ABI;
if (_.isArray(parsedContent)) {
@@ -105,35 +112,39 @@ for (const abiFileName of abiFileNames) {
ABI = parsedContent.networks[args.networkId].abi; // 0x contracts package artifact
}
if (_.isUndefined(ABI)) {
utils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
utils.log(
logUtils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
logUtils.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);
}
let ctor = ABI.find((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as Web3.ConstructorAbi;
let ctor = ABI.find((abi: AbiDefinition) => abi.type === ABI_TYPE_CONSTRUCTOR) as ConstructorAbi;
if (_.isUndefined(ctor)) {
ctor = utils.getEmptyConstructor(); // The constructor exists, but it's implicit in JSON's ABI definition
}
const methodAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_METHOD) as Web3.MethodAbi[];
const methodsData = _.map(methodAbis, methodAbi => {
_.map(methodAbi.inputs, (input, i: number) => {
const methodAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_METHOD) as MethodAbi[];
const sanitizedMethodAbis = abiUtils.renameOverloadedMethods(methodAbis) as MethodAbi[];
const methodsData = _.map(methodAbis, (methodAbi, methodAbiIndex: number) => {
_.forEach(methodAbi.inputs, (input, inputIndex: number) => {
if (_.isEmpty(input.name)) {
// Auto-generated getters don't have parameter names
input.name = `index_${i}`;
input.name = `index_${inputIndex}`;
}
});
// This will make templates simpler
const methodData = {
...methodAbi,
singleReturnValue: methodAbi.outputs.length === 1,
hasReturnValue: methodAbi.outputs.length !== 0,
tsName: sanitizedMethodAbis[methodAbiIndex].name,
functionSignature: abiUtils.getFunctionSignature(methodAbi),
};
return methodData;
});
const eventAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_EVENT) as Web3.EventAbi[];
const eventAbis = ABI.filter((abi: AbiDefinition) => abi.type === ABI_TYPE_EVENT) as EventAbi[];
const contextData = {
contractName: namedContent.name,

View File

@@ -0,0 +1,8 @@
import { postpublishUtils } from '@0xproject/monorepo-scripts';
import * as packageJSON from '../package.json';
import * as tsConfigJSON from '../tsconfig.json';
const cwd = `${__dirname}/..`;
// tslint:disable-next-line:no-floating-promises
postpublishUtils.runAsync(packageJSON, tsConfigJSON, cwd);

View File

@@ -1,23 +1,24 @@
import * as Web3 from 'web3';
import { EventAbi, MethodAbi } from '@0xproject/types';
export enum ParamKind {
Input = 'input',
Output = 'output',
}
export enum AbiType {
Function = 'function',
Constructor = 'constructor',
Event = 'event',
Fallback = 'fallback',
export enum ContractsBackend {
Web3 = 'web3',
Ethers = 'ethers',
}
export interface Method extends Web3.MethodAbi {
export interface Method extends MethodAbi {
singleReturnValue: boolean;
hasReturnValue: boolean;
tsName: string;
functionSignature: string;
}
export interface ContextData {
contractName: string;
methods: Method[];
events: Web3.EventAbi[];
events: EventAbi[];
}

View File

@@ -1,19 +1,20 @@
import { AbiType, ConstructorAbi, DataItem } from '@0xproject/types';
import * as fs from 'fs';
import * as _ from 'lodash';
import * as path from 'path';
import * as Web3 from 'web3';
import { AbiType, ParamKind } from './types';
import { ContractsBackend, ParamKind } from './types';
export const utils = {
solTypeToTsType(paramKind: ParamKind, solType: string): string {
solTypeToTsType(paramKind: ParamKind, backend: ContractsBackend, solType: string, components?: DataItem[]): string {
const trailingArrayRegex = /\[\d*\]$/;
if (solType.match(trailingArrayRegex)) {
const arrayItemSolType = solType.replace(trailingArrayRegex, '');
const arrayItemTsType = utils.solTypeToTsType(paramKind, arrayItemSolType);
const arrayTsType = utils.isUnionType(arrayItemTsType)
? `Array<${arrayItemTsType}>`
: `${arrayItemTsType}[]`;
const arrayItemTsType = utils.solTypeToTsType(paramKind, backend, arrayItemSolType, components);
const arrayTsType =
utils.isUnionType(arrayItemTsType) || utils.isObjectType(arrayItemTsType)
? `Array<${arrayItemTsType}>`
: `${arrayItemTsType}[]`;
return arrayTsType;
} else {
const solTypeRegexToTsType = [
@@ -24,27 +25,48 @@ export const utils = {
{ regex: '^bytes\\d*$', tsType: 'string' },
];
if (paramKind === ParamKind.Input) {
// web3 allows to pass those an non-bignumbers and that's nice
// but it always returns stuff as BigNumbers
// web3 and ethers allow to pass those as numbers instead of bignumbers
solTypeRegexToTsType.unshift({
regex: '^u?int(8|16|32)?$',
tsType: 'number|BigNumber',
});
}
if (backend === ContractsBackend.Ethers && paramKind === ParamKind.Output) {
// ethers-contracts automatically converts small BigNumbers to numbers
solTypeRegexToTsType.unshift({
regex: '^u?int(8|16|32|48)?$',
tsType: 'number',
});
}
for (const regexAndTxType of solTypeRegexToTsType) {
const { regex, tsType } = regexAndTxType;
if (solType.match(regex)) {
return tsType;
}
}
const TUPLE_TYPE_REGEX = '^tuple$';
if (solType.match(TUPLE_TYPE_REGEX)) {
const componentsType = _.map(components, component => {
const componentValueType = utils.solTypeToTsType(
paramKind,
backend,
component.type,
component.components,
);
const componentType = `${component.name}: ${componentValueType}`;
return componentType;
});
const tsType = `{${componentsType}}`;
return tsType;
}
throw new Error(`Unknown Solidity type found: ${solType}`);
}
},
isUnionType(tsType: string): boolean {
return tsType === 'number|BigNumber';
},
log(...args: any[]): void {
console.log(...args); // tslint:disable-line:no-console
isObjectType(tsType: string): boolean {
return /^{.*}$/.test(tsType);
},
getPartialNameFromFileName(filename: string): string {
const name = path.parse(filename).name;
@@ -62,7 +84,7 @@ export const utils = {
throw new Error(`Failed to read ${filename}: ${err}`);
}
},
getEmptyConstructor(): Web3.ConstructorAbi {
getEmptyConstructor(): ConstructorAbi {
return {
type: AbiType.Constructor,
stateMutability: 'nonpayable',

View File

@@ -3,5 +3,5 @@
"compilerOptions": {
"outDir": "lib"
},
"include": ["./src/**/*", "./test/**/*", "../../node_modules/web3-typescript-typings/index.d.ts"]
"include": ["./src/**/*", "./test/**/*"]
}

View File

@@ -4,3 +4,4 @@ yarn-error.log
/scripts/
test/
tsconfig.json
/lib/src/monorepo_scripts/

View File

@@ -0,0 +1,85 @@
[
{
"timestamp": 1524044013,
"version": "0.2.7",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1523462196,
"version": "0.2.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1522673609,
"version": "0.2.5",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1522658513,
"version": "0.2.4",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "0.2.0",
"changes": [
{
"note": "Rename `isHttpUrl` to `isWebUri`",
"pr": 412
}
],
"timestamp": 1520434800
},
{
"version": "0.1.0",
"changes": [
{
"note": "Remove isETHAddressHex checksum address check and assume address will be lowercased ",
"pr": 373
},
{
"note": "Add an optional parameter `subSchemas` to `doesConformToSchema` method",
"pr": 385
}
],
"timestamp": 1520089200
},
{
"version": "0.0.18",
"changes": [
{
"note": "Fix publishing issue where .npmignore was not properly excluding undesired content",
"pr": 389
}
],
"timestamp": 1486566000
},
{
"version": "0.0.4",
"changes": [
{
"note": "Re-publish Assert previously published under NPM package @0xproject/0x-assert"
},
{
"note":
"Added assertion isValidBaseUnitAmount which checks both that the value is a valid bigNumber and that it does not contain decimals."
}
],
"timestamp": 1510585200
}
]

View File

@@ -1,4 +1,34 @@
# CHANGELOG
<!--
This file is auto-generated using the monorepo-scripts package. Don't edit directly.
Edit the package's CHANGELOG.json file only.
-->
CHANGELOG
## v0.2.7 - _April 18, 2018_
* Dependencies updated
## v0.2.6 - _April 12, 2018_
* Dependencies updated
## v0.2.5 - _April 2, 2018_
* Dependencies updated
## v0.2.4 - _April 2, 2018_
* Dependencies updated
## v0.2.0 - _March 8, 2018_
* Rename `isHttpUrl` to `isWebUri` (#412)
## v0.1.0 - _March 4, 2018_
* Remove isETHAddressHex checksum address check and assume address will be lowercased (#373)
* Add an optional parameter `subSchemas` to `doesConformToSchema` method (#385)
## v0.0.18 - _February 9, 2017_

View File

@@ -16,13 +16,21 @@ import { assert } from '@0xproject/assert';
assert.isValidBaseUnitAmount('baseUnitAmount', baseUnitAmount);
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
```json
"compilerOptions": {
"typeRoots": ["node_modules/@0xproject/typescript-typings/types", "node_modules/@types"],
}
```
## Contributing
We strongly encourage that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository.
We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository.
Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started.
### Install Dependencies
### Install dependencies
If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them:
@@ -38,10 +46,36 @@ yarn install
### Build
If this is your **first** time building this package, you must first build **all** packages within the monorepo. This is because packages that depend on other packages located inside this monorepo are symlinked when run from **within** the monorepo. This allows you to make changes across multiple packages without first publishing dependent packages to NPM. To build all packages, run the following from the monorepo root directory:
```bash
yarn lerna:rebuild
```
Or continuously rebuild on change:
```bash
yarn dev
```
You can also build this specific package by running the following from within its directory:
```bash
yarn build
```
or continuously rebuild on change:
```bash
yarn build:watch
```
### Clean
```bash
yarn clean
```
### Lint
```bash

View File

View File

@@ -1,46 +1,55 @@
{
"name": "@0xproject/assert",
"version": "0.0.17",
"version": "0.2.7",
"description": "Provides a standard way of performing type and schema validation across 0x projects",
"main": "lib/src/index.js",
"types": "lib/src/index.d.ts",
"scripts": {
"build:watch": "tsc -w",
"build": "tsc",
"clean": "shx rm -rf _bundles lib test_temp",
"build": "tsc && copyfiles -u 3 './lib/src/monorepo_scripts/**/*' ./scripts",
"clean": "shx rm -rf lib test_temp scripts",
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
"run_mocha": "mocha lib/test/**/*_test.js",
"run_mocha": "mocha lib/test/**/*_test.js --exit",
"prepublishOnly": "run-p build",
"test": "run-s clean build run_mocha",
"test:circleci": "yarn test"
"test:coverage": "nyc npm run test --all && yarn coverage:report:lcov",
"coverage:report:lcov": "nyc report --reporter=text-lcov > coverage/lcov.info",
"test:circleci": "yarn test:coverage",
"manual:postpublish": "yarn build; node ./scripts/postpublish.js"
},
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x.js.git"
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"bugs": {
"url": "https://github.com/0xProject/0x.js/issues"
"url": "https://github.com/0xProject/0x-monorepo/issues"
},
"homepage": "https://github.com/0xProject/0x.js/packages/assert/README.md",
"homepage": "https://github.com/0xProject/0x-monorepo/packages/assert/README.md",
"devDependencies": {
"@0xproject/tslint-config": "^0.4.7",
"@types/lodash": "^4.14.86",
"@0xproject/monorepo-scripts": "^0.1.18",
"@0xproject/tslint-config": "^0.4.16",
"@types/lodash": "4.14.104",
"@types/mocha": "^2.2.42",
"@types/valid-url": "^1.0.2",
"chai": "^4.0.1",
"chai-typescript-typings": "^0.0.2",
"copyfiles": "^1.2.0",
"dirty-chai": "^2.0.1",
"mocha": "^4.0.1",
"npm-run-all": "^4.1.2",
"nyc": "^11.0.1",
"shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/json-schemas": "^0.7.9",
"@0xproject/utils": "^0.3.1",
"@0xproject/json-schemas": "^0.7.21",
"@0xproject/typescript-typings": "^0.2.0",
"@0xproject/utils": "^0.5.2",
"lodash": "^4.17.4",
"valid-url": "^1.0.9"
},
"publishConfig": {
"access": "public"
}
}

View File

@@ -1,5 +0,0 @@
const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -1 +1,6 @@
declare module 'dirty-chai';
declare module '*.json' {
const json: any;
/* tslint:disable */
export default json;
/* tslint:enable */
}

Some files were not shown because too many files have changed in this diff Show More