Compare commits

..

585 Commits

Author SHA1 Message Date
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
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
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
Fabio Berger
602abc53dd Fix version in CHANGELOG 2018-02-09 16:18:47 -08:00
Fabio Berger
fdbaa9768a Update changelog version 2018-02-09 16:09:53 -08:00
Fabio Berger
293d7261e0 Fix changelog version 2018-02-09 16:08:26 -08:00
Fabio Berger
efb6eb28ce Merge pull request #389 from 0xProject/fix/npmInclusionIssues
Fix NPM Inclusion Issues
2018-02-09 14:39:05 -08:00
Fabio Berger
ac5531ce85 Fix changelogs 2018-02-09 14:26:48 -08:00
Fabio Berger
bc2415c70e Add yarn-error.log to all .npmignore 2018-02-09 14:03:08 -08:00
Fabio Berger
0fd411f83f Add PR number to CHANGELOGs 2018-02-09 13:31:01 -08:00
Fabio Berger
b74ad0ad12 ignore all files starting with dots in all sub-packages 2018-02-09 13:28:32 -08:00
Fabio Berger
4c58836735 Remove top level .npmignore 2018-02-09 13:19:30 -08:00
Fabio Berger
3206b80dbd Add npmignore to web3-wrapper and update CHANGELOG 2018-02-09 13:18:49 -08:00
Fabio Berger
4910f7a61e Add npmignore and remove .gitignore 2018-02-09 13:16:16 -08:00
Fabio Berger
6e9109eaec Add npmignore to utils and update CHANGELOG 2018-02-09 13:14:31 -08:00
Fabio Berger
a04ec14cf0 Add npmignore to types and update CHANGELOG 2018-02-09 13:12:33 -08:00
Fabio Berger
7d3df3c117 cleanup npmignorex 2018-02-09 13:09:57 -08:00
Fabio Berger
b3a03f8e3e Add npmignore to subproviders and update CHANGELOG 2018-02-09 13:09:00 -08:00
Fabio Berger
e5668c1e5c Add npmignore to json-schemas and update CHANGELOG 2018-02-09 13:05:21 -08:00
Fabio Berger
92e74bc4fa Add npmignore to dev-utils and update CHANGELOG 2018-02-09 12:56:48 -08:00
Fabio Berger
7e12269baf Add npmignore to deployer along with a changelog 2018-02-09 12:52:12 -08:00
Fabio Berger
f3f264f5fd Add tslint.json to deployer package and fix all tslint issues 2018-02-09 12:50:37 -08:00
Brandon Millman
2e3c9b87df Merge pull request #388 from 0xProject/fix/testnet-faucet/base-unit-orders
Convert to baseUnits in signed order
2018-02-09 12:39:43 -08:00
Fabio Berger
0a113e1cf7 Add npmignore to subpackage and update CHANGELOG 2018-02-09 12:37:28 -08:00
Fabio Berger
fd772c48cf Add npmignore to typings packages 2018-02-09 12:37:18 -08:00
Fabio Berger
1c7dce6054 Add npmignore to subpackage and update CHANGELOG 2018-02-09 12:30:06 -08:00
Jacob Evans
0a2947b860 address is not optional in this context 2018-02-09 12:27:28 -08:00
Fabio Berger
c80877af43 Add npmignore to abi-gen and update CHANGELOG 2018-02-09 12:23:03 -08:00
Jacob Evans
e68b9c7e81 Convert to baseUnits in signed order 2018-02-09 12:20:25 -08:00
Fabio Berger
19198737a5 Add correct npmignore to 0x.js and update CHANGELOG 2018-02-09 12:18:23 -08:00
Brandon Millman
fea4b6aecd Merge pull request #387 from 0xProject/fix/testnet-faucet/ecsignature
Testnet Faucet Order conforming to JSON Schema
2018-02-09 12:01:59 -08:00
Fabio Berger
20e2673b82 Fix issue where custom TSLint rules were not being published to NPM 2018-02-09 11:53:38 -08:00
Jacob Evans
ef1375b9dd signature -> ecSignature 2018-02-09 10:50:38 -08:00
Brandon Millman
58f1939ec1 Merge pull request #382 from 0xProject/feature/clean-post-publish-scripts
Simplify standard postpublish script and remove them from some privat…
2018-02-09 10:19:33 -08:00
Leonid Logvinov
ba57c34adb Use system-independent rm command 2018-02-09 11:49:01 +01:00
Leonid
936f6ac10f Merge pull request #379 from 0xProject/portal_json
Make portal order JSON compatible with 0x.js
2018-02-09 09:27:08 +01:00
Fabio Berger
7e04c4f24b Merge pull request #383 from 0xProject/fix/website/addMoreRelayersLanding
Add relayers section to landing page
2018-02-08 18:41:16 -08:00
Fabio Berger
9495c8f46c Fix links 2018-02-08 18:40:06 -08:00
Fabio Berger
b3f91600d3 Center header above relayers 2018-02-08 17:53:31 -08:00
Fabio Berger
ddf4437fb6 Add blog to topBar and as a consequence support external links in topBar menu items 2018-02-08 17:36:17 -08:00
Fabio Berger
4153d57849 Add title above "benefits" section 2018-02-08 16:27:47 -08:00
Fabio Berger
0652790703 Add Relayer section to landing 2018-02-08 16:27:37 -08:00
Brandon Millman
9c934d903d Add new entries to the PR template checklist 2018-02-08 16:20:02 -08:00
Brandon Millman
d7a7e28925 Fix missing references to 'this' 2018-02-08 12:02:13 -08:00
Brandon Millman
6dec29e214 Simplify standard postpublish script and remove them from some private packages 2018-02-08 11:46:33 -08:00
Leonid Logvinov
43cf8d30bd Implement blockchain.portalOrderToZeroExOrder 2018-02-08 18:28:54 +01:00
Leonid
254d3f53e2 Merge pull request #377 from 0xProject/feature/signed_unsigned_order_contracts
Use SignedOrder and Order types from 0x.js
2018-02-08 18:15:10 +01:00
Leonid Logvinov
ec198343b5 Make naming of schemas consistent 2018-02-08 18:14:52 +01:00
Leonid Logvinov
876517d458 Fix namings 2018-02-08 18:03:55 +01:00
Leonid Logvinov
1233c33116 Address feedback 2018-02-08 16:23:20 +01:00
Fabio Berger
eebf205817 Fix flash message when receiving test ether 2018-02-07 16:58:05 -08:00
Brandon Millman
e666bb44c6 Fix incorrect network ids 2018-02-07 16:05:14 -08:00
Brandon Millman
39cb0b5122 Update @0xproject/utils version in top level package.json 2018-02-07 13:36:48 -08:00
Brandon Millman
58003a2811 Publish
- 0x.js@0.32.1
 - @0xproject/abi-gen@0.2.0
 - @0xproject/assert@0.0.17
 - @0xproject/connect@0.5.6
 - contracts@2.1.10
 - @0xproject/deployer@0.0.7
 - @0xproject/dev-utils@0.0.11
 - @0xproject/json-schemas@0.7.9
 - @0xproject/subproviders@0.4.0
 - @0xproject/testnet-faucets@1.0.11
 - @0xproject/types@0.2.0
 - @0xproject/utils@0.3.1
 - @0xproject/web3-wrapper@0.1.11
 - @0xproject/website@0.0.13
2018-02-07 13:25:39 -08:00
Brandon Millman
7f2a7cfa77 Update CHANGELOGs 2018-02-07 13:19:13 -08:00
Leonid Logvinov
8fba0477a6 Remove hash from signatureData 2018-02-07 20:58:19 +01:00
Fabio Berger
7ca1ba7e1e Fix wiki styling 2018-02-07 11:45:50 -08:00
Leonid Logvinov
e6f2c7a382 Remove networkId from orderJSON 2018-02-07 20:38:30 +01:00
Leonid Logvinov
69f5f5e946 Split Order into signedOrder and metadata 2018-02-07 20:26:13 +01:00
Fabio Berger
68a8acbe7b Merge pull request #374 from 0xProject/feature/website/addOtherTestnetFaucets
Feature/website/add other testnet faucets
2018-02-07 11:21:14 -08:00
Brandon Millman
852811b314 Merge pull request #375 from 0xProject/feature/testnet-faucets/queue-by-network
Organize async task queues by network
2018-02-07 11:16:24 -08:00
Brandon Millman
2404ff0304 Prettier 2018-02-07 11:01:21 -08:00
Brandon Millman
9ff4cacf0f Addressed review comments 2018-02-07 11:00:42 -08:00
Jacob Evans
e443cb2a3b Update Subprovider README 2018-02-07 10:37:34 -08:00
Brandon Millman
f3c6cce455 Merge branch 'development' into feature/testnet-faucets/queue-by-network
* development: (24 commits)
  Fix Remco's github name in CODEOWNERS
  Fix ABI error message
  Stop using definite assignment assertion cause prettier doesn't handle that
  Special-case ZRXToken snake case conversion
  Fix linter errors
  Generate contract wrappers on pre-build
  Add missing async
  Remove noImplicitThis
  Tslint disable no-consecutive-blank-lines in generated files
  Change compiled sources in contracts
  Change utils
  Change tests
  Add base_contract.ts
  Remove generated files
  .gitignore gemerated files
  Change the list of generated wrappers
  Change contract templates
  Add indices for index parameters so that their names don't collide
  Use abi-gen for events in 0x.js
  Fix artifacts path
  ...
2018-02-07 10:27:22 -08:00
Leonid Logvinov
ae14b0a71d Reuse ECSignature 2018-02-07 16:13:09 +01:00
Leonid Logvinov
3c7ebe2697 Remove unused types and take their names 2018-02-07 16:11:51 +01:00
Leonid Logvinov
10fb6061cc Introduce makerToken and takerToken fields for unsigned token metadata 2018-02-07 15:26:53 +01:00
Leonid Logvinov
223df8006a Move .taker.amount to .takerTokenAmount and .maker.amount to .makerTokenAmount 2018-02-07 15:09:06 +01:00
Leonid Logvinov
1c9428cbba Move .taker.feeAmount to .takerFee and .maker.feeAmount to .makerFee 2018-02-07 15:02:41 +01:00
Leonid Logvinov
18dc5d17b5 Rename signature to ecSignature 2018-02-07 14:54:37 +01:00
Leonid Logvinov
4d50933189 Rename exchangeContract to exchangeContractAddress 2018-02-07 14:48:59 +01:00
Leonid Logvinov
9b3680780f Rename expiration to expirationUnixTimestampSec 2018-02-07 14:41:40 +01:00
Leonid
a26e77074f Fix Remco's github name in CODEOWNERS 2018-02-07 13:46:14 +01:00
Leonid Logvinov
568e4d33f2 Use Order and SignedOrder type from 0x.js 2018-02-07 13:41:30 +01:00
Leonid Logvinov
fd004032cb Introduce SignedOrder class and remove type assertions 2018-02-07 12:22:22 +01:00
Leonid Logvinov
4b6324050d Make orderHashHex a getter instead of a property 2018-02-07 11:59:40 +01:00
Leonid
12d62e1157 Merge pull request #368 from 0xProject/feature/abigen/addNetworkId
Add CLI option for networkId, add abi-gen to contracts package
2018-02-07 11:40:06 +01:00
Fabio Berger
063c6b66b6 Only show faucet error if not on a testnet 2018-02-06 17:55:15 -08:00
Brandon Millman
d9b1d31e73 Organize async task queues by network 2018-02-06 17:39:49 -08:00
Leonid Logvinov
0bad911a16 Fix ABI error message 2018-02-06 17:34:45 -08:00
Fabio Berger
518efa8ad2 Move isTestNetwork into utils and also check it from showing ZRX request button 2018-02-06 17:29:10 -08:00
Leonid Logvinov
6e87c9e713 Stop using definite assignment assertion cause prettier doesn't handle that 2018-02-06 17:28:55 -08:00
Leonid Logvinov
b61852b1f5 Special-case ZRXToken snake case conversion 2018-02-06 17:27:47 -08:00
Leonid Logvinov
fcbe24a126 Fix linter errors 2018-02-06 17:27:47 -08:00
Leonid Logvinov
55312d00ef Generate contract wrappers on pre-build 2018-02-06 17:27:47 -08:00
Leonid Logvinov
a96e3f3222 Add missing async 2018-02-06 17:27:47 -08:00
Leonid Logvinov
e35519b50f Remove noImplicitThis 2018-02-06 17:27:47 -08:00
Leonid Logvinov
ae775f9664 Tslint disable no-consecutive-blank-lines in generated files 2018-02-06 17:27:47 -08:00
Leonid Logvinov
071b1c47d1 Change compiled sources in contracts 2018-02-06 17:27:47 -08:00
Leonid Logvinov
4cc5bbaf19 Change utils 2018-02-06 17:27:47 -08:00
Leonid Logvinov
a264c36a48 Change tests 2018-02-06 17:27:47 -08:00
Leonid Logvinov
0c2ab22656 Add base_contract.ts 2018-02-06 17:27:47 -08:00
Leonid Logvinov
47adad5122 Remove generated files 2018-02-06 17:27:47 -08:00
Leonid Logvinov
745f209f7e .gitignore gemerated files 2018-02-06 17:27:47 -08:00
Leonid Logvinov
2287597712 Change the list of generated wrappers 2018-02-06 17:27:47 -08:00
Leonid Logvinov
eea8b15180 Change contract templates 2018-02-06 17:27:47 -08:00
Leonid Logvinov
600a2b40af Add indices for index parameters so that their names don't collide 2018-02-06 17:27:47 -08:00
Leonid Logvinov
a7c51593e4 Use abi-gen for events in 0x.js 2018-02-06 17:27:47 -08:00
Amir Bandeali
218876ac19 Fix artifacts path 2018-02-06 17:26:13 -08:00
Amir Bandeali
6cda67df10 Update compile command and run prettier 2018-02-06 17:26:13 -08:00
Amir Bandeali
897515c002 Add CLI option for networkId, add abi-gen to contracts package 2018-02-06 17:26:12 -08:00
Fabio Berger
9deaf612f1 Remove stray log 2018-02-06 17:25:19 -08:00
Fabio Berger
b7676d8c46 Use isTestNetwork instead of isKovanTestNetwork on balances page except for Dharma integration 2018-02-06 17:23:27 -08:00
Fabio Berger
05aa2fa421 Properly detect Rinkeby and Ropsten TokenRegistry tokens as mintable 2018-02-06 17:23:01 -08:00
Fabio Berger
03f5c9b950 Add networkId to faucet requests so that we can request tokens on Kovan, Rinkeby and Ropsten 2018-02-06 17:22:20 -08:00
Fabio Berger
4c9c4c487a Merge branch 'development' of github.com:0xProject/0x.js into development
* 'development' of github.com:0xProject/0x.js:
  Bump subproviders version
  Update yarn.lock
  Change rpcUrls keys back into string literals
  Add types-bn package to 0x.js and testnet-faucets
  Prettier
  Addressed comments and update 0xProject/types-ethereumjs-util deps
  Prettier
  Update testnet-faucets README
  Fix lint errors
  Add order signing and dispensing ability to faucet
