diff options
Diffstat (limited to 'packages/sol-trace')
-rw-r--r-- | packages/sol-trace/.npmignore | 6 | ||||
-rw-r--r-- | packages/sol-trace/CHANGELOG.json | 75 | ||||
-rw-r--r-- | packages/sol-trace/CHANGELOG.md | 38 | ||||
-rw-r--r-- | packages/sol-trace/README.md | 75 | ||||
-rw-r--r-- | packages/sol-trace/package.json | 53 | ||||
-rw-r--r-- | packages/sol-trace/src/globals.d.ts | 7 | ||||
-rw-r--r-- | packages/sol-trace/src/index.ts | 26 | ||||
-rw-r--r-- | packages/sol-trace/src/revert_trace_subprovider.ts | 170 | ||||
-rw-r--r-- | packages/sol-trace/tsconfig.json | 8 | ||||
-rw-r--r-- | packages/sol-trace/tslint.json | 3 | ||||
-rw-r--r-- | packages/sol-trace/typedoc-tsconfig.json | 7 |
11 files changed, 0 insertions, 468 deletions
diff --git a/packages/sol-trace/.npmignore b/packages/sol-trace/.npmignore deleted file mode 100644 index 037786e46..000000000 --- a/packages/sol-trace/.npmignore +++ /dev/null @@ -1,6 +0,0 @@ -.* -yarn-error.log -/src/ -/scripts/ -tsconfig.json -/lib/src/monorepo_scripts/ diff --git a/packages/sol-trace/CHANGELOG.json b/packages/sol-trace/CHANGELOG.json deleted file mode 100644 index c786a56a3..000000000 --- a/packages/sol-trace/CHANGELOG.json +++ /dev/null @@ -1,75 +0,0 @@ -[ - { - "version": "2.0.3", - "changes": [ - { - "note": "Dependencies updated" - } - ], - "timestamp": 1549547375 - }, - { - "timestamp": 1549452781, - "version": "2.0.2", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "version": "2.0.1", - "changes": [ - { - "note": "Improve error messages when unable to find matching bytecode", - "pr": 1558 - } - ], - "timestamp": 1549373905 - }, - { - "version": "2.0.0", - "changes": [ - { - "note": "Upgrade the bignumber.js to v8.0.2", - "pr": 1517 - } - ] - }, - { - "timestamp": 1547747677, - "version": "1.0.3", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1547561734, - "version": "1.0.2", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "timestamp": 1547225310, - "version": "1.0.1", - "changes": [ - { - "note": "Dependencies updated" - } - ] - }, - { - "version": "1.0.0", - "changes": [ - { - "note": "Initial release as a separate package. For historical entries see @0x/sol-tracing-utils", - "pr": 1492 - } - ] - } -] diff --git a/packages/sol-trace/CHANGELOG.md b/packages/sol-trace/CHANGELOG.md deleted file mode 100644 index bcb75c423..000000000 --- a/packages/sol-trace/CHANGELOG.md +++ /dev/null @@ -1,38 +0,0 @@ -<!-- -changelogUtils.file is auto-generated using the monorepo-scripts package. Don't edit directly. -Edit the package's CHANGELOG.json file only. ---> - -CHANGELOG - -## v2.0.3 - _February 7, 2019_ - - * Dependencies updated - -## v2.0.2 - _February 6, 2019_ - - * Dependencies updated - -## v2.0.1 - _February 5, 2019_ - - * Improve error messages when unable to find matching bytecode (#1558) - -## v2.0.0 - _Invalid date_ - - * Upgrade the bignumber.js to v8.0.2 (#1517) - -## v1.0.3 - _January 17, 2019_ - - * Dependencies updated - -## v1.0.2 - _January 15, 2019_ - - * Dependencies updated - -## v1.0.1 - _January 11, 2019_ - - * Dependencies updated - -## v1.0.0 - _Invalid date_ - - * Initial release as a separate package. For historical entries see @0x/sol-tracing-utils (#1492) diff --git a/packages/sol-trace/README.md b/packages/sol-trace/README.md deleted file mode 100644 index 86ca2cbd6..000000000 --- a/packages/sol-trace/README.md +++ /dev/null @@ -1,75 +0,0 @@ -## @0x/sol-trace - -Prints a stack trace when a revert is encountered. - -### Read the [Documentation](https://0xproject.com/docs/sol-trace). - -## Installation - -```bash -yarn add @0x/sol-trace -``` - -**Import** - -```javascript -import { RevertTraceSubprovider } from '@0x/sol-trace'; -``` - -or - -```javascript -var RevertTraceSubprovider = require('@0x/sol-trace').RevertTraceSubprovider; -``` - -## Contributing - -We welcome improvements and fixes from the wider community! To report bugs within this package, please create an issue in this repository. - -Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. - -### Install dependencies - -If you don't have yarn workspaces enabled (Yarn < v1.0) - enable them: - -```bash -yarn config set workspaces-experimental true -``` - -Then install dependencies - -```bash -yarn install -``` - -### Build - -To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: - -```bash -PKG=@0x/sol-trace yarn build -``` - -Or continuously rebuild on change: - -```bash -PKG=@0x/sol-trace yarn watch -``` - -### Clean - -```bash -yarn clean -``` - -### Lint - -```bash -yarn lint -``` - -### Run Tests - -```bash -yarn test -``` diff --git a/packages/sol-trace/package.json b/packages/sol-trace/package.json deleted file mode 100644 index b65a8b002..000000000 --- a/packages/sol-trace/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@0x/sol-trace", - "version": "2.0.3", - "engines": { - "node": ">=6.12" - }, - "description": "Prints stack trace on Solidity revert", - "main": "lib/src/index.js", - "types": "lib/src/index.d.ts", - "scripts": { - "build": "tsc -b", - "build:ci": "yarn build", - "lint": "tslint --format stylish --project .", - "clean": "shx rm -rf lib src/artifacts generated_docs", - "docs:json": "typedoc --excludePrivate --excludeExternals --target ES5 --tsconfig typedoc-tsconfig.json --json $JSON_FILE_PATH $PROJECT_FILES" - }, - "config": { - "postpublish": { - "assets": [] - } - }, - "repository": { - "type": "git", - "url": "https://github.com/0xProject/0x-monorepo.git" - }, - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/0xProject/0x-monorepo/issues" - }, - "homepage": "https://github.com/0xProject/0x-monorepo/packages/sol-trace/README.md", - "dependencies": { - "@0x/sol-tracing-utils": "^6.0.2", - "@0x/subproviders": "^3.0.2", - "@0x/typescript-typings": "^4.0.0", - "chalk": "^2.3.0", - "ethereum-types": "^2.0.0", - "ethereumjs-util": "^5.1.1", - "lodash": "^4.17.11", - "loglevel": "^1.6.1" - }, - "devDependencies": { - "@0x/tslint-config": "^3.0.0", - "@types/loglevel": "^1.5.3", - "@types/node": "*", - "npm-run-all": "^4.1.2", - "shx": "^0.2.2", - "tslint": "5.11.0", - "typescript": "3.0.1" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/sol-trace/src/globals.d.ts b/packages/sol-trace/src/globals.d.ts deleted file mode 100644 index e799b3529..000000000 --- a/packages/sol-trace/src/globals.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -// tslint:disable:completed-docs -declare module '*.json' { - const json: any; - /* tslint:disable */ - export default json; - /* tslint:enable */ -} diff --git a/packages/sol-trace/src/index.ts b/packages/sol-trace/src/index.ts deleted file mode 100644 index 61b5d8cb7..000000000 --- a/packages/sol-trace/src/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -export { - AbstractArtifactAdapter, - TruffleArtifactAdapter, - SolCompilerArtifactAdapter, - ContractData, - SourceCodes, - Sources, -} from '@0x/sol-tracing-utils'; - -export { RevertTraceSubprovider } from './revert_trace_subprovider'; - -export { - JSONRPCRequestPayload, - Provider, - JSONRPCErrorCallback, - JSONRPCResponsePayload, - JSONRPCResponseError, -} from 'ethereum-types'; - -export { - JSONRPCRequestPayloadWithMethod, - NextCallback, - ErrorCallback, - OnNextCompleted, - Callback, -} from '@0x/subproviders'; diff --git a/packages/sol-trace/src/revert_trace_subprovider.ts b/packages/sol-trace/src/revert_trace_subprovider.ts deleted file mode 100644 index ea2b684a5..000000000 --- a/packages/sol-trace/src/revert_trace_subprovider.ts +++ /dev/null @@ -1,170 +0,0 @@ -import { - AbstractArtifactAdapter, - constants, - ContractData, - EvmCallStack, - getRevertTrace, - getSourceRangeSnippet, - parseSourceMap, - SourceRange, - SourceSnippet, - TraceCollectionSubprovider, - utils, -} from '@0x/sol-tracing-utils'; -import chalk from 'chalk'; -import { stripHexPrefix } from 'ethereumjs-util'; -import * as _ from 'lodash'; -import { getLogger, levels, Logger } from 'loglevel'; - -/** - * This class implements the [web3-provider-engine](https://github.com/MetaMask/provider-engine) subprovider interface. - * It is used to report call stack traces whenever a revert occurs. - */ -export class RevertTraceSubprovider extends TraceCollectionSubprovider { - // Lock is used to not accept normal transactions while doing call/snapshot magic because they'll be reverted later otherwise - private _contractsData!: ContractData[]; - private readonly _artifactAdapter: AbstractArtifactAdapter; - private readonly _logger: Logger; - - /** - * Instantiates a RevertTraceSubprovider instance - * @param artifactAdapter Adapter for used artifacts format (0x, truffle, giveth, etc.) - * @param defaultFromAddress default from address to use when sending transactions - * @param isVerbose If true, we will log any unknown transactions. Otherwise we will ignore them - */ - constructor(artifactAdapter: AbstractArtifactAdapter, defaultFromAddress: string, isVerbose: boolean = true) { - const traceCollectionSubproviderConfig = { - shouldCollectTransactionTraces: true, - shouldCollectGasEstimateTraces: true, - shouldCollectCallTraces: true, - }; - super(defaultFromAddress, traceCollectionSubproviderConfig); - this._artifactAdapter = artifactAdapter; - this._logger = getLogger('sol-trace'); - this._logger.setLevel(isVerbose ? levels.TRACE : levels.ERROR); - } - // tslint:disable-next-line:no-unused-variable - protected async _recordTxTraceAsync(address: string, data: string | undefined, txHash: string): Promise<void> { - await this._web3Wrapper.awaitTransactionMinedAsync(txHash, 0); - const trace = await this._web3Wrapper.getTransactionTraceAsync(txHash, { - disableMemory: true, - disableStack: false, - disableStorage: true, - }); - const evmCallStack = getRevertTrace(trace.structLogs, address); - if (evmCallStack.length > 0) { - // if getRevertTrace returns a call stack it means there was a - // revert. - await this._printStackTraceAsync(evmCallStack); - } - } - private async _printStackTraceAsync(evmCallStack: EvmCallStack): Promise<void> { - const sourceSnippets: SourceSnippet[] = []; - if (_.isUndefined(this._contractsData)) { - this._contractsData = await this._artifactAdapter.collectContractsDataAsync(); - } - for (const evmCallStackEntry of evmCallStack) { - const isContractCreation = evmCallStackEntry.address === constants.NEW_CONTRACT; - if (isContractCreation) { - this._logger.error('Contract creation not supported'); - continue; - } - const bytecode = await this._web3Wrapper.getContractCodeAsync(evmCallStackEntry.address); - const contractData = utils.getContractDataIfExists(this._contractsData, bytecode); - if (_.isUndefined(contractData)) { - const shortenHex = (hex: string) => { - /** - * Length choosen so that both error messages are of the same length - * and it's enough data to figure out which artifact has a problem. - */ - const length = 18; - return `${hex.substr(0, length + 2)}...${hex.substr(hex.length - length, length)}`; - }; - const errMsg = isContractCreation - ? `Unable to find matching bytecode for contract creation ${chalk.bold( - shortenHex(bytecode), - )}, please check your artifacts. Ignoring...` - : `Unable to find matching bytecode for contract address ${chalk.bold( - evmCallStackEntry.address, - )}, please check your artifacts. Ignoring...`; - this._logger.warn(errMsg); - continue; - } - const bytecodeHex = stripHexPrefix(bytecode); - const sourceMap = isContractCreation ? contractData.sourceMap : contractData.sourceMapRuntime; - - const pcToSourceRange = parseSourceMap( - contractData.sourceCodes, - sourceMap, - bytecodeHex, - contractData.sources, - ); - // tslint:disable-next-line:no-unnecessary-initializer - let sourceRange: SourceRange | undefined = undefined; - let pc = evmCallStackEntry.structLog.pc; - // Sometimes there is not a mapping for this pc (e.g. if the revert - // actually happens in assembly). In that case, we want to keep - // searching backwards by decrementing the pc until we find a - // mapped source range. - while (_.isUndefined(sourceRange) && pc > 0) { - sourceRange = pcToSourceRange[pc]; - pc -= 1; - } - if (_.isUndefined(sourceRange)) { - this._logger.warn( - `could not find matching sourceRange for structLog: ${JSON.stringify( - _.omit(evmCallStackEntry.structLog, 'stack'), - )}`, - ); - continue; - } - - const fileNameToFileIndex = _.invert(contractData.sources); - const fileIndex = _.parseInt(fileNameToFileIndex[sourceRange.fileName]); - const sourceSnippet = getSourceRangeSnippet(sourceRange, contractData.sourceCodes[fileIndex]); - sourceSnippets.push(sourceSnippet); - } - const filteredSnippets = filterSnippets(sourceSnippets); - if (filteredSnippets.length > 0) { - this._logger.error('\n\nStack trace for REVERT:\n'); - _.forEach(_.reverse(filteredSnippets), snippet => { - const traceString = getStackTraceString(snippet); - this._logger.error(traceString); - }); - this._logger.error('\n'); - } else { - this._logger.error('REVERT detected but could not determine stack trace'); - } - } -} - -// removes duplicates and if statements -function filterSnippets(sourceSnippets: SourceSnippet[]): SourceSnippet[] { - if (sourceSnippets.length === 0) { - return []; - } - const results: SourceSnippet[] = [sourceSnippets[0]]; - let prev = sourceSnippets[0]; - for (const sourceSnippet of sourceSnippets) { - if (sourceSnippet.source === prev.source) { - prev = sourceSnippet; - continue; - } - results.push(sourceSnippet); - prev = sourceSnippet; - } - return results; -} - -function getStackTraceString(sourceSnippet: SourceSnippet): string { - let result = `${sourceSnippet.fileName}:${sourceSnippet.range.start.line}:${sourceSnippet.range.start.column}`; - const snippetString = getSourceSnippetString(sourceSnippet); - if (snippetString !== '') { - result += `:\n ${snippetString}`; - } - return result; -} - -function getSourceSnippetString(sourceSnippet: SourceSnippet): string { - return `${sourceSnippet.source}`; -} diff --git a/packages/sol-trace/tsconfig.json b/packages/sol-trace/tsconfig.json deleted file mode 100644 index 233008d61..000000000 --- a/packages/sol-trace/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig", - "compilerOptions": { - "outDir": "lib", - "rootDir": "." - }, - "include": ["./src/**/*"] -} diff --git a/packages/sol-trace/tslint.json b/packages/sol-trace/tslint.json deleted file mode 100644 index dd9053357..000000000 --- a/packages/sol-trace/tslint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["@0x/tslint-config"] -} diff --git a/packages/sol-trace/typedoc-tsconfig.json b/packages/sol-trace/typedoc-tsconfig.json deleted file mode 100644 index a4c669cb6..000000000 --- a/packages/sol-trace/typedoc-tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../typedoc-tsconfig", - "compilerOptions": { - "outDir": "lib" - }, - "include": ["./src/**/*"] -} |