Compare commits

...

54 Commits

Author SHA1 Message Date
Leonid Logvinov
5816279d68 Publish
- 0x.js@3.0.3
 - @0x/asset-buyer@4.0.2
 - @0x/contract-wrappers@5.0.1
 - @0x/dev-tools-pages@0.0.14
 - @0x/instant@1.0.8
 - @0x/metacoin@0.0.36
 - @0x/monorepo-scripts@1.0.19
 - @0x/order-watcher@2.4.3
 - @0x/sol-coverage@1.0.3
 - @0x/sol-profiler@1.0.3
 - @0x/sol-trace@1.0.3
 - @0x/sol-tracing-utils@4.0.1
 - @0x/testnet-faucets@1.0.64
 - @0x/website@0.0.67
 - @0x/contracts-examples@1.0.6
 - @0x/contracts-extensions@1.2.3
 - @0x/contracts-interfaces@1.0.6
 - @0x/contracts-libs@1.0.6
 - @0x/contracts-multisig@1.0.6
 - @0x/contracts-protocol@2.2.3
 - @0x/contracts-test-utils@2.0.1
 - @0x/contracts-tokens@1.0.6
 - @0x/contracts-utils@1.0.6
2019-01-17 19:07:37 +01:00
Leonid Logvinov
0d877a8076 Updated CHANGELOGS 2019-01-17 19:07:25 +01:00
Fabio Berger
0e6aea856f http to https 2019-01-17 16:58:15 +01:00
Fabio B
e31d17ef79 Merge pull request #1509 from 0xProject/fix/dev-tools-pages/finalTouches
Dev Tools Pages - Final Touches
2019-01-17 16:56:01 +01:00
Fabio Berger
7b2a9ba698 Fix linter errors 2019-01-17 16:38:30 +01:00
Fabio Berger
87d08b0af6 Update yarn.lock 2019-01-17 16:24:11 +01:00
Fabio Berger
e68c5d5517 Enable "copy" button on all code snippets that should be copy-able 2019-01-17 16:24:03 +01:00
Leonid Logvinov
c09825660c Increase the Buffer size when fetching tags 2019-01-17 16:14:19 +01:00
Fabio Berger
293e937291 Merge branch 'development' into fix/dev-tools-pages/finalTouches
* development: (22 commits)
  Fix linter
  Update packages/sol-tracing-utils/src/trace_collection_subprovider.ts
  Update packages/sol-tracing-utils/CHANGELOG.json
  Update packages/sol-tracing-utils/CHANGELOG.json
  Add PR numbers
  Fix/simplify handling of revert trace snippets
  Fix a bug when TraceCollectionSubprovider was hanging on the fake Geth snapshot transaction
  Fix a bug when a custom Geth tracer didn't return stack entries for DELEGATECALL
  Revert devnet mining period from 1 to 0
  update team info, add brent
  Publish
  Updated CHANGELOGS
  Add commented-out pre-publish checks
  Add additional check to make sure user was added to our DockerHub org
  Update test for required amountAvailableToFill
  Add actual error message thrown
  Flag order-watcher as having a Docker image to publish
  Add publish to DockerHub step to publish flow
  Flesh out postpublish configs in packageJSON type
  Add pre-publish check to ensure publisher is logged in to docker cmdline
  ...