2018-02-06 16:26:35 -08:00
Fabio Berger
c172b9e080 Add networkId to event label 2018-02-06 16:25:50 -08:00
Fabio Berger
5533a84dcd Update yarn.lock 2018-02-06 16:25:29 -08:00
Brandon Millman
562bcb8571 Merge pull request #352 from 0xProject/feature/testnet-faucets/order-dispenser
Add order signing and dispensing ability to faucet
2018-02-06 16:15:25 -08:00
Tom Schmidt
00c07b38a4 Merge pull request #370 from 0xProject/feature/ga-portal-logging
Add GA Logging to Portal
2018-02-06 16:01:36 -08:00
Brandon Millman
f44bfa9682 Bump subproviders version 2018-02-06 15:56:40 -08:00
Brandon Millman
7357a0a324 Update yarn.lock 2018-02-06 15:38:23 -08:00
Brandon Millman
36a49966eb Merge branch 'development' into feature/testnet-faucets/order-dispenser
* development:
  Attribute the origins of NonceTracker
  Move BlockParamLiteral to shared types package
  Fixes
  Move BlockParam and BlockParamLiteral to shared types
  Rename called to something more readable
  Newline prettier/lint
  Yarn.lock
  Refactor tests for reuse of the fixture subprovider
  Remove re-fetch of transaction count on error
  Disable linter for multiple class declarations
  Remove double declaration
  Enable CIRCLECI and declare web3
  Test faucets to use new NonceTracker
  Update changelog
  Readability and prettier
  Prettify
  Nonce tracker subprovider Caches the nonce when a request to getTransactionCount is made and increments the pending nonce after successful transactions
2018-02-06 15:36:00 -08:00
Brandon Millman
f818d06b43 Change rpcUrls keys back into string literals 2018-02-06 15:31:12 -08:00
Jacob Evans
548246c05f Merge pull request #355 from 0xProject/feature/subproviders/nonce-tracker
Nonce tracker subprovider
2018-02-06 15:29:19 -08:00
Brandon Millman
2bf1aa975a Add types-bn package to 0x.js and testnet-faucets 2018-02-06 15:24:11 -08:00
Jacob Evans
4be8eca3fe Attribute the origins of NonceTracker
NonceTrackerSubprovider is inspired from Web3ProviderEngine NonceTracker
2018-02-06 15:16:28 -08:00
Jacob Evans
e17ace397c Move BlockParamLiteral to shared types package
Also BlockParam
2018-02-06 13:17:14 -08:00
Brandon Millman
6bdabe72b9 Prettier 2018-02-06 11:48:56 -08:00
Thomas Schmidt
00bfc7f889 Added logging for order filling and order cancelling 2018-02-06 11:47:24 -08:00
Brandon Millman
5fcb77e591 Merge branch 'development' into feature/testnet-faucets/order-dispenser
* development:
  Update utils in top level package to 0.3.0
  Add 0.2.0 back to yarn lock
  Reword comment on any
  Link to the wiki article in the README
  Justify the any usage
  Publish
  Revert "Temp"
  Changelog
  Change the InjectedWeb3Subprovider to accept Web3.Provider
2018-02-06 11:45:55 -08:00
Jacob Evans
df8de7ff51 Fixes
Rename to isFirstGetTransactionCount
assign nextPrefixedHexNonce as a const
2018-02-06 11:34:22 -08:00
Jacob Evans
67d7540907 Move BlockParam and BlockParamLiteral to shared types 2018-02-06 11:27:11 -08:00
Brandon Millman
83d0bad3a1 Addressed comments and update 0xProject/types-ethereumjs-util deps 2018-02-05 18:11:26 -08:00
Thomas Schmidt
9d80a62bb1 Moved to async await 2018-02-05 18:02:05 -08:00
Jacob Evans
629653425d Update utils in top level package to 0.3.0 2018-02-05 17:58:30 -08:00
Jacob Evans
03ce1d8641 Add 0.2.0 back to yarn lock 2018-02-05 17:47:10 -08:00
Jacob Evans
225baeb5cb Merge branch 'development' into feature/subproviders/nonce-tracker 2018-02-05 17:22:45 -08:00
Jacob Evans
cf171d28c7 Reword comment on any 2018-02-05 17:20:45 -08:00
Jacob Evans
61434a9121 Merge pull request #363 from 0xProject/refactor/subproviders/injected-provider-constructor
Change the InjectedWeb3Subprovider to accept Web3.Provider
2018-02-05 17:16:34 -08:00
Jacob Evans
20590b7d35 Rename called to something more readable 2018-02-05 17:11:45 -08:00
Jacob Evans
fce7081215 Newline prettier/lint 2018-02-05 16:57:27 -08:00
Thomas Schmidt
83c7c8110d Formatting and removed old GA code 2018-02-05 16:56:53 -08:00
Jacob Evans
c4680a97a8 Yarn.lock 2018-02-05 16:47:31 -08:00
Thomas Schmidt
91a5bcf380 Converted BigNumber to number for GA logging 2018-02-05 16:43:50 -08:00
Jacob Evans
7e9ae458e2 Merge branch 'development' into feature/subproviders/nonce-tracker 2018-02-05 16:36:46 -08:00
Jacob Evans
4e284f5e6c Refactor tests for reuse of the fixture subprovider 2018-02-05 16:32:43 -08:00
Thomas Schmidt
75ded89790 GA logging for order creation 2018-02-05 16:20:53 -08:00
Thomas Schmidt
598ce0d401 Switch GA to React GA and add logging for Portal 2018-02-05 15:57:29 -08:00
Jacob Evans
fc3058c1e2 Remove re-fetch of transaction count on error 2018-02-05 14:27:58 -08:00
Jacob Evans
d14ae70776 Link to the wiki article in the README 2018-02-05 13:55:01 -08:00
Jacob Evans
882816d609 Justify the any usage 2018-02-05 13:46:59 -08:00
Leonid Logvinov
2205e2b9a0 Publish
- 0x.js@0.32.0
 - @0xproject/abi-gen@0.1.7
 - @0xproject/assert@0.0.16
 - @0xproject/connect@0.5.5
 - contracts@2.1.9
 - @0xproject/deployer@0.0.6
 - @0xproject/dev-utils@0.0.10
 - @0xproject/json-schemas@0.7.8
 - @0xproject/monorepo-scripts@0.1.9
 - @0xproject/subproviders@0.3.6
 - @0xproject/testnet-faucets@1.0.10
 - @0xproject/tslint-config@0.4.7
 - @0xproject/types@0.1.9
 - @0xproject/utils@0.3.0
 - web3-typescript-typings@0.9.9
 - @0xproject/web3-wrapper@0.1.10
 - @0xproject/website@0.0.12
2018-02-05 22:29:42 +01:00
Leonid Logvinov
855fdd7921 Revert "Temp"
This reverts commit 881d32e733.
2018-02-05 22:26:50 +01:00
Brandon Millman
99b1f81e89 Merge branch 'development' into feature/testnet-faucets/order-dispenser
* development: (37 commits)
  Add dates to CHANGELOGs
  Change CHANGELOGs
  Add .editorconfig
  Fix a typo
  Temp
  Use forEach instead of map
  Add PR number
  Fix an exception when a signature collision happens
  Fix prettier
  Add regression tests
  Improve the comment and fix an exception
  Add missing comas
  Lerna-ignore tslint and tsconfig
  Update contract versions, fix tests
  Rename directories
  Rename previous contracts, fix imports, add nested file structure
  Move all contracts into a single directory
  Update import
  Fix import
  Get rid of suffixed contract versioning and replace it with a poor-mans package manager. Versions are stored locally, and are generated in a copy-on-write basis as required
  ...
2018-02-05 13:16:46 -08:00
Leonid Logvinov
46ad7b1b38 Add dates to CHANGELOGs 2018-02-05 22:04:03 +01:00
Leonid Logvinov
7e5b7a7f2a Merge branch 'development' of github.com:0xProject/0x.js into development 2018-02-05 21:56:41 +01:00
Leonid
156e85a6b3 Merge pull request #366 from 0xProject/fix/abi_decoder_colision
Fix an exception when a signature collision happens
2018-02-05 21:56:04 +01:00
Leonid Logvinov
6fce02d25e Change CHANGELOGs 2018-02-05 21:53:41 +01:00
Remco Bloemen
4ddb86df53 Merge pull request #360 from 0xProject/feature/editorconfig
Add .editorconfig
2018-02-05 11:31:06 -08:00
Leonid
3565e96f42 Merge branch 'development' into fix/abi_decoder_colision 2018-02-05 19:31:37 +01:00
Leonid
2c7db23022 Merge pull request #350 from 0xProject/fix/ether_token_address
Add zeroEx.etherToken.getContractAddressIfExists
2018-02-05 19:27:20 +01:00
Remco Bloemen
fe51c9a9a2 Add .editorconfig 2018-02-05 10:25:05 -08:00
Leonid Logvinov
5324dfa5a7 Fix a typo 2018-02-05 19:13:09 +01:00
Leonid Logvinov
881d32e733 Temp 2018-02-05 19:10:17 +01:00
Leonid Logvinov
1f4cbb7479 Use forEach instead of map 2018-02-05 13:04:49 +01:00
Leonid Logvinov
b17bbdaa7d Add PR number 2018-02-05 13:01:53 +01:00
Leonid Logvinov
5458a1c1b7 Fix an exception when a signature collision happens 2018-02-05 12:59:10 +01:00
Leonid Logvinov
fa98450754 Fix prettier 2018-02-05 12:49:57 +01:00
Leonid
7b4f2b47de Merge branch 'development' into fix/ether_token_address 2018-02-05 12:33:40 +01:00
Leonid Logvinov
400a97e7a8 Add regression tests 2018-02-05 12:32:59 +01:00
Leonid Logvinov
a816fb5958 Improve the comment and fix an exception 2018-02-05 12:28:27 +01:00
Leonid
c7ad6ebad6 Merge pull request #358 from 0xProject/feature/build_watch
Add build:watch command to all TS packages
2018-02-05 12:03:36 +01:00
Leonid Logvinov
85b4a82a4b Add missing comas 2018-02-05 12:03:13 +01:00
Leonid
f18fa8e947 Merge branch 'development' into feature/build_watch 2018-02-05 12:00:05 +01:00
Leonid
44cd185c66 Merge pull request #356 from 0xProject/lerna-ignore
Ignore test files and markdown files changes on publish
2018-02-05 11:26:31 +01:00
Leonid Logvinov
890f414b5a Lerna-ignore tslint and tsconfig 2018-02-05 11:25:59 +01:00
Leonid
03b1b12ef1 Merge pull request #359 from 0xProject/feature/ts-2.7
TS 2.7
2018-02-05 11:24:36 +01:00
Jacob Evans
dae6f28f8a Disable linter for multiple class declarations 2018-02-02 15:07:10 -08:00
Jacob Evans
5aca3a2d7d Changelog 2018-02-02 14:53:44 -08:00
Jacob Evans
7f257e258f Change the InjectedWeb3Subprovider to accept Web3.Provider 2018-02-02 14:44:29 -08:00
Amir Bandeali
6a9d3de0f9 Merge pull request #329 from 0xProject/feature/contracts/versioning
Implement stop-gap smart contract versioning
2018-02-02 10:57:18 -08:00
Amir Bandeali
05aae36813 Update contract versions, fix tests 2018-02-02 09:41:19 -08:00
Amir Bandeali
d5d6079b67 Rename directories 2018-02-02 09:39:08 -08:00
Amir Bandeali
bb4c8bf8eb Rename previous contracts, fix imports, add nested file structure 2018-02-02 09:39:08 -08:00
Fabio Berger
3eb40db498 Move all contracts into a single directory 2018-02-02 09:39:08 -08:00
Fabio Berger
576f63d5e4 Update import 2018-02-02 09:39:08 -08:00
Fabio Berger
cda1dc82e9 Fix import 2018-02-02 09:39:08 -08:00
Fabio Berger
2721252d6a Get rid of suffixed contract versioning and replace it with a poor-mans package manager. Versions are stored locally, and are generated in a copy-on-write basis as required 2018-02-02 09:39:08 -08:00
Leonid Logvinov
45ac960308 Add build:watch to README's 2018-02-02 12:42:19 +01:00
Leonid
47d74aa24a Merge pull request #361 from 0xProject/feature/deployer/solc-0.4.19
Add solc 0.4.19
2018-02-02 12:29:58 +01:00
Jacob Evans
48aa1ad57d Remove double declaration 2018-02-01 18:43:32 -08:00
Jacob Evans
2eccb28dee Enable CIRCLECI and declare web3 2018-02-01 17:08:19 -08:00
Brandon Millman
9c3bfd920f Add CODEOWNERS file for automatically adding reviewers to PRs 2018-02-01 16:31:00 -08:00
Jacob Evans
76eb1e9e7f Test faucets to use new NonceTracker 2018-02-02 11:26:49 +11:00
Jacob Evans
b7af597668 Update changelog 2018-02-02 11:06:56 +11:00
Jacob Evans
d635559a30 Readability and prettier 2018-02-02 11:06:23 +11:00
Jacob Evans
58dd90b7b7 Prettify 2018-02-02 11:06:22 +11:00
Jacob Evans
ead990a734 Nonce tracker subprovider
Caches the nonce when a request to getTransactionCount is made
and increments the pending nonce after successful transactions
2018-02-02 11:06:22 +11:00
Remco Bloemen
27400fcd5b Add solc 0.4.19 2018-02-01 15:46:38 -08:00
Leonid Logvinov
0c6cbb66b1 Lerna ignore scripts and lib 2018-02-01 12:56:46 +01:00
Leonid Logvinov
f09393d4f4 Ignore test files and markdown files changes on publish 2018-02-01 12:56:10 +01:00
Leonid Logvinov
f6d963d45a Fix errors after TS upgrade 2018-02-01 12:51:04 +01:00
Leonid Logvinov
39e3733be4 Upgrade TS to the newest version 2018-02-01 12:50:55 +01:00
Leonid Logvinov
09659cc304 Add build:watch command to all TS packages 2018-02-01 12:32:05 +01:00
Brandon Millman
6577d60733 Prettier 2018-01-31 15:52:05 -08:00
Brandon Millman
c7db837214 Update testnet-faucets README 2018-01-31 15:40:13 -08:00
Brandon Millman
03cb7233dc Merge branch 'development' into feature/testnet-faucets/order-dispenser
* development: (49 commits)
  Prettier
  Updated contract generation in 0x to new abi-gen CLI
  Add PR number to changelog
  Fix lint errors
  Removed deprecated CLI options
  Add protected keyword to underscore lint rule
  Remove unused prop
  Fix prettier
  Uppercase Networks enum values
  Make default gasPrice more readable
  Fix prettier mess
  Fix linter errors
  Shrink img
  Fix all setState calls after unmounted errors. Decided to create our own flag rather then using a cancellablePromise since there was little to be gained from this alternative
  Fix bug where we were return undefined instead of the empty object
  Default the derivation path to that found in the Ledger subprovider
  Add browser data to dialog info
  Add Rinkeby support
  Pass in whether we want the personal message prefix appended and never append it for Ledger. This fixes signing when Ledger is used and the backing node is not Parity
  Wholesale replace the tokenByAddress and de-dup properly
  ...
