diff options
author | Alex Browne <stephenalexbrowne@gmail.com> | 2018-06-15 08:07:03 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-15 08:07:03 +0800 |
commit | ff0960b174ffb8759f9f96e1486372acf54bf840 (patch) | |
tree | 9193336e896e72ce4f53eec52e45e5427dd89ccd /packages/contracts/src | |
parent | e7eb220c503118631a6b23071c71b4b55df5b5cf (diff) | |
parent | 7032825e35e825e42196d4ccc23b1a1f7fb8038a (diff) | |
download | dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar.gz dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar.bz2 dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar.lz dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar.xz dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.tar.zst dexon-sol-tools-ff0960b174ffb8759f9f96e1486372acf54bf840.zip |
Merge pull request #705 from 0xProject/feature/revert-trace-subprovider
Introduce subprovider for printing revert stack traces
Diffstat (limited to 'packages/contracts/src')
-rw-r--r-- | packages/contracts/src/utils/revert_trace.ts | 21 | ||||
-rw-r--r-- | packages/contracts/src/utils/web3_wrapper.ts | 15 |
2 files changed, 32 insertions, 4 deletions
diff --git a/packages/contracts/src/utils/revert_trace.ts b/packages/contracts/src/utils/revert_trace.ts new file mode 100644 index 000000000..0bf8384bc --- /dev/null +++ b/packages/contracts/src/utils/revert_trace.ts @@ -0,0 +1,21 @@ +import { devConstants } from '@0xproject/dev-utils'; +import { RevertTraceSubprovider, SolCompilerArtifactAdapter } from '@0xproject/sol-cov'; +import * as _ from 'lodash'; + +let revertTraceSubprovider: RevertTraceSubprovider; + +export const revertTrace = { + getRevertTraceSubproviderSingleton(): RevertTraceSubprovider { + if (_.isUndefined(revertTraceSubprovider)) { + revertTraceSubprovider = revertTrace._getRevertTraceSubprovider(); + } + return revertTraceSubprovider; + }, + _getRevertTraceSubprovider(): RevertTraceSubprovider { + const defaultFromAddress = devConstants.TESTRPC_FIRST_ADDRESS; + const solCompilerArtifactAdapter = new SolCompilerArtifactAdapter(); + const isVerbose = true; + const subprovider = new RevertTraceSubprovider(solCompilerArtifactAdapter, defaultFromAddress, isVerbose); + return subprovider; + }, +}; diff --git a/packages/contracts/src/utils/web3_wrapper.ts b/packages/contracts/src/utils/web3_wrapper.ts index c475d96a9..c9d83a02d 100644 --- a/packages/contracts/src/utils/web3_wrapper.ts +++ b/packages/contracts/src/utils/web3_wrapper.ts @@ -2,9 +2,11 @@ import { devConstants, env, EnvVars, web3Factory } from '@0xproject/dev-utils'; import { prependSubprovider } from '@0xproject/subproviders'; import { logUtils } from '@0xproject/utils'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import * as _ from 'lodash'; import { coverage } from './coverage'; import { profiler } from './profiler'; +import { revertTrace } from './revert_trace'; enum ProviderType { Ganache = 'ganache', @@ -48,10 +50,11 @@ const providerConfigs = testProvider === ProviderType.Ganache ? ganacheConfigs : export const provider = web3Factory.getRpcProvider(providerConfigs); const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage); const isProfilerEnabled = env.parseBoolean(EnvVars.SolidityProfiler); -if (isCoverageEnabled && isProfilerEnabled) { - throw new Error( - `Unfortunately for now you can't enable both coverage and profiler at the same time. They both use coverage.json file and there is no way to configure that.`, - ); +const isRevertTraceEnabled = env.parseBoolean(EnvVars.SolidityRevertTrace); +const enabledSubproviderCount = _.filter([isCoverageEnabled, isProfilerEnabled, isRevertTraceEnabled], _.identity) + .length; +if (enabledSubproviderCount > 1) { + throw new Error(`Only one of coverage, profiler, or revert trace subproviders can be enabled at a time`); } if (isCoverageEnabled) { const coverageSubprovider = coverage.getCoverageSubproviderSingleton(); @@ -71,5 +74,9 @@ if (isProfilerEnabled) { profilerSubprovider.stop(); prependSubprovider(provider, profilerSubprovider); } +if (isRevertTraceEnabled) { + const revertTraceSubprovider = revertTrace.getRevertTraceSubproviderSingleton(); + prependSubprovider(provider, revertTraceSubprovider); +} export const web3Wrapper = new Web3Wrapper(provider); |