2019-01-17 15:59:00 +01:00
Fabio Berger
fe2f97dabd Add link to Truffle starter project 2019-01-17 15:58:41 +01:00
Leonid Logvinov
0b23aaca26 Merge pull request #1521 from 0xProject/feature/dev-tools-pre-release-fixes
0x Dev tools pre-release fixes
2019-01-17 15:53:17 +01:00
Leonid Logvinov
d92dc47df8 Last touches 2019-01-17 15:44:34 +01:00
Leonid Logvinov
8b69d918a9 Fix linter 2019-01-17 15:38:09 +01:00
Fabio Berger
3b79754b7a Remove incorrect section of docs 2019-01-17 15:37:43 +01:00
Fabio B
92ec4f5772 Update packages/sol-tracing-utils/src/trace_collection_subprovider.ts
Co-Authored-By: LogvinovLeon <logvinov.leon@gmail.com>
2019-01-17 15:06:42 +01:00
Fabio B
8528660f50 Update packages/sol-tracing-utils/CHANGELOG.json
Co-Authored-By: LogvinovLeon <logvinov.leon@gmail.com>
2019-01-17 15:06:35 +01:00
Fabio B
edd4370cdb Update packages/sol-tracing-utils/CHANGELOG.json
Co-Authored-By: LogvinovLeon <logvinov.leon@gmail.com>
2019-01-17 15:06:29 +01:00
Leonid Logvinov
69aa1c2e91 Add PR numbers 2019-01-17 14:40:11 +01:00
Leonid Logvinov
fcdd0de9ee Fix/simplify handling of revert trace snippets 2019-01-17 14:37:15 +01:00
Leonid Logvinov
4c5bde1b54 Fix a bug when TraceCollectionSubprovider was hanging on the fake Geth snapshot transaction 2019-01-17 14:36:23 +01:00
Leonid Logvinov
83f77a2d56 Fix a bug when a custom Geth tracer didn't return stack entries for DELEGATECALL 2019-01-17 14:28:16 +01:00
Leonid Logvinov
cdac2d210e Revert devnet mining period from 1 to 0 2019-01-17 14:23:03 +01:00
Fabio Berger
737941e8c7 Add call-to-action docs button at end of instructions again 2019-01-17 13:29:47 +01:00
Fabio Berger
a873872cc7 Open 0x.org on different tab 2019-01-17 13:03:18 +01:00
Fabio Berger
56b8fd2074 Add fonts 2019-01-17 12:55:14 +01:00
Fabio Berger
b2ea4f6aaf Update requirement sections 2019-01-17 12:53:09 +01:00
fragosti
beaf0a4a8a update team info, add brent 2019-01-16 11:33:57 -08:00
Fabio Berger
6871f36dad Update 0x url 2019-01-16 18:44:52 +01:00
Fabio B
b08d6c3b4d Merge pull request #1510 from 0xProject/feature/monorepo-scripts/publishToDockerHub
Add DockerHub Publishing Step to Publish Flow
2019-01-16 18:35:55 +01:00
Steve Klebanoff
39816bef8f Merge pull request #1511 from 0xProject/fix/asset-buyer/zero-amount-available-test
Fix expectedAmountAvailableToFill  test
2019-01-15 13:04:55 -08:00
Steve Klebanoff
7a2b312d64 Merge branch 'development' into fix/asset-buyer/zero-amount-available-test 2019-01-15 10:38:23 -08:00
Fabio Berger
7c37d10d1f Merge branch 'development' into feature/monorepo-scripts/publishToDockerHub
* development: (87 commits)
  Update packages/sol-tracing-utils/src/trace_collection_subprovider.ts
  Make mapping namings direct
  Remove unused tslint disable
  Revert "Remove logAsyncErrors hack"
  Remove logAsyncErrors hack
  Refactor logAsyncErrors to follow our conventions
  Export Sources and SourceCodes out of tracing utils
  Replace console.log with logUtils.log (#1515)
  strict decoding of return values using generics
  makerAssetFillAmount -> takerAssetFillAmount
  Ran prettier
  Linter
  Fix build after rebase
  Style cleanup for Compressed Calldata in Contract Wrappers PR
  Use simpler `_.find` to locate fillOrderBai
  Updated dutch auction wrapper
  Added back abi-gen-wrappers
  Renamed signatureParser.ts to signature_parser.ts
  Renamed decode rule `structsAsObjects` to `shouldConvertStructsToObjects`
  circle build failed. New commit to resubmit job.
  ...
2019-01-15 15:13:24 +01:00
Fabio Berger
ae147e615a Merge branch 'development' into fix/dev-tools-pages/finalTouches
* development: (87 commits)
  Update packages/sol-tracing-utils/src/trace_collection_subprovider.ts
  Make mapping namings direct
  Remove unused tslint disable
  Revert "Remove logAsyncErrors hack"
  Remove logAsyncErrors hack
  Refactor logAsyncErrors to follow our conventions
  Export Sources and SourceCodes out of tracing utils
  Replace console.log with logUtils.log (#1515)
  strict decoding of return values using generics
  makerAssetFillAmount -> takerAssetFillAmount
  Ran prettier
  Linter
  Fix build after rebase
  Style cleanup for Compressed Calldata in Contract Wrappers PR
  Use simpler `_.find` to locate fillOrderBai
  Updated dutch auction wrapper
  Added back abi-gen-wrappers
  Renamed signatureParser.ts to signature_parser.ts
  Renamed decode rule `structsAsObjects` to `shouldConvertStructsToObjects`
  circle build failed. New commit to resubmit job.
  ...
2019-01-15 15:10:50 +01:00
Fabio Berger
affd617054 Add commented-out pre-publish checks 2019-01-14 16:05:56 +01:00
Fabio Berger
84163517c6 Add additional check to make sure user was added to our DockerHub org 2019-01-14 15:24:00 +01:00
Steve Klebanoff
64a78149aa Update test for required amountAvailableToFill 2019-01-11 09:20:59 -08:00
Fabio Berger
98579300c1 merge development 2019-01-11 17:14:12 +01:00
Fabio Berger
96ff5eef64 merge development 2019-01-11 17:12:55 +01:00
Fabio Berger
7f5a2c972b Add actual error message thrown 2019-01-11 16:55:37 +01:00
Fabio Berger
dad6404c7f Flag order-watcher as having a Docker image to publish 2019-01-11 16:52:28 +01:00
Fabio Berger
6dcf40f570 Add publish to DockerHub step to publish flow 2019-01-11 16:52:15 +01:00
Fabio Berger
43b0422804 Flesh out postpublish configs in packageJSON type 2019-01-11 16:51:54 +01:00
Fabio Berger
55ce0d9d17 Add pre-publish check to ensure publisher is logged in to docker cmdline 2019-01-11 16:50:41 +01:00
Fabio Berger
895460aea3 Update yarn.lock 2019-01-11 14:29:09 +01:00
Fabio Berger
7956127b29 Ensure the process exits 2019-01-11 14:29:02 +01:00
Fabio Berger
6fb2721294 Fix copy and links 2019-01-11 14:20:56 +01:00
Fabio Berger
ebb10e6604 Remove unused import 2019-01-11 14:15:24 +01:00
Fabio Berger
db878f4a7b Fix title and og tags for sol-coverage 2019-01-11 14:15:15 +01:00
Fabio Berger
583e690b7a Merge branch 'development' into fix/dev-tools-pages/finalTouches
* development: (49 commits)
  upgrade to ddex api v3 (#1507)
  Add new deployment related instructions to pipeline README (#1499)
  feature: implement logging and friendly wallet name for Opera
  Fix prettier
  Add missing dependencies
  Remove second yarn call
  Add .gitkeep
  Rename sol-trace-based-tools-common to sol-tracing-utils
  Update packages/sol-trace/README.md
  Update packages/sol-trace/CHANGELOG.json
  Update packages/sol-trace-based-tools-common/src/source_maps.ts
  Update packages/sol-trace-based-tools-common/CHANGELOG.json
  Update packages/sol-profiler/CHANGELOG.json
  Update packages/sol-coverage/CHANGELOG.json
  Update packages/monorepo-scripts/src/test_installation.ts
  chore: changelog update
  fix: account for undefined errors in promisify, not only null
  Clean up docs before publish
  In README's, don't mention non-existent tests (#1497)
  fix: use getBackendBaseUrl instead of hardcoded string
  ...
2019-01-11 00:47:57 +01:00
Fabio Berger
a516b00a03 Fix footer links 2019-01-11 00:45:26 +01:00
Fabio Berger
dc20429bca Add deployment commands for the Dev tools pages 2019-01-10 20:14:51 +01:00
Fabio Berger
241be6de30 Rename sol-cov to sol-coverage, fix links 2019-01-09 17:30:34 +01:00
Fabio Berger
589b535b91 Add docLink 2019-01-09 17:30:01 +01:00
Fabio Berger
eb6b07e804 Update yarn.lock 2019-01-09 17:29:13 +01:00
106 changed files with 816 additions and 446 deletions

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-examples",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -34,7 +34,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/examples/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",
@@ -59,11 +59,11 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-interfaces": "^1.0.5",
"@0x/contracts-libs": "^1.0.5",
"@0x/contracts-multisig": "^1.0.5",
"@0x/contracts-tokens": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-interfaces": "^1.0.6",
"@0x/contracts-libs": "^1.0.6",
"@0x/contracts-multisig": "^1.0.6",
"@0x/contracts-tokens": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.2.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.2.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.2.3 - _January 17, 2019_
* Dependencies updated
## v1.2.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-extensions",
"version": "1.2.2",
"version": "1.2.3",
"engines": {
"node": ">=6.12"
},
@@ -45,8 +45,8 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/extensions/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contract-wrappers": "^5.0.0",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contract-wrappers": "^5.0.1",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",
@@ -71,11 +71,11 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-interfaces": "^1.0.5",
"@0x/contracts-libs": "^1.0.5",
"@0x/contracts-protocol": "^2.2.2",
"@0x/contracts-tokens": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-interfaces": "^1.0.6",
"@0x/contracts-libs": "^1.0.6",
"@0x/contracts-protocol": "^2.2.3",
"@0x/contracts-tokens": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-interfaces",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -42,8 +42,8 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-libs": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-libs": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-libs",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -45,7 +45,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/libs/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",
@@ -70,8 +70,8 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-multisig": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-multisig": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-multisig",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -45,7 +45,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/multisig/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "2.2.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "2.2.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.2.3 - _January 17, 2019_
* Dependencies updated
## v2.2.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-protocol",
"version": "2.2.2",
"version": "2.2.3",
"engines": {
"node": ">=6.12"
},
@@ -69,13 +69,13 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-examples": "^1.0.5",
"@0x/contracts-interfaces": "^1.0.5",
"@0x/contracts-libs": "^1.0.5",
"@0x/contracts-multisig": "^1.0.5",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-tokens": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-examples": "^1.0.6",
"@0x/contracts-interfaces": "^1.0.6",
"@0x/contracts-libs": "^1.0.6",
"@0x/contracts-multisig": "^1.0.6",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/contracts-tokens": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "2.0.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "2.0.0",
"changes": [

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.0.1 - _January 17, 2019_
* Dependencies updated
## v2.0.0 - _January 15, 2019_
* Renamed OrderStatus enum members to PascalCase to conform with tslint enum-naming rule (#1474)

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-test-utils",
"version": "2.0.0",
"version": "2.0.1",
"engines": {
"node": ">=6.12"
},
@@ -44,9 +44,9 @@
"@0x/dev-utils": "^1.0.24",
"@0x/order-utils": "^3.1.2",
"@0x/sol-compiler": "^2.0.2",
"@0x/sol-coverage": "^1.0.2",
"@0x/sol-profiler": "^1.0.2",
"@0x/sol-trace": "^1.0.2",
"@0x/sol-coverage": "^1.0.3",
"@0x/sol-profiler": "^1.0.3",
"@0x/sol-trace": "^1.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
"@0x/types": "^1.5.2",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-tokens",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -45,7 +45,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/tokens/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",
@@ -70,10 +70,10 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-interfaces": "^1.0.5",
"@0x/contracts-libs": "^1.0.5",
"@0x/contracts-multisig": "^1.0.5",
"@0x/contracts-utils": "^1.0.5",
"@0x/contracts-interfaces": "^1.0.6",
"@0x/contracts-libs": "^1.0.6",
"@0x/contracts-multisig": "^1.0.6",
"@0x/contracts-utils": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.6",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.5",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.6 - _January 17, 2019_
* Dependencies updated
## v1.0.5 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contracts-utils",
"version": "1.0.5",
"version": "1.0.6",
"engines": {
"node": ">=6.12"
},
@@ -45,7 +45,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/contracts/utils/README.md",
"devDependencies": {
"@0x/abi-gen": "^1.0.22",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/dev-utils": "^1.0.24",
"@0x/sol-compiler": "^2.0.2",
"@0x/subproviders": "^2.1.11",
@@ -71,7 +71,7 @@
},
"dependencies": {
"@0x/base-contract": "^3.0.13",
"@0x/contracts-multisig": "^1.0.5",
"@0x/contracts-multisig": "^1.0.6",
"@0x/order-utils": "^3.1.2",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "3.0.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "3.0.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v3.0.3 - _January 17, 2019_
* Dependencies updated
## v3.0.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "0x.js",
"version": "3.0.2",
"version": "3.0.3",
"engines": {
"node": ">=6.12"
},
@@ -74,9 +74,9 @@
"dependencies": {
"@0x/assert": "^1.0.23",
"@0x/base-contract": "^3.0.13",
"@0x/contract-wrappers": "^5.0.0",
"@0x/contract-wrappers": "^5.0.1",
"@0x/order-utils": "^3.1.2",
"@0x/order-watcher": "^2.4.2",
"@0x/order-watcher": "^2.4.3",
"@0x/subproviders": "^2.1.11",
"@0x/types": "^1.5.2",
"@0x/typescript-typings": "^3.0.8",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "4.0.2",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "4.0.1",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.0.2 - _January 17, 2019_
* Dependencies updated
## v4.0.1 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/asset-buyer",
"version": "4.0.1",
"version": "4.0.2",
"engines": {
"node": ">=6.12"
},
@@ -38,7 +38,7 @@
"dependencies": {
"@0x/assert": "^1.0.23",
"@0x/connect": "^3.0.13",
"@0x/contract-wrappers": "^5.0.0",
"@0x/contract-wrappers": "^5.0.1",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
"@0x/subproviders": "^2.1.11",

View File

@@ -168,7 +168,7 @@ describe('buyQuoteCalculator', () => {
};
testHelpers.expectInsufficientLiquidityError(expect, errorFunction, new BigNumber(1));
});
it('should throw without amount available to fill if amount rounds to 0', () => {
it('should throw with 0 available to fill if amount rounds to 0', () => {
const smallOrder = orderFactory.createSignedOrderFromPartial({
makerAssetAmount: new BigNumber(1),
takerAssetAmount: new BigNumber(1),
@@ -184,7 +184,7 @@ describe('buyQuoteCalculator', () => {
false,
);
};
testHelpers.expectInsufficientLiquidityError(expect, errorFunction, undefined);
testHelpers.expectInsufficientLiquidityError(expect, errorFunction, new BigNumber(0));
});
});
it('should not throw if order is fillable', () => {

View File

@@ -6,7 +6,7 @@ export const testHelpers = {
expectInsufficientLiquidityError: (
expect: Chai.ExpectStatic,
functionWhichTriggersError: () => void,
expectedAmountAvailableToFill?: BigNumber,
expectedAmountAvailableToFill: BigNumber,
): void => {
let wasErrorThrown = false;
try {

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "5.0.1",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"version": "5.0.0",
"changes": [

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v5.0.1 - _January 17, 2019_
* Dependencies updated
## v5.0.0 - _January 15, 2019_
* Renamed OrderStatus enum members to PascalCase to conform with tslint enum-naming rule (#1474)

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/contract-wrappers",
"version": "5.0.0",
"version": "5.0.1",
"description": "Smart TS wrappers for 0x smart contracts",
"keywords": [
"0xproject",
@@ -69,7 +69,7 @@
"@0x/assert": "^1.0.23",
"@0x/contract-addresses": "^2.2.0",
"@0x/contract-artifacts": "^1.3.0",
"@0x/contracts-test-utils": "^2.0.0",
"@0x/contracts-test-utils": "^2.0.1",
"@0x/fill-scenarios": "^1.1.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",

View File

@@ -1,3 +1 @@
public
assets/fonts/*.woff
assets/fonts/*.woff2
public

View File

@@ -1,20 +1,17 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<ul>
<li><a href="/compiler">Compiler</a></li>
<li><a href="/cov">Cov</a></li>
<li><a href="/profiler">Profiler</a></li>
<li><a href="/trace">Trace</a></li>
</ul>
</body>
</html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Test</title>
</head>
<body>
<ul>
<li><a href="/compiler">Compiler</a></li>
<li><a href="/coverage">Coverage</a></li>
<li><a href="/profiler">Profiler</a></li>
<li><a href="/trace">Trace</a></li>
</ul>
</body>
</html>

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/dev-tools-pages",
"version": "0.0.13",
"version": "0.0.14",
"engines": {
"node": ">=6.12"
},
@@ -12,7 +12,17 @@
"build:dev": "../../node_modules/.bin/webpack --mode development",
"clean": "shx rm -f public/bundle*",
"lint": "tslint --format stylish --project . 'ts/**/*.ts' 'ts/**/*.tsx'",
"dev": "webpack-dev-server --mode development --content-base public"
"dev": "webpack-dev-server --mode development --content-base public",
"deploy:all": "npm run build; npm run deploy:compiler; npm run deploy:compiler:index; npm run deploy:coverage; npm run deploy:coverage:index; npm run deploy:profiler; npm run deploy:profiler:index; npm run deploy:trace; npm run deploy:trace:index;",
"deploy:compiler": "DIR_NAME=./public/. BUCKET=s3://sol-compiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
"deploy:coverage": "DIR_NAME=./public/. BUCKET=s3://sol-coverage.com yarn s3:sync --exclude 'bundle-compiler*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
"deploy:profiler": "DIR_NAME=./public/. BUCKET=s3://sol-profiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-compiler*'",
"deploy:trace": "DIR_NAME=./public/. BUCKET=s3://sol-trace.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-compiler*' --exclude 'bundle-profiler*'",
"deploy:compiler:index": "DIR_NAME=./public/compiler/. BUCKET=s3://sol-compiler.com yarn s3:sync",
"deploy:coverage:index": "DIR_NAME=./public/coverage/. BUCKET=s3://sol-coverage.com yarn s3:sync",
"deploy:profiler:index": "DIR_NAME=./public/profiler/. BUCKET=s3://sol-profiler.com yarn s3:sync",
"deploy:trace:index": "DIR_NAME=./public/trace/. BUCKET=s3://sol-trace.com yarn s3:sync",
"s3:sync": "aws s3 sync $DIR_NAME $BUCKET --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js --exclude 'profiler/*' --exclude 'trace/*' --exclude 'coverage/*' --exclude 'compiler/*'"
},
"license": "Apache-2.0",
"dependencies": {

View File

@@ -17,15 +17,15 @@ const pages = [
},
},
{
title: 'sol-cov',
filename: 'cov/index.html',
title: 'sol-coverage',
filename: 'coverage/index.html',
template: 'assets/index.html',
chunks: ['cov'],
chunks: ['coverage'],
favicon: 'assets/favicons/cov.ico',
minify: true,
meta: {
description: 'Solidity code coverage',
'og-title': { property: 'og:title', content: 'sol-cov' },
'og-title': { property: 'og:title', content: 'sol-coverage' },
'og-description': { property: 'og:description', content: 'Solidity code coverage' },
'og-type': { property: 'og:type', content: 'website' },
'og-image': { property: 'og:image', content: '/images/og-cov' },

View File

@@ -0,0 +1,40 @@
import * as React from 'react';
import styled from 'styled-components';
import { ContextInterface, ThemeContext } from 'ts/context';
import { Button } from './button';
const CallToAction: React.StatelessComponent<ContextInterface> = ({ children }) => (
<ThemeContext.Consumer>
{({ docLink }: ContextInterface) => (
<StyledCallToAction>
<CallToActionContainer>
<Button as="a" href={docLink} target="_blank" large={true}>
Read the Docs
</Button>
</CallToActionContainer>
{navigator.userAgent !== 'ReactSnap' ? children : null}
</StyledCallToAction>
)}
</ThemeContext.Consumer>
);
const StyledCallToAction = styled.section`
text-align: center;
padding-top: 0;
padding-bottom: 1rem;
padding-left: 2.5rem;
padding-right: 2.5rem;
min-height: min-content;
max-height: 37.5rem;
height: 20vh;
position: relative;
`;
const CallToActionContainer = styled.div`
margin: 0 auto;
max-width: 590px;
`;
export { CallToAction };

View File

@@ -139,7 +139,6 @@ class Code extends React.Component<CodeProps, CodeState> {
public render(): React.ReactNode {
const { language, isLight, isDiff, children, gutterLength, canCopy } = this.props;
const { hlCode } = this.state;
return (
<Container>
<Base language={language} isDiff={isDiff} isLight={isLight}>

View File

@@ -45,7 +45,7 @@ const Dd = styled.dd`
const cards = [
{
title: 'A Project-centric',
title: 'Project-centric',
body: (
<React.Fragment>
Compiles an entire project instead of only individual <InlineCode isAlt={true}>.sol</InlineCode> files.
@@ -54,7 +54,7 @@ const cards = [
},
{
title: 'Incremental builds',
body: 'Recompiles your smart contracts after they have changed',
body: 'Only recompiles smart contracts that have been modified.',
},
{
title: 'Customizable artifacts',
@@ -63,12 +63,16 @@ const cards = [
},
{
title: 'Seamless',
body: 'Fetches and caches the required compiler binaries.',
body: 'Fetches and caches the required compiler binaries for the Solidity versions you use.',
},
{
title: 'Versioning',
body:
'Compiles each contract with the version specified at the top of its file (sol-compiler even supports version ranges!).',
'Compiles each contract with the Solidity version specified at the top of its file (it even supports version ranges!).',
},
{
title: 'Watch mode',
body: 'Have your contracts instantly recompile on file save.',
},
];

View File

@@ -3,7 +3,7 @@ import * as React from 'react';
import styled from 'styled-components';
import { context as compiler } from 'ts/context/compiler';
import { context as cov } from 'ts/context/cov';
import { context as coverage } from 'ts/context/coverage';
import { context as profiler } from 'ts/context/profiler';
import { context as trace } from 'ts/context/trace';
import MainIcon from 'ts/icons/logos/0x.svg';
@@ -12,7 +12,7 @@ import { media } from 'ts/variables';
import { Container } from './container';
import { Alpha, Beta } from './typography';
const tools = [trace, cov, compiler, profiler];
const tools = [trace, coverage, compiler, profiler];
const Footer: React.StatelessComponent<{}> = () => (
<StyledFooter>
@@ -20,9 +20,9 @@ const Footer: React.StatelessComponent<{}> = () => (
<Top>
<Alpha>Other tools by 0x</Alpha>
<List>
{_.map(tools, ({ title, subtitle, icon }) => (
{_.map(tools, ({ title, subtitle, icon, name }) => (
<ListItem key={title}>
<ListLink href="#">
<ListLink href={`https://sol-${name}.com`}>
<Icon as={icon as 'svg'} />
<div>
<Beta>{title}</Beta>

View File

@@ -17,7 +17,7 @@ const Header: React.StatelessComponent<{}> = () => (
<Title>{title}</Title>
</LogoMark>
<Link as="a" href="https://0xproject.com/">
<Link as="a" href="https://0x.org/" target="_blank">
Built by 0x
</Link>
</Container>

View File

@@ -9,12 +9,12 @@ import { Beta } from './typography';
const Hero: React.StatelessComponent<ContextInterface> = ({ children }) => (
<ThemeContext.Consumer>
{({ subtitle, tagline }: ContextInterface) => (
{({ subtitle, tagline, docLink }: ContextInterface) => (
<StyledHero>
<HeroContainer>
<Subtitle>{subtitle}</Subtitle>
<Tagline as="p">{tagline}</Tagline>
<Button as="a" href="#" large={true}>
<Button as="a" href={docLink} target="_blank" large={true}>
Read the Docs
</Button>
</HeroContainer>

View File

@@ -25,7 +25,7 @@ const Trace: React.StatelessComponent<{}> = () => (
troublemaking line of code. The only hint you'll get is a generic error.
</MainCopy>
<Breakout>
<Code isLight={true}>Error: VM Exception while processing transaction: rever</Code>
<Code isLight={true}>Error: VM Exception while processing transaction: revert</Code>
</Breakout>
<List>
@@ -44,8 +44,8 @@ const Trace: React.StatelessComponent<{}> = () => (
<Copy dark={true}>
<Gamma as="h3">Time-consuming</Gamma>
<p>
Working with a large code-base that contains hundreds of smart contracts,
finding the failing line of code quickly becomes a daunting task.
Working within a large code-base that contains many smart contracts, finding the
failing line of code quickly becomes a daunting task.
</p>
</Copy>
<Icon as={TimeConsuming} />
@@ -78,8 +78,8 @@ const Trace: React.StatelessComponent<{}> = () => (
<Copy>
<Gamma as="h3">Exact location</Gamma>
<p>
It shows you the exact location of the specific code linen and where it was
called from.
It shows you the exact location of the offending line and where it was called
from.
</p>
</Copy>
<Icon as={ExactLocation} />
@@ -90,8 +90,7 @@ const Trace: React.StatelessComponent<{}> = () => (
<Gamma as="h3">Time-saving</Gamma>
<p>
Turning "Your code failed somewhere, good luck debugging it" into "Your code
failed on line X of contract Y", it drastically improves the developer
experience.
failed on line X of contract Y", drastically improves the developer experience.
</p>
</Copy>
<Icon as={TimeSaving} />

View File

@@ -5,6 +5,7 @@ import { ContextInterface } from './index';
export const context: ContextInterface = {
title: 'sol-compiler',
name: 'compiler',
docLink: 'https://0x.org/docs/sol-compiler',
subtitle: 'Solidity compilation that just works',
tagline: 'Seamlessly compile an entire solidity project and generate customisable artifacts',
icon: Icon,

View File

@@ -3,9 +3,10 @@ import Icon from 'ts/icons/logos/cov.svg';
import { ContextInterface } from './index';
export const context: ContextInterface = {
title: 'sol-cov',
name: 'cov',
title: 'sol-coverage',
name: 'coverage',
subtitle: 'Solidity code coverage',
docLink: 'https://0x.org/docs/sol-coverage',
tagline: 'Measure Solidity code coverage',
icon: Icon,
colors: {

View File

@@ -3,6 +3,7 @@ import { createContext } from 'react';
interface ContextInterface {
title?: string;
name?: string;
docLink?: string;
subtitle?: string;
tagline?: string;
icon?: React.ReactNode;

View File

@@ -5,6 +5,7 @@ import { ContextInterface } from './index';
export const context: ContextInterface = {
title: 'sol-profiler',
name: 'profiler',
docLink: 'https://0x.org/docs/sol-profiler',
subtitle: 'Gas profiling for Solidity',
tagline: "Implement data-guided optimizations by profiling your contract's gas usage",
icon: Icon,

View File

@@ -6,6 +6,7 @@ export const context: ContextInterface = {
title: 'sol-trace',
name: 'trace',
subtitle: 'Human-readable stack traces',
docLink: 'https://0x.org/docs/sol-trace',
tagline: 'Immediately locate Solidity errors and rapidly debug failed transactions',
icon: Icon,
colors: {

View File

@@ -6,6 +6,7 @@ import { context } from 'ts/context/compiler';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Compiler as CompilerComponent } from 'ts/components/compiler';
import { Content } from 'ts/components/content';
@@ -24,6 +25,9 @@ const Animation = Loadable({
},
});
const SOLIDITY_INPUT_FORMAT_DOCS =
'https://solidity.readthedocs.io/en/v0.4.24/using-the-compiler.html#compiler-input-and-output-json-description';
const Compiler: React.StatelessComponent<{}> = () => (
<Base context={context}>
<Hero>
@@ -40,7 +44,7 @@ const Compiler: React.StatelessComponent<{}> = () => (
<ContentBlock title="Run">
<Breakout>
<Code>cd /your_project_dir && sol-compiler</Code>
<Code canCopy={true}>cd /your_project_dir && sol-compiler</Code>
</Breakout>
</ContentBlock>
@@ -49,11 +53,11 @@ const Compiler: React.StatelessComponent<{}> = () => (
Configure via a <InlineCode>compiler.json</InlineCode> file.
</p>
<Breakout>
<Code>mkdir compiler.json</Code>
<Code canCopy={true}>mkdir compiler.json</Code>
</Breakout>
<p>Example of settings:</p>
<Breakout>
<Code language="json">
<Code language="json" canCopy={true}>
{`{
"contractsDir": "contracts",
"artifactsDir": "artifacts",
@@ -74,15 +78,19 @@ const Compiler: React.StatelessComponent<{}> = () => (
<Content dark={true}>
<ContentBlock main={true} title="Artifacts">
<Lead>
Sol compiler uses solidity standard JSON output format for the artifacts. This way, you can define
which parts of the artifact you need.
Sol compiler uses{' '}
<a href={SOLIDITY_INPUT_FORMAT_DOCS} target="_blank">
Solidity standard JSON input format
</a>{' '}
to specify what to include in the generated artifacts. This way, you have complete flexibility on
what is included.
</Lead>
</ContentBlock>
<ContentBlock title="Production">
<p>
Sol compiler uses solidity standard JSON output format for the artifacts. This way, you can define
which parts of the artifact you need.
In production, you want to optimize for a small bundle size, so your compiler.json config would
instruct sol-compiler to only output the contract ABI.
</p>
<Breakout>
<Code isLight={true} language="json" isEtc={true}>
@@ -109,8 +117,9 @@ const Compiler: React.StatelessComponent<{}> = () => (
</ContentBlock>
<ContentBlock title="Development">
<p>
Sometimes you need to use some debuggers or other dev tools and youll need more info in the
artifact.
In development, you need to use profiler and other dev tools that require more information from the
artifact. To do this, you can specify that the artifact also contain the bytecode, deployed bytecode
and source maps.
</p>
<Breakout>
<Code isLight={true} language="json" isEtc={true}>
@@ -158,6 +167,9 @@ const Compiler: React.StatelessComponent<{}> = () => (
</Breakout>
</ContentBlock>
</Content>
<div style={{ paddingTop: '5rem' }}>
<CallToAction />
</div>
</Base>
);

View File

@@ -2,10 +2,11 @@ import * as React from 'react';
import { hydrate, render } from 'react-dom';
import * as Loadable from 'react-loadable';
import { context } from 'ts/context/cov';
import { context } from 'ts/context/coverage';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -25,7 +26,7 @@ const Animation = Loadable({
},
});
const Cov: React.StatelessComponent<{}> = () => (
const Coverage: React.StatelessComponent<{}> = () => (
<Base context={context}>
<Hero>
<Animation />
@@ -33,9 +34,9 @@ const Cov: React.StatelessComponent<{}> = () => (
<Intro>
<IntroLead title="Measure your tests">
<p>
When it comes to writing smart contracts, testing is one of the most important steps of the process.
In order to quantify the robustness of your Solidity testing suite, you need to measure its code
coverage.
When it comes to writing secure smart contracts, testing is one of the most important steps in the
process. In order to quantify the robustness of your Solidity testing suite, you need to measure its
code coverage.
</p>
</IntroLead>
<IntroAside>
@@ -69,29 +70,57 @@ const Cov: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
Use <a href="#">ganache-cli</a> as a backing node.
Use{' '}
<a href="https://github.com/ethereum/go-ethereum" target="_blank">
Geth
</a>{' '}
as a backing node. We recommend using our{' '}
<a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
Devnet Docker container
</a>{' '}
which sets up a Geth node for testing purposes.{' '}
<a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
Ganache support is a work in progress.
</a>
</ListItem>
<ListItem>
Understand and use <a href="#">web3-provider-engine</a>.
Understand and use{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
web3-provider-engine
</a>
.
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
<Code>npm install @0x/sol-coverage --save</Code>
<Code canCopy={true}>npm install @0x/sol-coverage --save</Code>
</Breakout>
<p>
Sol-cov is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-cov ships with
the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with <a href="#">Sol-compiler</a>{' '}
Sol-coverage is a subprovider that needs to be prepended to your{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
provider engine
</a>
. Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-coverage
ships with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
<a href="https://sol-compiler.com" target="_blank">
Sol-compiler
</a>{' '}
and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
<a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
<a href="https://truffleframework.com/truffle" target="_blank">
Truffle framework
</a>{' '}
(Also see our{' '}
<a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
Truffle example project
</a>{' '}
for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -99,16 +128,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
const solcVersion = '0.4.24';
const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -118,32 +147,33 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
<InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
<InlineCode>CoverageSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
import { RevertTraceSubprovider } from '@0x/sol-coverage';
import { CoverageSubprovider } from '@0x/sol-coverage';
const defaultFromAddress = "..."; // Some ethereum address with test funds
const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
const coverageSubprovider = new CoverageSubprovider(artifactAdapter, defaultFromAddress);
const providerEngine = new ProviderEngine();
providerEngine.addProvider(revertTraceSubprovider);
providerEngine.addProvider(coverageSubprovider);
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
providerEngine.start();`}
</Code>
</Breakout>
</ContentBlock>
</Content>
<CallToAction />
</Base>
);
const root = document.getElementById('app');
if (root.hasChildNodes()) {
hydrate(<Cov />, root);
hydrate(<Coverage />, root);
} else {
render(<Cov />, root);
render(<Coverage />, root);
}

View File

@@ -6,6 +6,7 @@ import { context } from 'ts/context/profiler';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -66,29 +67,57 @@ const Profiler: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
Use <a href="#">ganache-cli</a> as a backing node.
Use{' '}
<a href="https://github.com/ethereum/go-ethereum" target="_blank">
Geth
</a>{' '}
as a backing node. We recommend using our{' '}
<a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
Devnet Docker container
</a>{' '}
which sets up a Geth node for testing purposes.{' '}
<a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
Ganache support is a work in progress.
</a>
</ListItem>
<ListItem>
Understand and use <a href="#">web3-provider-engine</a>.
Understand and use{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
web3-provider-engine
</a>
.
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
<Code>npm install @0x/sol-trace --save</Code>
<Code canCopy={true}>npm install @0x/sol-trace --save</Code>
</Breakout>
<p>
Sol-trace is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
Sol-trace is a subprovider that needs to be prepended to your{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
provider engine
</a>
. Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
<a href="#">Sol-compiler</a> and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
<a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
<a href="https://sol-compiler.com" target="_blank">
Sol-compiler
</a>{' '}
and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
<a href="https://truffleframework.com/truffle" target="_blank">
Truffle framework
</a>{' '}
(Also see our{' '}
<a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
Truffle example project
</a>{' '}
for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -96,16 +125,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
const solcVersion = '0.4.24';
const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -115,25 +144,26 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
<InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
<InlineCode>ProfilerSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
import { RevertTraceSubprovider } from '@0x/sol-coverage';
import { ProfilerSubprovider } from '@0x/sol-profiler';
const defaultFromAddress = "..."; // Some ethereum address with test funds
const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
const profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress);
const providerEngine = new ProviderEngine();
providerEngine.addProvider(revertTraceSubprovider);
providerEngine.addProvider(profilerSubprovider);
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
providerEngine.start();`}
</Code>
</Breakout>
</ContentBlock>
</Content>
<CallToAction />
</Base>
);

View File

@@ -6,6 +6,7 @@ import { context } from 'ts/context/trace';
import { Base } from 'ts/components/base';
import { Breakout } from 'ts/components/breakout';
import { CallToAction } from 'ts/components/call_to_action';
import { Code } from 'ts/components/code';
import { Content } from 'ts/components/content';
import { ContentBlock } from 'ts/components/content-block';
@@ -36,29 +37,57 @@ const Trace: React.StatelessComponent<{}> = () => (
<ContentBlock title="Prerequisites">
<List>
<ListItem>
Use <a href="#">ganache-cli</a> as a backing node.
Use{' '}
<a href="https://github.com/ethereum/go-ethereum" target="_blank">
Geth
</a>{' '}
as a backing node. We recommend using our{' '}
<a href="https://hub.docker.com/r/0xorg/devnet" target="_blank">
Devnet Docker container
</a>{' '}
which sets up a Geth node for testing purposes.{' '}
<a href="https://github.com/0xProject/0x-monorepo/issues/1520" target="_blank">
Ganache support is a work in progress.
</a>
</ListItem>
<ListItem>
Understand and use <a href="#">web3-provider-engine</a>.
Understand and use{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
web3-provider-engine
</a>
.
</ListItem>
</List>
</ContentBlock>
<ContentBlock title="Installation">
<Breakout>
<Code>npm install @0x/sol-trace --save</Code>
<Code canCopy={true}>npm install @0x/sol-trace --save</Code>
</Breakout>
<p>
Sol-trace is a subprovider that needs to be prepended to your <a href="#">provider engine</a>.
Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
Sol-trace is a subprovider that needs to be prepended to your{' '}
<a href="https://github.com/MetaMask/provider-engine" target="_blank">
provider engine
</a>
. Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
<a href="#">Sol-compiler</a> and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
<a href="#">Truffle framework</a>. You can also write your own and support any artifact format.
<a href="https://sol-compiler.com" target="_blank">
Sol-compiler
</a>{' '}
and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
<a href="https://truffleframework.com/truffle" target="_blank">
Truffle framework
</a>{' '}
(Also see our{' '}
<a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
Truffle example project
</a>{' '}
for a complete walk-through). You can also write your own and support any artifact format.
</p>
<Tabs>
<TabBlock title="Sol-compiler">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { SolCompilerArtifactAdapter } from '@0x/sol-trace';
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
@@ -66,16 +95,16 @@ const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDi
</Code>
</TabBlock>
<TabBlock title="Truffle">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { TruffleArtifactAdapter } from '@0x/sol-trace';
const projectRoot = '.';
const solcVersion = '0.4.24';
const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
</Code>
</TabBlock>
<TabBlock title="Custom">
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
@@ -85,13 +114,13 @@ const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
</Tabs>
<p>
Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
<InlineCode>RevertTraceSubprovider</InlineCode> and append it to our provider engine.
<InlineCode>revertTraceSubprovider</InlineCode> and append it to our provider engine.
</p>
<Breakout>
<Code language="javascript">
<Code language="javascript" canCopy={true}>
{`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
import { RevertTraceSubprovider } from '@0x/sol-coverage';
import { RevertTraceSubprovider } from '@0x/sol-trace';
const defaultFromAddress = "..."; // Some ethereum address with test funds
const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
@@ -102,8 +131,10 @@ providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'})
providerEngine.start();`}
</Code>
</Breakout>
<p>Stack traces will now be printed whenever your contracts revert!</p>
</ContentBlock>
</Content>
<CallToAction />
</Base>
);

View File

@@ -3,7 +3,6 @@ const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');
const childProcess = require('child_process');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
@@ -12,7 +11,7 @@ const pages = require('./pages');
const config = {
entry: {
compiler: './ts/pages/compiler.tsx',
cov: './ts/pages/cov.tsx',
coverage: './ts/pages/coverage.tsx',
profiler: './ts/pages/profiler.tsx',
trace: './ts/pages/trace.tsx',
},

View File

@@ -8,7 +8,7 @@
"eip158Block": 3,
"byzantiumBlock": 4,
"clique": {
"period": 1,
"period": 0,
"epoch": 30000
}
},

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/instant",
"version": "1.0.7",
"version": "1.0.8",
"engines": {
"node": ">=6.12"
},
@@ -42,7 +42,7 @@
"homepage": "https://github.com/0xProject/0x-monorepo/packages/instant/README.md",
"dependencies": {
"@0x/assert": "^1.0.23",
"@0x/asset-buyer": "^4.0.1",
"@0x/asset-buyer": "^4.0.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",
"@0x/subproviders": "^2.1.11",

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/metacoin",
"version": "0.0.35",
"version": "0.0.36",
"engines": {
"node": ">=6.12"
},
@@ -32,9 +32,9 @@
"@0x/abi-gen": "^1.0.22",
"@0x/abi-gen-templates": "^1.0.2",
"@0x/base-contract": "^3.0.13",
"@0x/sol-coverage": "^1.0.2",
"@0x/sol-profiler": "^1.0.2",
"@0x/sol-trace": "^1.0.2",
"@0x/sol-coverage": "^1.0.3",
"@0x/sol-profiler": "^1.0.3",
"@0x/sol-trace": "^1.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/tslint-config": "^2.0.2",
"@0x/types": "^1.5.2",

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0x/monorepo-scripts",
"version": "1.0.18",
"version": "1.0.19",
"engines": {
"node": ">=6.12"
},

View File

@@ -6,6 +6,8 @@ import semverSort = require('semver-sort');
import { constants } from './constants';
import { Package } from './types';
import { changelogUtils } from './utils/changelog_utils';
import { configs } from './utils/configs';
import { dockerHubUtils } from './utils/docker_hub_utils';
import { npmUtils } from './utils/npm_utils';
import { utils } from './utils/utils';
@@ -17,6 +19,12 @@ async function prepublishChecksAsync(): Promise<void> {
await checkChangelogFormatAsync(updatedPublicPackages);
await checkGitTagsForNextVersionAndDeleteIfExistAsync(updatedPublicPackages);
await checkPublishRequiredSetupAsync();
await checkDockerHubSetupAsync();
}
async function checkDockerHubSetupAsync(): Promise<void> {
await dockerHubUtils.checkUserAddedToOrganizationOrThrowAsync(configs.DOCKER_HUB_ORG);
await dockerHubUtils.loginUserToDockerCommandlineOrThrowAsync();
}
async function checkGitTagsForNextVersionAndDeleteIfExistAsync(updatedPublicPackages: Package[]): Promise<void> {

View File

@@ -1,11 +1,12 @@
#!/usr/bin/env node
import { logUtils } from '@0x/utils';
import * as promisify from 'es6-promisify';
import * as fs from 'fs';
import * as _ from 'lodash';
import * as moment from 'moment';
import opn = require('opn');
import { exec as execAsync } from 'promisify-child-process';
import { exec as execAsync, spawn as spawnAsync } from 'promisify-child-process';
import * as prompt from 'prompt';
import semver = require('semver');
import semverSort = require('semver-sort');
@@ -79,12 +80,16 @@ async function confirmAsync(message: string): Promise<void> {
});
utils.log(`Calling 'lerna publish'...`);
await lernaPublishAsync(packageToNextVersion);
if (!configs.IS_LOCAL_PUBLISH) {
const isDryRun = configs.IS_LOCAL_PUBLISH;
if (!isDryRun) {
// Publish docker images to DockerHub
await publishImagesToDockerHubAsync(allPackagesToPublish);
const isStaging = false;
const shouldUploadDocs = true;
await generateAndUploadDocJsonsAsync(packagesWithDocs, isStaging, shouldUploadDocs);
}
const isDryRun = configs.IS_LOCAL_PUBLISH;
const releaseNotes = await publishReleaseNotesAsync(updatedPublicPackages, isDryRun);
utils.log('Published release notes');
@@ -95,11 +100,45 @@ async function confirmAsync(message: string): Promise<void> {
utils.log("Publish successful, but couldn't auto-alert discord (", e.message, '), Please alert manually.');
}
}
process.exit(0);
})().catch(err => {
utils.log(err);
process.exit(1);
});
async function publishImagesToDockerHubAsync(allUpdatedPackages: Package[]): Promise<void> {
for (const pkg of allUpdatedPackages) {
const packageJSON = pkg.packageJson;
const shouldPublishDockerImage =
!_.isUndefined(packageJSON.config) &&
!_.isUndefined(packageJSON.config.postpublish) &&
!_.isUndefined(packageJSON.config.postpublish.dockerHubRepo);
if (!shouldPublishDockerImage) {
continue;
}
const dockerHubRepo = _.get(packageJSON, 'config.postpublish.dockerHubRepo');
const pkgName = pkg.packageJson.name;
const packageDirName = _.startsWith(pkgName, '@0x/') ? pkgName.split('/')[1] : pkgName;
// Build the Docker image
logUtils.log(`Building '${dockerHubRepo}' docker image...`);
await spawnAsync('docker', ['build', '-t', dockerHubRepo, '.'], {
cwd: `${constants.monorepoRootPath}/packages/${packageDirName}`,
});
// Tag the docker image with the latest version
const version = pkg.packageJson.version;
logUtils.log(`Tagging '${dockerHubRepo}' docker image with version ${version}...`);
await execAsync(`docker tag ${dockerHubRepo} ${configs.DOCKER_HUB_ORG}/${dockerHubRepo}:${version}`);
await execAsync(`docker tag ${dockerHubRepo} ${configs.DOCKER_HUB_ORG}/${dockerHubRepo}:latest`);
// Publish to DockerHub
logUtils.log(`Pushing '${dockerHubRepo}' docker image to DockerHub...`);
await execAsync(`docker push ${configs.DOCKER_HUB_ORG}/${dockerHubRepo}:${version}`);
await execAsync(`docker push ${configs.DOCKER_HUB_ORG}/${dockerHubRepo}:latest`);
}
}
function getPackagesWithDocs(allUpdatedPackages: Package[]): Package[] {
const rootPackageJsonPath = `${constants.monorepoRootPath}/package.json`;
const rootPackageJson = JSON.parse(fs.readFileSync(rootPackageJsonPath).toString());

View File

@@ -41,7 +41,11 @@ export interface PackageJSON {
main?: string;
scripts?: { [command: string]: string };
config?: {
additionalTsTypings?: string[];
postpublish?: {
assets?: string[];
docOmitExports?: string[];
dockerHubRepo?: string;
};
};
}

View File

@@ -5,4 +5,5 @@ const REMOTE_NPM_REGISTRY_URL = 'https://registry.npmjs.org';
export const configs = {
IS_LOCAL_PUBLISH,
NPM_REGISTRY_URL: IS_LOCAL_PUBLISH ? LOCAL_NPM_REGISTRY_URL : REMOTE_NPM_REGISTRY_URL,
DOCKER_HUB_ORG: '0xorg',
};

View File

@@ -0,0 +1,65 @@
import { fetchAsync } from '@0x/utils';
import { exec as execAsync } from 'promisify-child-process';
import { utils } from './utils';
const API_ENDPOINT = 'https://hub.docker.com/v2';
const HTTP_OK_STATUS = 200;
export const dockerHubUtils = {
async getTokenAsync(): Promise<string> {
const payload = {
username: process.env.DOCKER_USERNAME,
password: process.env.DOCKER_PASS,
};
const response = await fetchAsync(`${API_ENDPOINT}/users/login`, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});
if (response.status !== HTTP_OK_STATUS) {
throw new Error(
`DockerHub user login failed (status code: ${
response.status
}). Make sure you have environment variables 'DOCKER_USERNAME; and 'DOCKER_PASS' set`,
);
}
const respPayload = await response.json();
const token = respPayload.token;
return token;
},
async checkUserAddedToOrganizationOrThrowAsync(organization: string): Promise<void> {
utils.log('Checking that the user was added to the 0xorg DockerHub organization...');
const token = await dockerHubUtils.getTokenAsync();
const response = await fetchAsync(`${API_ENDPOINT}/repositories/${organization}/?page_size=10`, {
method: 'GET',
headers: {
Accept: 'application/json',
Authorization: `JWT ${token}`,
},
});
const respPayload = await response.json();
if (response.status !== HTTP_OK_STATUS || respPayload.count === 0) {
throw new Error(
`Failed to fetch org: ${organization}'s list of repos (status code: ${
response.status
}). Make sure your account has been added to the '${organization}' org on DockerHub`,
);
}
},
async loginUserToDockerCommandlineOrThrowAsync(): Promise<void> {
try {
utils.log('Checking that the user is logged in to docker command...');
await execAsync(`echo "$DOCKER_PASS" | docker login -u $DOCKER_USERNAME --password-stdin`);
} catch (err) {
throw new Error(
`Failed to log you into the 'docker' commandline tool. Make sure you have the 'docker' commandline tool installed. Full error: ${
err.message
}`,
);
}
},
};

View File

@@ -106,8 +106,10 @@ export const utils = {
return nextVersionIfValid;
},
async getRemoteGitTagsAsync(): Promise<string[]> {
const TEN_MEGA_BYTES = 1024 * 1024 * 10; // tslint:disable-line custom-no-magic-numbers
const result = await execAsync(`git ls-remote --tags`, {
cwd: constants.monorepoRootPath,
maxBuffer: TEN_MEGA_BYTES,
});
const tagsString = result.stdout;
const tagOutputs: string[] = tagsString.split('\n');

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "2.4.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "2.4.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v2.4.3 - _January 17, 2019_
* Dependencies updated
## v2.4.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/order-watcher",
"version": "2.4.2",
"version": "2.4.3",
"description": "An order watcher daemon that watches for order validity",
"keywords": [
"0x",
@@ -24,6 +24,11 @@
"run_mocha": "mocha --require source-map-support/register --require make-promises-safe lib/test/**/*_test.js lib/test/global_hooks.js --timeout 10000 --bail --exit",
"docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES"
},
"config": {
"postpublish": {
"dockerHubRepo": "order-watcher"
}
},
"repository": {
"type": "git",
"url": "https://github.com/0xProject/0x-monorepo"
@@ -63,7 +68,7 @@
"@0x/base-contract": "^3.0.13",
"@0x/contract-addresses": "^2.2.0",
"@0x/contract-artifacts": "^1.3.0",
"@0x/contract-wrappers": "^5.0.0",
"@0x/contract-wrappers": "^5.0.1",
"@0x/fill-scenarios": "^1.1.2",
"@0x/json-schemas": "^2.1.7",
"@0x/order-utils": "^3.1.2",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.3 - _January 17, 2019_
* Dependencies updated
## v1.0.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/sol-coverage",
"version": "1.0.2",
"version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-coverage/README.md",
"dependencies": {
"@0x/sol-tracing-utils": "^4.0.0",
"@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.3 - _January 17, 2019_
* Dependencies updated
## v1.0.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/sol-profiler",
"version": "1.0.2",
"version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-profiler/README.md",
"dependencies": {
"@0x/sol-tracing-utils": "^4.0.0",
"@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",

View File

@@ -1,4 +1,13 @@
[
{
"timestamp": 1547747677,
"version": "1.0.3",
"changes": [
{
"note": "Dependencies updated"
}
]
},
{
"timestamp": 1547561734,
"version": "1.0.2",

View File

@@ -5,6 +5,10 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v1.0.3 - _January 17, 2019_
* Dependencies updated
## v1.0.2 - _January 15, 2019_
* Dependencies updated

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/sol-trace",
"version": "1.0.2",
"version": "1.0.3",
"engines": {
"node": ">=6.12"
},
@@ -29,7 +29,7 @@
},
"homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-trace/README.md",
"dependencies": {
"@0x/sol-tracing-utils": "^4.0.0",
"@0x/sol-tracing-utils": "^4.0.1",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"ethereum-types": "^1.1.6",

View File

@@ -109,9 +109,7 @@ export class RevertTraceSubprovider extends TraceCollectionSubprovider {
const fileNameToFileIndex = _.invert(contractData.sources);
const fileIndex = _.parseInt(fileNameToFileIndex[sourceRange.fileName]);
const sourceSnippet = getSourceRangeSnippet(sourceRange, contractData.sourceCodes[fileIndex]);
if (sourceSnippet !== null) {
sourceSnippets.push(sourceSnippet);
}
sourceSnippets.push(sourceSnippet);
}
const filteredSnippets = filterSnippets(sourceSnippets);
if (filteredSnippets.length > 0) {
@@ -135,9 +133,7 @@ function filterSnippets(sourceSnippets: SourceSnippet[]): SourceSnippet[] {
const results: SourceSnippet[] = [sourceSnippets[0]];
let prev = sourceSnippets[0];
for (const sourceSnippet of sourceSnippets) {
if (sourceSnippet.type === 'IfStatement') {
continue;
} else if (sourceSnippet.source === prev.source) {
if (sourceSnippet.source === prev.source) {
prev = sourceSnippet;
continue;
}
@@ -157,12 +153,5 @@ function getStackTraceString(sourceSnippet: SourceSnippet): string {
}
function getSourceSnippetString(sourceSnippet: SourceSnippet): string {
switch (sourceSnippet.type) {
case 'ContractDefinition':
return `contract ${sourceSnippet.name}`;
case 'FunctionDefinition':
return `function ${sourceSnippet.name}`;
default:
return `${sourceSnippet.source}`;
}
return `${sourceSnippet.source}`;
}

View File

@@ -1,4 +1,22 @@
[
{
"version": "4.0.1",
"changes": [
{
"note": "Fix a bug where a custom `Geth` tracer didn't return stack entries for `DELEGATECALL`",
"pr": 1521
},
{
"note": "Fix a bug where `TraceCollectionSubprovider` was hanging on the fake `Geth` snapshot transaction",
"pr": 1521
},
{
"note": "Fix/simplify handling of revert trace snippets",
"pr": 1521
}
],
"timestamp": 1547747677
},
{
"version": "4.0.0",
"changes": [

View File

@@ -5,6 +5,12 @@ Edit the package's CHANGELOG.json file only.
CHANGELOG
## v4.0.1 - _January 17, 2019_
* Fix a bug where a custom `Geth` tracer didn't return stack entries for `DELEGATECALL` (#1521)
* Fix a bug where `TraceCollectionSubprovider` was hanging on the fake `Geth` snapshot transaction (#1521)
* Fix/simplify handling of revert trace snippets (#1521)
## v4.0.0 - _January 15, 2019_
* Fix a bug with incorrect parsing of `sourceMaps` due to sources being in an array instead of a map (#1498)

View File

@@ -1,6 +1,6 @@
{
"name": "@0x/sol-tracing-utils",
"version": "4.0.0",
"version": "4.0.1",
"engines": {
"node": ">=6.12"
},

View File

@@ -1,185 +1,16 @@
import * as ethUtil from 'ethereumjs-util';
import * as _ from 'lodash';
import * as Parser from 'solidity-parser-antlr';
import { SingleFileSourceRange, SourceRange, SourceSnippet } from './types';
import { SourceRange, SourceSnippet } from './types';
import { utils } from './utils';
interface ASTInfo {
type: string;
node: Parser.ASTNode;
name: string | null;
range?: SingleFileSourceRange;
}
// Parsing source code for each transaction/code is slow and therefore we cache it
const hashToParsedSource: { [sourceHash: string]: Parser.ASTNode } = {};
/**
* Gets the source range snippet by source range to be used by revert trace.
* @param sourceRange source range
* @param sourceCode source code
*/
export function getSourceRangeSnippet(sourceRange: SourceRange, sourceCode: string): SourceSnippet | null {
const sourceHash = ethUtil.sha3(sourceCode).toString('hex');
if (_.isUndefined(hashToParsedSource[sourceHash])) {
hashToParsedSource[sourceHash] = Parser.parse(sourceCode, { loc: true });
}
const astNode = hashToParsedSource[sourceHash];
const visitor = new ASTInfoVisitor();
Parser.visit(astNode, visitor);
const astInfo = visitor.getASTInfoForRange(sourceRange);
if (astInfo === null) {
return null;
}
export function getSourceRangeSnippet(sourceRange: SourceRange, sourceCode: string): SourceSnippet {
const sourceCodeInRange = utils.getRange(sourceCode, sourceRange.location);
return {
...astInfo,
range: astInfo.range as SingleFileSourceRange,
range: sourceRange.location,
source: sourceCodeInRange,
fileName: sourceRange.fileName,
};
}
// A visitor which collects ASTInfo for most nodes in the AST.
class ASTInfoVisitor {
private readonly _astInfos: ASTInfo[] = [];
public getASTInfoForRange(sourceRange: SourceRange): ASTInfo | null {
// HACK(albrow): Sometimes the source range doesn't exactly match that
// of astInfo. To work around that we try with a +/-1 offset on
// end.column. If nothing matches even with the offset, we return null.
const offset = {
start: {
line: 0,
column: 0,
},
end: {
line: 0,
column: 0,
},
};
let astInfo = this._getASTInfoForRange(sourceRange, offset);
if (astInfo !== null) {
return astInfo;
}
offset.end.column += 1;
astInfo = this._getASTInfoForRange(sourceRange, offset);
if (astInfo !== null) {
return astInfo;
}
offset.end.column -= 2;
astInfo = this._getASTInfoForRange(sourceRange, offset);
if (astInfo !== null) {
return astInfo;
}
return null;
}
public ContractDefinition(ast: Parser.ContractDefinition): void {
this._visitContractDefinition(ast);
}
public IfStatement(ast: Parser.IfStatement): void {
this._visitStatement(ast);
}
public FunctionDefinition(ast: Parser.FunctionDefinition): void {
this._visitFunctionLikeDefinition(ast);
}
public ModifierDefinition(ast: Parser.ModifierDefinition): void {
this._visitFunctionLikeDefinition(ast);
}
public ForStatement(ast: Parser.ForStatement): void {
this._visitStatement(ast);
}
public ReturnStatement(ast: Parser.ReturnStatement): void {
this._visitStatement(ast);
}
public BreakStatement(ast: Parser.BreakStatement): void {
this._visitStatement(ast);
}
public ContinueStatement(ast: Parser.ContinueStatement): void {
this._visitStatement(ast);
}
public EmitStatement(ast: any /* TODO: Parser.EmitStatement */): void {
this._visitStatement(ast);
}
public VariableDeclarationStatement(ast: Parser.VariableDeclarationStatement): void {
this._visitStatement(ast);
}
public Statement(ast: Parser.Statement): void {
this._visitStatement(ast);
}
public WhileStatement(ast: Parser.WhileStatement): void {
this._visitStatement(ast);
}
public SimpleStatement(ast: Parser.SimpleStatement): void {
this._visitStatement(ast);
}
public ThrowStatement(ast: Parser.ThrowStatement): void {
this._visitStatement(ast);
}
public DoWhileStatement(ast: Parser.DoWhileStatement): void {
this._visitStatement(ast);
}
public ExpressionStatement(ast: Parser.ExpressionStatement): void {
this._visitStatement(ast.expression);
}
public InlineAssemblyStatement(ast: Parser.InlineAssemblyStatement): void {
this._visitStatement(ast);
}
public ModifierInvocation(ast: Parser.ModifierInvocation): void {
const BUILTIN_MODIFIERS = ['public', 'view', 'payable', 'external', 'internal', 'pure', 'constant'];
if (!_.includes(BUILTIN_MODIFIERS, ast.name)) {
this._visitStatement(ast);
}
}
private _visitStatement(ast: Parser.ASTNode): void {
this._astInfos.push({
type: ast.type,
node: ast,
name: null,
range: ast.loc,
});
}
private _visitFunctionLikeDefinition(ast: Parser.ModifierDefinition | Parser.FunctionDefinition): void {
this._astInfos.push({
type: ast.type,
node: ast,
name: ast.name,
range: ast.loc,
});
}
private _visitContractDefinition(ast: Parser.ContractDefinition): void {
this._astInfos.push({
type: ast.type,
node: ast,
name: ast.name,
range: ast.loc,
});
}
private _getASTInfoForRange(sourceRange: SourceRange, offset: SingleFileSourceRange): ASTInfo | null {
const offsetSourceRange = {
...sourceRange,
location: {
start: {
line: sourceRange.location.start.line + offset.start.line,
column: sourceRange.location.start.column + offset.start.column,
},
end: {
line: sourceRange.location.end.line + offset.end.line,
column: sourceRange.location.end.column + offset.end.column,
},
},
};
for (const astInfo of this._astInfos) {
const astInfoRange = astInfo.range as SingleFileSourceRange;
if (
astInfoRange.start.column === offsetSourceRange.location.start.column &&
astInfoRange.start.line === offsetSourceRange.location.start.line &&
astInfoRange.end.column === offsetSourceRange.location.end.column &&
astInfoRange.end.line === offsetSourceRange.location.end.line
) {
return astInfo;
}
}
return null;
}
}

View File

@@ -144,7 +144,7 @@ export abstract class TraceCollectionSubprovider extends Subprovider {
txHash: string | undefined,
cb: Callback,
): Promise<void> {
if (!txData.isFakeTransaction) {
if (!(txData.isFakeTransaction || txData.from === txData.to)) {
// This transaction is a usual transaction. Not a call executed as one.
// And we don't want it to be executed within a snapshotting period
await this._lock.acquire();

View File

@@ -31,7 +31,7 @@ export abstract class TraceInfoSubprovider extends TraceCollectionSubprovider {
const depth = 0 | log.getDepth();
const gasCost = 0 | log.getCost();
const gas = 0 | log.getGas();
const isCall = opn == 0xf1 || opn == 0xf2 || opn == 0xf4 || opn == 0xf5;
const isCall = opn == 0xf1 || opn == 0xf2 || opn == 0xf4 || opn == 0xf5 || opn == 0xfa;
const stack = isCall ? ['0x'+log.stack.peek(1).toString(16), null] : null;
this.data.push({ pc, gasCost, depth, op, stack, gas });
},

View File

@@ -1,5 +1,4 @@
import { StructLog } from 'ethereum-types';
import * as Parser from 'solidity-parser-antlr';
export interface LineColumn {
line: number;
@@ -126,8 +125,5 @@ export type EvmCallStack = EvmCallStackEntry[];
export interface SourceSnippet {
source: string;
fileName: string;
type: string;
node: Parser.ASTNode;
name: string | null;
range: SingleFileSourceRange;
}

View File

@@ -8,6 +8,7 @@ import { ContractData, LineColumn, SingleFileSourceRange } from './types';
// This is the minimum length of valid contract bytecode. The Solidity compiler
// metadata is 86 bytes. If you add the '0x' prefix, we get 88.
const MIN_CONTRACT_BYTECODE_LENGTH = 88;
const STATICCALL_GAS_COST = 40;
export const utils = {
compareLineColumn(lhs: LineColumn, rhs: LineColumn): number {
@@ -76,10 +77,17 @@ export const utils = {
normalizeStructLogs(structLogs: StructLog[]): StructLog[] {
if (structLogs[0].depth === 1) {
// Geth uses 1-indexed depth counter whilst ganache starts from 0
const newStructLogs = _.map(structLogs, structLog => ({
...structLog,
depth: structLog.depth - 1,
}));
const newStructLogs = _.map(structLogs, structLog => {
const newStructLog = {
...structLog,
depth: structLog.depth - 1,
};
if (newStructLog.op === 'STATICCALL') {
// HACK(leo): Geth traces sometimes returns those gas costs incorrectly as very big numbers so we manually fix them.
newStructLog.gasCost = STATICCALL_GAS_COST;
}
return newStructLog;
});
return newStructLogs;
}
return structLogs;

View File

@@ -1,7 +1,7 @@
{
"private": true,
"name": "@0x/testnet-faucets",
"version": "1.0.63",
"version": "1.0.64",
"engines": {
"node": ">=6.12"
},
@@ -18,7 +18,7 @@
"author": "Fabio Berger",
"license": "Apache-2.0",
"dependencies": {
"0x.js": "^3.0.2",
"0x.js": "^3.0.3",
"@0x/subproviders": "^2.1.11",
"@0x/typescript-typings": "^3.0.8",
"@0x/utils": "^3.0.1",

View File

@@ -1,7 +1,7 @@
**Install**
```bash
yarn add @0x/sol-coverage
yarn add -D @0x/sol-coverage
```
**Import**

View File

@@ -1 +1 @@
Welcome to the [sol-coverage](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-coverage) documentation! Sol-coverage is a Solidity coverage tool for your smart contract tests.
Welcome to the [sol-coverage](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-coverage) documentation! Sol-coverage is a Solidity coverage tool.

View File

@@ -1,4 +1,4 @@
Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
The CoverageSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
@@ -12,9 +12,8 @@ If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs
```typescript
import { SolCompilerArtifactsAdapter } from '@0x/sol-coverage';
const artifactsPath = 'src/artifacts';
const contractsPath = 'src/contracts';
const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);
```
### Truffle
@@ -23,8 +22,9 @@ If your project is using [Truffle](https://truffleframework.com/), we've written
```typescript
import { TruffleArtifactAdapter } from '@0x/sol-coverage';
const contractsPath = 'src/contracts';
const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
const projectRoot = '.';
const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);
```
Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
@@ -32,7 +32,13 @@ Because truffle artifacts don't have all the data we need - we actually will rec
### Other framework/toolset
You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
Look at the code of the two adapters above for examples.
```typescript
import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
const artifactAdapter = new YourCustomArtifactsAdapter(...);
```
### Usage
@@ -41,16 +47,14 @@ import { CoverageSubprovider } from '@0x/sol-coverage';
import ProviderEngine = require('web3-provider-engine');
const provider = new ProviderEngine();
const artifactsPath = 'src/artifacts';
const contractsPath = 'src/contracts';
const networkId = 50;
// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
const isVerbose = true;
const coverageSubprovider = new CoverageSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
provider.addProvider(coverageSubprovider);
// Add all your other providers
provider.start();
```
After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:

View File

@@ -1,7 +1,7 @@
**Install**
```bash
yarn add @0x/sol-profiler
yarn add -D @0x/sol-profiler
```
**Import**

View File

@@ -1,4 +1,4 @@
Sol-profiler uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `ProfilerSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with ProviderEngine, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
Sol-profiler uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `ProfilerSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article.
The ProfilerSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot.
@@ -12,9 +12,8 @@ If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs
```typescript
import { SolCompilerArtifactsAdapter } from '@0x/sol-profiler';
const artifactsPath = 'src/artifacts';
const contractsPath = 'src/contracts';
const artifactsAdapter = new SolCompilerArtifactsAdapter(artifactsPath, contractsPath);
// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in
const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir);
```
### Truffle
@@ -23,8 +22,9 @@ If your project is using [Truffle](https://truffleframework.com/), we've written
```typescript
import { TruffleArtifactAdapter } from '@0x/sol-profiler';
const contractsPath = 'src/contracts';
const artifactAdapter = new TruffleArtifactAdapter(contractsDir);
const projectRoot = '.';
const solcVersion = '0.5.0';
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);
```
Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`.
@@ -32,7 +32,13 @@ Because truffle artifacts don't have all the data we need - we actually will rec
### Other framework/toolset
You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`.
Look at the code of the two adapters above for examples.
```typescript
import { AbstractArtifactAdapter } from '@0x/sol-trace';
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
const artifactAdapter = new YourCustomArtifactsAdapter(...);
```
### Usage
@@ -41,22 +47,20 @@ import { ProfilerSubprovider } from '@0x/sol-profiler';
import ProviderEngine = require('web3-provider-engine');
const provider = new ProviderEngine();
const artifactsPath = 'src/artifacts';
const contractsPath = 'src/contracts';
const networkId = 50;
// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from.
const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631';
const isVerbose = true;
const profilerSubprovider = new ProfilerSubprovider(artifactsAdapter, defaultFromAddress, isVerbose);
provider.addProvider(profilerSubprovider);
// Add all your other providers
provider.start();
```
After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call:
```typescript
await profilerSubprovider.writeProfilerAsync();
await profilerSubprovider.writeProfilerOutputAsync();
```
This will create a `profiler.json` file in a `profiler` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/profiler.json.md) - so you can use it with any of the existing Istanbul reporters.
This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/profiler.json.md) - so you can use it with any of the existing Istanbul reporters.

View File

@@ -1,17 +1,17 @@
**Install**
```bash
yarn add @0x/sol-trace
yarn add -D @0x/sol-trace
```
**Import**
```javascript
import { TraceSubprovider } from '@0x/sol-trace';
import { RevertTraceSubprovider } from '@0x/sol-trace';
```
or
```javascript
var TraceSubprovider = require('@0x/sol-trace').TraceSubprovider;
var RevertTraceSubprovider = require('@0x/sol-trace').RevertTraceSubprovider;
```

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