2018-01-31 15:30:09 -08:00
Brandon Millman
3a1ca32ff1 Fix lint errors 2018-01-30 12:10:06 -08:00
Brandon Millman
44162811bd Add order signing and dispensing ability to faucet 2018-01-30 11:36:39 -08:00
Leonid Logvinov
1c1f2ef1ff Fix PR template 2018-01-30 15:05:16 +01:00
Leonid Logvinov
4fa774f866 Update CHANGELOG 2018-01-30 15:04:42 +01:00
Leonid Logvinov
4671999ea0 Fix linter errors 2018-01-30 14:54:10 +01:00
Leonid Logvinov
0a73bbe279 Add zeroEx.etherToken.getContractAddressifExists 2018-01-30 14:35:04 +01:00
520 changed files with 20769 additions and 17203 deletions

12
.editorconfig Normal file
View File

@@ -0,0 +1,12 @@
# EditorConfig http://EditorConfig.org
# top-most EditorConfig file
root = true
# All files
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
indent_style = space
indent_size = 4

4
.gitignore vendored
View File

@@ -68,6 +68,10 @@ generated_docs/
TODO.md
packages/website/public/bundle*
packages/react-docs/example/public/bundle*
# generated binaries
bin/
# generated contract artifacts
packages/contracts/src/artifacts

View File

@@ -1,6 +0,0 @@
.*
tsconfig.json
tslint.json
webpack.config.js
yarn.lock
docs

View File

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

1
CODEOWNERS Normal file
View File

@@ -0,0 +1 @@
* @abandeali1 @BMillman19 @dekz @fabioberger @LogvinovLeon @Recmo

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

@@ -22,15 +22,21 @@
## Types of changes
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply:
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to change)
<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->
* [ ] Bug fix (non-breaking change which fixes an issue)
* [ ] New feature (non-breaking change which adds functionality)
* [ ] Breaking change (fix or feature that would cause existing functionality to change)
## Checklist:
<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->
* [ ] Change requires a change to the documentation.
* [ ] Added tests to cover my changes.
* [ ] 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.

View File

