aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonid Logvinov <logvinov.leon@gmail.com>2018-05-15 21:14:36 +0800
committerLeonid Logvinov <logvinov.leon@gmail.com>2018-05-23 06:20:34 +0800
commit1ff34bd0f4084d2f9dfd6f07447bb63684ac51ac (patch)
treee7f1870dab995b33c381924707a17acc1feaf3c8
parentb86248f13fcb8f326098252beee6ca557e0175e7 (diff)
downloaddexon-sol-tools-1ff34bd0f4084d2f9dfd6f07447bb63684ac51ac.tar.gz
dexon-sol-tools-1ff34bd0f4084d2f9dfd6f07447bb63684ac51ac.tar.zst
dexon-sol-tools-1ff34bd0f4084d2f9dfd6f07447bb63684ac51ac.zip
Remove web3Factory.create and remove dev-tools dependency on sol-cov
-rw-r--r--packages/0x.js/test/utils/web3_wrapper.ts5
-rw-r--r--packages/contract-wrappers/test/artifacts_test.ts4
-rw-r--r--packages/contract-wrappers/test/utils/web3_wrapper.ts5
-rw-r--r--packages/contracts/package.json2
-rw-r--r--packages/contracts/src/utils/web3_wrapper.ts12
-rw-r--r--packages/contracts/test/global_hooks.ts4
-rw-r--r--packages/contracts/test/utils/coverage.ts (renamed from packages/dev-utils/src/coverage.ts)11
-rw-r--r--packages/dev-utils/package.json1
-rw-r--r--packages/dev-utils/src/index.ts1
-rw-r--r--packages/dev-utils/src/web3_factory.ts20
-rw-r--r--packages/metacoin/test/utils/web3_wrapper.ts11
-rw-r--r--packages/migrations/package.json2
-rw-r--r--packages/migrations/src/migrate.ts3
-rw-r--r--packages/order-utils/test/utils/web3_wrapper.ts5
-rw-r--r--packages/order-watcher/test/utils/web3_wrapper.ts5
-rw-r--r--packages/sol-compiler/test/util/provider.ts3
-rw-r--r--packages/sol-cov/src/coverage_subprovider.ts2
-rw-r--r--packages/sol-cov/src/trace.json3227
-rw-r--r--packages/sol-cov/src/trace.ts2
-rw-r--r--packages/sol-cov/test/trace_test.ts2
-rw-r--r--packages/subproviders/src/index.ts1
-rw-r--r--packages/subproviders/src/utils/subprovider_utils.ts13
-rw-r--r--packages/testnet-faucets/bin/server.js780
-rw-r--r--packages/testnet-faucets/bin/server.js.map1
-rw-r--r--packages/typescript-typings/types/web3-provider-engine/index.d.ts18
25 files changed, 3294 insertions, 846 deletions
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/dev-utils/src/coverage.ts b/packages/contracts/test/utils/coverage.ts
index caf04672f..e3c5be428 100644
--- a/packages/dev-utils/src/coverage.ts
+++ b/packages/contracts/test/utils/coverage.ts
@@ -1,8 +1,8 @@
+import { devConstants } from '@0xproject/dev-utils';
import { CoverageSubprovider, ZeroExArtifactAdapter } from '@0xproject/sol-cov';
+import * as fs from 'fs';
import * as _ from 'lodash';
-import { constants } from './constants';
-
let coverageSubprovider: CoverageSubprovider;
export const coverage = {
@@ -13,10 +13,9 @@ export const coverage = {
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);
+ 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/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<void> {
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<any> {\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<T> {\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<NetworkConfig> = {};\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<void>>;\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<void>): 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<BigNumber>(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;