From 1ff34bd0f4084d2f9dfd6f07447bb63684ac51ac Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Tue, 15 May 2018 15:14:36 +0200 Subject: Remove web3Factory.create and remove dev-tools dependency on sol-cov --- packages/0x.js/test/utils/web3_wrapper.ts | 5 +- packages/contract-wrappers/test/artifacts_test.ts | 4 +- .../contract-wrappers/test/utils/web3_wrapper.ts | 5 +- packages/contracts/package.json | 2 + packages/contracts/src/utils/web3_wrapper.ts | 12 +- packages/contracts/test/global_hooks.ts | 4 +- packages/contracts/test/utils/coverage.ts | 21 + packages/dev-utils/package.json | 1 - packages/dev-utils/src/coverage.ts | 22 - packages/dev-utils/src/index.ts | 1 - packages/dev-utils/src/web3_factory.ts | 20 +- packages/metacoin/test/utils/web3_wrapper.ts | 11 +- packages/migrations/package.json | 2 +- packages/migrations/src/migrate.ts | 3 +- packages/order-utils/test/utils/web3_wrapper.ts | 5 +- packages/order-watcher/test/utils/web3_wrapper.ts | 5 +- packages/sol-compiler/test/util/provider.ts | 3 +- packages/sol-cov/src/coverage_subprovider.ts | 2 +- packages/sol-cov/src/trace.json | 3227 ++++++++++++++++++++ packages/sol-cov/src/trace.ts | 2 +- packages/sol-cov/test/trace_test.ts | 2 +- packages/subproviders/src/index.ts | 1 + .../subproviders/src/utils/subprovider_utils.ts | 13 + packages/testnet-faucets/bin/server.js | 780 ----- packages/testnet-faucets/bin/server.js.map | 1 - .../types/web3-provider-engine/index.d.ts | 18 +- 26 files changed, 3310 insertions(+), 862 deletions(-) create mode 100644 packages/contracts/test/utils/coverage.ts delete mode 100644 packages/dev-utils/src/coverage.ts create mode 100644 packages/sol-cov/src/trace.json create mode 100644 packages/subproviders/src/utils/subprovider_utils.ts delete mode 100644 packages/testnet-faucets/bin/server.js delete mode 100644 packages/testnet-faucets/bin/server.js.map diff --git a/packages/0x.js/test/utils/web3_wrapper.ts b/packages/0x.js/test/utils/web3_wrapper.ts index b0ccfa546..71a0dc1c2 100644 --- a/packages/0x.js/test/utils/web3_wrapper.ts +++ b/packages/0x.js/test/utils/web3_wrapper.ts @@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils'; import { Provider } from '@0xproject/types'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; -const web3 = web3Factory.create({ shouldUseInProcessGanache: true }); -const provider: Provider = web3.currentProvider; -const web3Wrapper = new Web3Wrapper(web3.currentProvider); +const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/contract-wrappers/test/artifacts_test.ts b/packages/contract-wrappers/test/artifacts_test.ts index 446b8f9d1..eaaa89c48 100644 --- a/packages/contract-wrappers/test/artifacts_test.ts +++ b/packages/contract-wrappers/test/artifacts_test.ts @@ -15,7 +15,7 @@ const TIMEOUT = 10000; describe('Artifacts', () => { describe('contracts are deployed on kovan', () => { const kovanRpcUrl = constants.KOVAN_RPC_URL; - const provider = web3Factory.create({ rpcUrl: kovanRpcUrl }).currentProvider; + const provider = web3Factory.getRpcProvider({ rpcUrl: kovanRpcUrl }); const config = { networkId: constants.KOVAN_NETWORK_ID, }; @@ -32,7 +32,7 @@ describe('Artifacts', () => { }); describe('contracts are deployed on ropsten', () => { const ropstenRpcUrl = constants.ROPSTEN_RPC_URL; - const provider = web3Factory.create({ rpcUrl: ropstenRpcUrl }).currentProvider; + const provider = web3Factory.getRpcProvider({ rpcUrl: ropstenRpcUrl }); const config = { networkId: constants.ROPSTEN_NETWORK_ID, }; diff --git a/packages/contract-wrappers/test/utils/web3_wrapper.ts b/packages/contract-wrappers/test/utils/web3_wrapper.ts index b0ccfa546..71a0dc1c2 100644 --- a/packages/contract-wrappers/test/utils/web3_wrapper.ts +++ b/packages/contract-wrappers/test/utils/web3_wrapper.ts @@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils'; import { Provider } from '@0xproject/types'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; -const web3 = web3Factory.create({ shouldUseInProcessGanache: true }); -const provider: Provider = web3.currentProvider; -const web3Wrapper = new Web3Wrapper(web3.currentProvider); +const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 9c7142cdb..f17c64a6f 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -44,6 +44,8 @@ "devDependencies": { "@0xproject/abi-gen": "^0.2.13", "@0xproject/dev-utils": "^0.4.1", + "@0xproject/subproviders": "^0.10.1", + "@0xproject/sol-cov": "^0.0.10", "@0xproject/tslint-config": "^0.4.17", "@types/lodash": "4.14.104", "@types/node": "^8.0.53", diff --git a/packages/contracts/src/utils/web3_wrapper.ts b/packages/contracts/src/utils/web3_wrapper.ts index ed1c488a2..5d3d9f7c9 100644 --- a/packages/contracts/src/utils/web3_wrapper.ts +++ b/packages/contracts/src/utils/web3_wrapper.ts @@ -1,12 +1,18 @@ -import { devConstants, web3Factory } from '@0xproject/dev-utils'; +import { devConstants, env, EnvVars, web3Factory } from '@0xproject/dev-utils'; +import { prependSubprovider } from '@0xproject/subproviders'; import { Provider } from '@0xproject/types'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; +import { coverage } from './coverage'; + export const txDefaults = { from: devConstants.TESTRPC_FIRST_ADDRESS, gas: devConstants.GAS_ESTIMATE, }; const providerConfigs = { shouldUseInProcessGanache: true }; -export const web3 = web3Factory.create(providerConfigs); -export const provider = web3.currentProvider; +export const provider = web3Factory.getRpcProvider(providerConfigs); +const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage); +if (isCoverageEnabled) { + prependSubprovider(provider, coverage.getCoverageSubproviderSingleton()); +} export const web3Wrapper = new Web3Wrapper(provider); diff --git a/packages/contracts/test/global_hooks.ts b/packages/contracts/test/global_hooks.ts index 089521d94..509dc6837 100644 --- a/packages/contracts/test/global_hooks.ts +++ b/packages/contracts/test/global_hooks.ts @@ -1,4 +1,6 @@ -import { coverage, env, EnvVars } from '@0xproject/dev-utils'; +import { env, EnvVars } from '@0xproject/dev-utils'; + +import { coverage } from './utils/coverage'; after('generate coverage report', async () => { if (env.parseBoolean(EnvVars.SolidityCoverage)) { diff --git a/packages/contracts/test/utils/coverage.ts b/packages/contracts/test/utils/coverage.ts new file mode 100644 index 000000000..e3c5be428 --- /dev/null +++ b/packages/contracts/test/utils/coverage.ts @@ -0,0 +1,21 @@ +import { devConstants } from '@0xproject/dev-utils'; +import { CoverageSubprovider, ZeroExArtifactAdapter } from '@0xproject/sol-cov'; +import * as fs from 'fs'; +import * as _ from 'lodash'; + +let coverageSubprovider: CoverageSubprovider; + +export const coverage = { + getCoverageSubproviderSingleton(): CoverageSubprovider { + if (_.isUndefined(coverageSubprovider)) { + coverageSubprovider = coverage._getCoverageSubprovider(); + } + return coverageSubprovider; + }, + _getCoverageSubprovider(): CoverageSubprovider { + const defaultFromAddress = devConstants.TESTRPC_FIRST_ADDRESS; + const config = JSON.parse(fs.readFileSync('compiler.json').toString()); + const zeroExArtifactsAdapter = new ZeroExArtifactAdapter(config.artifactsDir, config.contractsDir); + return new CoverageSubprovider(zeroExArtifactsAdapter, defaultFromAddress); + }, +}; diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 49964c82a..9dd3750c5 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -44,7 +44,6 @@ "typescript": "2.7.1" }, "dependencies": { - "@0xproject/sol-cov": "^0.0.10", "@0xproject/subproviders": "^0.10.1", "@0xproject/types": "^0.6.3", "@0xproject/typescript-typings": "^0.3.1", diff --git a/packages/dev-utils/src/coverage.ts b/packages/dev-utils/src/coverage.ts deleted file mode 100644 index caf04672f..000000000 --- a/packages/dev-utils/src/coverage.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { CoverageSubprovider, ZeroExArtifactAdapter } from '@0xproject/sol-cov'; -import * as _ from 'lodash'; - -import { constants } from './constants'; - -let coverageSubprovider: CoverageSubprovider; - -export const coverage = { - getCoverageSubproviderSingleton(): CoverageSubprovider { - if (_.isUndefined(coverageSubprovider)) { - coverageSubprovider = coverage._getCoverageSubprovider(); - } - return coverageSubprovider; - }, - _getCoverageSubprovider(): CoverageSubprovider { - const artifactsPath = '../migrations/artifacts/1.0.0'; - const contractsPath = 'src/contracts'; - const defaultFromAddress = constants.TESTRPC_FIRST_ADDRESS; - const zeroExArtifactsAdapter = new ZeroExArtifactAdapter(artifactsPath, contractsPath); - return new CoverageSubprovider(zeroExArtifactsAdapter, defaultFromAddress); - }, -}; diff --git a/packages/dev-utils/src/index.ts b/packages/dev-utils/src/index.ts index 9124f3e28..d4c19f1bf 100644 --- a/packages/dev-utils/src/index.ts +++ b/packages/dev-utils/src/index.ts @@ -1,6 +1,5 @@ export { BlockchainLifecycle } from './blockchain_lifecycle'; export { web3Factory } from './web3_factory'; export { constants as devConstants } from './constants'; -export { coverage } from './coverage'; export { env, EnvVars } from './env'; export { callbackErrorReporter } from './callback_error_reporter'; diff --git a/packages/dev-utils/src/web3_factory.ts b/packages/dev-utils/src/web3_factory.ts index 4cd343c44..5b32d3930 100644 --- a/packages/dev-utils/src/web3_factory.ts +++ b/packages/dev-utils/src/web3_factory.ts @@ -13,16 +13,8 @@ import * as _ from 'lodash'; import * as process from 'process'; import { constants } from './constants'; -import { coverage } from './coverage'; import { env, EnvVars } from './env'; -// HACK: web3 leaks XMLHttpRequest into the global scope and causes requests to hang -// because they are using the wrong XHR package. -// importing web3 after subproviders fixes this issue -// Filed issue: https://github.com/ethereum/web3.js/issues/844 -// tslint:disable-next-line:ordered-imports -import * as Web3 from 'web3'; - export interface Web3Config { hasAddresses?: boolean; // default: true shouldUseInProcessGanache?: boolean; // default: false @@ -30,18 +22,8 @@ export interface Web3Config { } export const web3Factory = { - create(config: Web3Config = {}): Web3 { - const provider = this.getRpcProvider(config); - const web3 = new Web3(); - web3.setProvider(provider); - return web3; - }, - getRpcProvider(config: Web3Config = {}): Provider { + getRpcProvider(config: Web3Config = {}): ProviderEngine { const provider = new ProviderEngine(); - const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage); - if (isCoverageEnabled) { - provider.addProvider(coverage.getCoverageSubproviderSingleton()); - } const hasAddresses = _.isUndefined(config.hasAddresses) || config.hasAddresses; if (!hasAddresses) { provider.addProvider(new EmptyWalletSubprovider()); diff --git a/packages/metacoin/test/utils/web3_wrapper.ts b/packages/metacoin/test/utils/web3_wrapper.ts index b4bb61f09..9f6b155fc 100644 --- a/packages/metacoin/test/utils/web3_wrapper.ts +++ b/packages/metacoin/test/utils/web3_wrapper.ts @@ -1,5 +1,5 @@ import { env, EnvVars } from '@0xproject/dev-utils'; -import { GanacheSubprovider } from '@0xproject/subproviders'; +import { GanacheSubprovider, prependSubprovider } from '@0xproject/subproviders'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; import * as fs from 'fs'; import * as _ from 'lodash'; @@ -9,10 +9,6 @@ import { config } from './config'; import { coverage } from './coverage'; export const provider = new ProviderEngine(); -const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage); -if (isCoverageEnabled) { - provider.addProvider(coverage.getCoverageSubproviderSingleton()); -} provider.addProvider( new GanacheSubprovider({ logger: { @@ -27,4 +23,9 @@ provider.addProvider( ); provider.start(); +const isCoverageEnabled = env.parseBoolean(EnvVars.SolidityCoverage); +if (isCoverageEnabled) { + prependSubprovider(provider, coverage.getCoverageSubproviderSingleton()); +} + export const web3Wrapper = new Web3Wrapper(provider); diff --git a/packages/migrations/package.json b/packages/migrations/package.json index d9e68caaf..61dfc5de6 100644 --- a/packages/migrations/package.json +++ b/packages/migrations/package.json @@ -9,7 +9,7 @@ "types": "lib/index.d.ts", "scripts": { "watch": "tsc -w", - "prebuild": "run-s clean compile copy_artifacts generate_contract_wrappers", + "prebuild": "run-s clean copy_artifacts generate_contract_wrappers", "copy_artifacts": "copyfiles 'artifacts/1.0.0/**/*' ./lib", "build": "tsc", "clean": "shx rm -rf lib src/contract_wrappers", diff --git a/packages/migrations/src/migrate.ts b/packages/migrations/src/migrate.ts index b00ba698f..1230f376e 100644 --- a/packages/migrations/src/migrate.ts +++ b/packages/migrations/src/migrate.ts @@ -11,8 +11,7 @@ import { runMigrationsAsync } from './migration'; from: devConstants.TESTRPC_FIRST_ADDRESS, }; const providerConfigs = { shouldUseInProcessGanache: false }; - const web3 = web3Factory.create(providerConfigs); - const provider = web3.currentProvider; + const provider: Provider = web3Factory.getRpcProvider(providerConfigs); const artifactsDir = 'artifacts/1.0.0'; await runMigrationsAsync(provider, artifactsDir, txDefaults); process.exit(0); diff --git a/packages/order-utils/test/utils/web3_wrapper.ts b/packages/order-utils/test/utils/web3_wrapper.ts index b0ccfa546..71a0dc1c2 100644 --- a/packages/order-utils/test/utils/web3_wrapper.ts +++ b/packages/order-utils/test/utils/web3_wrapper.ts @@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils'; import { Provider } from '@0xproject/types'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; -const web3 = web3Factory.create({ shouldUseInProcessGanache: true }); -const provider: Provider = web3.currentProvider; -const web3Wrapper = new Web3Wrapper(web3.currentProvider); +const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/order-watcher/test/utils/web3_wrapper.ts b/packages/order-watcher/test/utils/web3_wrapper.ts index b0ccfa546..71a0dc1c2 100644 --- a/packages/order-watcher/test/utils/web3_wrapper.ts +++ b/packages/order-watcher/test/utils/web3_wrapper.ts @@ -2,8 +2,7 @@ import { devConstants, web3Factory } from '@0xproject/dev-utils'; import { Provider } from '@0xproject/types'; import { Web3Wrapper } from '@0xproject/web3-wrapper'; -const web3 = web3Factory.create({ shouldUseInProcessGanache: true }); -const provider: Provider = web3.currentProvider; -const web3Wrapper = new Web3Wrapper(web3.currentProvider); +const provider: Provider = web3Factory.getRpcProvider({ shouldUseInProcessGanache: true }); +const web3Wrapper = new Web3Wrapper(provider); export { provider, web3Wrapper }; diff --git a/packages/sol-compiler/test/util/provider.ts b/packages/sol-compiler/test/util/provider.ts index e0fcb362a..2bd178129 100644 --- a/packages/sol-compiler/test/util/provider.ts +++ b/packages/sol-compiler/test/util/provider.ts @@ -3,7 +3,6 @@ import { Provider } from '@0xproject/types'; import * as Web3 from 'web3'; const providerConfigs = { shouldUseInProcessGanache: true }; -const web3Instance = web3Factory.create(providerConfigs); -const provider: Provider = web3Instance.currentProvider; +const provider: Provider = web3Factory.getRpcProvider(providerConfigs); export { provider }; diff --git a/packages/sol-cov/src/coverage_subprovider.ts b/packages/sol-cov/src/coverage_subprovider.ts index f421a17fd..addad5e8f 100644 --- a/packages/sol-cov/src/coverage_subprovider.ts +++ b/packages/sol-cov/src/coverage_subprovider.ts @@ -118,7 +118,7 @@ export class CoverageSubprovider extends Subprovider { private async _recordTxTraceAsync(address: string, data: string | undefined, txHash: string): Promise { let payload = { method: 'debug_traceTransaction', - params: [txHash, { disableMemory: true, disableStack: true, disableStorage: true }], // TODO For now testrpc just ignores those parameters https://github.com/trufflesuite/ganache-cli/issues/489 + params: [txHash, { disableMemory: true, disableStack: false, disableStorage: true }], }; const jsonRPCResponsePayload = await this.emitPayloadAsync(payload); const trace: TransactionTrace = jsonRPCResponsePayload.result; diff --git a/packages/sol-cov/src/trace.json b/packages/sol-cov/src/trace.json new file mode 100644 index 000000000..77ec20a72 --- /dev/null +++ b/packages/sol-cov/src/trace.json @@ -0,0 +1,3227 @@ +[ + { + "depth": 0, + "error": "", + "gas": 21216, + "gasCost": 21784, + "memory": null, + "op": "PUSH1", + "pc": 0, + "stack": [], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21213, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2, + "stack": ["0000000000000000000000000000000000000000000000000000000000000080"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21210, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 4, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21198, + "gasCost": 12, + "memory": null, + "op": "PUSH1", + "pc": 5, + "stack": [], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21195, + "gasCost": 3, + "memory": null, + "op": "CALLDATASIZE", + "pc": 7, + "stack": ["0000000000000000000000000000000000000000000000000000000000000004"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21193, + "gasCost": 2, + "memory": null, + "op": "LT", + "pc": 8, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21190, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 9, + "stack": ["0000000000000000000000000000000000000000000000000000000000000000"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21187, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 12, + "stack": [ + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000af" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21177, + "gasCost": 10, + "memory": null, + "op": "PUSH1", + "pc": 13, + "stack": [], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21174, + "gasCost": 3, + "memory": null, + "op": "CALLDATALOAD", + "pc": 15, + "stack": ["0000000000000000000000000000000000000000000000000000000000000000"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21171, + "gasCost": 3, + "memory": null, + "op": "PUSH29", + "pc": 16, + "stack": ["2e1a7d4d0000000000000000000000000000000000000000000000000de0b6b3"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21168, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 46, + "stack": [ + "2e1a7d4d0000000000000000000000000000000000000000000000000de0b6b3", + "0000000100000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21165, + "gasCost": 3, + "memory": null, + "op": "DIV", + "pc": 47, + "stack": [ + "0000000100000000000000000000000000000000000000000000000000000000", + "2e1a7d4d0000000000000000000000000000000000000000000000000de0b6b3" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21160, + "gasCost": 5, + "memory": null, + "op": "PUSH4", + "pc": 48, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21157, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 53, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "00000000000000000000000000000000000000000000000000000000ffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21154, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 54, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21151, + "gasCost": 3, + "memory": null, + "op": "PUSH4", + "pc": 55, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21148, + "gasCost": 3, + "memory": null, + "op": "EQ", + "pc": 60, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000006fdde03" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21145, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 61, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21142, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 64, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000000b9" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21132, + "gasCost": 10, + "memory": null, + "op": "DUP1", + "pc": 65, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21129, + "gasCost": 3, + "memory": null, + "op": "PUSH4", + "pc": 66, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21126, + "gasCost": 3, + "memory": null, + "op": "EQ", + "pc": 71, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "00000000000000000000000000000000000000000000000000000000095ea7b3" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21123, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 72, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21120, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 75, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000149" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21110, + "gasCost": 10, + "memory": null, + "op": "DUP1", + "pc": 76, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21107, + "gasCost": 3, + "memory": null, + "op": "PUSH4", + "pc": 77, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21104, + "gasCost": 3, + "memory": null, + "op": "EQ", + "pc": 82, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000018160ddd" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21101, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 83, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21098, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 86, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000001ae" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21088, + "gasCost": 10, + "memory": null, + "op": "DUP1", + "pc": 87, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21085, + "gasCost": 3, + "memory": null, + "op": "PUSH4", + "pc": 88, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21082, + "gasCost": 3, + "memory": null, + "op": "EQ", + "pc": 93, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000023b872dd" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21079, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 94, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21076, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 97, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "00000000000000000000000000000000000000000000000000000000000001d9" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21066, + "gasCost": 10, + "memory": null, + "op": "DUP1", + "pc": 98, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21063, + "gasCost": 3, + "memory": null, + "op": "PUSH4", + "pc": 99, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21060, + "gasCost": 3, + "memory": null, + "op": "EQ", + "pc": 104, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "000000000000000000000000000000000000000000000000000000002e1a7d4d" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21057, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 105, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21054, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 108, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000025e" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21044, + "gasCost": 10, + "memory": null, + "op": "JUMPDEST", + "pc": 606, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21043, + "gasCost": 1, + "memory": null, + "op": "CALLVALUE", + "pc": 607, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21041, + "gasCost": 2, + "memory": null, + "op": "DUP1", + "pc": 608, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21038, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 609, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21035, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 610, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21032, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 613, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "000000000000000000000000000000000000000000000000000000000000026a" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21022, + "gasCost": 10, + "memory": null, + "op": "JUMPDEST", + "pc": 618, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21021, + "gasCost": 1, + "memory": null, + "op": "POP", + "pc": 619, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21019, + "gasCost": 2, + "memory": null, + "op": "PUSH2", + "pc": 620, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21016, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 623, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21013, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 625, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21010, + "gasCost": 3, + "memory": null, + "op": "CALLDATASIZE", + "pc": 626, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21008, + "gasCost": 2, + "memory": null, + "op": "SUB", + "pc": 627, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21005, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 628, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 21002, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 629, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20999, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 630, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20996, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 631, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20993, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 632, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20990, + "gasCost": 3, + "memory": null, + "op": "CALLDATALOAD", + "pc": 633, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20987, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 634, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20984, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 635, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20981, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 637, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20978, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 638, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20975, + "gasCost": 3, + "memory": null, + "op": "SWAP3", + "pc": 639, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20972, + "gasCost": 3, + "memory": null, + "op": "SWAP2", + "pc": 640, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20969, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 641, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20966, + "gasCost": 3, + "memory": null, + "op": "POP", + "pc": 642, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20964, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 643, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000024", + "0000000000000000000000000000000000000000000000000000000000000004" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20962, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 644, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000024" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20960, + "gasCost": 2, + "memory": null, + "op": "PUSH2", + "pc": 645, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20957, + "gasCost": 3, + "memory": null, + "op": "JUMP", + "pc": 648, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000a22" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20949, + "gasCost": 8, + "memory": null, + "op": "JUMPDEST", + "pc": 2594, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20948, + "gasCost": 1, + "memory": null, + "op": "DUP1", + "pc": 2595, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20945, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2596, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20942, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2598, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20939, + "gasCost": 3, + "memory": null, + "op": "CALLER", + "pc": 2600, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20937, + "gasCost": 2, + "memory": null, + "op": "PUSH20", + "pc": 2601, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20934, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2622, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20931, + "gasCost": 3, + "memory": null, + "op": "PUSH20", + "pc": 2623, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20928, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2644, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20925, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2645, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20922, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 2646, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20919, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2647, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20916, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 2649, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20913, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 2650, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20910, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2651, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000003" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20907, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 2652, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20904, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2653, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20901, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 2655, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20898, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2656, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20895, + "gasCost": 3, + "memory": null, + "op": "SHA3", + "pc": 2658, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20853, + "gasCost": 42, + "memory": null, + "op": "SLOAD", + "pc": 2659, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20653, + "gasCost": 200, + "memory": null, + "op": "LT", + "pc": 2660, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20650, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 2661, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20647, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 2662, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20644, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 2663, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20641, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 2664, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20638, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 2667, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000a70" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20628, + "gasCost": 10, + "memory": null, + "op": "JUMPDEST", + "pc": 2672, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20627, + "gasCost": 1, + "memory": null, + "op": "DUP1", + "pc": 2673, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20624, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2674, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20621, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2676, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20618, + "gasCost": 3, + "memory": null, + "op": "CALLER", + "pc": 2678, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20616, + "gasCost": 2, + "memory": null, + "op": "PUSH20", + "pc": 2679, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20613, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2700, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20610, + "gasCost": 3, + "memory": null, + "op": "PUSH20", + "pc": 2701, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20607, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2722, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20604, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2723, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20601, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 2724, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20598, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2725, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20595, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 2727, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20592, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 2728, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20589, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2729, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000003" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20586, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 2730, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000003", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20583, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2731, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20580, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 2733, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20577, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2734, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20574, + "gasCost": 3, + "memory": null, + "op": "SHA3", + "pc": 2736, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20532, + "gasCost": 42, + "memory": null, + "op": "PUSH1", + "pc": 2737, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20529, + "gasCost": 3, + "memory": null, + "op": "DUP3", + "pc": 2739, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20526, + "gasCost": 3, + "memory": null, + "op": "DUP3", + "pc": 2740, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20523, + "gasCost": 3, + "memory": null, + "op": "SLOAD", + "pc": 2741, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20323, + "gasCost": 200, + "memory": null, + "op": "SUB", + "pc": 2742, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20320, + "gasCost": 3, + "memory": null, + "op": "SWAP3", + "pc": 2743, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20317, + "gasCost": 3, + "memory": null, + "op": "POP", + "pc": 2744, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20315, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 2745, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20313, + "gasCost": 2, + "memory": null, + "op": "DUP2", + "pc": 2746, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20310, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 2747, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 20307, + "gasCost": 3, + "memory": null, + "op": "SSTORE", + "pc": 2748, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000", + "e8af3d9c3f2014e95dfc13b23432f282fb88d28d9985b050581f714c3cecb355" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15307, + "gasCost": 5000, + "memory": null, + "op": "POP", + "pc": 2749, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15305, + "gasCost": 2, + "memory": null, + "op": "CALLER", + "pc": 2750, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15303, + "gasCost": 2, + "memory": null, + "op": "PUSH20", + "pc": 2751, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15300, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2772, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15297, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 2773, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15294, + "gasCost": 3, + "memory": null, + "op": "DUP3", + "pc": 2776, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "00000000000000000000000000000000000000000000000000000000000008fc" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15291, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 2777, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15288, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2778, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "00000000000000000000000000000000000000000000000000000000000008fc" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15285, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 2779, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15282, + "gasCost": 3, + "memory": null, + "op": "MUL", + "pc": 2780, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15277, + "gasCost": 5, + "memory": null, + "op": "SWAP1", + "pc": 2781, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15274, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2782, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15271, + "gasCost": 3, + "memory": null, + "op": "MLOAD", + "pc": 2784, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15268, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2785, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15265, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2787, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15262, + "gasCost": 3, + "memory": null, + "op": "MLOAD", + "pc": 2789, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15259, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 2790, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15256, + "gasCost": 3, + "memory": null, + "op": "DUP4", + "pc": 2791, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15253, + "gasCost": 3, + "memory": null, + "op": "SUB", + "pc": 2792, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15250, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2793, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15247, + "gasCost": 3, + "memory": null, + "op": "DUP6", + "pc": 2794, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15244, + "gasCost": 3, + "memory": null, + "op": "DUP9", + "pc": 2795, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15241, + "gasCost": 3, + "memory": null, + "op": "DUP9", + "pc": 2796, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 15238, + "gasCost": 3, + "memory": null, + "op": "CALL", + "pc": 2797, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7838, + "gasCost": 7400, + "memory": null, + "op": "SWAP4", + "pc": 2798, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7835, + "gasCost": 3, + "memory": null, + "op": "POP", + "pc": 2799, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7833, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 2800, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7831, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 2801, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000008fc", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7829, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 2802, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001", + "00000000000000000000000000000000000000000000000000000000000008fc" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7827, + "gasCost": 2, + "memory": null, + "op": "ISZERO", + "pc": 2803, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7824, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 2804, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7821, + "gasCost": 3, + "memory": null, + "op": "ISZERO", + "pc": 2805, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7818, + "gasCost": 3, + "memory": null, + "op": "PUSH2", + "pc": 2806, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7815, + "gasCost": 3, + "memory": null, + "op": "JUMPI", + "pc": 2809, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000", + "0000000000000000000000000000000000000000000000000000000000000001", + "0000000000000000000000000000000000000000000000000000000000000b03" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7805, + "gasCost": 10, + "memory": null, + "op": "JUMPDEST", + "pc": 2819, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7804, + "gasCost": 1, + "memory": null, + "op": "POP", + "pc": 2820, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7802, + "gasCost": 2, + "memory": null, + "op": "CALLER", + "pc": 2821, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7800, + "gasCost": 2, + "memory": null, + "op": "PUSH20", + "pc": 2822, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7797, + "gasCost": 3, + "memory": null, + "op": "AND", + "pc": 2843, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "000000000000000000000000ffffffffffffffffffffffffffffffffffffffff" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7794, + "gasCost": 3, + "memory": null, + "op": "PUSH32", + "pc": 2844, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7791, + "gasCost": 3, + "memory": null, + "op": "DUP3", + "pc": 2877, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7788, + "gasCost": 3, + "memory": null, + "op": "PUSH1", + "pc": 2878, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7785, + "gasCost": 3, + "memory": null, + "op": "MLOAD", + "pc": 2880, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7782, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 2881, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7779, + "gasCost": 3, + "memory": null, + "op": "DUP3", + "pc": 2882, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7776, + "gasCost": 3, + "memory": null, + "op": "DUP2", + "pc": 2883, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7773, + "gasCost": 3, + "memory": null, + "op": "MSTORE", + "pc": 2884, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7764, + "gasCost": 9, + "memory": null, + "op": "PUSH1", + "pc": 2885, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7761, + "gasCost": 3, + "memory": null, + "op": "ADD", + "pc": 2887, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7758, + "gasCost": 3, + "memory": null, + "op": "SWAP2", + "pc": 2888, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7755, + "gasCost": 3, + "memory": null, + "op": "POP", + "pc": 2889, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7753, + "gasCost": 2, + "memory": null, + "op": "POP", + "pc": 2890, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7751, + "gasCost": 2, + "memory": null, + "op": "PUSH1", + "pc": 2891, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7748, + "gasCost": 3, + "memory": null, + "op": "MLOAD", + "pc": 2893, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000040" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7745, + "gasCost": 3, + "memory": null, + "op": "DUP1", + "pc": 2894, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7742, + "gasCost": 3, + "memory": null, + "op": "SWAP2", + "pc": 2895, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "00000000000000000000000000000000000000000000000000000000000000a0", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7739, + "gasCost": 3, + "memory": null, + "op": "SUB", + "pc": 2896, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000080", + "00000000000000000000000000000000000000000000000000000000000000a0" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7736, + "gasCost": 3, + "memory": null, + "op": "SWAP1", + "pc": 2897, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000000000000000080", + "0000000000000000000000000000000000000000000000000000000000000020" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 7733, + "gasCost": 3, + "memory": null, + "op": "LOG2", + "pc": 2898, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000", + "0000000000000000000000005409ed021d9299bf6814279a6a1411a7e866a631", + "7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65", + "0000000000000000000000000000000000000000000000000000000000000020", + "0000000000000000000000000000000000000000000000000000000000000080" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 6352, + "gasCost": 1381, + "memory": null, + "op": "POP", + "pc": 2899, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289", + "0000000000000000000000000000000000000000000000000de0b6b3a7640000" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 6350, + "gasCost": 2, + "memory": null, + "op": "JUMP", + "pc": 2900, + "stack": [ + "000000000000000000000000000000000000000000000000000000002e1a7d4d", + "0000000000000000000000000000000000000000000000000000000000000289" + ], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 6342, + "gasCost": 8, + "memory": null, + "op": "JUMPDEST", + "pc": 649, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + }, + { + "depth": 0, + "error": "", + "gas": 6341, + "gasCost": 1, + "memory": null, + "op": "STOP", + "pc": 650, + "stack": ["000000000000000000000000000000000000000000000000000000002e1a7d4d"], + "storage": null + } +] diff --git a/packages/sol-cov/src/trace.ts b/packages/sol-cov/src/trace.ts index febb1034e..30508898b 100644 --- a/packages/sol-cov/src/trace.ts +++ b/packages/sol-cov/src/trace.ts @@ -7,7 +7,7 @@ import * as _ from 'lodash'; export interface TraceByContractAddress { [contractAddress: string]: StructLog[]; } -function padZeros(address: string) { +function padZeros(address: string): string { return addHexPrefix(_.padStart(stripHexPrefix(address), 40, '0')); } diff --git a/packages/sol-cov/test/trace_test.ts b/packages/sol-cov/test/trace_test.ts index 58b9203b0..2d6697ce5 100644 --- a/packages/sol-cov/test/trace_test.ts +++ b/packages/sol-cov/test/trace_test.ts @@ -32,7 +32,7 @@ describe('Trace', () => { const trace = [ { op: OpCode.DelegateCall, - stack: ['0x', '0x', delegateCallAddress], + stack: ['0x', '0x', '0x', '0x', delegateCallAddress], depth: 0, }, { diff --git a/packages/subproviders/src/index.ts b/packages/subproviders/src/index.ts index ff28b8a8d..6cc650a4d 100644 --- a/packages/subproviders/src/index.ts +++ b/packages/subproviders/src/index.ts @@ -4,6 +4,7 @@ export { ECSignature } from '@0xproject/types'; import { LedgerEthereumClient } from './types'; +export { prependSubprovider } from './utils/subprovider_utils'; export { EmptyWalletSubprovider } from './subproviders/empty_wallet_subprovider'; export { FakeGasEstimateSubprovider } from './subproviders/fake_gas_estimate_subprovider'; export { InjectedWeb3Subprovider } from './subproviders/injected_web3'; diff --git a/packages/subproviders/src/utils/subprovider_utils.ts b/packages/subproviders/src/utils/subprovider_utils.ts new file mode 100644 index 000000000..380f98606 --- /dev/null +++ b/packages/subproviders/src/utils/subprovider_utils.ts @@ -0,0 +1,13 @@ +import ProviderEngine = require('web3-provider-engine'); + +import { Subprovider } from '../subproviders/subprovider'; + +/** + * Prepends a subprovider to a provider + * @param provider Given provider + * @param subprovider Subprovider to prepend + */ +export function prependSubprovider(provider: ProviderEngine, subprovider: Subprovider): void { + subprovider.setEngine(provider); + (provider as any)._providers = [subprovider, ...(provider as any)._providers]; +} diff --git a/packages/testnet-faucets/bin/server.js b/packages/testnet-faucets/bin/server.js deleted file mode 100644 index bee332843..000000000 --- a/packages/testnet-faucets/bin/server.js +++ /dev/null @@ -1,780 +0,0 @@ -require("source-map-support").install(); -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 6); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports) { - -module.exports = require("@0xproject/utils"); - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.configs = { - DISPENSER_ADDRESS: process.env.DISPENSER_ADDRESS.toLowerCase(), - DISPENSER_PRIVATE_KEY: process.env.DISPENSER_PRIVATE_KEY, - ENVIRONMENT: process.env.FAUCET_ENVIRONMENT, - INFURA_API_KEY: process.env.INFURA_API_KEY, - ROLLBAR_ACCESS_KEY: process.env.FAUCET_ROLLBAR_ACCESS_KEY, -}; - - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - -module.exports = require("lodash"); - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [0, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var utils_1 = __webpack_require__(0); -var rollbar = __webpack_require__(10); -var configs_1 = __webpack_require__(1); -exports.errorReporter = { - setup: function () { - var _this = this; - rollbar.init(configs_1.configs.ROLLBAR_ACCESS_KEY, { - environment: configs_1.configs.ENVIRONMENT, - }); - rollbar.handleUncaughtExceptions(configs_1.configs.ROLLBAR_ACCESS_KEY); - process.on('unhandledRejection', function (err) { return __awaiter(_this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - utils_1.logUtils.log("Uncaught exception " + err + ". Stack: " + err.stack); - return [4 /*yield*/, this.reportAsync(err)]; - case 1: - _a.sent(); - process.exit(1); - return [2 /*return*/]; - } - }); - }); }); - }, - reportAsync: function (err, req) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - if (configs_1.configs.ENVIRONMENT === 'development') { - return [2 /*return*/]; // Do not log development environment errors - } - return [2 /*return*/, new Promise(function (resolve, reject) { - rollbar.handleError(err, req, function (rollbarErr) { - if (rollbarErr) { - utils_1.logUtils.log("Error reporting to rollbar, ignoring: " + rollbarErr); - reject(rollbarErr); - } - else { - resolve(); - } - }); - })]; - }); - }); - }, - errorHandler: function () { - return rollbar.errorHandler(configs_1.configs.ROLLBAR_ACCESS_KEY); - }, -}; - - -/***/ }), -/* 4 */ -/***/ (function(module, exports) { - -module.exports = require("0x.js"); - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var configs_1 = __webpack_require__(1); -var productionRpcUrls = { - '3': "https://ropsten.infura.io/" + configs_1.configs.INFURA_API_KEY, - '4': "https://rinkeby.infura.io/" + configs_1.configs.INFURA_API_KEY, - '42': "https://kovan.infura.io/" + configs_1.configs.INFURA_API_KEY, -}; -var developmentRpcUrls = { - '50': 'http://127.0.0.1:8545', -}; -exports.rpcUrls = configs_1.configs.ENVIRONMENT === 'development' ? developmentRpcUrls : productionRpcUrls; - - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -module.exports = __webpack_require__(7); - - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var bodyParser = __webpack_require__(8); -var express = __webpack_require__(9); -var error_reporter_1 = __webpack_require__(3); -var handler_1 = __webpack_require__(11); -var parameter_transformer_1 = __webpack_require__(18); -// Setup the errorReporter to catch uncaught exceptions and unhandled rejections -error_reporter_1.errorReporter.setup(); -var app = express(); -app.use(bodyParser.json()); // for parsing application/json -app.use(function (req, res, next) { - res.header('Access-Control-Allow-Origin', '*'); - res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); - next(); -}); -var handler = new handler_1.Handler(); -app.get('/ping', function (req, res) { - res.status(200).send('pong'); -}); -app.get('/info', handler.getQueueInfo.bind(handler)); -app.get('/ether/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseEther.bind(handler)); -app.get('/zrx/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseZRX.bind(handler)); -app.get('/order/weth/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseWETHOrder.bind(handler)); -app.get('/order/zrx/:recipient', parameter_transformer_1.parameterTransformer.transform, handler.dispenseZRXOrder.bind(handler)); -// Log to rollbar any errors unhandled by handlers -app.use(error_reporter_1.errorReporter.errorHandler()); -var port = process.env.PORT || 3000; -app.listen(port); - - -/***/ }), -/* 8 */ -/***/ (function(module, exports) { - -module.exports = require("body-parser"); - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - -module.exports = require("express"); - -/***/ }), -/* 10 */ -/***/ (function(module, exports) { - -module.exports = require("rollbar"); - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [0, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var _0x_js_1 = __webpack_require__(4); -var utils_1 = __webpack_require__(0); -var _ = __webpack_require__(2); -var Web3 = __webpack_require__(12); -// HACK: web3 injects XMLHttpRequest into the global scope and ProviderEngine checks XMLHttpRequest -// to know whether it is running in a browser or node environment. We need it to be undefined since -// we are not running in a browser env. -// Filed issue: https://github.com/ethereum/web3.js/issues/844 -global.XMLHttpRequest = undefined; -var subproviders_1 = __webpack_require__(13); -var ProviderEngine = __webpack_require__(14); -var RpcSubprovider = __webpack_require__(15); -var configs_1 = __webpack_require__(1); -var dispatch_queue_1 = __webpack_require__(16); -var dispense_asset_tasks_1 = __webpack_require__(17); -var rpc_urls_1 = __webpack_require__(5); -var RequestedAssetType; -(function (RequestedAssetType) { - RequestedAssetType["ETH"] = "ETH"; - RequestedAssetType["WETH"] = "WETH"; - RequestedAssetType["ZRX"] = "ZRX"; -})(RequestedAssetType || (RequestedAssetType = {})); -var FIVE_DAYS_IN_MS = 4.32e8; // TODO: make this configurable -var Handler = /** @class */ (function () { - function Handler() { - var _this = this; - this._networkConfigByNetworkId = {}; - _.forIn(rpc_urls_1.rpcUrls, function (rpcUrl, networkId) { - var providerObj = Handler._createProviderEngine(rpcUrl); - var web3 = new Web3(providerObj); - var zeroExConfig = { - networkId: +networkId, - }; - var zeroEx = new _0x_js_1.ZeroEx(web3.currentProvider, zeroExConfig); - var dispatchQueue = new dispatch_queue_1.DispatchQueue(); - _this._networkConfigByNetworkId[networkId] = { - dispatchQueue: dispatchQueue, - web3: web3, - zeroEx: zeroEx, - }; - }); - } - Handler._createProviderEngine = function (rpcUrl) { - if (_.isUndefined(configs_1.configs.DISPENSER_PRIVATE_KEY)) { - throw new Error('Dispenser Private key not found'); - } - var engine = new ProviderEngine(); - engine.addProvider(new subproviders_1.NonceTrackerSubprovider()); - engine.addProvider(new subproviders_1.PrivateKeyWalletSubprovider(configs_1.configs.DISPENSER_PRIVATE_KEY)); - engine.addProvider(new RpcSubprovider({ - rpcUrl: rpcUrl, - })); - engine.start(); - return engine; - }; - Handler.prototype.getQueueInfo = function (req, res) { - var _this = this; - res.setHeader('Content-Type', 'application/json'); - var queueInfo = _.mapValues(rpc_urls_1.rpcUrls, function (rpcUrl, networkId) { - var dispatchQueue = _this._networkConfigByNetworkId[networkId].dispatchQueue; - return { - full: dispatchQueue.isFull(), - size: dispatchQueue.size(), - }; - }); - var payload = JSON.stringify(queueInfo); - res.status(200).send(payload); - }; - Handler.prototype.dispenseEther = function (req, res) { - this._dispenseAsset(req, res, RequestedAssetType.ETH); - }; - Handler.prototype.dispenseZRX = function (req, res) { - this._dispenseAsset(req, res, RequestedAssetType.ZRX); - }; - Handler.prototype.dispenseWETHOrder = function (req, res) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this._dispenseOrder(req, res, RequestedAssetType.WETH)]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - Handler.prototype.dispenseZRXOrder = function (req, res, next) { - return __awaiter(this, void 0, void 0, function () { - return __generator(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this._dispenseOrder(req, res, RequestedAssetType.ZRX)]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }); - }; - Handler.prototype._dispenseAsset = function (req, res, requestedAssetType) { - var networkId = req.params.networkId; - var recipient = req.params.recipient; - var networkConfig = this._networkConfigByNetworkId[networkId]; - var dispenserTask; - switch (requestedAssetType) { - case RequestedAssetType.ETH: - dispenserTask = dispense_asset_tasks_1.dispenseAssetTasks.dispenseEtherTask(recipient, networkConfig.web3); - break; - case RequestedAssetType.WETH: - case RequestedAssetType.ZRX: - dispenserTask = dispense_asset_tasks_1.dispenseAssetTasks.dispenseTokenTask(recipient, requestedAssetType, networkConfig.zeroEx); - break; - default: - throw new Error("Unsupported asset type: " + requestedAssetType); - } - var didAddToQueue = networkConfig.dispatchQueue.add(dispenserTask); - if (!didAddToQueue) { - res.status(503).send('QUEUE_IS_FULL'); - return; - } - utils_1.logUtils.log("Added " + recipient + " to queue: " + requestedAssetType + " networkId: " + networkId); - res.status(200).end(); - }; - Handler.prototype._dispenseOrder = function (req, res, requestedAssetType) { - return __awaiter(this, void 0, void 0, function () { - var networkConfig, zeroEx, makerToken, takerTokenSymbol, takerToken, makerTokenAmount, takerTokenAmount, order, orderHash, signature, signedOrder, signedOrderHash, payload; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - networkConfig = _.get(this._networkConfigByNetworkId, req.params.networkId); - if (_.isUndefined(networkConfig)) { - res.status(400).send('UNSUPPORTED_NETWORK_ID'); - return [2 /*return*/]; - } - zeroEx = networkConfig.zeroEx; - res.setHeader('Content-Type', 'application/json'); - return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(requestedAssetType)]; - case 1: - makerToken = _a.sent(); - if (_.isUndefined(makerToken)) { - throw new Error("Unsupported asset type: " + requestedAssetType); - } - takerTokenSymbol = requestedAssetType === RequestedAssetType.WETH ? RequestedAssetType.ZRX : RequestedAssetType.WETH; - return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(takerTokenSymbol)]; - case 2: - takerToken = _a.sent(); - if (_.isUndefined(takerToken)) { - throw new Error("Unsupported asset type: " + requestedAssetType); - } - makerTokenAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(0.1), makerToken.decimals); - takerTokenAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(0.1), takerToken.decimals); - order = { - maker: configs_1.configs.DISPENSER_ADDRESS, - taker: req.params.recipient, - makerFee: new utils_1.BigNumber(0), - takerFee: new utils_1.BigNumber(0), - makerTokenAmount: makerTokenAmount, - takerTokenAmount: takerTokenAmount, - makerTokenAddress: makerToken.address, - takerTokenAddress: takerToken.address, - salt: _0x_js_1.ZeroEx.generatePseudoRandomSalt(), - exchangeContractAddress: zeroEx.exchange.getContractAddress(), - feeRecipient: _0x_js_1.ZeroEx.NULL_ADDRESS, - expirationUnixTimestampSec: new utils_1.BigNumber(Date.now() + FIVE_DAYS_IN_MS), - }; - orderHash = _0x_js_1.ZeroEx.getOrderHashHex(order); - return [4 /*yield*/, zeroEx.signOrderHashAsync(orderHash, configs_1.configs.DISPENSER_ADDRESS, false)]; - case 3: - signature = _a.sent(); - signedOrder = __assign({}, order, { ecSignature: signature }); - signedOrderHash = _0x_js_1.ZeroEx.getOrderHashHex(signedOrder); - payload = JSON.stringify(signedOrder); - utils_1.logUtils.log("Dispensed signed order: " + payload); - res.status(200).send(payload); - return [2 /*return*/]; - } - }); - }); - }; - return Handler; -}()); -exports.Handler = Handler; - - -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - -module.exports = require("web3"); - -/***/ }), -/* 13 */ -/***/ (function(module, exports) { - -module.exports = require("@0xproject/subproviders"); - -/***/ }), -/* 14 */ -/***/ (function(module, exports) { - -module.exports = require("web3-provider-engine"); - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - -module.exports = require("web3-provider-engine/subproviders/rpc"); - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [0, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var utils_1 = __webpack_require__(0); -var _ = __webpack_require__(2); -var error_reporter_1 = __webpack_require__(3); -var MAX_QUEUE_SIZE = 500; -var DEFAULT_QUEUE_INTERVAL_MS = 1000; -var DispatchQueue = /** @class */ (function () { - function DispatchQueue() { - this._queueIntervalMs = DEFAULT_QUEUE_INTERVAL_MS; - this._queue = []; - this._start(); - } - DispatchQueue.prototype.add = function (taskAsync) { - if (this.isFull()) { - return false; - } - this._queue.push(taskAsync); - return true; - }; - DispatchQueue.prototype.size = function () { - return this._queue.length; - }; - DispatchQueue.prototype.isFull = function () { - return this.size() >= MAX_QUEUE_SIZE; - }; - DispatchQueue.prototype.stop = function () { - if (!_.isUndefined(this._queueIntervalIdIfExists)) { - utils_1.intervalUtils.clearAsyncExcludingInterval(this._queueIntervalIdIfExists); - } - }; - DispatchQueue.prototype._start = function () { - var _this = this; - this._queueIntervalIdIfExists = utils_1.intervalUtils.setAsyncExcludingInterval(function () { return __awaiter(_this, void 0, void 0, function () { - var taskAsync; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - taskAsync = this._queue.shift(); - if (_.isUndefined(taskAsync)) { - return [2 /*return*/, Promise.resolve()]; - } - return [4 /*yield*/, taskAsync()]; - case 1: - _a.sent(); - return [2 /*return*/]; - } - }); - }); }, this._queueIntervalMs, function (err) { - utils_1.logUtils.log("Unexpected err: " + err + " - " + JSON.stringify(err)); - // tslint:disable-next-line:no-floating-promises - error_reporter_1.errorReporter.reportAsync(err); - }); - }; - return DispatchQueue; -}()); -exports.DispatchQueue = DispatchQueue; - - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [0, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var _0x_js_1 = __webpack_require__(4); -var utils_1 = __webpack_require__(0); -var _ = __webpack_require__(2); -var configs_1 = __webpack_require__(1); -var DISPENSE_AMOUNT_ETHER = 0.1; -var DISPENSE_AMOUNT_TOKEN = 0.1; -var DISPENSE_MAX_AMOUNT_TOKEN = 2; -var DISPENSE_MAX_AMOUNT_ETHER = 2; -exports.dispenseAssetTasks = { - dispenseEtherTask: function (recipientAddress, web3) { - var _this = this; - return function () { return __awaiter(_this, void 0, void 0, function () { - var userBalance, maxAmountInWei, sendTransactionAsync, txHash; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - utils_1.logUtils.log("Processing ETH " + recipientAddress); - return [4 /*yield*/, utils_1.promisify(web3.eth.getBalance)(recipientAddress)]; - case 1: - userBalance = _a.sent(); - maxAmountInWei = new utils_1.BigNumber(web3.toWei(DISPENSE_MAX_AMOUNT_ETHER, 'ether')); - if (userBalance.greaterThanOrEqualTo(maxAmountInWei)) { - utils_1.logUtils.log("User exceeded ETH balance maximum (" + maxAmountInWei + ") " + recipientAddress + " " + userBalance + " "); - return [2 /*return*/]; - } - sendTransactionAsync = utils_1.promisify(web3.eth.sendTransaction); - return [4 /*yield*/, sendTransactionAsync({ - from: configs_1.configs.DISPENSER_ADDRESS, - to: recipientAddress, - value: web3.toWei(DISPENSE_AMOUNT_ETHER, 'ether'), - })]; - case 2: - txHash = _a.sent(); - utils_1.logUtils.log("Sent " + DISPENSE_AMOUNT_ETHER + " ETH to " + recipientAddress + " tx: " + txHash); - return [2 /*return*/]; - } - }); - }); }; - }, - dispenseTokenTask: function (recipientAddress, tokenSymbol, zeroEx) { - var _this = this; - return function () { return __awaiter(_this, void 0, void 0, function () { - var amountToDispense, token, baseUnitAmount, userBalanceBaseUnits, maxAmountBaseUnits, txHash; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - utils_1.logUtils.log("Processing " + tokenSymbol + " " + recipientAddress); - amountToDispense = new utils_1.BigNumber(DISPENSE_AMOUNT_TOKEN); - return [4 /*yield*/, zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(tokenSymbol)]; - case 1: - token = _a.sent(); - if (_.isUndefined(token)) { - throw new Error("Unsupported asset type: " + tokenSymbol); - } - baseUnitAmount = _0x_js_1.ZeroEx.toBaseUnitAmount(amountToDispense, token.decimals); - return [4 /*yield*/, zeroEx.token.getBalanceAsync(token.address, recipientAddress)]; - case 2: - userBalanceBaseUnits = _a.sent(); - maxAmountBaseUnits = _0x_js_1.ZeroEx.toBaseUnitAmount(new utils_1.BigNumber(DISPENSE_MAX_AMOUNT_TOKEN), token.decimals); - if (userBalanceBaseUnits.greaterThanOrEqualTo(maxAmountBaseUnits)) { - utils_1.logUtils.log("User exceeded token balance maximum (" + maxAmountBaseUnits + ") " + recipientAddress + " " + userBalanceBaseUnits + " "); - return [2 /*return*/]; - } - return [4 /*yield*/, zeroEx.token.transferAsync(token.address, configs_1.configs.DISPENSER_ADDRESS, recipientAddress, baseUnitAmount)]; - case 3: - txHash = _a.sent(); - utils_1.logUtils.log("Sent " + amountToDispense + " ZRX to " + recipientAddress + " tx: " + txHash); - return [2 /*return*/]; - } - }); - }); }; - }, -}; - - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var utils_1 = __webpack_require__(0); -var _ = __webpack_require__(2); -var rpc_urls_1 = __webpack_require__(5); -var DEFAULT_NETWORK_ID = 42; // kovan -exports.parameterTransformer = { - transform: function (req, res, next) { - var recipientAddress = req.params.recipient; - if (_.isUndefined(recipientAddress) || !utils_1.addressUtils.isAddress(recipientAddress)) { - res.status(400).send('INVALID_RECIPIENT_ADDRESS'); - return; - } - var lowerCaseRecipientAddress = recipientAddress.toLowerCase(); - req.params.recipient = lowerCaseRecipientAddress; - var networkId = _.get(req.query, 'networkId', DEFAULT_NETWORK_ID); - var rpcUrlIfExists = _.get(rpc_urls_1.rpcUrls, networkId); - if (_.isUndefined(rpcUrlIfExists)) { - res.status(400).send('UNSUPPORTED_NETWORK_ID'); - return; - } - req.params.networkId = networkId; - next(); - }, -}; - - -/***/ }) -/******/ ]); -//# sourceMappingURL=server.js.map \ No newline at end of file diff --git a/packages/testnet-faucets/bin/server.js.map b/packages/testnet-faucets/bin/server.js.map deleted file mode 100644 index c8c227727..000000000 --- a/packages/testnet-faucets/bin/server.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap b91d2cee364b5e101d43","webpack:///external \"@0xproject/utils\"","webpack:///./src/ts/configs.ts","webpack:///external \"lodash\"","webpack:///./src/ts/error_reporter.ts","webpack:///external \"0x.js\"","webpack:///./src/ts/rpc_urls.ts","webpack:///./src/ts/server.ts","webpack:///external \"body-parser\"","webpack:///external \"express\"","webpack:///external \"rollbar\"","webpack:///./src/ts/handler.ts","webpack:///external \"web3\"","webpack:///external \"@0xproject/subproviders\"","webpack:///external \"web3-provider-engine\"","webpack:///external \"web3-provider-engine/subproviders/rpc\"","webpack:///./src/ts/dispatch_queue.ts","webpack:///./src/ts/dispense_asset_tasks.ts","webpack:///./src/ts/parameter_transformer.ts"],"names":[],"mappings":"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","file":"server.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 6);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap b91d2cee364b5e101d43","module.exports = require(\"@0xproject/utils\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"@0xproject/utils\"\n// module id = 0\n// module chunks = 0","export const configs = {\n DISPENSER_ADDRESS: (process.env.DISPENSER_ADDRESS as string).toLowerCase(),\n DISPENSER_PRIVATE_KEY: process.env.DISPENSER_PRIVATE_KEY,\n ENVIRONMENT: process.env.FAUCET_ENVIRONMENT,\n INFURA_API_KEY: process.env.INFURA_API_KEY,\n ROLLBAR_ACCESS_KEY: process.env.FAUCET_ROLLBAR_ACCESS_KEY,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/configs.ts","module.exports = require(\"lodash\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"lodash\"\n// module id = 2\n// module chunks = 0","import { logUtils } from '@0xproject/utils';\nimport * as express from 'express';\nimport rollbar = require('rollbar');\n\nimport { configs } from './configs';\n\nexport const errorReporter = {\n setup() {\n rollbar.init(configs.ROLLBAR_ACCESS_KEY, {\n environment: configs.ENVIRONMENT,\n });\n rollbar.handleUncaughtExceptions(configs.ROLLBAR_ACCESS_KEY);\n process.on('unhandledRejection', async (err: Error) => {\n logUtils.log(`Uncaught exception ${err}. Stack: ${err.stack}`);\n await this.reportAsync(err);\n process.exit(1);\n });\n },\n async reportAsync(err: Error, req?: express.Request): Promise {\n if (configs.ENVIRONMENT === 'development') {\n return; // Do not log development environment errors\n }\n return new Promise((resolve, reject) => {\n rollbar.handleError(err, req, (rollbarErr: Error) => {\n if (rollbarErr) {\n logUtils.log(`Error reporting to rollbar, ignoring: ${rollbarErr}`);\n reject(rollbarErr);\n } else {\n resolve();\n }\n });\n });\n },\n errorHandler() {\n return rollbar.errorHandler(configs.ROLLBAR_ACCESS_KEY);\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/error_reporter.ts","module.exports = require(\"0x.js\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"0x.js\"\n// module id = 4\n// module chunks = 0","import { configs } from './configs';\n\nconst productionRpcUrls = {\n '3': `https://ropsten.infura.io/${configs.INFURA_API_KEY}`,\n '4': `https://rinkeby.infura.io/${configs.INFURA_API_KEY}`,\n '42': `https://kovan.infura.io/${configs.INFURA_API_KEY}`,\n};\n\nconst developmentRpcUrls = {\n '50': 'http://127.0.0.1:8545',\n};\n\nexport const rpcUrls = configs.ENVIRONMENT === 'development' ? developmentRpcUrls : productionRpcUrls;\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/rpc_urls.ts","import * as bodyParser from 'body-parser';\nimport * as express from 'express';\n\nimport { errorReporter } from './error_reporter';\nimport { Handler } from './handler';\nimport { parameterTransformer } from './parameter_transformer';\n\n// Setup the errorReporter to catch uncaught exceptions and unhandled rejections\nerrorReporter.setup();\n\nconst app = express();\napp.use(bodyParser.json()); // for parsing application/json\napp.use((req, res, next) => {\n res.header('Access-Control-Allow-Origin', '*');\n res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');\n next();\n});\n\nconst handler = new Handler();\napp.get('/ping', (req: express.Request, res: express.Response) => {\n res.status(200).send('pong');\n});\napp.get('/info', handler.getQueueInfo.bind(handler));\napp.get('/ether/:recipient', parameterTransformer.transform, handler.dispenseEther.bind(handler));\napp.get('/zrx/:recipient', parameterTransformer.transform, handler.dispenseZRX.bind(handler));\napp.get('/order/weth/:recipient', parameterTransformer.transform, handler.dispenseWETHOrder.bind(handler));\napp.get('/order/zrx/:recipient', parameterTransformer.transform, handler.dispenseZRXOrder.bind(handler));\n\n// Log to rollbar any errors unhandled by handlers\napp.use(errorReporter.errorHandler());\nconst port = process.env.PORT || 3000;\napp.listen(port);\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/server.ts","module.exports = require(\"body-parser\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"body-parser\"\n// module id = 8\n// module chunks = 0","module.exports = require(\"express\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"express\"\n// module id = 9\n// module chunks = 0","module.exports = require(\"rollbar\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"rollbar\"\n// module id = 10\n// module chunks = 0","import { Order, SignedOrder, ZeroEx } from '0x.js';\nimport { BigNumber, logUtils } from '@0xproject/utils';\nimport * as express from 'express';\nimport * as _ from 'lodash';\nimport * as Web3 from 'web3';\n\n// HACK: web3 injects XMLHttpRequest into the global scope and ProviderEngine checks XMLHttpRequest\n// to know whether it is running in a browser or node environment. We need it to be undefined since\n// we are not running in a browser env.\n// Filed issue: https://github.com/ethereum/web3.js/issues/844\n(global as any).XMLHttpRequest = undefined;\nimport { NonceTrackerSubprovider, PrivateKeyWalletSubprovider } from '@0xproject/subproviders';\nimport ProviderEngine = require('web3-provider-engine');\nimport RpcSubprovider = require('web3-provider-engine/subproviders/rpc');\n\nimport { configs } from './configs';\nimport { DispatchQueue } from './dispatch_queue';\nimport { dispenseAssetTasks } from './dispense_asset_tasks';\nimport { rpcUrls } from './rpc_urls';\n\ninterface NetworkConfig {\n dispatchQueue: DispatchQueue;\n web3: Web3;\n zeroEx: ZeroEx;\n}\n\ninterface ItemByNetworkId {\n [networkId: string]: T;\n}\n\nenum RequestedAssetType {\n ETH = 'ETH',\n WETH = 'WETH',\n ZRX = 'ZRX',\n}\n\nconst FIVE_DAYS_IN_MS = 4.32e8; // TODO: make this configurable\n\nexport class Handler {\n private _networkConfigByNetworkId: ItemByNetworkId = {};\n private static _createProviderEngine(rpcUrl: string) {\n if (_.isUndefined(configs.DISPENSER_PRIVATE_KEY)) {\n throw new Error('Dispenser Private key not found');\n }\n const engine = new ProviderEngine();\n engine.addProvider(new NonceTrackerSubprovider());\n engine.addProvider(new PrivateKeyWalletSubprovider(configs.DISPENSER_PRIVATE_KEY));\n engine.addProvider(\n new RpcSubprovider({\n rpcUrl,\n }),\n );\n engine.start();\n return engine;\n }\n constructor() {\n _.forIn(rpcUrls, (rpcUrl: string, networkId: string) => {\n const providerObj = Handler._createProviderEngine(rpcUrl);\n const web3 = new Web3(providerObj);\n const zeroExConfig = {\n networkId: +networkId,\n };\n const zeroEx = new ZeroEx(web3.currentProvider, zeroExConfig);\n const dispatchQueue = new DispatchQueue();\n this._networkConfigByNetworkId[networkId] = {\n dispatchQueue,\n web3,\n zeroEx,\n };\n });\n }\n public getQueueInfo(req: express.Request, res: express.Response) {\n res.setHeader('Content-Type', 'application/json');\n const queueInfo = _.mapValues(rpcUrls, (rpcUrl: string, networkId: string) => {\n const dispatchQueue = this._networkConfigByNetworkId[networkId].dispatchQueue;\n return {\n full: dispatchQueue.isFull(),\n size: dispatchQueue.size(),\n };\n });\n const payload = JSON.stringify(queueInfo);\n res.status(200).send(payload);\n }\n public dispenseEther(req: express.Request, res: express.Response) {\n this._dispenseAsset(req, res, RequestedAssetType.ETH);\n }\n public dispenseZRX(req: express.Request, res: express.Response) {\n this._dispenseAsset(req, res, RequestedAssetType.ZRX);\n }\n public async dispenseWETHOrder(req: express.Request, res: express.Response) {\n await this._dispenseOrder(req, res, RequestedAssetType.WETH);\n }\n public async dispenseZRXOrder(req: express.Request, res: express.Response, next: express.NextFunction) {\n await this._dispenseOrder(req, res, RequestedAssetType.ZRX);\n }\n private _dispenseAsset(req: express.Request, res: express.Response, requestedAssetType: RequestedAssetType) {\n const networkId = req.params.networkId;\n const recipient = req.params.recipient;\n const networkConfig = this._networkConfigByNetworkId[networkId];\n let dispenserTask;\n switch (requestedAssetType) {\n case RequestedAssetType.ETH:\n dispenserTask = dispenseAssetTasks.dispenseEtherTask(recipient, networkConfig.web3);\n break;\n case RequestedAssetType.WETH:\n case RequestedAssetType.ZRX:\n dispenserTask = dispenseAssetTasks.dispenseTokenTask(\n recipient,\n requestedAssetType,\n networkConfig.zeroEx,\n );\n break;\n default:\n throw new Error(`Unsupported asset type: ${requestedAssetType}`);\n }\n const didAddToQueue = networkConfig.dispatchQueue.add(dispenserTask);\n if (!didAddToQueue) {\n res.status(503).send('QUEUE_IS_FULL');\n return;\n }\n logUtils.log(`Added ${recipient} to queue: ${requestedAssetType} networkId: ${networkId}`);\n res.status(200).end();\n }\n private async _dispenseOrder(req: express.Request, res: express.Response, requestedAssetType: RequestedAssetType) {\n const networkConfig = _.get(this._networkConfigByNetworkId, req.params.networkId);\n if (_.isUndefined(networkConfig)) {\n res.status(400).send('UNSUPPORTED_NETWORK_ID');\n return;\n }\n const zeroEx = networkConfig.zeroEx;\n res.setHeader('Content-Type', 'application/json');\n const makerToken = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(requestedAssetType);\n if (_.isUndefined(makerToken)) {\n throw new Error(`Unsupported asset type: ${requestedAssetType}`);\n }\n const takerTokenSymbol =\n requestedAssetType === RequestedAssetType.WETH ? RequestedAssetType.ZRX : RequestedAssetType.WETH;\n const takerToken = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(takerTokenSymbol);\n if (_.isUndefined(takerToken)) {\n throw new Error(`Unsupported asset type: ${requestedAssetType}`);\n }\n const makerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(0.1), makerToken.decimals);\n const takerTokenAmount = ZeroEx.toBaseUnitAmount(new BigNumber(0.1), takerToken.decimals);\n const order: Order = {\n maker: configs.DISPENSER_ADDRESS,\n taker: req.params.recipient,\n makerFee: new BigNumber(0),\n takerFee: new BigNumber(0),\n makerTokenAmount,\n takerTokenAmount,\n makerTokenAddress: makerToken.address,\n takerTokenAddress: takerToken.address,\n salt: ZeroEx.generatePseudoRandomSalt(),\n exchangeContractAddress: zeroEx.exchange.getContractAddress(),\n feeRecipient: ZeroEx.NULL_ADDRESS,\n expirationUnixTimestampSec: new BigNumber(Date.now() + FIVE_DAYS_IN_MS),\n };\n const orderHash = ZeroEx.getOrderHashHex(order);\n const signature = await zeroEx.signOrderHashAsync(orderHash, configs.DISPENSER_ADDRESS, false);\n const signedOrder = {\n ...order,\n ecSignature: signature,\n };\n const signedOrderHash = ZeroEx.getOrderHashHex(signedOrder);\n const payload = JSON.stringify(signedOrder);\n logUtils.log(`Dispensed signed order: ${payload}`);\n res.status(200).send(payload);\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/handler.ts","module.exports = require(\"web3\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"web3\"\n// module id = 12\n// module chunks = 0","module.exports = require(\"@0xproject/subproviders\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"@0xproject/subproviders\"\n// module id = 13\n// module chunks = 0","module.exports = require(\"web3-provider-engine\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"web3-provider-engine\"\n// module id = 14\n// module chunks = 0","module.exports = require(\"web3-provider-engine/subproviders/rpc\");\n\n\n//////////////////\n// WEBPACK FOOTER\n// external \"web3-provider-engine/subproviders/rpc\"\n// module id = 15\n// module chunks = 0","import { intervalUtils, logUtils } from '@0xproject/utils';\nimport * as _ from 'lodash';\n\nimport { errorReporter } from './error_reporter';\n\nconst MAX_QUEUE_SIZE = 500;\nconst DEFAULT_QUEUE_INTERVAL_MS = 1000;\n\nexport class DispatchQueue {\n private _queueIntervalMs: number;\n private _queue: Array<() => Promise>;\n private _queueIntervalIdIfExists?: NodeJS.Timer;\n constructor() {\n this._queueIntervalMs = DEFAULT_QUEUE_INTERVAL_MS;\n this._queue = [];\n this._start();\n }\n public add(taskAsync: () => Promise): boolean {\n if (this.isFull()) {\n return false;\n }\n this._queue.push(taskAsync);\n return true;\n }\n public size(): number {\n return this._queue.length;\n }\n public isFull(): boolean {\n return this.size() >= MAX_QUEUE_SIZE;\n }\n public stop() {\n if (!_.isUndefined(this._queueIntervalIdIfExists)) {\n intervalUtils.clearAsyncExcludingInterval(this._queueIntervalIdIfExists);\n }\n }\n private _start() {\n this._queueIntervalIdIfExists = intervalUtils.setAsyncExcludingInterval(\n async () => {\n const taskAsync = this._queue.shift();\n if (_.isUndefined(taskAsync)) {\n return Promise.resolve();\n }\n await taskAsync();\n },\n this._queueIntervalMs,\n (err: Error) => {\n logUtils.log(`Unexpected err: ${err} - ${JSON.stringify(err)}`);\n // tslint:disable-next-line:no-floating-promises\n errorReporter.reportAsync(err);\n },\n );\n }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/dispatch_queue.ts","import { ZeroEx } from '0x.js';\nimport { BigNumber, logUtils, promisify } from '@0xproject/utils';\nimport * as _ from 'lodash';\nimport * as Web3 from 'web3';\n\nimport { configs } from './configs';\nimport { errorReporter } from './error_reporter';\n\nconst DISPENSE_AMOUNT_ETHER = 0.1;\nconst DISPENSE_AMOUNT_TOKEN = 0.1;\nconst DISPENSE_MAX_AMOUNT_TOKEN = 2;\nconst DISPENSE_MAX_AMOUNT_ETHER = 2;\n\nexport const dispenseAssetTasks = {\n dispenseEtherTask(recipientAddress: string, web3: Web3) {\n return async () => {\n logUtils.log(`Processing ETH ${recipientAddress}`);\n const userBalance = await promisify(web3.eth.getBalance)(recipientAddress);\n const maxAmountInWei = new BigNumber(web3.toWei(DISPENSE_MAX_AMOUNT_ETHER, 'ether'));\n if (userBalance.greaterThanOrEqualTo(maxAmountInWei)) {\n logUtils.log(\n `User exceeded ETH balance maximum (${maxAmountInWei}) ${recipientAddress} ${userBalance} `,\n );\n return;\n }\n const sendTransactionAsync = promisify(web3.eth.sendTransaction);\n const txHash = await sendTransactionAsync({\n from: configs.DISPENSER_ADDRESS,\n to: recipientAddress,\n value: web3.toWei(DISPENSE_AMOUNT_ETHER, 'ether'),\n });\n logUtils.log(`Sent ${DISPENSE_AMOUNT_ETHER} ETH to ${recipientAddress} tx: ${txHash}`);\n };\n },\n dispenseTokenTask(recipientAddress: string, tokenSymbol: string, zeroEx: ZeroEx) {\n return async () => {\n logUtils.log(`Processing ${tokenSymbol} ${recipientAddress}`);\n const amountToDispense = new BigNumber(DISPENSE_AMOUNT_TOKEN);\n const token = await zeroEx.tokenRegistry.getTokenBySymbolIfExistsAsync(tokenSymbol);\n if (_.isUndefined(token)) {\n throw new Error(`Unsupported asset type: ${tokenSymbol}`);\n }\n const baseUnitAmount = ZeroEx.toBaseUnitAmount(amountToDispense, token.decimals);\n const userBalanceBaseUnits = await zeroEx.token.getBalanceAsync(token.address, recipientAddress);\n const maxAmountBaseUnits = ZeroEx.toBaseUnitAmount(\n new BigNumber(DISPENSE_MAX_AMOUNT_TOKEN),\n token.decimals,\n );\n if (userBalanceBaseUnits.greaterThanOrEqualTo(maxAmountBaseUnits)) {\n logUtils.log(\n `User exceeded token balance maximum (${maxAmountBaseUnits}) ${recipientAddress} ${userBalanceBaseUnits} `,\n );\n return;\n }\n const txHash = await zeroEx.token.transferAsync(\n token.address,\n configs.DISPENSER_ADDRESS,\n recipientAddress,\n baseUnitAmount,\n );\n logUtils.log(`Sent ${amountToDispense} ZRX to ${recipientAddress} tx: ${txHash}`);\n };\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/dispense_asset_tasks.ts","import { addressUtils } from '@0xproject/utils';\nimport { NextFunction, Request, Response } from 'express';\nimport * as _ from 'lodash';\n\nimport { configs } from './configs';\nimport { rpcUrls } from './rpc_urls';\n\nconst DEFAULT_NETWORK_ID = 42; // kovan\n\nexport const parameterTransformer = {\n transform(req: Request, res: Response, next: NextFunction) {\n const recipientAddress = req.params.recipient;\n if (_.isUndefined(recipientAddress) || !addressUtils.isAddress(recipientAddress)) {\n res.status(400).send('INVALID_RECIPIENT_ADDRESS');\n return;\n }\n const lowerCaseRecipientAddress = recipientAddress.toLowerCase();\n req.params.recipient = lowerCaseRecipientAddress;\n const networkId = _.get(req.query, 'networkId', DEFAULT_NETWORK_ID);\n const rpcUrlIfExists = _.get(rpcUrls, networkId);\n if (_.isUndefined(rpcUrlIfExists)) {\n res.status(400).send('UNSUPPORTED_NETWORK_ID');\n return;\n }\n req.params.networkId = networkId;\n next();\n },\n};\n\n\n\n// WEBPACK FOOTER //\n// ./src/ts/parameter_transformer.ts"],"sourceRoot":""} \ No newline at end of file diff --git a/packages/typescript-typings/types/web3-provider-engine/index.d.ts b/packages/typescript-typings/types/web3-provider-engine/index.d.ts index 15a8d0005..8d5aef749 100644 --- a/packages/typescript-typings/types/web3-provider-engine/index.d.ts +++ b/packages/typescript-typings/types/web3-provider-engine/index.d.ts @@ -1,8 +1,12 @@ declare module 'web3-provider-engine' { - class Web3ProviderEngine { + import { Provider, JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types'; + class Web3ProviderEngine implements Provider { public on(event: string, handler: () => void): void; - public send(payload: any): void; - public sendAsync(payload: any, callback: (error: any, response: any) => void): void; + public send(payload: JSONRPCRequestPayload): void; + public sendAsync( + payload: JSONRPCRequestPayload, + callback: (error: null | Error, response: JSONRPCResponsePayload) => void, + ): void; public addProvider(provider: any): void; public start(): void; public stop(): void; @@ -19,13 +23,13 @@ declare module 'web3-provider-engine/subproviders/subprovider' { export = Subprovider; } declare module 'web3-provider-engine/subproviders/rpc' { - import { JSONRPCRequestPayload } from '@0xproject/types'; + import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types'; class RpcSubprovider { constructor(options: { rpcUrl: string }); public handleRequest( payload: JSONRPCRequestPayload, next: () => void, - end: (err: Error | null, data?: any) => void, + end: (err: Error | null, data?: JSONRPCResponsePayload) => void, ): void; } export = RpcSubprovider; @@ -37,13 +41,13 @@ declare module 'web3-provider-engine/util/rpc-cache-utils' { export = ProviderEngineRpcUtils; } declare module 'web3-provider-engine/subproviders/fixture' { - import { JSONRPCRequestPayload } from '@0xproject/types'; + import { JSONRPCRequestPayload, JSONRPCResponsePayload } from '@0xproject/types'; class FixtureSubprovider { constructor(staticResponses: any); public handleRequest( payload: JSONRPCRequestPayload, next: () => void, - end: (err: Error | null, data?: any) => void, + end: (err: Error | null, data?: JSONRPCResponsePayload) => void, ): void; } export = FixtureSubprovider; -- cgit v1.2.3