@@ -4,36 +4,39 @@
[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=master&t=fp0cXD)](https://coveralls.io/github/0xProject/0x-monorepo?branch=master)
[![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/)
[![Greenkeeper badge](https://badges.greenkeeper.io/0xProject/0x-monorepo.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 to derive all auto-generated wrappers from |
| [`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 |
| [`@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) | Smart contract deployer |
| [`@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 |
| [`ethers-typescript-typings`](/packages/ethers-typescript-typings) | [![npm](https://img.shields.io/npm/v/@0xproject/deployer.svg)](https://www.npmjs.com/package/ethers-typescript-typings) | [Ethers.js](https://github.com/ethers-io/ethers.js/) typescript typings |
| [`@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 |
| [`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/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
@@ -48,10 +51,10 @@ This repository contains all the 0x developer tools written in TypeScript. Our h
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)
* [Standard Relayer API](https://github.com/0xProject/standard-relayer-api/blob/master/README.md)
## Contributing
@@ -81,6 +84,12 @@ Build all packages
yarn lerna:run build
```
Continuously rebuild on exchange
```bash
yarn dev
```
### Lint
Lint all packages

View File

@@ -1,7 +1,17 @@
{
"lerna": "2.5.1",
"packages": ["packages/*"],
"commands": {
"publish": {
"allowBranch": "development"
}
},
"version": "independent",
"commands": {
"publish": {
"ignore": ["test/**/*", "*.md", "scripts", "lib", "tslint.json", "tsconfig.json"]
}
},
"npmClient": "yarn",
"useWorkspaces": true
}

View File

@@ -1,8 +1,9 @@
{
"private": true,
"name": "0x.js",
"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",
@@ -15,11 +16,11 @@
"mnemonic": "concert load couple harbor equip island argue ramp clarify fence smart topic"
},
"devDependencies": {
"@0xproject/utils": "^0.2.0",
"@0xproject/utils": "^0.4.0",
"async-child-process": "^1.1.1",
"ethereumjs-testrpc": "^6.0.3",
"lerna": "^2.5.1",
"prettier": "1.9.2",
"prettier": "^1.11.1",
"publish-release": "0xproject/publish-release",
"semver-sort": "^0.0.4"
}

10
packages/0x.js/.npmignore Normal file
View File

@@ -0,0 +1,10 @@
.*
tsconfig.json
webpack.config.js
yarn-error.log
test/
/src/
/_bundles/
/contract_templates/
/generated_docs/
/scripts/

View File

@@ -1,8 +1,34 @@
# CHANGELOG
## 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_
* Fix publishing issue where .npmignore was not properly excluding undesired content (#389)
## v0.32.1 - _February 7, 2018_
* Reorganized `BlockParamLiteral` export into `@0xproject/types` package (#355)
* Now using `abi-gen` package to generate ContractEventArgs types (#371)
## v0.32.0 - _February 5, 2018_
* Add `zeroEx.etherToken.getContractAddressIfExists` (#350)
* Fixed the bug causing order watcher to throw if there is an event with the same signature but different indexed fields (#366)
## v0.31.1 - _February 1, 2018_
* Fix the bug causing order watcher to throw is makerToken === zrx (#357)
* Fix the bug causing order watcher to throw if makerToken === zrx (#357)
## v0.31.0 - _January 30, 2018_

View File

@@ -18,11 +18,20 @@ 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`:
```
"include": [
"./node_modules/web3-typescript-typings/index.d.ts",
"./node_modules/ethers-typescript-typings/index.d.ts"
]
```
#### 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**

View File

@@ -1,25 +0,0 @@
/**
* This file is auto-generated using abi-gen. Don't edit directly.
* Templates can be found at https://github.com/0xProject/0x.js/tree/development/packages/abi-gen-templates.
*/
// tslint:disable-next-line:no-unused-variable
import { TxData, TxDataPayable } from '@0xproject/types';
import { BigNumber, classUtils, promisify } from '@0xproject/utils';
import * as Web3 from 'web3';
import {BaseContract} from './base_contract';
export class {{contractName}}Contract extends BaseContract {
{{#each methods}}
{{#this.constant}}
{{> call contractName=../contractName}}
{{/this.constant}}
{{^this.constant}}
{{> tx contractName=../contractName}}
{{/this.constant}}
{{/each}}
constructor(web3ContractInstance: Web3.ContractInstance, defaults: Partial<TxData>) {
super(web3ContractInstance, defaults);
classUtils.bindAll(this, ['_web3ContractInstance', '_defaults']);
}
} // tslint:disable:max-file-line-count

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,3 +0,0 @@
{{#each inputs}}
{{name}}: {{#parameterType type}}{{/parameterType}},
{{/each}}

View File

@@ -1,6 +1,6 @@
{
"name": "0x.js",
"version": "0.31.1",
"version": "0.33.1",
"description": "A javascript library for interacting with the 0x protocol",
"keywords": [
"0x.js",
@@ -12,11 +12,12 @@
"main": "lib/src/index.js",
"types": "lib/src/index.d.ts",
"scripts": {
"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",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json",
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template contract_templates/contract.handlebars --partials 'contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated",
"generate_contract_wrappers": "node ../abi-gen/lib/index.js --abis 'src/artifacts/@(Exchange|Token|TokenTransferProxy|EtherToken|TokenRegistry|DummyToken).json' --template ../contract_templates/contract.handlebars --partials '../contract_templates/partials/**/*.handlebars' --output src/contract_wrappers/generated --backend ethers && prettier --write 'src/contract_wrappers/generated/**.ts'",
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
"test:circleci": "run-s test:coverage report_test_coverage",
"test": "run-s clean test:commonjs",
@@ -34,16 +35,16 @@
},
"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.1.6",
"@0xproject/dev-utils": "^0.0.9",
"@0xproject/tslint-config": "^0.4.6",
"@0xproject/abi-gen": "^0.2.5",
"@0xproject/dev-utils": "^0.2.1",
"@0xproject/tslint-config": "^0.4.10",
"@types/bintrees": "^1.0.2",
"@types/jsonschema": "^1.1.1",
"@types/lodash": "^4.14.86",
@@ -54,9 +55,9 @@
"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-as-promised-typescript-typings": "^0.0.10",
"chai-bignumber": "^2.0.1",
"chai-typescript-typings": "^0.0.2",
"chai-typescript-typings": "^0.0.4",
"copyfiles": "^1.2.0",
"coveralls": "^3.0.0",
"dirty-chai": "^2.0.1",
@@ -72,26 +73,30 @@
"source-map-support": "^0.5.0",
"truffle-hdwallet-provider": "^0.0.3",
"tslint": "5.8.0",
"typedoc": "~0.8.0",
"typescript": "~2.6.1",
"typedoc": "0xProject/typedoc",
"types-bn": "^0.0.1",
"typescript": "2.7.1",
"web3-provider-engine": "^13.0.1",
"web3-typescript-typings": "^0.9.8",
"webpack": "^3.1.0"
},
"dependencies": {
"@0xproject/assert": "^0.0.15",
"@0xproject/json-schemas": "^0.7.7",
"@0xproject/types": "^0.1.8",
"@0xproject/utils": "^0.2.4",
"@0xproject/web3-wrapper": "^0.1.9",
"@0xproject/assert": "^0.2.0",
"@0xproject/base-contract": "^0.0.3",
"@0xproject/json-schemas": "^0.7.14",
"@0xproject/types": "^0.3.1",
"@0xproject/utils": "^0.4.1",
"@0xproject/web3-wrapper": "^0.2.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",
"ethers-typescript-typings": "^0.0.2",
"js-sha3": "^0.7.0",
"lodash": "^4.17.4",
"uuid": "^3.1.0",
"web3": "^0.20.0"
"web3": "^0.20.0",
"web3-typescript-typings": "^0.10.0"
}
}

View File

@@ -1,9 +1,16 @@
const execAsync = require('async-child-process').execAsync;
const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const tsConfig = require('../tsconfig.json');
const cwd = __dirname + '/..';
const subPackageName = packageJSON.name;
// Include any external packages that are part of the 0x.js public interface
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
// So far, we only have @0xproject/types as part of 0x.js's public interface.
const fileIncludes = [...tsConfig.include, '../types/src/index.ts'];
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
const projectFiles = fileIncludesAdjusted.join(' ');
const S3BucketPath = 's3://0xjs-docs-jsons/';
let tag;
@@ -15,12 +22,12 @@ postpublish_utils
version = result.version;
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
const assets = [__dirname + '/../_bundles/index.js', __dirname + '/../_bundles/index.min.js'];
return postpublish_utils.publishReleaseNotes(tag, releaseName, assets);
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', {
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
cwd,
});
})

View File

@@ -0,0 +1,31 @@
const execAsync = require('async-child-process').execAsync;
const postpublish_utils = require('../../../scripts/postpublish_utils');
const tsConfig = require('../tsconfig.json');
const cwd = __dirname + '/..';
const S3BucketPath = 's3://staging-0xjs-docs-jsons/';
// Include any external packages that are part of the 0x.js public interface
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
// So far, we only have @0xproject/types as part of 0x.js's public interface.
const fileIncludes = [...tsConfig.include, '../types/src/index.ts'];
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
const projectFiles = fileIncludesAdjusted.join(' ');
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
const version = process.env.DOCS_VERSION;
execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
cwd,
})
.then(function(result) {
if (result.stderr !== '') {
throw new Error(result.stderr);
}
const fileName = 'v' + version + '.json';
const s3Url = S3BucketPath + fileName;
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
cwd,
});
})
.catch(function(err) {
console.log(err);
});

View File

@@ -13,6 +13,8 @@ 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 { zeroExPrivateNetworkConfigSchema } from './schemas/zero_ex_private_network_config_schema';
import { zeroExPublicNetworkConfigSchema } from './schemas/zero_ex_public_network_config_schema';
import { ECSignature, Order, SignedOrder, Web3Provider, ZeroExConfig, ZeroExError } from './types';
import { assert } from './utils/assert';
import { constants } from './utils/constants';
@@ -74,8 +76,9 @@ 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;
}
/**
@@ -163,7 +166,10 @@ export class ZeroEx {
*/
constructor(provider: Web3Provider, 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);
@@ -245,6 +251,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 +260,7 @@ export class ZeroEx {
msgHashHex = ethUtil.bufferToHex(msgHashBuff);
}
const signature = await this._web3Wrapper.signTransactionAsync(signerAddress, msgHashHex);
const signature = await this._web3Wrapper.signTransactionAsync(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 +269,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 +277,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;
}

View File

@@ -1,4 +1,4 @@
import { LogWithDecodedArgs, RawLog } from '@0xproject/types';
import { BlockParamLiteral, LogWithDecodedArgs, RawLog } from '@0xproject/types';
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import { Block, BlockAndLogStreamer } from 'ethereumjs-blockstream';
@@ -7,7 +7,6 @@ import * as Web3 from 'web3';
import {
Artifact,
BlockParamLiteral,
BlockRange,
ContractEventArgs,
ContractEvents,
@@ -32,10 +31,10 @@ const CONTRACT_NAME_TO_NOT_FOUND_ERROR: {
export class ContractWrapper {
protected _web3Wrapper: Web3Wrapper;
private _networkId: number;
protected _networkId: number;
private _abiDecoder?: AbiDecoder;
private _blockAndLogStreamerIfExists: BlockAndLogStreamer | undefined;
private _blockAndLogStreamInterval: NodeJS.Timer;
private _blockAndLogStreamerIfExists?: BlockAndLogStreamer;
private _blockAndLogStreamIntervalIfExists?: NodeJS.Timer;
private _filters: { [filterToken: string]: Web3.FilterObject };
private _filterCallbacks: {
[filterToken: string]: EventCallback<ContractEventArgs>;
@@ -109,10 +108,10 @@ export class ContractWrapper {
const logWithDecodedArgs = this._abiDecoder.tryToDecodeLogOrNoop(log);
return logWithDecodedArgs;
}
protected async _instantiateContractIfExistsAsync(
protected async _getContractAbiAndAddressFromArtifactsAsync(
artifact: Artifact,
addressIfExists?: string,
): Promise<Web3.ContractInstance> {
): Promise<[Web3.ContractAbi, string]> {
let contractAddress: string;
if (_.isUndefined(addressIfExists)) {
if (_.isUndefined(artifact.networks[this._networkId])) {
@@ -126,8 +125,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: [Web3.ContractAbi, string] = [artifact.abi, contractAddress];
return abiAndAddress;
}
protected _getContractAddress(artifact: Artifact, addressIfExists?: string): string {
if (_.isUndefined(addressIfExists)) {
@@ -162,7 +161,7 @@ export class ContractWrapper {
);
const catchAllLogFilter = {};
this._blockAndLogStreamerIfExists.addLogFilter(catchAllLogFilter);
this._blockAndLogStreamInterval = intervalUtils.setAsyncExcludingInterval(
this._blockAndLogStreamIntervalIfExists = intervalUtils.setAsyncExcludingInterval(
this._reconcileBlockAsync.bind(this),
constants.DEFAULT_BLOCK_POLLING_INTERVAL,
this._onReconcileBlockError.bind(this),
@@ -191,7 +190,7 @@ export class ContractWrapper {
}
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogAdded(this._onLogAddedSubscriptionToken as string);
this._blockAndLogStreamerIfExists.unsubscribeFromOnLogRemoved(this._onLogRemovedSubscriptionToken as string);
intervalUtils.clearAsyncExcludingInterval(this._blockAndLogStreamInterval);
intervalUtils.clearAsyncExcludingInterval(this._blockAndLogStreamIntervalIfExists as NodeJS.Timer);
delete this._blockAndLogStreamerIfExists;
}
private async _reconcileBlockAsync(): Promise<void> {

View File

@@ -5,19 +5,11 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { artifacts } from '../artifacts';
import {
BlockRange,
EtherTokenContractEventArgs,
EtherTokenEvents,
EventCallback,
IndexedFilterValues,
TransactionOpts,
ZeroExError,
} from '../types';
import { BlockRange, EventCallback, IndexedFilterValues, TransactionOpts, ZeroExError } from '../types';
import { assert } from '../utils/assert';
import { ContractWrapper } from './contract_wrapper';
import { EtherTokenContract } from './generated/ether_token';
import { EtherTokenContract, EtherTokenContractEventArgs, EtherTokenEvents } from './generated/ether_token';
import { TokenWrapper } from './token_wrapper';
/**
@@ -49,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,
@@ -80,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,
});
@@ -109,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,
@@ -137,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,
@@ -159,11 +162,24 @@ export class EtherTokenWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
* Retrieves the Ethereum address of the EtherToken contract deployed on the network
* that the user-passed web3 provider is connected to. If it's not Kovan, Ropsten, Rinkeby, Mainnet or TestRPC
* (networkId: 50), it will return undefined (e.g a private network).
* @returns The Ethereum address of the EtherToken contract or undefined.
*/
public getContractAddressIfExists(): string | undefined {
const networkSpecificArtifact = artifacts.EtherTokenArtifact.networks[this._networkId];
const contractAddressIfExists = _.isUndefined(networkSpecificArtifact)
? undefined
: networkSpecificArtifact.address;
return contractAddressIfExists;
}
private _invalidateContractInstance(): void {
this._unsubscribeAll();
this.unsubscribeAll();
this._etherTokenContractsByAddress = {};
}
private async _getEtherTokenContractAsync(etherTokenAddress: string): Promise<EtherTokenContract> {
@@ -171,11 +187,11 @@ 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(this._web3Wrapper, abi, address);
etherTokenContract = contractInstance;
this._etherTokenContractsByAddress[etherTokenAddress] = etherTokenContract;
return etherTokenContract;

View File

@@ -1,5 +1,5 @@
import { schemas } from '@0xproject/json-schemas';
import { DecodedLogArgs, LogWithDecodedArgs } from '@0xproject/types';
import { BlockParamLiteral, DecodedLogArgs, LogWithDecodedArgs } from '@0xproject/types';
import { AbiDecoder, BigNumber } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
@@ -7,16 +7,12 @@ import * as Web3 from 'web3';
import { artifacts } from '../artifacts';
import {
BlockParamLiteral,
BlockRange,
ECSignature,
EventCallback,
ExchangeContractErrCodes,
ExchangeContractErrs,
ExchangeContractEventArgs,
ExchangeEvents,
IndexedFilterValues,
LogErrorContractEventArgs,
MethodOpts,
Order,
OrderAddresses,
@@ -34,7 +30,12 @@ import { OrderValidationUtils } from '../utils/order_validation_utils';
import { utils } from '../utils/utils';
import { ContractWrapper } from './contract_wrapper';
import { ExchangeContract } from './generated/exchange';
import {
ExchangeContract,
ExchangeContractEventArgs,
ExchangeEvents,
LogErrorContractEventArgs,
} from './generated/exchange';
import { TokenWrapper } from './token_wrapper';
const SHOULD_VALIDATE_BY_DEFAULT = true;
@@ -107,8 +108,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
@@ -126,7 +129,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;
@@ -143,7 +147,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;
@@ -179,6 +184,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)
@@ -191,7 +197,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -207,7 +213,7 @@ export class ExchangeWrapper extends ContractWrapper {
signedOrder.ecSignature.r,
signedOrder.ecSignature.s,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -253,6 +259,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
@@ -266,7 +273,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount.minus(filledTakerTokenAmount),
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
filledTakerTokenAmount = filledTakerTokenAmount.plus(singleFilledTakerTokenAmount);
@@ -300,7 +307,7 @@ export class ExchangeWrapper extends ContractWrapper {
rArray,
sArray,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -344,6 +351,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;
@@ -355,7 +363,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
orderFillRequest.signedOrder,
orderFillRequest.takerTokenFillAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -388,7 +396,7 @@ export class ExchangeWrapper extends ContractWrapper {
rArray,
sArray,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -416,6 +424,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();
@@ -429,7 +438,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
signedOrder,
fillTakerTokenAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -443,7 +452,7 @@ export class ExchangeWrapper extends ContractWrapper {
signedOrder.ecSignature.r,
signedOrder.ecSignature.s,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -475,6 +484,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);
}
@@ -491,7 +501,7 @@ export class ExchangeWrapper extends ContractWrapper {
exchangeTradeEmulator,
orderFillRequest.signedOrder,
orderFillRequest.takerTokenFillAmount,
takerAddress,
normalizedTakerAddress,
zrxTokenAddress,
);
}
@@ -519,7 +529,7 @@ export class ExchangeWrapper extends ContractWrapper {
rParams,
sParams,
{
from: takerAddress,
from: normalizedTakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -543,6 +553,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();
@@ -565,7 +576,7 @@ export class ExchangeWrapper extends ContractWrapper {
orderValues,
cancelTakerTokenAmount,
{
from: order.maker,
from: normalizedMakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -602,6 +613,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;
@@ -635,7 +648,7 @@ export class ExchangeWrapper extends ContractWrapper {
orderValues,
cancelTakerTokenAmounts,
{
from: maker,
from: normalizedMakerAddress,
gas: orderTransactionOpts.gasLimit,
gasPrice: orderTransactionOpts.gasPrice,
},
@@ -678,7 +691,7 @@ export class ExchangeWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
@@ -756,13 +769,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,
);
}
@@ -802,13 +816,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,
);
}
@@ -847,7 +862,7 @@ export class ExchangeWrapper extends ContractWrapper {
});
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);
}
@@ -861,7 +876,7 @@ export class ExchangeWrapper extends ContractWrapper {
return contractAddress;
}
private _invalidateContractInstances(): void {
this._unsubscribeAll();
this.unsubscribeAll();
delete this._exchangeContractIfExists;
}
private async _isValidSignatureUsingContractCallAsync(
@@ -872,11 +887,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,
@@ -894,11 +910,11 @@ 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(this._web3Wrapper, abi, address);
this._exchangeContractIfExists = contractInstance;
return this._exchangeContractIfExists;
}

View File

@@ -1,6 +1 @@
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,14 +117,11 @@ 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,
this._web3Wrapper.getContractDefaults(),
);
const contractInstance = new TokenRegistryContract(this._web3Wrapper, abi, address);
this._tokenRegistryContractIfExists = contractInstance;
return this._tokenRegistryContractIfExists;
}

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,14 +59,11 @@ 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,
this._web3Wrapper.getContractDefaults(),
);
const contractInstance = new TokenTransferProxyContract(this._web3Wrapper, abi, address);
this._tokenTransferProxyContractIfExists = contractInstance;
return this._tokenTransferProxyContractIfExists;
}

View File

@@ -5,21 +5,12 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { artifacts } from '../artifacts';
import {
BlockRange,
EventCallback,
IndexedFilterValues,
MethodOpts,
TokenContractEventArgs,
TokenEvents,
TransactionOpts,
ZeroExError,
} from '../types';
import { BlockRange, EventCallback, IndexedFilterValues, MethodOpts, TransactionOpts, ZeroExError } from '../types';
import { assert } from '../utils/assert';
import { constants } from '../utils/constants';
import { ContractWrapper } from './contract_wrapper';
import { TokenContract } from './generated/token';
import { TokenContract, TokenContractEventArgs, TokenEvents } from './generated/token';
import { TokenTransferProxyWrapper } from './token_transfer_proxy_wrapper';
/**
@@ -55,10 +46,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;
@@ -81,14 +75,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,
});
@@ -112,10 +109,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,
);
@@ -137,10 +140,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;
@@ -158,9 +171,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;
}
/**
@@ -181,12 +201,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,
@@ -209,9 +231,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,
);
@@ -234,19 +260,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,
});
@@ -274,30 +303,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,
},
@@ -320,11 +357,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,
@@ -342,7 +380,7 @@ export class TokenWrapper extends ContractWrapper {
/**
* Cancels all existing subscriptions
*/
public _unsubscribeAll(): void {
public unsubscribeAll(): void {
super._unsubscribeAll();
}
/**
@@ -361,11 +399,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,
@@ -374,21 +413,22 @@ 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(web3ContractInstance, this._web3Wrapper.getContractDefaults());
const contractInstance = new TokenContract(this._web3Wrapper, abi, address);
tokenContract = contractInstance;
this._tokenContractsByAddress[tokenAddress] = tokenContract;
this._tokenContractsByAddress[normalizedTokenAddress] = tokenContract;
return tokenContract;
}
}

View File

@@ -2,7 +2,6 @@ export { ZeroEx } from './0x';
export {
Order,
BlockParamLiteral,
SignedOrder,
ECSignature,
ZeroExError,
@@ -10,27 +9,13 @@ export {
ExchangeContractErrs,
ContractEvent,
Token,
ExchangeEvents,
TokenEvents,
IndexedFilterValues,
BlockRange,
BlockParam,
OrderCancellationRequest,
OrderFillRequest,
LogErrorContractEventArgs,
LogCancelContractEventArgs,
LogFillContractEventArgs,
ExchangeContractEventArgs,
TransferContractEventArgs,
ApprovalContractEventArgs,
TokenContractEventArgs,
EtherTokenContractEventArgs,
WithdrawalContractEventArgs,
DepositContractEventArgs,
ContractEventArgs,
Web3Provider,
ZeroExConfig,
EtherTokenEvents,
MethodOpts,
OrderTransactionOpts,
TransactionOpts,
@@ -44,6 +29,33 @@ export {
OrderState,
} from './types';
export { ContractEventArg, LogWithDecodedArgs, TransactionReceiptWithDecodedLogs } from '@0xproject/types';
export {
BlockParamLiteral,
BlockParam,
ContractEventArg,
LogWithDecodedArgs,
TransactionReceipt,
TransactionReceiptWithDecodedLogs,
} from '@0xproject/types';
export { TransactionReceipt } from '@0xproject/types';
export {
EtherTokenContractEventArgs,
WithdrawalContractEventArgs,
DepositContractEventArgs,
EtherTokenEvents,
} from './contract_wrappers/generated/ether_token';
export {
TransferContractEventArgs,
ApprovalContractEventArgs,
TokenContractEventArgs,
TokenEvents,
} from './contract_wrappers/generated/token';
export {
LogErrorContractEventArgs,
LogCancelContractEventArgs,
LogFillContractEventArgs,
ExchangeContractEventArgs,
ExchangeEvents,
} from './contract_wrappers/generated/exchange';

View File

@@ -3,7 +3,9 @@ import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import * as Web3 from 'web3';
import { BlockParamLiteral, EventWatcherCallback, ZeroExError } from '../types';
import { BlockParamLiteral } from '@0xproject/types';
import { EventWatcherCallback, ZeroExError } from '../types';
import { assert } from '../utils/assert';
const DEFAULT_EVENT_POLLING_INTERVAL_MS = 200;

View File

@@ -1,32 +1,37 @@
import { schemas } from '@0xproject/json-schemas';
import { LogWithDecodedArgs } from '@0xproject/types';
import { BlockParamLiteral, LogWithDecodedArgs } from '@0xproject/types';
import { AbiDecoder, intervalUtils } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as _ from 'lodash';
import { ZeroEx } from '../0x';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
import {
DepositContractEventArgs,
EtherTokenEvents,
WithdrawalContractEventArgs,
} from '../contract_wrappers/generated/ether_token';
import {
ExchangeEvents,
LogCancelContractEventArgs,
LogFillContractEventArgs,
} from '../contract_wrappers/generated/exchange';
import {
ApprovalContractEventArgs,
TokenEvents,
TransferContractEventArgs,
} from '../contract_wrappers/generated/token';
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
import { OrderFilledCancelledLazyStore } from '../stores/order_filled_cancelled_lazy_store';
import {
ApprovalContractEventArgs,
BlockParamLiteral,
ContractEventArgs,
DepositContractEventArgs,
EtherTokenEvents,
ExchangeContractErrs,
ExchangeEvents,
LogCancelContractEventArgs,
LogEvent,
LogFillContractEventArgs,
OnOrderStateChangeCallback,
OrderState,
OrderStateWatcherConfig,
SignedOrder,
TokenEvents,
TransferContractEventArgs,
WithdrawalContractEventArgs,
ZeroExError,
} from '../types';
import { assert } from '../utils/assert';

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

@@ -1,8 +1,8 @@
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
import { BlockParamLiteral } from '../types';
/**
* Copy on read store for balances/proxyAllowances of tokens/accounts

View File

@@ -1,8 +1,8 @@
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { ExchangeWrapper } from '../contract_wrappers/exchange_wrapper';
import { BlockParamLiteral } from '../types';
/**
* Copy on read store for filled/cancelled taker amounts

View File

@@ -1,7 +1,13 @@
import { ContractEventArg, LogWithDecodedArgs } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import { BlockParam, BlockParamLiteral, ContractEventArg, LogWithDecodedArgs } from '@0xproject/types';
import * as Web3 from 'web3';
import { EtherTokenContractEventArgs, EtherTokenEvents } from './contract_wrappers/generated/ether_token';
import { ExchangeContractEventArgs, ExchangeEvents } from './contract_wrappers/generated/exchange';
import { TokenContractEventArgs, TokenEvents } from './contract_wrappers/generated/token';
export enum ZeroExError {
ExchangeContractDoesNotExist = 'EXCHANGE_CONTRACT_DOES_NOT_EXIST',
ZRXContractDoesNotExist = 'ZRX_CONTRACT_DOES_NOT_EXIST',
@@ -99,60 +105,6 @@ export interface ContractEvent {
args: ContractEventArgs;
}
export interface LogFillContractEventArgs {
maker: string;
taker: string;
feeRecipient: string;
makerToken: string;
takerToken: string;
filledMakerTokenAmount: BigNumber;
filledTakerTokenAmount: BigNumber;
paidMakerFee: BigNumber;
paidTakerFee: BigNumber;
tokens: string;
orderHash: string;
}
export interface LogCancelContractEventArgs {
maker: string;
feeRecipient: string;
makerToken: string;
takerToken: string;
cancelledMakerTokenAmount: BigNumber;
cancelledTakerTokenAmount: BigNumber;
tokens: string;
orderHash: string;
}
export interface LogErrorContractEventArgs {
errorId: BigNumber;
orderHash: string;
}
export type ExchangeContractEventArgs =
| LogFillContractEventArgs
| LogCancelContractEventArgs
| LogErrorContractEventArgs;
export interface TransferContractEventArgs {
_from: string;
_to: string;
_value: BigNumber;
}
export interface ApprovalContractEventArgs {
_owner: string;
_spender: string;
_value: BigNumber;
}
export interface DepositContractEventArgs {
_owner: string;
_value: BigNumber;
}
export interface WithdrawalContractEventArgs {
_owner: string;
_value: BigNumber;
}
export type TokenContractEventArgs = TransferContractEventArgs | ApprovalContractEventArgs;
export type EtherTokenContractEventArgs =
| TokenContractEventArgs
| DepositContractEventArgs
| WithdrawalContractEventArgs;
export type ContractEventArgs = ExchangeContractEventArgs | TokenContractEventArgs | EtherTokenContractEventArgs;
export interface Order {
@@ -175,7 +127,7 @@ export interface SignedOrder extends Order {
}
// [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;
@@ -195,40 +147,12 @@ export interface TokenAddressBySymbol {
[symbol: string]: string;
}
export enum ExchangeEvents {
LogFill = 'LogFill',
LogCancel = 'LogCancel',
LogError = 'LogError',
}
export enum TokenEvents {
Transfer = 'Transfer',
Approval = 'Approval',
}
export enum EtherTokenEvents {
Transfer = 'Transfer',
Approval = 'Approval',
Deposit = 'Deposit',
Withdrawal = 'Withdrawal',
}
export type ContractEvents = TokenEvents | ExchangeEvents | EtherTokenEvents;
export interface IndexedFilterValues {
[index: string]: ContractEventArg;
}
// Earliest is omitted by design. It is simply an alias for the `0` constant and
// is thus not very helpful. Moreover, this type is used in places that only accept
// `latest` or `pending`.
export enum BlockParamLiteral {
Latest = 'latest',
Pending = 'pending',
}
export type BlockParam = BlockParamLiteral | number;
export interface BlockRange {
fromBlock: BlockParam;
toBlock: BlockParam;
@@ -272,7 +196,7 @@ export interface OrderStateWatcherConfig {
}
/*
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 42-kovan, 50-testrpc)
* networkId: The id of the underlying ethereum network your provider is connected to. (1-mainnet, 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

View File

@@ -1,9 +1,10 @@
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as _ from 'lodash';
import { TokenWrapper } from '../contract_wrappers/token_wrapper';
import { BalanceAndProxyAllowanceLazyStore } from '../stores/balance_proxy_allowance_lazy_store';
import { BlockParamLiteral, ExchangeContractErrs, TradeSide, TransferType } from '../types';
import { ExchangeContractErrs, TradeSide, TransferType } from '../types';
enum FailureReason {
Balance = 'balance',

View File

@@ -17,7 +17,6 @@ import {
ZeroEx,
ZeroExError,
} from '../src';
import { artifacts } from '../src/artifacts';
import { DoneCallback } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
@@ -60,7 +59,7 @@ describe('EtherTokenWrapper', () => {
tokens = await zeroEx.tokenRegistry.getTokensAsync();
userAddresses = await zeroEx.getAvailableAddressesAsync();
addressWithETH = userAddresses[0];
wethContractAddress = (zeroEx.etherToken as any)._getContractAddress(artifacts.EtherTokenArtifact);
wethContractAddress = zeroEx.etherToken.getContractAddressIfExists() as string;
depositWeiAmount = (zeroEx as any)._web3Wrapper.toWei(new BigNumber(5));
decimalPlaces = 7;
addressWithoutFunds = userAddresses[1];
@@ -71,6 +70,21 @@ describe('EtherTokenWrapper', () => {
afterEach(async () => {
await blockchainLifecycle.revertAsync();
});
describe('#getContractAddressIfExists', async () => {
it('should return contract address if connected to a known network', () => {
const contractAddressIfExists = zeroEx.etherToken.getContractAddressIfExists();
expect(contractAddressIfExists).to.not.be.undefined();
});
it('should throw if connected to a private network and contract addresses are not specified', () => {
const UNKNOWN_NETWORK_NETWORK_ID = 10;
expect(
() =>
new ZeroEx(web3.currentProvider, {
networkId: UNKNOWN_NETWORK_NETWORK_ID,
} as any),
).to.throw();
});
});
describe('#depositAsync', () => {
it('should successfully deposit ETH and issue Wrapped ETH tokens', async () => {
const preETHBalance = await (zeroEx as any)._web3Wrapper.getBalanceInWeiAsync(addressWithETH);
@@ -144,7 +158,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,

View File

@@ -1,9 +1,10 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import { ExchangeContractErrs, Token, ZeroEx } from '../src';
import { BlockParamLiteral, TradeSide, TransferType } from '../src/types';
import { TradeSide, TransferType } from '../src/types';
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
import { chaiSetup } from './utils/chai_setup';

View File

@@ -1,4 +1,5 @@
import { BlockchainLifecycle, devConstants, web3Factory } from '@0xproject/dev-utils';
import { BlockParamLiteral } from '@0xproject/types';
import { BigNumber } from '@0xproject/utils';
import * as chai from 'chai';
import * as _ from 'lodash';
@@ -18,7 +19,7 @@ import {
Token,
ZeroEx,
} from '../src';
import { BlockParamLiteral, DoneCallback } from '../src/types';
import { DoneCallback } from '../src/types';
import { chaiSetup } from './utils/chai_setup';
import { constants } from './utils/constants';
@@ -921,7 +922,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,

View File

@@ -9,10 +9,10 @@ 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';

View File

@@ -1,11 +1,12 @@
import { BlockchainLifecycle, devConstants, web3Factory } 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 { BlockParamLiteral, TradeSide, TransferType } from '../src/types';
import { TradeSide, TransferType } from '../src/types';
import { ExchangeTransferSimulator } from '../src/utils/exchange_transfer_simulator';
import { OrderValidationUtils } from '../src/utils/order_validation_utils';

View File

@@ -49,7 +49,7 @@ describe('SubscriptionTest', () => {
tokenAddress = token.address;
});
afterEach(() => {
zeroEx.token._unsubscribeAll();
zeroEx.token.unsubscribeAll();
_.each(stubs, s => s.restore());
stubs = [];
});
@@ -76,7 +76,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

@@ -377,7 +377,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,

View File

@@ -35,12 +35,8 @@ 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(
artifacts.DummyTokenArtifact.abi,
token.address,
);
const defaults = {};
const dummyToken = new DummyTokenContract(contractInstance, defaults);
const dummyToken = new DummyTokenContract(web3Wrapper, artifacts.DummyTokenArtifact.abi, token.address);
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

@@ -9,6 +9,7 @@
"./test/**/*",
"../../node_modules/types-bn/index.d.ts",
"../../node_modules/types-ethereumjs-util/index.d.ts",
"../../node_modules/ethers-typescript-typings/index.d.ts",
"../../node_modules/web3-typescript-typings/index.d.ts",
"../../node_modules/chai-typescript-typings/index.d.ts",
"../../node_modules/chai-as-promised-typescript-typings/index.d.ts"

View File

@@ -0,0 +1,5 @@
.*
yarn-error.log
/src/
/scripts/
tsconfig.json

View File

@@ -1,11 +1,22 @@
# CHANGELOG
## v0.2.0 - _???_
## v0.2.4 - _March 4, 2018_
* Added CLI options for explicit specifying location of partials and main template (#346)
* 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_
* Fix publishing issue where .npmignore was not properly excluding undesired content (#389)
## v0.2.0 - _February 7, 2018_
* Added CLI options for explicit specifying location of partials and main template (#346)
* Added CLI option to specify networkId, adding support for the JSON artifact format found in @0xproject/contracts (#388)
## v0.1.0 - _January 11, 2018_
* Fixed array typings with union types (#295)
* Add event ABIs to context data passed to templates (#302)
* Add constructor ABIs to context data passed to templates (#304)
* Fixed array typings with union types (#295)
* Add event ABIs to context data passed to templates (#302)
* Add constructor ABIs to context data passed to templates (#304)

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
@@ -36,14 +36,14 @@ The abi file should be either a [Truffle](http://truffleframework.com/) contract
## 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

View File

@@ -1,10 +1,11 @@
{
"name": "@0xproject/abi-gen",
"version": "0.1.6",
"version": "0.2.5",
"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"
@@ -14,15 +15,15 @@
},
"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.2.4",
"@0xproject/utils": "^0.4.1",
"chalk": "^2.3.0",
"glob": "^7.1.2",
"handlebars": "^4.0.11",
@@ -33,7 +34,7 @@
"yargs": "^10.0.3"
},
"devDependencies": {
"@0xproject/tslint-config": "^0.4.6",
"@0xproject/tslint-config": "^0.4.10",
"@types/glob": "^5.0.33",
"@types/handlebars": "^4.0.36",
"@types/mkdirp": "^0.5.1",
@@ -42,7 +43,7 @@
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "~2.6.1",
"web3-typescript-typings": "^0.9.8"
"typescript": "2.7.1",
"web3-typescript-typings": "^0.10.0"
}
}

View File

@@ -2,14 +2,4 @@ const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils
.getLatestTagAndVersionAsync(subPackageName)
.then(function(result) {
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
const assets = [];
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
})
.catch(function(err) {
throw err;
});
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -11,12 +11,14 @@ import * as yargs from 'yargs';
import toSnakeCase = require('to-snake-case');
import * as Web3 from 'web3';
import { ContextData, ParamKind } from './types';
import { ContextData, ContractsBackend, 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', {
@@ -42,6 +44,17 @@ 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',
default: DEFAULT_NETWORK_ID,
})
.example(
"$0 --abis 'src/artifacts/**/*.json' --out 'src/contracts/generated/' --partials 'src/templates/partials/**/*.handlebars' --template 'src/templates/contract.handlebars'",
'Full usage example',
@@ -58,14 +71,17 @@ function registerPartials(partialsGlob: string) {
}
function writeOutputFile(name: string, renderedTsCode: string): void {
const fileName = toSnakeCase(name);
let fileName = toSnakeCase(name);
if (fileName === 'z_r_x_token') {
fileName = 'zrx_token';
}
const filePath = `${args.output}/${fileName}.ts`;
fs.writeFileSync(filePath, renderedTsCode);
utils.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);
@@ -87,12 +103,19 @@ for (const abiFileName of abiFileNames) {
const namedContent = utils.getNamedContent(abiFileName);
utils.log(`Processing: ${chalk.bold(namedContent.name)}...`);
const parsedContent = JSON.parse(namedContent.content);
const ABI = _.isArray(parsedContent)
? parsedContent // ABI file
: parsedContent.abi; // Truffle contracts file
let ABI;
if (_.isArray(parsedContent)) {
ABI = parsedContent; // ABI file
} else if (!_.isUndefined(parsedContent.abi)) {
ABI = parsedContent.abi; // Truffle artifact
} else if (!_.isUndefined(parsedContent.networks) && !_.isUndefined(parsedContent.networks[args.networkId])) {
ABI = parsedContent.networks[args.networkId].abi; // 0x contracts package artifact
}
if (_.isUndefined(ABI)) {
utils.log(`${chalk.red(`ABI not found in ${abiFileName}.`)}`);
utils.log(`Please make sure your ABI file is either an array with ABI entries or an object with the abi key`);
utils.log(
`Please make sure your ABI file is either an array with ABI entries or a truffle artifact or 0x deployer artifact`,
);
process.exit(1);
}
@@ -103,16 +126,17 @@ for (const abiFileName of abiFileNames) {
const methodAbis = ABI.filter((abi: Web3.AbiDefinition) => abi.type === ABI_TYPE_METHOD) as Web3.MethodAbi[];
const methodsData = _.map(methodAbis, methodAbi => {
_.map(methodAbi.inputs, input => {
_.map(methodAbi.inputs, (input, i: number) => {
if (_.isEmpty(input.name)) {
// Auto-generated getters don't have parameter names
input.name = 'index';
input.name = `index_${i}`;
}
});
// This will make templates simpler
const methodData = {
...methodAbi,
singleReturnValue: methodAbi.outputs.length === 1,
hasReturnValue: methodAbi.outputs.length !== 0,
};
return methodData;
});

View File

@@ -12,8 +12,14 @@ export enum AbiType {
Fallback = 'fallback',
}
export enum ContractsBackend {
Web3 = 'web3',
Ethers = 'ethers',
}
export interface Method extends Web3.MethodAbi {
singleReturnValue: boolean;
hasReturnValue: boolean;
}
export interface ContextData {

View File

@@ -3,17 +3,23 @@ import * as _ from 'lodash';
import * as path from 'path';
import * as Web3 from 'web3';
import { AbiType, ParamKind } from './types';
import { AbiType, ContractsBackend, ParamKind } from './types';
export const utils = {
solTypeToTsType(paramKind: ParamKind, solType: string): string {
solTypeToTsType(
paramKind: ParamKind,
backend: ContractsBackend,
solType: string,
components?: Web3.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,25 +30,49 @@ 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';
},
isObjectType(tsType: string): boolean {
return /^{.*}$/.test(tsType);
},
log(...args: any[]): void {
console.log(...args); // tslint:disable-line:no-console
},

View File

@@ -0,0 +1,6 @@
.*
yarn-error.log
/src/
/scripts/
test/
tsconfig.json

View File

@@ -1,6 +1,19 @@
# CHANGELOG
## v0.0.4 - _Nov. 14, 2017_
## 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_
* Fix publishing issue where .npmignore was not properly excluding undesired content (#389)
## v0.0.4 - _November 14, 2017_
* Re-publish Assert previously published under NPM package @0xproject/0x-assert
* Added assertion isValidBaseUnitAmount which checks both that the value is a valid bigNumber and that it does not contain decimals.

View File

@@ -8,6 +8,14 @@ Standard type and schema assertions to be used across all 0x projects and packag
yarn add @0xproject/assert
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
```
"include": [
"./node_modules/web3-typescript-typings/index.d.ts",
]
```
## Usage
```typescript

View File

@@ -1,10 +1,11 @@
{
"name": "@0xproject/assert",
"version": "0.0.15",
"version": "0.2.0",
"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",
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
@@ -16,29 +17,29 @@
"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.6",
"@0xproject/tslint-config": "^0.4.10",
"@types/lodash": "^4.14.86",
"@types/mocha": "^2.2.42",
"@types/valid-url": "^1.0.2",
"chai": "^4.0.1",
"chai-typescript-typings": "^0.0.2",
"chai-typescript-typings": "^0.0.4",
"dirty-chai": "^2.0.1",
"mocha": "^4.0.1",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "~2.6.1"
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/json-schemas": "^0.7.7",
"@0xproject/utils": "^0.2.4",
"@0xproject/json-schemas": "^0.7.14",
"@0xproject/utils": "^0.4.1",
"lodash": "^4.17.4",
"valid-url": "^1.0.9"
}

View File

@@ -2,14 +2,4 @@ const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils
.getLatestTagAndVersionAsync(subPackageName)
.then(function(result) {
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
const assets = [];
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
})
.catch(function(err) {
throw err;
});
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -33,11 +33,8 @@ export const assert = {
);
},
isETHAddressHex(variableName: string, value: string): void {
this.assert(_.isString(value), this.typeAssertionMessage(variableName, 'string', value));
this.assert(addressUtils.isAddress(value), this.typeAssertionMessage(variableName, 'ETHAddressHex', value));
this.assert(
addressUtils.isAddress(value) && value.toLowerCase() === value,
`Checksummed addresses are not supported. Convert ${variableName} to lower case before passing`,
);
},
doesBelongToStringEnum(
variableName: string,
@@ -66,8 +63,11 @@ export const assert = {
const isWeb3Provider = _.isFunction(value.send) || _.isFunction(value.sendAsync);
this.assert(isWeb3Provider, this.typeAssertionMessage(variableName, 'Web3.Provider', value));
},
doesConformToSchema(variableName: string, value: any, schema: Schema): void {
doesConformToSchema(variableName: string, value: any, schema: Schema, subSchemas?: Schema[]): void {
const schemaValidator = new SchemaValidator();
if (!_.isUndefined(subSchemas)) {
_.map(subSchemas, schemaValidator.addSchema.bind(schemaValidator));
}
const validationResult = schemaValidator.validate(value, schema);
const hasValidationErrors = validationResult.errors.length > 0;
const msg = `Expected ${variableName} to conform to schema ${schema.id}
@@ -75,9 +75,9 @@ Encountered: ${JSON.stringify(value, null, '\t')}
Validation errors: ${validationResult.errors.join(', ')}`;
this.assert(!hasValidationErrors, msg);
},
isHttpUrl(variableName: string, value: any): void {
isWebUri(variableName: string, value: any): void {
const isValidUrl = !_.isUndefined(validUrl.isWebUri(value));
this.assert(isValidUrl, this.typeAssertionMessage(variableName, 'http url', value));
this.assert(isValidUrl, this.typeAssertionMessage(variableName, 'web uri', value));
},
isUri(variableName: string, value: any): void {
const isValidUri = !_.isUndefined(validUrl.isUri(value));

View File

@@ -183,7 +183,7 @@ describe('Assertions', () => {
);
});
});
describe('#isHttpUrl', () => {
describe('#isWebUri', () => {
it('should not throw for valid input', () => {
const validInputs = [
'http://www.google.com',
@@ -191,7 +191,7 @@ describe('Assertions', () => {
'https://api.radarrelay.com/0x/v0/',
'https://zeroex.beta.radarrelay.com:8000/0x/v0/',
];
validInputs.forEach(input => expect(assert.isHttpUrl.bind(assert, variableName, input)).to.not.throw());
validInputs.forEach(input => expect(assert.isWebUri.bind(assert, variableName, input)).to.not.throw());
});
it('should throw for invalid input', () => {
const invalidInputs = [
@@ -205,7 +205,7 @@ describe('Assertions', () => {
'user:password@api.example-relayer.net',
'//api.example-relayer.net',
];
invalidInputs.forEach(input => expect(assert.isHttpUrl.bind(assert, variableName, input)).to.throw());
invalidInputs.forEach(input => expect(assert.isWebUri.bind(assert, variableName, input)).to.throw());
});
});
describe('#isUri', () => {

View File

@@ -0,0 +1,5 @@
.*
yarn-error.log
/scripts/
/src/
tsconfig.json

View File

@@ -0,0 +1,5 @@
# CHANGELOG
## v0.0.2 - _March 4, 2018_
* Initial release

View File

@@ -0,0 +1,62 @@
## @0xproject/base-contract
BaseContract to derive all auto-generated wrappers from
## Installation
```bash
yarn add @0xproject/base-contract
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
```
"include": [
"./node_modules/web3-typescript-typings/index.d.ts",
"./node_modules/ethers-typescript-typings/index.d.ts"
]
```
## Usage
```javascript
import { BaseContract } from '@0xproject/base-contract';
```
## 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.
### 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
```bash
yarn build
```
or
```bash
yarn build:watch
```
### Lint
```bash
yarn lint
```

View File

@@ -0,0 +1,39 @@
{
"name": "@0xproject/base-contract",
"version": "0.0.3",
"description": "0x Base TS contract",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"build:watch": "tsc -w",
"build": "tsc",
"clean": "shx rm -rf lib",
"lint": "tslint --project . 'src/**/*.ts'"
},
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"bugs": {
"url": "https://github.com/0xProject/0x-monorepo/issues"
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/base-contract/README.md",
"devDependencies": {
"@0xproject/tslint-config": "^0.4.10",
"@types/lodash": "^4.14.86",
"npm-run-all": "^4.1.2",
"shx": "^0.2.2",
"tslint": "5.8.0",
"typescript": "2.7.1"
},
"dependencies": {
"@0xproject/types": "^0.3.1",
"@0xproject/web3-wrapper": "^0.2.1",
"ethers-contracts": "^2.2.1",
"ethers-typescript-typings": "^0.0.2",
"lodash": "^4.17.4",
"web3": "^0.20.0",
"web3-typescript-typings": "^0.10.0"
}
}

View File

@@ -0,0 +1,68 @@
import { TxData, TxDataPayable } from '@0xproject/types';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as ethersContracts from 'ethers-contracts';
import * as _ from 'lodash';
import * as Web3 from 'web3';
export class BaseContract {
protected _ethersInterface: ethersContracts.Interface;
protected _web3Wrapper: Web3Wrapper;
public abi: Web3.ContractAbi;
public address: string;
protected static _transformABIData(
abis: Web3.DataItem[],
values: any[],
transformation: (type: string, value: any) => any,
): any {
return _.map(values, (value: any, i: number) =>
BaseContract._transformTypedData(abis[i].type, value, transformation),
);
}
protected static _lowercaseAddress(type: string, value: string): string {
return type === 'address' ? value.toLowerCase() : value;
}
protected static _bigNumberToString(type: string, value: string): string {
return _.isObject(value) && (value as any).isBigNumber ? value.toString() : value;
}
private static _transformTypedData(
type: string,
values: any,
transformation: (type: string, value: any) => any,
): any {
const trailingArrayRegex = /\[\d*\]$/;
if (type.match(trailingArrayRegex)) {
const arrayItemType = type.replace(trailingArrayRegex, '');
return _.map(values, value => this._transformTypedData(arrayItemType, value, transformation));
} else {
return transformation(type, values);
}
}
protected async _applyDefaultsToTxDataAsync<T extends Partial<TxData | TxDataPayable>>(
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 = {
to: this.address,
...removeUndefinedProperties(this._web3Wrapper.getContractDefaults()),
...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(web3Wrapper: Web3Wrapper, abi: Web3.ContractAbi, address: string) {
this._web3Wrapper = web3Wrapper;
this.abi = abi;
this.address = address;
this._ethersInterface = new ethersContracts.Interface(abi);
}
}

View File

@@ -0,0 +1,11 @@
{
"extends": "../../tsconfig",
"compilerOptions": {
"outDir": "lib"
},
"include": [
"./src/**/*",
"../../node_modules/web3-typescript-typings/index.d.ts",
"../../node_modules/ethers-typescript-typings/index.d.ts"
]
}

View File

@@ -0,0 +1,3 @@
{
"extends": ["@0xproject/tslint-config"]
}

View File

@@ -0,0 +1,3 @@
.*
yarn-error.log
/scripts/

View File

@@ -1,12 +1,12 @@
{
"name": "chai-as-promised-typescript-typings",
"version": "0.0.8",
"version": "0.0.10",
"description": "Typescript type definitions for chai-as-promised",
"main": "index.d.ts",
"types": "index.d.ts",
"repository": {
"type": "git",
"url": "git+https://github.com/0xProject/0x.js.git"
"url": "git+https://github.com/0xProject/0x-monorepo.git"
},
"author": "Fabio Berger",
"contributors": [
@@ -14,10 +14,10 @@
],
"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/chai-as-promised-typescript-typings#readme",
"homepage": "https://github.com/0xProject/0x-monorepo/packages/chai-as-promised-typescript-typings#readme",
"dependencies": {
"chai-typescript-typings": "^0.0.2"
"chai-typescript-typings": "^0.0.4"
}
}

View File

@@ -2,14 +2,4 @@ const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils
.getLatestTagAndVersionAsync(subPackageName)
.then(function(result) {
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
const assets = [];
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
})
.catch(function(err) {
throw err;
});
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -0,0 +1,3 @@
.*
yarn-error.log
/scripts/

View File

@@ -1,16 +1,16 @@
{
"name": "chai-typescript-typings",
"version": "0.0.2",
"version": "0.0.4",
"description": "Typescript type definitions for chai",
"main": "index.d.ts",
"types": "index.d.ts",
"repository": {
"type": "git",
"url": "git+https://github.com/0xProject/0x.js.git"
"url": "git+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/chai-typescript-typings#readme"
"homepage": "https://github.com/0xProject/0x-monorepo/packages/chai-typescript-typings#readme"
}

View File

@@ -2,14 +2,4 @@ const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const subPackageName = packageJSON.name;
postpublish_utils
.getLatestTagAndVersionAsync(subPackageName)
.then(function(result) {
const releaseName = postpublish_utils.getReleaseName(subPackageName, result.version);
const assets = [];
return postpublish_utils.publishReleaseNotes(result.tag, releaseName, assets);
})
.catch(function(err) {
throw err;
});
postpublish_utils.standardPostPublishAsync(subPackageName);

View File

@@ -0,0 +1,7 @@
.*
yarn-error.log
/src/
/scripts/
/generated_docs/
test/
tsconfig.json

View File

@@ -1,5 +1,18 @@
# CHANGELOG
## v0.6.2 - _February 16, 2018_
* Fix JSON parse empty response (#407)
## v0.6.0 - _February 16, 2018_
* Add pagination options to HttpClient methods (#393)
* Add heartbeat configuration to WebSocketOrderbookChannel constructor (#406)
## v0.5.7 - _February 9, 2018_
* Fix publishing issue where .npmignore was not properly excluding undesired content (#389)
## v0.5.0 - _January 17, 2018_
* Sanitize api endpoint url and remove trailing slashes (#318)

View File

@@ -8,10 +8,18 @@ This repository contains a Javascript library that makes it easy to interact wit
yarn add @0xproject/connect
```
If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`:
```
"include": [
"./node_modules/web3-typescript-typings/index.d.ts",
]
```
## Usage
* [Docs](https://0xproject.com/docs/connect)
* [Tutorials](https://0xproject.com/wiki#connect)
* [Docs](https://0xproject.com/docs/connect)
* [Tutorials](https://0xproject.com/wiki#connect)
## Contributing

View File

@@ -1,6 +1,6 @@
{
"name": "@0xproject/connect",
"version": "0.5.4",
"version": "0.6.3",
"description": "A javascript library for interacting with the standard relayer api",
"keywords": [
"connect",
@@ -12,9 +12,10 @@
"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",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_DIR",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --json $JSON_FILE_PATH $PROJECT_FILES",
"upload_docs_json": "aws s3 cp generated_docs/index.json $S3_URL --profile 0xproject --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --content-type application/json",
"copy_test_fixtures": "copyfiles -u 2 './test/fixtures/**/*.json' ./lib/test/fixtures",
"lint": "tslint --project . 'src/**/*.ts' 'test/**/*.ts'",
@@ -24,7 +25,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x.js.git"
"url": "https://github.com/0xProject/0x-monorepo.git"
},
"author": "Brandon Millman",
"license": "Apache-2.0",
@@ -32,20 +33,20 @@
"node": ">=6.0.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/connect/README.md",
"homepage": "https://github.com/0xProject/0x-monorepo/packages/connect/README.md",
"dependencies": {
"@0xproject/assert": "^0.0.15",
"@0xproject/json-schemas": "^0.7.7",
"@0xproject/utils": "^0.2.4",
"@0xproject/assert": "^0.2.0",
"@0xproject/json-schemas": "^0.7.14",
"@0xproject/utils": "^0.4.1",
"isomorphic-fetch": "^2.2.1",
"lodash": "^4.17.4",
"query-string": "^5.0.1",
"websocket": "^1.0.25"
},
"devDependencies": {
"@0xproject/tslint-config": "^0.4.6",
"@0xproject/tslint-config": "^0.4.10",
"@types/fetch-mock": "^5.12.1",
"@types/lodash": "^4.14.86",
"@types/mocha": "^2.2.42",
@@ -53,8 +54,8 @@
"@types/websocket": "^0.0.34",
"chai": "^4.0.1",
"chai-as-promised": "^7.1.0",
"chai-as-promised-typescript-typings": "^0.0.8",
"chai-typescript-typings": "^0.0.2",
"chai-as-promised-typescript-typings": "^0.0.10",
"chai-typescript-typings": "^0.0.4",
"copyfiles": "^1.2.0",
"dirty-chai": "^2.0.1",
"fetch-mock": "^5.13.1",
@@ -63,7 +64,7 @@
"shx": "^0.2.2",
"tslint": "5.8.0",
"typedoc": "~0.8.0",
"typescript": "~2.6.1",
"web3-typescript-typings": "^0.9.8"
"typescript": "2.7.1",
"web3-typescript-typings": "^0.10.0"
}
}

View File

@@ -1,10 +1,16 @@
const execAsync = require('async-child-process').execAsync;
const postpublish_utils = require('../../../scripts/postpublish_utils');
const packageJSON = require('../package.json');
const tsConfig = require('../tsconfig.json');
const cwd = __dirname + '/..';
const subPackageName = packageJSON.name;
const S3BucketPath = 's3://connect-docs-jsons/';
// Include any external packages that are part of the @0xproject/connect public interface
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
const fileIncludes = [...tsConfig.include];
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
const projectFiles = fileIncludesAdjusted.join(' ');
let tag;
let version;
@@ -14,12 +20,12 @@ postpublish_utils
tag = result.tag;
version = result.version;
const releaseName = postpublish_utils.getReleaseName(subPackageName, version);
return postpublish_utils.publishReleaseNotes(tag, releaseName);
return postpublish_utils.publishReleaseNotesAsync(tag, releaseName);
})
.then(function(release) {
console.log('POSTPUBLISH: Release successful, generating docs...');
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_DIR=' + __dirname + '/.. yarn docs:json', {
return execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
cwd,
});
})

View File

@@ -0,0 +1,30 @@
const execAsync = require('async-child-process').execAsync;
const postpublish_utils = require('../../../scripts/postpublish_utils');
const tsConfig = require('../tsconfig.json');
const cwd = __dirname + '/..';
const S3BucketPath = 's3://staging-connect-docs-jsons/';
const jsonFilePath = __dirname + '/../' + postpublish_utils.generatedDocsDirectoryName + '/index.json';
const version = process.env.DOCS_VERSION;
// Include any external packages that are part of the @0xproject/connect public interface
// to this array so that TypeDoc picks it up and adds it to the Docs JSON
const fileIncludes = [...tsConfig.include];
const fileIncludesAdjusted = postpublish_utils.adjustFileIncludePaths(fileIncludes, __dirname);
const projectFiles = fileIncludesAdjusted.join(' ');
execAsync('JSON_FILE_PATH=' + jsonFilePath + ' PROJECT_FILES="' + projectFiles + '" yarn docs:json', {
cwd,
})
.then(function(result) {
if (result.stderr !== '') {
throw new Error(result.stderr);
}
const fileName = 'v' + version + '.json';
const s3Url = S3BucketPath + fileName;
return execAsync('S3_URL=' + s3Url + ' yarn upload_docs_json', {
cwd,
});
})
.catch(function(err) {
console.log(err);
});

View File

@@ -13,59 +13,88 @@ import {
HttpRequestType,
OrderbookRequest,
OrderbookResponse,
OrdersRequest,
OrdersRequestOpts,
PagedRequestOpts,
SignedOrder,
TokenPairsItem,
TokenPairsRequest,
TokenPairsRequestOpts,
} from './types';
import { relayerResponseJsonParsers } from './utils/relayer_response_json_parsers';
const TRAILING_SLASHES_REGEX = /\/+$/;
const DEFAULT_PAGED_REQUEST_OPTS: PagedRequestOpts = {
page: 1,
perPage: 100,
};
/**
* This mapping defines how an option property name gets converted into an HTTP request query field
*/
const OPTS_TO_QUERY_FIELD_MAP = {
perPage: 'per_page',
};
/**
* This class includes all the functionality related to interacting with a set of HTTP endpoints
* that implement the standard relayer API v0
*/
export class HttpClient implements Client {
private _apiEndpointUrl: string;
/**
* Format parameters to be appended to http requests into query string form
*/
private static _buildQueryStringFromHttpParams(params?: object): string {
// if params are undefined or empty, return an empty string
if (_.isUndefined(params) || _.isEmpty(params)) {
return '';
}
// format params into a form the api expects
const formattedParams = _.mapKeys(params, (value: any, key: string) => {
return _.get(OPTS_TO_QUERY_FIELD_MAP, key, key);
});
// stringify the formatted object
const stringifiedParams = queryString.stringify(formattedParams);
return `?${stringifiedParams}`;
}
/**
* Instantiates a new HttpClient instance
* @param url The relayer API base HTTP url you would like to interact with
* @return An instance of HttpClient
*/
constructor(url: string) {
assert.isHttpUrl('url', url);
assert.isWebUri('url', url);
this._apiEndpointUrl = url.replace(TRAILING_SLASHES_REGEX, ''); // remove trailing slashes
}
/**
* Retrieve token pair info from the API
* @param request A TokenPairsRequest instance describing specific token information
* to retrieve
* @param requestOpts Options specifying token information to retrieve and page information, defaults to { page: 1, perPage: 100 }
* @return The resulting TokenPairsItems that match the request
*/
public async getTokenPairsAsync(request?: TokenPairsRequest): Promise<TokenPairsItem[]> {
if (!_.isUndefined(request)) {
assert.doesConformToSchema('request', request, clientSchemas.relayerTokenPairsRequestSchema);
public async getTokenPairsAsync(requestOpts?: TokenPairsRequestOpts & PagedRequestOpts): Promise<TokenPairsItem[]> {
if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.tokenPairsRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
}
const requestOpts = {
params: request,
const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
};
const responseJson = await this._requestAsync('/token_pairs', HttpRequestType.Get, requestOpts);
const responseJson = await this._requestAsync('/token_pairs', HttpRequestType.Get, httpRequestOpts);
const tokenPairs = relayerResponseJsonParsers.parseTokenPairsJson(responseJson);
return tokenPairs;
}
/**
* Retrieve orders from the API
* @param request An OrdersRequest instance describing specific orders to retrieve
* @param requestOpts Options specifying orders to retrieve and page information, defaults to { page: 1, perPage: 100 }
* @return The resulting SignedOrders that match the request
*/
public async getOrdersAsync(request?: OrdersRequest): Promise<SignedOrder[]> {
if (!_.isUndefined(request)) {
assert.doesConformToSchema('request', request, clientSchemas.relayerOrdersRequestSchema);
public async getOrdersAsync(requestOpts?: OrdersRequestOpts & PagedRequestOpts): Promise<SignedOrder[]> {
if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.ordersRequestOptsSchema);
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
}
const requestOpts = {
params: request,
const httpRequestOpts = {
params: _.defaults({}, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
};
const responseJson = await this._requestAsync(`/orders`, HttpRequestType.Get, requestOpts);
const responseJson = await this._requestAsync(`/orders`, HttpRequestType.Get, httpRequestOpts);
const orders = relayerResponseJsonParsers.parseOrdersJson(responseJson);
return orders;
}
@@ -82,15 +111,22 @@ export class HttpClient implements Client {
}
/**
* Retrieve an orderbook from the API
* @param request An OrderbookRequest instance describing the specific orderbook to retrieve
* @param request An OrderbookRequest instance describing the specific orderbook to retrieve
* @param requestOpts Options specifying page information, defaults to { page: 1, perPage: 100 }
* @return The resulting OrderbookResponse that matches the request
*/
public async getOrderbookAsync(request: OrderbookRequest): Promise<OrderbookResponse> {
assert.doesConformToSchema('request', request, clientSchemas.relayerOrderBookRequestSchema);
const requestOpts = {
params: request,
public async getOrderbookAsync(
request: OrderbookRequest,
requestOpts?: PagedRequestOpts,
): Promise<OrderbookResponse> {
assert.doesConformToSchema('request', request, clientSchemas.orderBookRequestSchema);
if (!_.isUndefined(requestOpts)) {
assert.doesConformToSchema('requestOpts', requestOpts, clientSchemas.pagedRequestOptsSchema);
}
const httpRequestOpts = {
params: _.defaults({}, request, requestOpts, DEFAULT_PAGED_REQUEST_OPTS),
};
const responseJson = await this._requestAsync('/orderbook', HttpRequestType.Get, requestOpts);
const responseJson = await this._requestAsync('/orderbook', HttpRequestType.Get, httpRequestOpts);
const orderbook = relayerResponseJsonParsers.parseOrderbookResponseJson(responseJson);
return orderbook;
}
@@ -100,11 +136,11 @@ export class HttpClient implements Client {
* @return The resulting FeesResponse that matches the request
*/
public async getFeesAsync(request: FeesRequest): Promise<FeesResponse> {
assert.doesConformToSchema('request', request, schemas.relayerApiFeesPayloadSchema);
const requestOpts = {
assert.doesConformToSchema('request', request, clientSchemas.feesRequestSchema);
const httpRequestOpts = {
payload: request,
};
const responseJson = await this._requestAsync('/fees', HttpRequestType.Post, requestOpts);
const responseJson = await this._requestAsync('/fees', HttpRequestType.Post, httpRequestOpts);
const fees = relayerResponseJsonParsers.parseFeesResponseJson(responseJson);
return fees;
}
@@ -126,11 +162,7 @@ export class HttpClient implements Client {
): Promise<any> {
const params = _.get(requestOptions, 'params');
const payload = _.get(requestOptions, 'payload');
let query = '';
if (!_.isUndefined(params) && !_.isEmpty(params)) {
const stringifiedParams = queryString.stringify(params);
query = `?${stringifiedParams}`;
}
const query = HttpClient._buildQueryStringFromHttpParams(params);
const url = `${this._apiEndpointUrl}${path}${query}`;
const headers = new Headers({
'content-type': 'application/json',
@@ -140,13 +172,12 @@ export class HttpClient implements Client {
body: JSON.stringify(payload),
headers,
});
const json = await response.json();
const text = await response.text();
if (!response.ok) {
const errorString = `${response.status} - ${response.statusText}\n${requestType} ${url}\n${JSON.stringify(
json,
)}`;
const errorString = `${response.status} - ${response.statusText}\n${requestType} ${url}\n${text}`;
throw Error(errorString);
}
return json;
const result = !_.isEmpty(text) ? JSON.parse(text) : undefined;
return result;
}
}

View File

@@ -11,9 +11,11 @@ export {
OrderbookChannelSubscriptionOpts,
OrderbookRequest,
OrderbookResponse,
OrdersRequest,
OrdersRequestOpts,
PagedRequestOpts,
SignedOrder,
TokenPairsItem,
TokenPairsRequest,
TokenPairsRequestOpts,
TokenTradeInfo,
WebSocketOrderbookChannelConfig,
} from './types';

View File

@@ -0,0 +1,26 @@
export const feesRequestSchema = {
id: '/FeesRequest',
type: 'object',
properties: {
exchangeContractAddress: { $ref: '/Address' },
maker: { $ref: '/Address' },
taker: { $ref: '/Address' },
makerTokenAddress: { $ref: '/Address' },
takerTokenAddress: { $ref: '/Address' },
makerTokenAmount: { $ref: '/Number' },
takerTokenAmount: { $ref: '/Number' },
expirationUnixTimestampSec: { $ref: '/Number' },
salt: { $ref: '/Number' },
},
required: [
'exchangeContractAddress',
'maker',
'taker',
'makerTokenAddress',
'takerTokenAddress',
'makerTokenAmount',
'takerTokenAmount',
'expirationUnixTimestampSec',
'salt',
],
};

View File

@@ -1,8 +1,9 @@
export const relayerOrderBookRequestSchema = {
id: '/RelayerOrderBookRequest',
export const orderBookRequestSchema = {
id: '/OrderBookRequest',
type: 'object',
properties: {
baseTokenAddress: { $ref: '/Address' },
quoteTokenAddress: { $ref: '/Address' },
},
required: ['baseTokenAddress', 'quoteTokenAddress'],
};

View File

@@ -1,5 +1,5 @@
export const relayerOrdersRequestSchema = {
id: '/RelayerOrdersRequest',
export const ordersRequestOptsSchema = {
id: '/OrdersRequestOpts',
type: 'object',
properties: {
exchangeContractAddress: { $ref: '/Address' },

View File

@@ -0,0 +1,8 @@
export const pagedRequestOptsSchema = {
id: '/PagedRequestOpts',
type: 'object',
properties: {
page: { type: 'number' },
perPage: { type: 'number' },
},
};

View File

@@ -1,8 +0,0 @@
export const relayerOrderBookRequestSchema = {
id: '/RelayerOrderBookRequest',
type: 'object',
properties: {
baseTokenAddress: { $ref: '/Address' },
quoteTokenAddress: { $ref: '/Address' },
},
};

View File

@@ -1,9 +1,15 @@
import { relayerOrderBookRequestSchema } from './relayer_orderbook_request_schema';
import { relayerOrdersRequestSchema } from './relayer_orders_request_schema';
import { relayerTokenPairsRequestSchema } from './relayer_token_pairs_request_schema';
import { feesRequestSchema } from './fees_request_schema';
import { orderBookRequestSchema } from './orderbook_request_schema';
import { ordersRequestOptsSchema } from './orders_request_opts_schema';
import { pagedRequestOptsSchema } from './paged_request_opts_schema';
import { tokenPairsRequestOptsSchema } from './token_pairs_request_opts_schema';
import { webSocketOrderbookChannelConfigSchema } from './websocket_orderbook_channel_config_schema';
export const schemas = {
relayerOrderBookRequestSchema,
relayerOrdersRequestSchema,
relayerTokenPairsRequestSchema,
feesRequestSchema,
orderBookRequestSchema,
ordersRequestOptsSchema,
pagedRequestOptsSchema,
tokenPairsRequestOptsSchema,
webSocketOrderbookChannelConfigSchema,
};

View File

@@ -1,5 +1,5 @@
export const relayerTokenPairsRequestSchema = {
id: '/RelayerTokenPairsRequest',
export const tokenPairsRequestOptsSchema = {
id: '/TokenPairsRequestOpts',
type: 'object',
properties: {
tokenA: { $ref: '/Address' },

View File

@@ -0,0 +1,10 @@
export const webSocketOrderbookChannelConfigSchema = {
id: '/WebSocketOrderbookChannelConfig',
type: 'object',
properties: {
heartbeatIntervalMs: {
type: 'number',
minimum: 10,
},
},
};

View File

@@ -30,10 +30,10 @@ export interface ECSignature {
}
export interface Client {
getTokenPairsAsync: (request?: TokenPairsRequest) => Promise<TokenPairsItem[]>;
getOrdersAsync: (request?: OrdersRequest) => Promise<SignedOrder[]>;
getTokenPairsAsync: (requestOpts?: TokenPairsRequestOpts & PagedRequestOpts) => Promise<TokenPairsItem[]>;
getOrdersAsync: (requestOpts?: OrdersRequestOpts & PagedRequestOpts) => Promise<SignedOrder[]>;
getOrderAsync: (orderHash: string) => Promise<SignedOrder>;
getOrderbookAsync: (request: OrderbookRequest) => Promise<OrderbookResponse>;
getOrderbookAsync: (request: OrderbookRequest, requestOpts?: PagedRequestOpts) => Promise<OrderbookResponse>;
getFeesAsync: (request: FeesRequest) => Promise<FeesResponse>;
submitOrderAsync: (signedOrder: SignedOrder) => Promise<void>;
}
@@ -43,6 +43,13 @@ export interface OrderbookChannel {
close: () => void;
}
/*
* heartbeatInterval: Interval in milliseconds that the orderbook channel should ping the underlying websocket. Default: 15000
*/
export interface WebSocketOrderbookChannelConfig {
heartbeatIntervalMs?: number;
}
/*
* baseTokenAddress: The address of token designated as the baseToken in the currency pair calculation of price
* quoteTokenAddress: The address of token designated as the quoteToken in the currency pair calculation of price
@@ -111,7 +118,7 @@ export enum WebsocketClientEventType {
ConnectFailed = 'connectFailed',
}
export interface TokenPairsRequest {
export interface TokenPairsRequestOpts {
tokenA?: string;
tokenB?: string;
}
@@ -128,7 +135,7 @@ export interface TokenTradeInfo {
precision: number;
}
export interface OrdersRequest {
export interface OrdersRequestOpts {
exchangeContractAddress?: string;
tokenAddress?: string;
makerTokenAddress?: string;
@@ -167,6 +174,11 @@ export interface FeesResponse {
takerFee: BigNumber;
}
export interface PagedRequestOpts {
page?: number;
perPage?: number;
}
export interface HttpRequestOptions {
params?: object;
payload?: object;

View File

@@ -3,6 +3,7 @@ import { schemas } from '@0xproject/json-schemas';
import * as _ from 'lodash';
import * as WebSocket from 'websocket';
import { schemas as clientSchemas } from './schemas/schemas';
import {
OrderbookChannel,
OrderbookChannelHandler,
@@ -10,9 +11,13 @@ import {
OrderbookChannelSubscriptionOpts,
WebsocketClientEventType,
WebsocketConnectionEventType,
WebSocketOrderbookChannelConfig,
} from './types';
import { orderbookChannelMessageParser } from './utils/orderbook_channel_message_parser';
const DEFAULT_HEARTBEAT_INTERVAL_MS = 15000;
const MINIMUM_HEARTBEAT_INTERVAL_MS = 10;
/**
* This class includes all the functionality related to interacting with a websocket endpoint
* that implements the standard relayer API v0
@@ -21,15 +26,25 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
private _apiEndpointUrl: string;
private _client: WebSocket.client;
private _connectionIfExists?: WebSocket.connection;
private _heartbeatTimerIfExists?: NodeJS.Timer;
private _subscriptionCounter = 0;
private _heartbeatIntervalMs: number;
/**
* Instantiates a new WebSocketOrderbookChannel instance
* @param url The relayer API base WS url you would like to interact with
* @param config The configuration object. Look up the type for the description.
* @return An instance of WebSocketOrderbookChannel
*/
constructor(url: string) {
constructor(url: string, config?: WebSocketOrderbookChannelConfig) {
assert.isUri('url', url);
if (!_.isUndefined(config)) {
assert.doesConformToSchema('config', config, clientSchemas.webSocketOrderbookChannelConfigSchema);
}
this._apiEndpointUrl = url;
this._heartbeatIntervalMs =
_.isUndefined(config) || _.isUndefined(config.heartbeatIntervalMs)
? DEFAULT_HEARTBEAT_INTERVAL_MS
: config.heartbeatIntervalMs;
this._client = new WebSocket.client();
}
/**
@@ -63,7 +78,7 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
connection.on(WebsocketConnectionEventType.Error, wsError => {
handler.onError(this, subscriptionOpts, wsError);
});
connection.on(WebsocketConnectionEventType.Close, () => {
connection.on(WebsocketConnectionEventType.Close, (code: number, desc: string) => {
handler.onClose(this, subscriptionOpts);
});
connection.on(WebsocketConnectionEventType.Message, message => {
@@ -80,6 +95,9 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
if (!_.isUndefined(this._connectionIfExists)) {
this._connectionIfExists.close();
}
if (!_.isUndefined(this._heartbeatTimerIfExists)) {
clearInterval(this._heartbeatTimerIfExists);
}
}
private _getConnection(callback: (error?: Error, connection?: WebSocket.connection) => void) {
if (!_.isUndefined(this._connectionIfExists) && this._connectionIfExists.connected) {
@@ -87,6 +105,20 @@ export class WebSocketOrderbookChannel implements OrderbookChannel {
} else {
this._client.on(WebsocketClientEventType.Connect, connection => {
this._connectionIfExists = connection;
if (this._heartbeatIntervalMs >= MINIMUM_HEARTBEAT_INTERVAL_MS) {
this._heartbeatTimerIfExists = setInterval(() => {
connection.ping('');
}, this._heartbeatIntervalMs);
} else {
callback(
new Error(
`Heartbeat interval is ${
this._heartbeatIntervalMs
}ms which is less than the required minimum of ${MINIMUM_HEARTBEAT_INTERVAL_MS}ms`,
),
undefined,
);
}
callback(undefined, this._connectionIfExists);
});
this._client.on(WebsocketClientEventType.ConnectFailed, error => {

View File

@@ -40,19 +40,22 @@ describe('HttpClient', () => {
});
describe('#getTokenPairsAsync', () => {
const url = `${relayUrl}/token_pairs`;
it('gets token pairs', async () => {
fetchMock.get(url, tokenPairsResponseJSON);
it('gets token pairs with default options when none are provided', async () => {
const urlWithQuery = `${url}?page=1&per_page=100`;
fetchMock.get(urlWithQuery, tokenPairsResponseJSON);
const tokenPairs = await relayerClient.getTokenPairsAsync();
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
});
it('gets specific token pairs for request', async () => {
it('gets token pairs with specified request options', async () => {
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
const tokenPairsRequest = {
const tokenPairsRequestOpts = {
tokenA: tokenAddress,
page: 3,
perPage: 50,
};
const urlWithQuery = `${url}?tokenA=${tokenAddress}`;
const urlWithQuery = `${url}?page=3&per_page=50&tokenA=${tokenAddress}`;
fetchMock.get(urlWithQuery, tokenPairsResponseJSON);
const tokenPairs = await relayerClient.getTokenPairsAsync(tokenPairsRequest);
const tokenPairs = await relayerClient.getTokenPairsAsync(tokenPairsRequestOpts);
expect(tokenPairs).to.be.deep.equal(tokenPairsResponse);
});
it('throws an error for invalid JSON response', async () => {
@@ -62,17 +65,20 @@ describe('HttpClient', () => {
});
describe('#getOrdersAsync', () => {
const url = `${relayUrl}/orders`;
it('gets orders', async () => {
fetchMock.get(url, ordersResponseJSON);
it('gets orders with default options when none are provided', async () => {
const urlWithQuery = `${url}?page=1&per_page=100`;
fetchMock.get(urlWithQuery, ordersResponseJSON);
const orders = await relayerClient.getOrdersAsync();
expect(orders).to.be.deep.equal(ordersResponse);
});
it('gets specific orders for request', async () => {
it('gets orders with specified request options', async () => {
const tokenAddress = '0x323b5d4c32345ced77393b3530b1eed0f346429d';
const ordersRequest = {
tokenAddress,
page: 3,
perPage: 50,
};
const urlWithQuery = `${url}?tokenAddress=${tokenAddress}`;
const urlWithQuery = `${url}?page=3&per_page=50&tokenAddress=${tokenAddress}`;
fetchMock.get(urlWithQuery, ordersResponseJSON);
const orders = await relayerClient.getOrdersAsync(ordersRequest);
expect(orders).to.be.deep.equal(ordersResponse);
@@ -100,14 +106,27 @@ describe('HttpClient', () => {
baseTokenAddress: '0x323b5d4c32345ced77393b3530b1eed0f346429d',
quoteTokenAddress: '0xa2b31dacf30a9c50ca473337c01d8a201ae33e32',
};
const url = `${relayUrl}/orderbook?baseTokenAddress=${request.baseTokenAddress}&quoteTokenAddress=${
request.quoteTokenAddress
}`;
it('gets order book', async () => {
fetchMock.get(url, orderbookJSON);
const url = `${relayUrl}/orderbook`;
it('gets orderbook with default page options when none are provided', async () => {
const urlWithQuery = `${url}?baseTokenAddress=${
request.baseTokenAddress
}&page=1&per_page=100&quoteTokenAddress=${request.quoteTokenAddress}`;
fetchMock.get(urlWithQuery, orderbookJSON);
const orderbook = await relayerClient.getOrderbookAsync(request);
expect(orderbook).to.be.deep.equal(orderbookResponse);
});
it('gets orderbook with specified page options', async () => {
const urlWithQuery = `${url}?baseTokenAddress=${
request.baseTokenAddress
}&page=3&per_page=50&quoteTokenAddress=${request.quoteTokenAddress}`;
fetchMock.get(urlWithQuery, orderbookJSON);
const pagedRequestOptions = {
page: 3,
perPage: 50,
};
const orderbook = await relayerClient.getOrderbookAsync(request, pagedRequestOptions);
expect(orderbook).to.be.deep.equal(orderbookResponse);
});
it('throws an error for invalid JSON response', async () => {
fetchMock.get(url, { test: 'dummy' });
expect(relayerClient.getOrderbookAsync(request)).to.be.rejected();

View File

@@ -0,0 +1,47 @@
/**
* This file is auto-generated using abi-gen. Don't edit directly.
* Templates can be found at https://github.com/0xProject/0x-monorepo/tree/development/packages/contract_templates.
*/
// tslint:disable:no-consecutive-blank-lines
// tslint:disable-next-line:no-unused-variable
import { BaseContract } from '@0xproject/base-contract';
import { TxData, TxDataPayable } from '@0xproject/types';
import { BigNumber, classUtils, promisify } from '@0xproject/utils';
import { Web3Wrapper } from '@0xproject/web3-wrapper';
import * as ethersContracts from 'ethers-contracts';
import * as _ from 'lodash';
import * as Web3 from 'web3';
{{#if events}}
export type {{contractName}}ContractEventArgs =
{{#each events}}
| {{name}}ContractEventArgs{{#if @last}};{{/if}}
{{/each}}
export enum {{contractName}}Events {
{{#each events}}
{{name}} = '{{name}}',
{{/each}}
}
{{#each events}}
{{> event}}
{{/each}}
{{/if}}
// tslint:disable:no-parameter-reassignment
export class {{contractName}}Contract extends BaseContract {
{{#each methods}}
{{#this.constant}}
{{> call contractName=../contractName}}
{{/this.constant}}
{{^this.constant}}
{{> tx contractName=../contractName}}
{{/this.constant}}
{{/each}}
constructor(web3Wrapper: Web3Wrapper, abi: Web3.ContractAbi, address: string) {
super(web3Wrapper, abi, address);
classUtils.bindAll(this, ['_ethersInterface', 'address', 'abi', '_web3Wrapper']);
}
} // tslint:disable:max-file-line-count

View File

@@ -0,0 +1,3 @@
public {{this.name}} = {
{{> callAsync}}
};

View File

@@ -0,0 +1,30 @@
{{#hasReturnValue}}
async callAsync(
{{> typed_params inputs=inputs}}
{{#this.payable}}
txData: TxDataPayable = {},
{{/this.payable}}
{{^this.payable}}
txData: TxData = {},
{{/this.payable}}
defaultBlock?: Web3.BlockParam,
): Promise<{{> return_type outputs=outputs}}> {
const self = this as {{contractName}}Contract;
const inputAbi = _.find(this.abi, {name: '{{this.name}}'}).inputs;
[{{> params inputs=inputs}}] = BaseContract._transformABIData(inputAbi, [{{> params inputs=inputs}}], BaseContract._bigNumberToString.bind(this));
const encodedData = self._ethersInterface.functions.{{this.name}}(
{{> params inputs=inputs}}
).data;
const callData = await self._applyDefaultsToTxDataAsync(
{
data: encodedData,
}
)
const rawCallResult = await self._web3Wrapper.callAsync(callData, defaultBlock);
const outputAbi = _.find(this.abi, {name: '{{this.name}}'}).outputs as Web3.DataItem[];
const outputParamsTypes = _.map(outputAbi, 'type');
let resultArray = ethersContracts.Interface.decodeParams(outputParamsTypes, rawCallResult) as any;
resultArray = BaseContract._transformABIData(outputAbi, resultArray, BaseContract._lowercaseAddress.bind(this));
return resultArray{{#singleReturnValue}}[0]{{/singleReturnValue}};
},
{{/hasReturnValue}}

View File

@@ -0,0 +1,5 @@
export interface {{name}}ContractEventArgs {
{{#each inputs}}
{{name}}: {{#returnType type components}}{{/returnType}};
{{/each}}
}

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