mirror of
https://github.com/cerc-io/watcher-ts
synced 2025-01-06 19:38:05 +00:00
Call tracer with address tracing support (#65)
* Tracing client package, basic utils. * Start of address tracer. * Rename trace CLI. * Call tracer API. * Tracing timeout, more traces. * Integrate address tracer into call address tracer.
This commit is contained in:
parent
909242a827
commit
4e08f359fc
106
packages/tracing-client/README.md
Normal file
106
packages/tracing-client/README.md
Normal file
@ -0,0 +1,106 @@
|
||||
# Tracing Client
|
||||
|
||||
```bash
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xa58ec012f8b6d5baac684b9939287866deffa3806f4c8252a190f264cc07b872
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xa58ec012f8b6d5baac684b9939287866deffa3806f4c8252a190f264cc07b872 --tracer callTracer
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xa58ec012f8b6d5baac684b9939287866deffa3806f4c8252a190f264cc07b872 --tracerFile src/tracers/call_tracer.js
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xa58ec012f8b6d5baac684b9939287866deffa3806f4c8252a190f264cc07b872 --tracerFile src/tracers/address_tracer.js
|
||||
```
|
||||
|
||||
Rinkeby:
|
||||
|
||||
```bash
|
||||
npx ts-node src/cli/get-call-trace.ts --block 0x66bbe015dec07f55bc916dff724a962bca067fa0fcdd42eb211474ad609f87be --txFile test/tx/rinkeby-test.json --providerUrl http://rinkeby-testing.vdb.to:8545
|
||||
|
||||
npx ts-node src/cli/get-call-trace.ts --block 0x85C9ED --txFile test/tx/rinkeby-test.json --providerUrl http://rinkeby-testing.vdb.to:8545
|
||||
```
|
||||
|
||||
Mainnet:
|
||||
|
||||
```bash
|
||||
ssh geth@arch1.vdb.to -L 8545:127.0.0.1:8545
|
||||
|
||||
# https://etherscan.io/tx/0xab6b8315187d3333f2cad87eb861203c856b6cb997b0d58f2d96b6ea1a42c258
|
||||
# Note: 43 internal transactions.
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xab6b8315187d3333f2cad87eb861203c856b6cb997b0d58f2d96b6ea1a42c258 --tracer callTracer
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xab6b8315187d3333f2cad87eb861203c856b6cb997b0d58f2d96b6ea1a42c258 --tracerFile src/tracers/address_tracer.js --timeout 20s
|
||||
|
||||
{
|
||||
"0xf94d7953d44bdcc7a5585a61ed91899ef2d39524": 1,
|
||||
"0x240c7488df044d2f69d66201ee59a296c64d714c": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0x1f4de5cc412ff43db7663e39aaa04221ca9e995f": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x00004d59594796297b1b33f9dbc3fb1829ebaaf9": 0.6,
|
||||
"0x0081a5107db14797df968e243e8918fec5c189ec": 0.6,
|
||||
"0x41120695a494e1653b6c5fd69d8de0d301be2810": 0.75,
|
||||
"0x0001ef68096b0199f8afcdd6eedbb16a461c1272": 0.6,
|
||||
"0xfffd8963efd1fc6a506488495d951d5263988d26": 0.75,
|
||||
"0x00004d6d099aa3197c9a709447db6b6a00000000": 0.6,
|
||||
"0x0003050b85adc04db540d95779a4000000000000": 0.6,
|
||||
"0x0003050b831e5bcc09c1d4fd1eb3ed5e62ffc556": 0.6,
|
||||
"0x00004d6d28b4e64200d8556776f0fc20a12bc1ad": 0.6,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0x058ca87960e3da12000000000000000000000000": 0.6,
|
||||
"0x0005aa065bcf8dcf069c57ed3fad1980b2a4a873": 0.6,
|
||||
"0x058e98dfce0fd2a2b9373e6974cea7ffbe91decc": 0.6,
|
||||
"0x0001efb93682b84a1014b9fb7941273c0ba0e9f5": 0.6,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1,
|
||||
"0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7": 1,
|
||||
"0x00002af904b638ed930cddfe78cf741a9f440000": 0.6,
|
||||
"0x0000334c40df9502deb37a4ac7f2d72780000000": 0.6,
|
||||
"0x00002dc527a4a9017812d98e236bc2cb40000000": 0.6,
|
||||
"0x0feef93405c3ca6c31df80109628d3137dcbe3b0": 0.6,
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1,
|
||||
"0x1f98431c8ad98523631ae4a59f267346ea31f984": 1,
|
||||
"0xffffffff00000000000000000000000000000000": 0.75,
|
||||
"0xf0d160dec1749afaf5a831668093b1431f7c8527": 1,
|
||||
"0xc6cde7c39eb2f0f0095f41570af89efc2c1ea828": 1
|
||||
}
|
||||
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xab6b8315187d3333f2cad87eb861203c856b6cb997b0d58f2d96b6ea1a42c258 --tracerFile src/tracers/call_address_tracer.js --timeout 20s
|
||||
|
||||
# https://etherscan.io/tx/0xa3446df7ce6e26dd510aea009790769f3379fbeb5671e9fa4e5091854e2cf36a
|
||||
# Note: 5 internal transactions, too many false positives.
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0xa3446df7ce6e26dd510aea009790769f3379fbeb5671e9fa4e5091854e2cf36a --tracerFile src/tracers/address_tracer.js
|
||||
|
||||
{
|
||||
"0x80e9540c204c05be63cfe44b43302780175b60ff": 1,
|
||||
"0x8f99ddc76cf23fef479b5ca1ab2b143c6d77198b": 1,
|
||||
"0xca30274b11140581cfbd7ddf7f48adb4f324377e": 1,
|
||||
"0x44b13a9ec5bba78a52a1e074e37a690eea45eaca": 1,
|
||||
"0xfa54969a776f57b6af8117b6b157b448b6c1ef7f": 1,
|
||||
"0x1788430620960f9a70e3dc14202a3a35dde1a316": 1,
|
||||
"0xa35e62e5eb729142643df04838e5c71113564fbd": 0.75,
|
||||
"0x629dbb4ecde5fa809fdc68cb1b75f6f43d7f5575": 1,
|
||||
"0x898b4cdaae3d6e638c5c139a3909c1928f63b63c": 1,
|
||||
"0xb355f12949091ac418c2dbd96704423f57aa5ecb": 1
|
||||
}
|
||||
|
||||
|
||||
# ERC20 transfer (many false positives)
|
||||
# https://etherscan.io/tx/0x036f7b1da4c3b0d0359728852b4f7923c02b155c5b7d4d3aab55e6fda6ca50a1
|
||||
npx ts-node src/cli/get-call-trace.ts --block 0x8baa3abf4faee54750a95f649236c116c4ec1660774ad5a3b4e00c84167ecbb7 --txFile test/tx/mainnet-test.json --tracerFile src/tracers/address_tracer.js
|
||||
npx ts-node src/cli/get-tx-trace.ts --txHash 0x036f7b1da4c3b0d0359728852b4f7923c02b155c5b7d4d3aab55e6fda6ca50a1 --tracerFile src/tracers/address_tracer.js
|
||||
|
||||
{
|
||||
"0x9acbb72cf67103a30333a32cd203459c6a9c3311": 1,
|
||||
"0x66b6d6e78fbc4575f5197ae15af62f5dc7d48349": 1
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
* https://geth.ethereum.org/docs/rpc/ns-debug#debug_tracetransaction
|
||||
* https://golang.org/pkg/time/#ParseDuration
|
0
packages/tracing-client/index.ts
Normal file
0
packages/tracing-client/index.ts
Normal file
40
packages/tracing-client/package.json
Normal file
40
packages/tracing-client/package.json
Normal file
@ -0,0 +1,40 @@
|
||||
{
|
||||
"name": "@vulcanize/tracing-client",
|
||||
"version": "0.1.0",
|
||||
"description": "ETH VM tracing client",
|
||||
"private": true,
|
||||
"main": "index.ts",
|
||||
"scripts": {
|
||||
"test": "mocha -r ts-node/register src/**/*.spec.ts",
|
||||
"build": "tsc",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/vulcanize/erc20-watcher.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "UNLICENSED",
|
||||
"bugs": {
|
||||
"url": "https://github.com/vulcanize/erc20-watcher/issues"
|
||||
},
|
||||
"homepage": "https://github.com/vulcanize/erc20-watcher#readme",
|
||||
"dependencies": {
|
||||
"canonical-json": "^0.0.4",
|
||||
"debug": "^4.3.1",
|
||||
"ethers": "^5.3.1",
|
||||
"yargs": "^17.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/debug": "^4.1.5",
|
||||
"@typescript-eslint/eslint-plugin": "^4.25.0",
|
||||
"@typescript-eslint/parser": "^4.25.0",
|
||||
"eslint": "^7.27.0",
|
||||
"eslint-config-semistandard": "^15.0.1",
|
||||
"eslint-config-standard": "^16.0.3",
|
||||
"eslint-plugin-import": "^2.23.3",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^5.1.0",
|
||||
"eslint-plugin-standard": "^5.0.0"
|
||||
}
|
||||
}
|
52
packages/tracing-client/src/cli/find-addresses.ts
Normal file
52
packages/tracing-client/src/cli/find-addresses.ts
Normal file
@ -0,0 +1,52 @@
|
||||
import fs from 'fs';
|
||||
import yargs from 'yargs';
|
||||
import { ethers } from 'ethers';
|
||||
|
||||
interface StructLog {
|
||||
stack: string[]
|
||||
}
|
||||
|
||||
(async () => {
|
||||
const argv = await yargs.parserConfiguration({
|
||||
'parse-numbers': false
|
||||
}).options({
|
||||
traceFile: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true
|
||||
}
|
||||
}).argv;
|
||||
|
||||
const { structLogs }: { structLogs: StructLog[] } = JSON.parse(fs.readFileSync(argv.traceFile).toString("utf-8"));
|
||||
|
||||
const addressMap: any = {};
|
||||
|
||||
structLogs.forEach((log: StructLog) => {
|
||||
if (!log.stack.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
let maybeAddress = log.stack[log.stack.length - 1];
|
||||
|
||||
// Address are 40 bytes.
|
||||
// Example: 000000000000000000000000ca6d29232d1435d8198e3e5302495417dd073d61
|
||||
if (!maybeAddress.startsWith("000000000000000000000000")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (addressMap[maybeAddress]) {
|
||||
return;
|
||||
}
|
||||
|
||||
maybeAddress = maybeAddress.substr("000000000000000000000000".length);
|
||||
|
||||
if (!ethers.utils.isAddress(maybeAddress)) {
|
||||
return;
|
||||
}
|
||||
|
||||
addressMap[ethers.utils.getAddress(maybeAddress)] = true;
|
||||
Object.keys(addressMap).forEach(address => {
|
||||
console.log(address);
|
||||
});
|
||||
});
|
||||
})();
|
51
packages/tracing-client/src/cli/get-call-trace.ts
Normal file
51
packages/tracing-client/src/cli/get-call-trace.ts
Normal file
@ -0,0 +1,51 @@
|
||||
import fs from 'fs';
|
||||
import yargs from 'yargs';
|
||||
|
||||
import { getCallTrace } from '../tracing';
|
||||
|
||||
(async () => {
|
||||
const argv = await yargs.parserConfiguration({
|
||||
'parse-numbers': false
|
||||
}).options({
|
||||
providerUrl: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true,
|
||||
default: 'http://localhost:8545',
|
||||
describe: 'ETH JSON-RPC provider URL'
|
||||
},
|
||||
block: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true,
|
||||
describe: 'Block hash or number'
|
||||
},
|
||||
txFile: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true,
|
||||
describe: 'File with tx data for call tracing'
|
||||
},
|
||||
tracer: {
|
||||
type: 'string',
|
||||
describe: 'The tracer to use'
|
||||
},
|
||||
tracerFile: {
|
||||
type: 'string',
|
||||
"describe": 'File with custom tracing JS code'
|
||||
}
|
||||
}).argv;
|
||||
|
||||
let tracer = argv.tracer;
|
||||
|
||||
const tracerFile = argv.tracerFile;
|
||||
if (tracerFile) {
|
||||
tracer = fs.readFileSync(tracerFile).toString("utf-8");
|
||||
}
|
||||
|
||||
const txData = JSON.parse(fs.readFileSync(argv.txFile).toString("utf-8"));
|
||||
|
||||
const result = await getCallTrace(argv.providerUrl, argv.block, txData, tracer);
|
||||
|
||||
console.log(JSON.stringify(result, null, 2));
|
||||
})();
|
48
packages/tracing-client/src/cli/get-tx-trace.ts
Normal file
48
packages/tracing-client/src/cli/get-tx-trace.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import fs from 'fs';
|
||||
import yargs from 'yargs';
|
||||
|
||||
import { getTxTrace } from '../tracing';
|
||||
|
||||
(async () => {
|
||||
const argv = await yargs.parserConfiguration({
|
||||
'parse-numbers': false
|
||||
}).options({
|
||||
providerUrl: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true,
|
||||
default: 'http://localhost:8545',
|
||||
describe: 'ETH JSON-RPC provider URL'
|
||||
},
|
||||
txHash: {
|
||||
type: 'string',
|
||||
require: true,
|
||||
demandOption: true,
|
||||
describe: 'Transaction hash'
|
||||
},
|
||||
tracer: {
|
||||
type: 'string',
|
||||
describe: 'The tracer to use'
|
||||
},
|
||||
tracerFile: {
|
||||
type: 'string',
|
||||
describe: 'File with custom tracing JS code'
|
||||
},
|
||||
timeout: {
|
||||
type: 'string',
|
||||
default: "10s",
|
||||
describe: 'Trace execution timeout'
|
||||
}
|
||||
}).argv;
|
||||
|
||||
let tracer = argv.tracer;
|
||||
|
||||
const tracerFile = argv.tracerFile;
|
||||
if (tracerFile) {
|
||||
tracer = fs.readFileSync(tracerFile).toString("utf-8");
|
||||
}
|
||||
|
||||
const result = await getTxTrace(argv.providerUrl, argv.txHash, tracer, argv.timeout);
|
||||
|
||||
console.log(JSON.stringify(result, null, 2));
|
||||
})();
|
73
packages/tracing-client/src/tracers/address_tracer.js
Normal file
73
packages/tracing-client/src/tracers/address_tracer.js
Normal file
@ -0,0 +1,73 @@
|
||||
{
|
||||
minVanityAddressLength: 35,
|
||||
|
||||
excludedAddresses: [
|
||||
"0x0000000000000000000000000000000000000000",
|
||||
"0xffffffffffffffffffffffffffffffffffffffff"
|
||||
],
|
||||
|
||||
// Known vanity addresses. Empty by default, but can replace this object when making dynamic requests.
|
||||
// Burner addresses go here too.
|
||||
knownVanityAddresses: {
|
||||
// "0x000026b86Ac8B3c08ADDEeacd7ee19e807D94742": true
|
||||
},
|
||||
|
||||
data: {},
|
||||
|
||||
isAddress: function(log, db, value) {
|
||||
// More than 40 chars or too small in length, so not an address.
|
||||
if (value.length > 40 || value.length < this.minVanityAddressLength) {
|
||||
return { isAddress: false };
|
||||
}
|
||||
|
||||
var address = toAddress(value);
|
||||
var addressAsHex = toHex(address);
|
||||
|
||||
// Check list of known exclusions.
|
||||
if (this.excludedAddresses.indexOf(addressAsHex) != -1) {
|
||||
return { isAddress: false };
|
||||
}
|
||||
|
||||
// Address exists in db, so definitely an address.
|
||||
if (db.exists(address)) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 1 };
|
||||
}
|
||||
|
||||
// May still be a valid address (e.g. for ERC20 transfer).
|
||||
// It won't exist in DB e.g. if no ETH was sent to it directly.
|
||||
// Apply heuristics.
|
||||
|
||||
// Length heuristic - addresses are usually 40 bytes.
|
||||
if (value.length == 40 && log.op.isPush()) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 0.75 };
|
||||
}
|
||||
|
||||
// Vanity addresses might start with leading zeros, so length will be < 40.
|
||||
// But we use a min length of addresses, otherwise there are too many false positives.
|
||||
// Also use a known vanity address list to override the normal logic.
|
||||
if (this.knownVanityAddresses[addressAsHex] || (log.op.isPush() && value.length > this.minVanityAddressLength)) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 0.60 };
|
||||
}
|
||||
|
||||
return { isAddress: false };
|
||||
},
|
||||
|
||||
// step is invoked for every opcode that the VM executes.
|
||||
step: function(log, db) {
|
||||
var topOfStack = log.stack.peek(0).toString(16);
|
||||
var result = this.isAddress(log, db, topOfStack);
|
||||
|
||||
if (result.isAddress) {
|
||||
this.data[result.address] = result.confidence;
|
||||
}
|
||||
},
|
||||
|
||||
// fault is invoked when the actual execution of an opcode fails.
|
||||
fault: function(log, db) { },
|
||||
|
||||
// result is invoked when all the opcodes have been iterated over and returns
|
||||
// the final result of the tracing.
|
||||
result: function(ctx, db) {
|
||||
return this.data;
|
||||
}
|
||||
}
|
320
packages/tracing-client/src/tracers/call_address_tracer.js
Normal file
320
packages/tracing-client/src/tracers/call_address_tracer.js
Normal file
@ -0,0 +1,320 @@
|
||||
// Based on call_tracer.js in go-ethereum
|
||||
//
|
||||
// Original Notice:
|
||||
//
|
||||
// Copyright 2017 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// callTracer is a full blown transaction tracer that extracts and reports all
|
||||
// the internal calls made by a transaction, along with any useful information.
|
||||
|
||||
// addressTracer is a tracer that watches for address like strings for each call.
|
||||
{
|
||||
minVanityAddressLength: 35,
|
||||
|
||||
excludedAddresses: [
|
||||
"0x0000000000000000000000000000000000000000",
|
||||
"0xffffffffffffffffffffffffffffffffffffffff"
|
||||
],
|
||||
|
||||
// Known vanity addresses. Empty by default, but can replace this object when making dynamic requests.
|
||||
// Burner addresses go here too.
|
||||
knownVanityAddresses: {
|
||||
// "0x000026b86Ac8B3c08ADDEeacd7ee19e807D94742": true
|
||||
},
|
||||
|
||||
isAddress: function(log, db, value) {
|
||||
// More than 40 chars or too small in length, so not an address.
|
||||
if (value.length > 40 || value.length < this.minVanityAddressLength) {
|
||||
return { isAddress: false };
|
||||
}
|
||||
|
||||
var address = toAddress(value);
|
||||
var addressAsHex = toHex(address);
|
||||
|
||||
// Check list of known exclusions.
|
||||
if (this.excludedAddresses.indexOf(addressAsHex) != -1) {
|
||||
return { isAddress: false };
|
||||
}
|
||||
|
||||
// Address exists in db, so definitely an address.
|
||||
if (db.exists(address)) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 1 };
|
||||
}
|
||||
|
||||
// May still be a valid address (e.g. for ERC20 transfer).
|
||||
// It won't exist in DB e.g. if no ETH was sent to it directly.
|
||||
// Apply heuristics.
|
||||
|
||||
// Length heuristic - addresses are usually 40 bytes.
|
||||
if (value.length == 40 && log.op.isPush()) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 0.75 };
|
||||
}
|
||||
|
||||
// Vanity addresses might start with leading zeros, so length will be < 40.
|
||||
// But we use a min length of addresses, otherwise there are too many false positives.
|
||||
// Also use a known vanity address list to override the normal logic.
|
||||
if (this.knownVanityAddresses[addressAsHex] || (log.op.isPush() && value.length > this.minVanityAddressLength)) {
|
||||
return { isAddress: true, address: addressAsHex, confidence: 0.60 };
|
||||
}
|
||||
|
||||
return { isAddress: false };
|
||||
},
|
||||
|
||||
// callstack is the current recursive call stack of the EVM execution.
|
||||
callstack: [{}],
|
||||
|
||||
// descended tracks whether we've just descended from an outer transaction into
|
||||
// an inner call.
|
||||
descended: false,
|
||||
|
||||
// step is invoked for every opcode that the VM executes.
|
||||
step: function(log, db) {
|
||||
// Capture any errors immediately
|
||||
var error = log.getError();
|
||||
if (error !== undefined) {
|
||||
this.fault(log, db);
|
||||
return;
|
||||
}
|
||||
// We only care about system opcodes, faster if we pre-check once
|
||||
var syscall = (log.op.toNumber() & 0xf0) == 0xf0;
|
||||
if (syscall) {
|
||||
var op = log.op.toString();
|
||||
}
|
||||
// If a new contract is being created, add to the call stack
|
||||
if (syscall && (op == 'CREATE' || op == "CREATE2")) {
|
||||
var inOff = log.stack.peek(1).valueOf();
|
||||
var inEnd = inOff + log.stack.peek(2).valueOf();
|
||||
|
||||
// Assemble the internal call report and store for completion
|
||||
var call = {
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
input: toHex(log.memory.slice(inOff, inEnd)),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
value: '0x' + log.stack.peek(0).toString(16)
|
||||
};
|
||||
this.callstack.push(call);
|
||||
this.descended = true
|
||||
return;
|
||||
}
|
||||
// If a contract is being self destructed, gather that as a subcall too
|
||||
if (syscall && op == 'SELFDESTRUCT') {
|
||||
var left = this.callstack.length;
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push({
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
to: toHex(toAddress(log.stack.peek(0).toString(16))),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
value: '0x' + db.getBalance(log.contract.getAddress()).toString(16)
|
||||
});
|
||||
return
|
||||
}
|
||||
// If a new method invocation is being done, add to the call stack
|
||||
if (syscall && (op == 'CALL' || op == 'CALLCODE' || op == 'DELEGATECALL' || op == 'STATICCALL')) {
|
||||
// Skip any pre-compile invocations, those are just fancy opcodes
|
||||
var to = toAddress(log.stack.peek(1).toString(16));
|
||||
if (isPrecompiled(to)) {
|
||||
return
|
||||
}
|
||||
var off = (op == 'DELEGATECALL' || op == 'STATICCALL' ? 0 : 1);
|
||||
|
||||
var inOff = log.stack.peek(2 + off).valueOf();
|
||||
var inEnd = inOff + log.stack.peek(3 + off).valueOf();
|
||||
|
||||
// Assemble the internal call report and store for completion
|
||||
var call = {
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
to: toHex(to),
|
||||
input: toHex(log.memory.slice(inOff, inEnd)),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
outOff: log.stack.peek(4 + off).valueOf(),
|
||||
outLen: log.stack.peek(5 + off).valueOf()
|
||||
};
|
||||
if (op != 'DELEGATECALL' && op != 'STATICCALL') {
|
||||
call.value = '0x' + log.stack.peek(2).toString(16);
|
||||
}
|
||||
this.callstack.push(call);
|
||||
this.descended = true
|
||||
return;
|
||||
}
|
||||
// If we've just descended into an inner call, retrieve it's true allowance. We
|
||||
// need to extract if from within the call as there may be funky gas dynamics
|
||||
// with regard to requested and actually given gas (2300 stipend, 63/64 rule).
|
||||
if (this.descended) {
|
||||
if (log.getDepth() >= this.callstack.length) {
|
||||
this.callstack[this.callstack.length - 1].gas = log.getGas();
|
||||
} else {
|
||||
// TODO(karalabe): The call was made to a plain account. We currently don't
|
||||
// have access to the true gas amount inside the call and so any amount will
|
||||
// mostly be wrong since it depends on a lot of input args. Skip gas for now.
|
||||
}
|
||||
this.descended = false;
|
||||
}
|
||||
// If an existing call is returning, pop off the call stack
|
||||
if (syscall && op == 'REVERT') {
|
||||
this.callstack[this.callstack.length - 1].error = "execution reverted";
|
||||
return;
|
||||
}
|
||||
if (log.getDepth() == this.callstack.length - 1) {
|
||||
// Pop off the last call and get the execution results
|
||||
var call = this.callstack.pop();
|
||||
|
||||
if (call.type == 'CREATE' || call.type == "CREATE2") {
|
||||
// If the call was a CREATE, retrieve the contract address and output code
|
||||
call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost - log.getGas()).toString(16);
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
|
||||
var ret = log.stack.peek(0);
|
||||
if (!ret.equals(0)) {
|
||||
call.to = toHex(toAddress(ret.toString(16)));
|
||||
call.output = toHex(db.getCode(toAddress(ret.toString(16))));
|
||||
} else if (call.error === undefined) {
|
||||
call.error = "internal failure"; // TODO(karalabe): surface these faults somehow
|
||||
}
|
||||
} else {
|
||||
// If the call was a contract call, retrieve the gas usage and output
|
||||
if (call.gas !== undefined) {
|
||||
call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost + call.gas - log.getGas()).toString(16);
|
||||
}
|
||||
var ret = log.stack.peek(0);
|
||||
if (!ret.equals(0)) {
|
||||
call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen));
|
||||
} else if (call.error === undefined) {
|
||||
call.error = "internal failure"; // TODO(karalabe): surface these faults somehow
|
||||
}
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
delete call.outOff; delete call.outLen;
|
||||
}
|
||||
if (call.gas !== undefined) {
|
||||
call.gas = '0x' + bigInt(call.gas).toString(16);
|
||||
}
|
||||
// Inject the call into the previous one
|
||||
var left = this.callstack.length;
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push(call);
|
||||
}
|
||||
|
||||
var topOfStack = log.stack.peek(0).toString(16);
|
||||
var result = this.isAddress(log, db, topOfStack);
|
||||
if (result.isAddress) {
|
||||
var call = this.callstack[this.callstack.length - 1];
|
||||
if (!call.addresses) {
|
||||
call.addresses = {};
|
||||
}
|
||||
call.addresses[result.address] = result.confidence;
|
||||
}
|
||||
},
|
||||
|
||||
// fault is invoked when the actual execution of an opcode fails.
|
||||
fault: function(log, db) {
|
||||
// If the topmost call already reverted, don't handle the additional fault again
|
||||
if (this.callstack[this.callstack.length - 1].error !== undefined) {
|
||||
return;
|
||||
}
|
||||
// Pop off the just failed call
|
||||
var call = this.callstack.pop();
|
||||
call.error = log.getError();
|
||||
|
||||
// Consume all available gas and clean any leftovers
|
||||
if (call.gas !== undefined) {
|
||||
call.gas = '0x' + bigInt(call.gas).toString(16);
|
||||
call.gasUsed = call.gas
|
||||
}
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
delete call.outOff; delete call.outLen;
|
||||
|
||||
// Flatten the failed call into its parent
|
||||
var left = this.callstack.length;
|
||||
if (left > 0) {
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push(call);
|
||||
return;
|
||||
}
|
||||
// Last call failed too, leave it in the stack
|
||||
this.callstack.push(call);
|
||||
},
|
||||
|
||||
// result is invoked when all the opcodes have been iterated over and returns
|
||||
// the final result of the tracing.
|
||||
result: function(ctx, db) {
|
||||
var result = {
|
||||
type: ctx.type,
|
||||
from: toHex(ctx.from),
|
||||
to: toHex(ctx.to),
|
||||
value: '0x' + ctx.value.toString(16),
|
||||
gas: '0x' + bigInt(ctx.gas).toString(16),
|
||||
gasUsed: '0x' + bigInt(ctx.gasUsed).toString(16),
|
||||
input: toHex(ctx.input),
|
||||
output: toHex(ctx.output),
|
||||
time: ctx.time,
|
||||
};
|
||||
if (this.callstack[0].calls !== undefined) {
|
||||
result.calls = this.callstack[0].calls;
|
||||
}
|
||||
if (this.callstack[0].error !== undefined) {
|
||||
result.error = this.callstack[0].error;
|
||||
} else if (ctx.error !== undefined) {
|
||||
result.error = ctx.error;
|
||||
}
|
||||
if (result.error !== undefined && (result.error !== "execution reverted" || result.output ==="0x")) {
|
||||
delete result.output;
|
||||
}
|
||||
return this.finalize(result);
|
||||
},
|
||||
|
||||
// finalize recreates a call object using the final desired field oder for json
|
||||
// serialization. This is a nicety feature to pass meaningfully ordered results
|
||||
// to users who don't interpret it, just display it.
|
||||
finalize: function(call) {
|
||||
var sorted = {
|
||||
type: call.type,
|
||||
from: call.from,
|
||||
to: call.to,
|
||||
value: call.value,
|
||||
gas: call.gas,
|
||||
gasUsed: call.gasUsed,
|
||||
input: call.input,
|
||||
output: call.output,
|
||||
error: call.error,
|
||||
time: call.time,
|
||||
calls: call.calls,
|
||||
addresses: call.addresses,
|
||||
}
|
||||
for (var key in sorted) {
|
||||
if (sorted[key] === undefined) {
|
||||
delete sorted[key];
|
||||
}
|
||||
}
|
||||
if (sorted.calls !== undefined) {
|
||||
for (var i=0; i<sorted.calls.length; i++) {
|
||||
sorted.calls[i] = this.finalize(sorted.calls[i]);
|
||||
}
|
||||
}
|
||||
return sorted;
|
||||
}
|
||||
}
|
252
packages/tracing-client/src/tracers/call_tracer.js
Normal file
252
packages/tracing-client/src/tracers/call_tracer.js
Normal file
@ -0,0 +1,252 @@
|
||||
// Copyright 2017 The go-ethereum Authors
|
||||
// This file is part of the go-ethereum library.
|
||||
//
|
||||
// The go-ethereum library is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// The go-ethereum library is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// callTracer is a full blown transaction tracer that extracts and reports all
|
||||
// the internal calls made by a transaction, along with any useful information.
|
||||
{
|
||||
// callstack is the current recursive call stack of the EVM execution.
|
||||
callstack: [{}],
|
||||
|
||||
// descended tracks whether we've just descended from an outer transaction into
|
||||
// an inner call.
|
||||
descended: false,
|
||||
|
||||
// step is invoked for every opcode that the VM executes.
|
||||
step: function(log, db) {
|
||||
// Capture any errors immediately
|
||||
var error = log.getError();
|
||||
if (error !== undefined) {
|
||||
this.fault(log, db);
|
||||
return;
|
||||
}
|
||||
// We only care about system opcodes, faster if we pre-check once
|
||||
var syscall = (log.op.toNumber() & 0xf0) == 0xf0;
|
||||
if (syscall) {
|
||||
var op = log.op.toString();
|
||||
}
|
||||
// If a new contract is being created, add to the call stack
|
||||
if (syscall && (op == 'CREATE' || op == "CREATE2")) {
|
||||
var inOff = log.stack.peek(1).valueOf();
|
||||
var inEnd = inOff + log.stack.peek(2).valueOf();
|
||||
|
||||
// Assemble the internal call report and store for completion
|
||||
var call = {
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
input: toHex(log.memory.slice(inOff, inEnd)),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
value: '0x' + log.stack.peek(0).toString(16)
|
||||
};
|
||||
this.callstack.push(call);
|
||||
this.descended = true
|
||||
return;
|
||||
}
|
||||
// If a contract is being self destructed, gather that as a subcall too
|
||||
if (syscall && op == 'SELFDESTRUCT') {
|
||||
var left = this.callstack.length;
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push({
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
to: toHex(toAddress(log.stack.peek(0).toString(16))),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
value: '0x' + db.getBalance(log.contract.getAddress()).toString(16)
|
||||
});
|
||||
return
|
||||
}
|
||||
// If a new method invocation is being done, add to the call stack
|
||||
if (syscall && (op == 'CALL' || op == 'CALLCODE' || op == 'DELEGATECALL' || op == 'STATICCALL')) {
|
||||
// Skip any pre-compile invocations, those are just fancy opcodes
|
||||
var to = toAddress(log.stack.peek(1).toString(16));
|
||||
if (isPrecompiled(to)) {
|
||||
return
|
||||
}
|
||||
var off = (op == 'DELEGATECALL' || op == 'STATICCALL' ? 0 : 1);
|
||||
|
||||
var inOff = log.stack.peek(2 + off).valueOf();
|
||||
var inEnd = inOff + log.stack.peek(3 + off).valueOf();
|
||||
|
||||
// Assemble the internal call report and store for completion
|
||||
var call = {
|
||||
type: op,
|
||||
from: toHex(log.contract.getAddress()),
|
||||
to: toHex(to),
|
||||
input: toHex(log.memory.slice(inOff, inEnd)),
|
||||
gasIn: log.getGas(),
|
||||
gasCost: log.getCost(),
|
||||
outOff: log.stack.peek(4 + off).valueOf(),
|
||||
outLen: log.stack.peek(5 + off).valueOf()
|
||||
};
|
||||
if (op != 'DELEGATECALL' && op != 'STATICCALL') {
|
||||
call.value = '0x' + log.stack.peek(2).toString(16);
|
||||
}
|
||||
this.callstack.push(call);
|
||||
this.descended = true
|
||||
return;
|
||||
}
|
||||
// If we've just descended into an inner call, retrieve it's true allowance. We
|
||||
// need to extract if from within the call as there may be funky gas dynamics
|
||||
// with regard to requested and actually given gas (2300 stipend, 63/64 rule).
|
||||
if (this.descended) {
|
||||
if (log.getDepth() >= this.callstack.length) {
|
||||
this.callstack[this.callstack.length - 1].gas = log.getGas();
|
||||
} else {
|
||||
// TODO(karalabe): The call was made to a plain account. We currently don't
|
||||
// have access to the true gas amount inside the call and so any amount will
|
||||
// mostly be wrong since it depends on a lot of input args. Skip gas for now.
|
||||
}
|
||||
this.descended = false;
|
||||
}
|
||||
// If an existing call is returning, pop off the call stack
|
||||
if (syscall && op == 'REVERT') {
|
||||
this.callstack[this.callstack.length - 1].error = "execution reverted";
|
||||
return;
|
||||
}
|
||||
if (log.getDepth() == this.callstack.length - 1) {
|
||||
// Pop off the last call and get the execution results
|
||||
var call = this.callstack.pop();
|
||||
|
||||
if (call.type == 'CREATE' || call.type == "CREATE2") {
|
||||
// If the call was a CREATE, retrieve the contract address and output code
|
||||
call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost - log.getGas()).toString(16);
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
|
||||
var ret = log.stack.peek(0);
|
||||
if (!ret.equals(0)) {
|
||||
call.to = toHex(toAddress(ret.toString(16)));
|
||||
call.output = toHex(db.getCode(toAddress(ret.toString(16))));
|
||||
} else if (call.error === undefined) {
|
||||
call.error = "internal failure"; // TODO(karalabe): surface these faults somehow
|
||||
}
|
||||
} else {
|
||||
// If the call was a contract call, retrieve the gas usage and output
|
||||
if (call.gas !== undefined) {
|
||||
call.gasUsed = '0x' + bigInt(call.gasIn - call.gasCost + call.gas - log.getGas()).toString(16);
|
||||
}
|
||||
var ret = log.stack.peek(0);
|
||||
if (!ret.equals(0)) {
|
||||
call.output = toHex(log.memory.slice(call.outOff, call.outOff + call.outLen));
|
||||
} else if (call.error === undefined) {
|
||||
call.error = "internal failure"; // TODO(karalabe): surface these faults somehow
|
||||
}
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
delete call.outOff; delete call.outLen;
|
||||
}
|
||||
if (call.gas !== undefined) {
|
||||
call.gas = '0x' + bigInt(call.gas).toString(16);
|
||||
}
|
||||
// Inject the call into the previous one
|
||||
var left = this.callstack.length;
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push(call);
|
||||
}
|
||||
},
|
||||
|
||||
// fault is invoked when the actual execution of an opcode fails.
|
||||
fault: function(log, db) {
|
||||
// If the topmost call already reverted, don't handle the additional fault again
|
||||
if (this.callstack[this.callstack.length - 1].error !== undefined) {
|
||||
return;
|
||||
}
|
||||
// Pop off the just failed call
|
||||
var call = this.callstack.pop();
|
||||
call.error = log.getError();
|
||||
|
||||
// Consume all available gas and clean any leftovers
|
||||
if (call.gas !== undefined) {
|
||||
call.gas = '0x' + bigInt(call.gas).toString(16);
|
||||
call.gasUsed = call.gas
|
||||
}
|
||||
delete call.gasIn; delete call.gasCost;
|
||||
delete call.outOff; delete call.outLen;
|
||||
|
||||
// Flatten the failed call into its parent
|
||||
var left = this.callstack.length;
|
||||
if (left > 0) {
|
||||
if (this.callstack[left-1].calls === undefined) {
|
||||
this.callstack[left-1].calls = [];
|
||||
}
|
||||
this.callstack[left-1].calls.push(call);
|
||||
return;
|
||||
}
|
||||
// Last call failed too, leave it in the stack
|
||||
this.callstack.push(call);
|
||||
},
|
||||
|
||||
// result is invoked when all the opcodes have been iterated over and returns
|
||||
// the final result of the tracing.
|
||||
result: function(ctx, db) {
|
||||
var result = {
|
||||
type: ctx.type,
|
||||
from: toHex(ctx.from),
|
||||
to: toHex(ctx.to),
|
||||
value: '0x' + ctx.value.toString(16),
|
||||
gas: '0x' + bigInt(ctx.gas).toString(16),
|
||||
gasUsed: '0x' + bigInt(ctx.gasUsed).toString(16),
|
||||
input: toHex(ctx.input),
|
||||
output: toHex(ctx.output),
|
||||
time: ctx.time,
|
||||
};
|
||||
if (this.callstack[0].calls !== undefined) {
|
||||
result.calls = this.callstack[0].calls;
|
||||
}
|
||||
if (this.callstack[0].error !== undefined) {
|
||||
result.error = this.callstack[0].error;
|
||||
} else if (ctx.error !== undefined) {
|
||||
result.error = ctx.error;
|
||||
}
|
||||
if (result.error !== undefined && (result.error !== "execution reverted" || result.output ==="0x")) {
|
||||
delete result.output;
|
||||
}
|
||||
return this.finalize(result);
|
||||
},
|
||||
|
||||
// finalize recreates a call object using the final desired field oder for json
|
||||
// serialization. This is a nicety feature to pass meaningfully ordered results
|
||||
// to users who don't interpret it, just display it.
|
||||
finalize: function(call) {
|
||||
var sorted = {
|
||||
type: call.type,
|
||||
from: call.from,
|
||||
to: call.to,
|
||||
value: call.value,
|
||||
gas: call.gas,
|
||||
gasUsed: call.gasUsed,
|
||||
input: call.input,
|
||||
output: call.output,
|
||||
error: call.error,
|
||||
time: call.time,
|
||||
calls: call.calls,
|
||||
}
|
||||
for (var key in sorted) {
|
||||
if (sorted[key] === undefined) {
|
||||
delete sorted[key];
|
||||
}
|
||||
}
|
||||
if (sorted.calls !== undefined) {
|
||||
for (var i=0; i<sorted.calls.length; i++) {
|
||||
sorted.calls[i] = this.finalize(sorted.calls[i]);
|
||||
}
|
||||
}
|
||||
return sorted;
|
||||
}
|
||||
}
|
0
packages/tracing-client/src/tracing.spec.ts
Normal file
0
packages/tracing-client/src/tracing.spec.ts
Normal file
11
packages/tracing-client/src/tracing.ts
Normal file
11
packages/tracing-client/src/tracing.ts
Normal file
@ -0,0 +1,11 @@
|
||||
import { ethers } from 'ethers';
|
||||
|
||||
export const getTxTrace = async (providerUrl: string, txHash: string, tracer: string | undefined, timeout: string | undefined): Promise<any> => {
|
||||
const provider = new ethers.providers.JsonRpcProvider(providerUrl);
|
||||
return provider.send('debug_traceTransaction', [txHash, { tracer, timeout }]);
|
||||
};
|
||||
|
||||
export const getCallTrace = async (providerUrl: string, block: string, txData: any, tracer: string | undefined): Promise<any> => {
|
||||
const provider = new ethers.providers.JsonRpcProvider(providerUrl);
|
||||
return provider.send('debug_traceCall', [ txData, block, { tracer }]);
|
||||
};
|
@ -0,0 +1,655 @@
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xf94d7953d44bdcc7a5585a61ed91899ef2d39524",
|
||||
"to": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"value": "0x0",
|
||||
"gas": "0xb3237",
|
||||
"gasUsed": "0x5e42a",
|
||||
"input": "0x0000004d0000000000000000000000000000000000000000000000000000000000c057bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c40000007300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003f8ad599c3a0ff1de082011efddc58f1908eb6e6d8a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb800000000000000000000000000000000000000000000000000000000000000003f11b815efb8f581194ae79006d24e0d814b7697f6c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2dac17f958d2ee523a2206206994597c13d831ec70001f40000000000000000000000000000000000000000000000000000000000000000173333333acdedbbc9ad7bda0876e60714195681c502010000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"time": "13.379333774s",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x240c7488df044d2f69d66201ee59a296c64d714c",
|
||||
"gas": "0xae6af",
|
||||
"gasUsed": "0x5c47b",
|
||||
"input": "0x0000007300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003f8ad599c3a0ff1de082011efddc58f1908eb6e6d8a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb800000000000000000000000000000000000000000000000000000000000000003f11b815efb8f581194ae79006d24e0d814b7697f6c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2dac17f958d2ee523a2206206994597c13d831ec70001f40000000000000000000000000000000000000000000000000000000000000000173333333acdedbbc9ad7bda0876e60714195681c5020100000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x1f4de5cc412ff43db7663e39aaa04221ca9e995f",
|
||||
"gas": "0xa9f93",
|
||||
"gasUsed": "0x572e",
|
||||
"input": "0xdab617590000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066aeefc920000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d80000000000000000000000000000000000000000000000000000000000000bb8",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa6846",
|
||||
"gasUsed": "0x97c",
|
||||
"input": "0x1a686502",
|
||||
"output": "0x000000000000000000000000000000000000000000000001f6397f4bda22e9d2"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa5cc0",
|
||||
"gasUsed": "0xa88",
|
||||
"input": "0x3850c7bd",
|
||||
"output": "0x0000000000000000000000000000000000004d6d55fae0dc58b57a67bdd9ed70000000000000000000000000000000000000000000000000000000000003050c00000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000168000000000000000000000000000000000000000000000000000000000000016800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa4e13",
|
||||
"gasUsed": "0x117",
|
||||
"input": "0xd0c93a7c",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000000000003c"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa47b4",
|
||||
"gasUsed": "0x9dd",
|
||||
"input": "0x5339c296000000000000000000000000000000000000000000000000000000000000000c",
|
||||
"output": "0xfffffffffffffffffffffffffffffffff7ffedbfdedfcf5dff2541aeb225cebc"
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x1f4de5cc412ff43db7663e39aaa04221ca9e995f": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0x00004d59594796297b1b33f9dbc3fb1829ebaaf9": 0.6,
|
||||
"0x0081a5107db14797df968e243e8918fec5c189ec": 0.6,
|
||||
"0x41120695a494e1653b6c5fd69d8de0d301be2810": 0.75,
|
||||
"0x0001ef68096b0199f8afcdd6eedbb16a461c1272": 0.6,
|
||||
"0xfffd8963efd1fc6a506488495d951d5263988d26": 0.75,
|
||||
"0x00004d6d099aa3197c9a709447db6b6a00000000": 0.6,
|
||||
"0x0003050b85adc04db540d95779a4000000000000": 0.6,
|
||||
"0x0003050b831e5bcc09c1d4fd1eb3ed5e62ffc556": 0.6,
|
||||
"0x00004d6d28b4e64200d8556776f0fc20a12bc1ad": 0.6
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x1f4de5cc412ff43db7663e39aaa04221ca9e995f",
|
||||
"gas": "0xa42c2",
|
||||
"gasUsed": "0x54dc",
|
||||
"input": "0xdab61759000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f600000000000000000000000000000000000000000000000000000000000001f4",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0xa0ce9",
|
||||
"gasUsed": "0x97c",
|
||||
"input": "0x1a686502",
|
||||
"output": "0x000000000000000000000000000000000000000000000000058ca87960e3da12"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0xa0162",
|
||||
"gasUsed": "0xa88",
|
||||
"input": "0x3850c7bd",
|
||||
"output": "0x00000000000000000000000000000000000000000003508b4c0b22de548e9dfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfb2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0x9f2b5",
|
||||
"gasUsed": "0x117",
|
||||
"input": "0xd0c93a7c",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000000000000a"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0x9ec15",
|
||||
"gasUsed": "0x9dd",
|
||||
"input": "0x5339c296ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2",
|
||||
"output": "0x8b042000000401a10080b0790000011000808804000020012088600500000000"
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x1f4de5cc412ff43db7663e39aaa04221ca9e995f": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0x058ca87960e3da12000000000000000000000000": 0.6,
|
||||
"0x0005aa065bcf8dcf069c57ed3fad1980b2a4a873": 0.6,
|
||||
"0x058e98dfce0fd2a2b9373e6974cea7ffbe91decc": 0.6,
|
||||
"0x0001efb93682b84a1014b9fb7941273c0ba0e9f5": 0.6,
|
||||
"0xfffd8963efd1fc6a506488495d951d5263988d26": 0.75
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"gas": "0x9e07f",
|
||||
"gasUsed": "0x8c30",
|
||||
"input": "0x5e0d443f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7",
|
||||
"gas": "0x9a597",
|
||||
"gasUsed": "0x7852",
|
||||
"input": "0x5e0d443f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x00002af904b638ed930cddfe78cf741a9f440000": 0.6,
|
||||
"0x0000334c40df9502deb37a4ac7f2d72780000000": 0.6,
|
||||
"0x00002dc527a4a9017812d98e236bc2cb40000000": 0.6,
|
||||
"0x0feef93405c3ca6c31df80109628d3137dcbe3b0": 0.6
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x94a33",
|
||||
"gasUsed": "0x2657",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000002851d282e04",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x90932",
|
||||
"gasUsed": "0x9e1",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x918ce",
|
||||
"gasUsed": "0x9e6",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x00000000000000000000000000000000000000000000000972ca2015bb6261ee",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x8fd90",
|
||||
"gasUsed": "0x149f1",
|
||||
"input": "0x414bf389000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000060c1bd37000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"value": "0x0",
|
||||
"gas": "0x8c828",
|
||||
"gasUsed": "0x136ad",
|
||||
"input": "0x128acb080000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066aeefc92ffffffffffffffffffffffffffffffffffffffffffffffff6a2a1f7bc415d64c",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"value": "0x0",
|
||||
"gas": "0x83361",
|
||||
"gasUsed": "0x2a6e",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d300000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x80635",
|
||||
"gasUsed": "0xcf3",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7e342",
|
||||
"gasUsed": "0x9e1",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x7f660",
|
||||
"gasUsed": "0x6f20",
|
||||
"input": "0xfa461e33000000000000000000000000000000000000000000000000000000066aeefc92ffffffffffffffffffffffffffffffffffffffffffffffff6a2a1f7bc415d64c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"value": "0x0",
|
||||
"gas": "0x7c82a",
|
||||
"gasUsed": "0x5f48",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8000000000000000000000000000000000000000000000000000000066aeefc92",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7a627",
|
||||
"gasUsed": "0x5c2d",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8000000000000000000000000000000000000000000000000000000066aeefc92",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xf0d160dec1749afaf5a831668093b1431f7c8527": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0x1f98431c8ad98523631ae4a59f267346ea31f984": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x78683",
|
||||
"gasUsed": "0x523",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7658f",
|
||||
"gasUsed": "0x211",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0x00004d59594796297b1b33f9dbc3fb1829ebaaf9": 0.6,
|
||||
"0x0081a5107db14797df968e243e8918fec5c189ec": 0.6,
|
||||
"0x41120695a494e1653b6c5fd69d8de0d301be2810": 0.75,
|
||||
"0x0001ef68096b0199f8afcdd6eedbb16a461c1272": 0.6,
|
||||
"0xfffd8963efd1fc6a506488495d951d5263988d26": 0.75,
|
||||
"0x00004d6d099aa3197c9a709447db6b6a00000000": 0.6,
|
||||
"0x0003050b85adc04db540d95779a4000000000000": 0.6,
|
||||
"0x0003050b831e5bcc09c1d4fd1eb3ed5e62ffc556": 0.6,
|
||||
"0x00004d6d28b4e64200d8556776f0fc20a12bc1ad": 0.6,
|
||||
"0xffffffff00000000000000000000000000000000": 0.75,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0x1f98431c8ad98523631ae4a59f267346ea31f984": 1,
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x7b0d9",
|
||||
"gasUsed": "0x129fb",
|
||||
"input": "0x414bf389000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000001f40000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000060c1bd3700000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"value": "0x0",
|
||||
"gas": "0x780a4",
|
||||
"gasUsed": "0x116b7",
|
||||
"input": "0x128acb080000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002bc02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001f4dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea2950fffffffffffffffffffffffffffffffffffffffffffffffffffffff994dcbe9e",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"value": "0x0",
|
||||
"gas": "0x70048",
|
||||
"gasUsed": "0x5fb5",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xc6cde7c39eb2f0f0095f41570af89efc2c1ea828": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x69f28",
|
||||
"gasUsed": "0x9e6",
|
||||
"input": "0x70a0823100000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x69254",
|
||||
"gasUsed": "0x3009",
|
||||
"input": "0xfa461e3300000000000000000000000000000000000000000000000095d5e0843bea2950fffffffffffffffffffffffffffffffffffffffffffffffffffffff994dcbe9e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002bc02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001f4dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"value": "0x0",
|
||||
"gas": "0x6699f",
|
||||
"gasUsed": "0x2021",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d300000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f600000000000000000000000000000000000000000000000095d5e0843bea2950",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0x1f98431c8ad98523631ae4a59f267346ea31f984": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x66093",
|
||||
"gasUsed": "0x216",
|
||||
"input": "0x70a0823100000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0x058ca87960e3da12000000000000000000000000": 0.6,
|
||||
"0x0005aa065bcf8dcf069c57ed3fad1980b2a4a873": 0.6,
|
||||
"0x058e98dfce0fd2a2b9373e6974cea7ffbe91decc": 0.6,
|
||||
"0x0001efb93682b84a1014b9fb7941273c0ba0e9f5": 0.6,
|
||||
"0xfffd8963efd1fc6a506488495d951d5263988d26": 0.75,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0x1f98431c8ad98523631ae4a59f267346ea31f984": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"value": "0x0",
|
||||
"gas": "0x686a9",
|
||||
"gasUsed": "0x172d8",
|
||||
"input": "0x3df0212400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7",
|
||||
"gas": "0x66a85",
|
||||
"gasUsed": "0x170a0",
|
||||
"input": "0x3df0212400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"gas": "0x5dfac",
|
||||
"gasUsed": "0xbd7",
|
||||
"input": "0x70a082310000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000003dd578bd638",
|
||||
"addresses": {
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"value": "0x0",
|
||||
"gas": "0x5d120",
|
||||
"gasUsed": "0x2dd2",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000000",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1,
|
||||
"0xc6cde7c39eb2f0f0095f41570af89efc2c1ea828": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"gas": "0x5a241",
|
||||
"gasUsed": "0x407",
|
||||
"input": "0x70a082310000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000003e3c2af1736",
|
||||
"addresses": {
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"value": "0x0",
|
||||
"gas": "0x51d38",
|
||||
"gasUsed": "0x2d61",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x505e6",
|
||||
"gasUsed": "0x2a4c",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xf0d160dec1749afaf5a831668093b1431f7c8527": 1,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x00002af904b638ed930cddfe78cf741a9f440000": 0.6,
|
||||
"0x0000334c40df9502deb37a4ac7f2d72780000000": 0.6,
|
||||
"0x00002dc527a4a9017812d98e236bc2cb40000000": 0.6,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0x0feef93405c3ca6c31df80109628d3137dcbe3b0": 0.6,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x517ca",
|
||||
"gasUsed": "0x523",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000002851dd1f409",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x50091",
|
||||
"gasUsed": "0x211",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x807a96288a1a408dbc13de2b1d087d10356395d2": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf": 1
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x510a3",
|
||||
"gasUsed": "0x216",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x00000000000000000000000000000000000000000000000972ca2015bb626252",
|
||||
"addresses": {
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1
|
||||
}
|
||||
}
|
||||
],
|
||||
"addresses": {
|
||||
"0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8": 1,
|
||||
"0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 1,
|
||||
"0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2": 1,
|
||||
"0x1f4de5cc412ff43db7663e39aaa04221ca9e995f": 1,
|
||||
"0x11b815efb8f581194ae79006d24e0d814b7697f6": 1,
|
||||
"0xdac17f958d2ee523a2206206994597c13d831ec7": 1,
|
||||
"0x3333333acdedbbc9ad7bda0876e60714195681c5": 1,
|
||||
"0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3": 1,
|
||||
"0xe592427a0aece92de3edee1f18e0157c05861564": 1
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xdc7d7a8920c8eecc098da5b7522a5f31509b5bfc",
|
||||
"to": "0x1ca7c995f8ef0a2989bbce08d5b7efe50a584aa1",
|
||||
"value": "0x0",
|
||||
"gas": "0xabbb",
|
||||
"gasUsed": "0x3982",
|
||||
"input": "0xa9059cbb000000000000000000000000ca6d29232d1435d8198e3e5302495417dd073d61000000000000000000000000000000000000000000000000000000000000000a",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"time": "2.893709ms"
|
||||
}
|
@ -0,0 +1,449 @@
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xf94d7953d44bdcc7a5585a61ed91899ef2d39524",
|
||||
"to": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"value": "0x0",
|
||||
"gas": "0xb3237",
|
||||
"gasUsed": "0x5e42a",
|
||||
"input": "0x0000004d0000000000000000000000000000000000000000000000000000000000c057bd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000002c40000007300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003f8ad599c3a0ff1de082011efddc58f1908eb6e6d8a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb800000000000000000000000000000000000000000000000000000000000000003f11b815efb8f581194ae79006d24e0d814b7697f6c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2dac17f958d2ee523a2206206994597c13d831ec70001f40000000000000000000000000000000000000000000000000000000000000000173333333acdedbbc9ad7bda0876e60714195681c502010000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"time": "1.064843378s",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x240c7488df044d2f69d66201ee59a296c64d714c",
|
||||
"gas": "0xae6af",
|
||||
"gasUsed": "0x5c47b",
|
||||
"input": "0x0000007300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000280000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000009896800000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000003f8ad599c3a0ff1de082011efddc58f1908eb6e6d8a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000bb800000000000000000000000000000000000000000000000000000000000000003f11b815efb8f581194ae79006d24e0d814b7697f6c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2dac17f958d2ee523a2206206994597c13d831ec70001f40000000000000000000000000000000000000000000000000000000000000000173333333acdedbbc9ad7bda0876e60714195681c5020100000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x1f4de5cc412ff43db7663e39aaa04221ca9e995f",
|
||||
"gas": "0xa9f93",
|
||||
"gasUsed": "0x572e",
|
||||
"input": "0xdab617590000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066aeefc920000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d80000000000000000000000000000000000000000000000000000000000000bb8",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa6846",
|
||||
"gasUsed": "0x97c",
|
||||
"input": "0x1a686502",
|
||||
"output": "0x000000000000000000000000000000000000000000000001f6397f4bda22e9d2"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa5cc0",
|
||||
"gasUsed": "0xa88",
|
||||
"input": "0x3850c7bd",
|
||||
"output": "0x0000000000000000000000000000000000004d6d55fae0dc58b57a67bdd9ed70000000000000000000000000000000000000000000000000000000000003050c00000000000000000000000000000000000000000000000000000000000001580000000000000000000000000000000000000000000000000000000000000168000000000000000000000000000000000000000000000000000000000000016800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa4e13",
|
||||
"gasUsed": "0x117",
|
||||
"input": "0xd0c93a7c",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000000000003c"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"gas": "0xa47b4",
|
||||
"gasUsed": "0x9dd",
|
||||
"input": "0x5339c296000000000000000000000000000000000000000000000000000000000000000c",
|
||||
"output": "0xfffffffffffffffffffffffffffffffff7ffedbfdedfcf5dff2541aeb225cebc"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x1f4de5cc412ff43db7663e39aaa04221ca9e995f",
|
||||
"gas": "0xa42c2",
|
||||
"gasUsed": "0x54dc",
|
||||
"input": "0xdab61759000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f600000000000000000000000000000000000000000000000000000000000001f4",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0xa0ce9",
|
||||
"gasUsed": "0x97c",
|
||||
"input": "0x1a686502",
|
||||
"output": "0x000000000000000000000000000000000000000000000000058ca87960e3da12"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0xa0162",
|
||||
"gasUsed": "0xa88",
|
||||
"input": "0x3850c7bd",
|
||||
"output": "0x00000000000000000000000000000000000000000003508b4c0b22de548e9dfefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcfb2500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0x9f2b5",
|
||||
"gasUsed": "0x117",
|
||||
"input": "0xd0c93a7c",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000000000000a"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"gas": "0x9ec15",
|
||||
"gasUsed": "0x9dd",
|
||||
"input": "0x5339c296ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2",
|
||||
"output": "0x8b042000000401a10080b0790000011000808804000020012088600500000000"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"gas": "0x9e07f",
|
||||
"gasUsed": "0x8c30",
|
||||
"input": "0x5e0d443f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7",
|
||||
"gas": "0x9a597",
|
||||
"gasUsed": "0x7852",
|
||||
"input": "0x5e0d443f00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x94a33",
|
||||
"gasUsed": "0x2657",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000002851d282e04",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x90932",
|
||||
"gasUsed": "0x9e1",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x918ce",
|
||||
"gasUsed": "0x9e6",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x00000000000000000000000000000000000000000000000972ca2015bb6261ee"
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x8fd90",
|
||||
"gasUsed": "0x149f1",
|
||||
"input": "0x414bf389000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000000000000000bb80000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000060c1bd37000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"value": "0x0",
|
||||
"gas": "0x8c828",
|
||||
"gasUsed": "0x136ad",
|
||||
"input": "0x128acb080000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066aeefc9200000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066aeefc92ffffffffffffffffffffffffffffffffffffffffffffffff6a2a1f7bc415d64c",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"value": "0x0",
|
||||
"gas": "0x83361",
|
||||
"gasUsed": "0x2a6e",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d300000000000000000000000000000000000000000000000095d5e0843bea29b4",
|
||||
"output": "0x"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x80635",
|
||||
"gasUsed": "0xcf3",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7e342",
|
||||
"gasUsed": "0x9e1",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x7f660",
|
||||
"gasUsed": "0x6f20",
|
||||
"input": "0xfa461e33000000000000000000000000000000000000000000000000000000066aeefc92ffffffffffffffffffffffffffffffffffffffffffffffff6a2a1f7bc415d64c000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002ba0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000bb8c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"value": "0x0",
|
||||
"gas": "0x7c82a",
|
||||
"gasUsed": "0x5f48",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8000000000000000000000000000000000000000000000000000000066aeefc92",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7a627",
|
||||
"gasUsed": "0x5c2d",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8000000000000000000000000000000000000000000000000000000066aeefc92",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x8ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x78683",
|
||||
"gasUsed": "0x523",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x7658f",
|
||||
"gasUsed": "0x211",
|
||||
"input": "0x70a082310000000000000000000000008ad599c3a0ff1de082011efddc58f1908eb6e6d8",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x7b0d9",
|
||||
"gasUsed": "0x129fb",
|
||||
"input": "0x414bf389000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec700000000000000000000000000000000000000000000000000000000000001f40000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000000000000000000000000000000000000060c1bd3700000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"value": "0x0",
|
||||
"gas": "0x780a4",
|
||||
"gasUsed": "0x116b7",
|
||||
"input": "0x128acb080000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000095d5e0843bea295000000000000000000000000000000000000000000000000000000001000276a400000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002bc02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001f4dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000",
|
||||
"output": "0x00000000000000000000000000000000000000000000000095d5e0843bea2950fffffffffffffffffffffffffffffffffffffffffffffffffffffff994dcbe9e",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"value": "0x0",
|
||||
"gas": "0x70048",
|
||||
"gasUsed": "0x5fb5",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b234162",
|
||||
"output": "0x"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x69f28",
|
||||
"gasUsed": "0x9e6",
|
||||
"input": "0x70a0823100000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"output": "0x"
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"value": "0x0",
|
||||
"gas": "0x69254",
|
||||
"gasUsed": "0x3009",
|
||||
"input": "0xfa461e3300000000000000000000000000000000000000000000000095d5e0843bea2950fffffffffffffffffffffffffffffffffffffffffffffffffffffff994dcbe9e000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000400000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000000000002bc02aaa39b223fe8d0a0e5c4f27ead9083c756cc20001f4dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000000000000000000000",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0xe592427a0aece92de3edee1f18e0157c05861564",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"value": "0x0",
|
||||
"gas": "0x6699f",
|
||||
"gasUsed": "0x2021",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d300000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f600000000000000000000000000000000000000000000000095d5e0843bea2950",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x11b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x66093",
|
||||
"gasUsed": "0x216",
|
||||
"input": "0x70a0823100000000000000000000000011b815efb8f581194ae79006d24e0d814b7697f6",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"value": "0x0",
|
||||
"gas": "0x686a9",
|
||||
"gasUsed": "0x172d8",
|
||||
"input": "0x3df0212400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xbebc44782c7db0a1a60cb6fe97d0b483032ff1c7",
|
||||
"gas": "0x66a85",
|
||||
"gasUsed": "0x170a0",
|
||||
"input": "0x3df0212400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000066b2340fe0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"output": "0x",
|
||||
"calls": [
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"gas": "0x5dfac",
|
||||
"gasUsed": "0xbd7",
|
||||
"input": "0x70a082310000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000003dd578bd638"
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"value": "0x0",
|
||||
"gas": "0x5d120",
|
||||
"gasUsed": "0x2dd2",
|
||||
"input": "0x23b872dd0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d30000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5000000000000000000000000000000000000000000000000000000066b2340fe",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000000"
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
||||
"gas": "0x5a241",
|
||||
"gasUsed": "0x407",
|
||||
"input": "0x70a082310000000000000000000000003333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000003e3c2af1736"
|
||||
},
|
||||
{
|
||||
"type": "CALL",
|
||||
"from": "0x3333333acdedbbc9ad7bda0876e60714195681c5",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"value": "0x0",
|
||||
"gas": "0x51d38",
|
||||
"gasUsed": "0x2d61",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"output": "0x0000000000000000000000000000000000000000000000000000000000000001",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x505e6",
|
||||
"gasUsed": "0x2a4c",
|
||||
"input": "0xa9059cbb0000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3000000000000000000000000000000000000000000000000000000066b98c297",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"gas": "0x517ca",
|
||||
"gasUsed": "0x523",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x000000000000000000000000000000000000000000000000000002851dd1f409",
|
||||
"calls": [
|
||||
{
|
||||
"type": "DELEGATECALL",
|
||||
"from": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
|
||||
"to": "0xa2327a938febf5fec13bacfb16ae10ecbc4cbdcf",
|
||||
"gas": "0x50091",
|
||||
"gasUsed": "0x211",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "STATICCALL",
|
||||
"from": "0x5af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"to": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
|
||||
"gas": "0x510a3",
|
||||
"gasUsed": "0x216",
|
||||
"input": "0x70a082310000000000000000000000005af7f71c7747fb0eceb2eef115c3fa34dd4998d3",
|
||||
"output": "0x00000000000000000000000000000000000000000000000972ca2015bb626252"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
10540
packages/tracing-client/test/traces/default/erc20-transfer.json
Normal file
10540
packages/tracing-client/test/traces/default/erc20-transfer.json
Normal file
File diff suppressed because it is too large
Load Diff
5
packages/tracing-client/test/tx/erc20-transfer.json
Normal file
5
packages/tracing-client/test/tx/erc20-transfer.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"from": "0xDC7d7A8920C8Eecc098da5B7522a5F31509b5Bfc",
|
||||
"to": "0x1ca7c995f8eF0A2989BbcE08D5B7Efe50A584aa1",
|
||||
"data": "0xa9059cbb000000000000000000000000ca6d29232d1435d8198e3e5302495417dd073d610000000000000000000000000000000000000000000000000de0b6b3a7640000"
|
||||
}
|
5
packages/tracing-client/test/tx/mainnet-test.json
Normal file
5
packages/tracing-client/test/tx/mainnet-test.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"from": "0x66b6d6e78fbc4575f5197ae15af62f5dc7d48349",
|
||||
"to": "0xBA11D00c5f74255f56a5E366F4F77f5A186d7f55",
|
||||
"data": "0xa9059cbb0000000000000000000000009acbb72cf67103a30333a32cd203459c6a9c33110000000000000000000000000000000000000000000001b17762dcdde1bc1000"
|
||||
}
|
5
packages/tracing-client/test/tx/rinkeby-test.json
Normal file
5
packages/tracing-client/test/tx/rinkeby-test.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"from": "0x633f5500a87c3dbb9c15f4d41ed5a33dacaf4184",
|
||||
"to": "0x586c82144eb8c0a64c654ef30463524c759a8f30",
|
||||
"data": "0xade823420000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000008430783339363062396537626136316337666236623662396263616637356538613138616636306138333564326162383064623665326162346430646336393863666633323062356561353235303466323831656338313337393733353835396334313336343561633136616163613232386439343939643066623631663866326537316200000000000000000000000000000000000000000000000000000000"
|
||||
}
|
74
packages/tracing-client/tsconfig.json
Normal file
74
packages/tracing-client/tsconfig.json
Normal file
@ -0,0 +1,74 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||
|
||||
/* Basic Options */
|
||||
// "incremental": true, /* Enable incremental compilation */
|
||||
"target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', 'ES2021', or 'ESNEXT'. */
|
||||
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
||||
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||
// "checkJs": true, /* Report errors in .js files. */
|
||||
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', 'react', 'react-jsx' or 'react-jsxdev'. */
|
||||
"declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||
"outDir": "./dist", /* Redirect output structure to the directory. */
|
||||
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||
// "composite": true, /* Enable project compilation */
|
||||
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||
// "removeComments": true, /* Do not emit comments to output. */
|
||||
// "noEmit": true, /* Do not emit outputs. */
|
||||
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||
|
||||
/* Strict Type-Checking Options */
|
||||
"strict": true, /* Enable all strict type-checking options. */
|
||||
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
||||
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||
|
||||
/* Additional Checks */
|
||||
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an 'override' modifier. */
|
||||
// "noPropertyAccessFromIndexSignature": true, /* Require undeclared properties from index signatures to use element accesses. */
|
||||
|
||||
/* Module Resolution Options */
|
||||
"moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||
// "types": [], /* Type declaration files to be included in compilation. */
|
||||
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||
|
||||
/* Source Map Options */
|
||||
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||
|
||||
/* Experimental Options */
|
||||
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||
|
||||
/* Advanced Options */
|
||||
"skipLibCheck": true, /* Skip type checking of declaration files. */
|
||||
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"exclude": ["src/**/*.test.ts"]
|
||||
}
|
83
yarn.lock
83
yarn.lock
@ -299,6 +299,21 @@
|
||||
"@ethersproject/properties" "^5.3.0"
|
||||
"@ethersproject/strings" "^5.3.0"
|
||||
|
||||
"@ethersproject/abi@5.3.1":
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.3.1.tgz#69a1a496729d3a83521675a57cbe21f3cc27241c"
|
||||
integrity sha512-F98FWTJG7nWWAQ4DcV6R0cSlrj67MWK3ylahuFbzkumem5cLWg1p7fZ3vIdRoS1c7TEf55Lvyx0w7ICR47IImw==
|
||||
dependencies:
|
||||
"@ethersproject/address" "^5.3.0"
|
||||
"@ethersproject/bignumber" "^5.3.0"
|
||||
"@ethersproject/bytes" "^5.3.0"
|
||||
"@ethersproject/constants" "^5.3.0"
|
||||
"@ethersproject/hash" "^5.3.0"
|
||||
"@ethersproject/keccak256" "^5.3.0"
|
||||
"@ethersproject/logger" "^5.3.0"
|
||||
"@ethersproject/properties" "^5.3.0"
|
||||
"@ethersproject/strings" "^5.3.0"
|
||||
|
||||
"@ethersproject/abstract-provider@5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.2.0.tgz#b5c24b162f119b5d241738ded9555186013aa77d"
|
||||
@ -619,6 +634,13 @@
|
||||
dependencies:
|
||||
"@ethersproject/logger" "^5.3.0"
|
||||
|
||||
"@ethersproject/networks@5.3.1":
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.3.1.tgz#78fe08324cee289ce239acf8c746121934b2ef61"
|
||||
integrity sha512-6uQKHkYChlsfeiZhQ8IHIqGE/sQsf25o9ZxAYpMxi15dLPzz3IxOEF5KiSD32aHwsjXVBKBSlo+teAXLlYJybw==
|
||||
dependencies:
|
||||
"@ethersproject/logger" "^5.3.0"
|
||||
|
||||
"@ethersproject/pbkdf2@5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.2.0.tgz#8166a7a7238a5fd1d9bb6eb2000fea0f19fdde06"
|
||||
@ -699,6 +721,31 @@
|
||||
bech32 "1.1.4"
|
||||
ws "7.4.6"
|
||||
|
||||
"@ethersproject/providers@5.3.1":
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.3.1.tgz#a12c6370e8cbc0968c9744641b8ef90b0dd5ec2b"
|
||||
integrity sha512-HC63vENTrur6/JKEhcQbA8PRDj1FAesdpX98IW+xAAo3EAkf70ou5fMIA3KCGzJDLNTeYA4C2Bonz849tVLekg==
|
||||
dependencies:
|
||||
"@ethersproject/abstract-provider" "^5.3.0"
|
||||
"@ethersproject/abstract-signer" "^5.3.0"
|
||||
"@ethersproject/address" "^5.3.0"
|
||||
"@ethersproject/basex" "^5.3.0"
|
||||
"@ethersproject/bignumber" "^5.3.0"
|
||||
"@ethersproject/bytes" "^5.3.0"
|
||||
"@ethersproject/constants" "^5.3.0"
|
||||
"@ethersproject/hash" "^5.3.0"
|
||||
"@ethersproject/logger" "^5.3.0"
|
||||
"@ethersproject/networks" "^5.3.0"
|
||||
"@ethersproject/properties" "^5.3.0"
|
||||
"@ethersproject/random" "^5.3.0"
|
||||
"@ethersproject/rlp" "^5.3.0"
|
||||
"@ethersproject/sha2" "^5.3.0"
|
||||
"@ethersproject/strings" "^5.3.0"
|
||||
"@ethersproject/transactions" "^5.3.0"
|
||||
"@ethersproject/web" "^5.3.0"
|
||||
bech32 "1.1.4"
|
||||
ws "7.4.6"
|
||||
|
||||
"@ethersproject/random@5.2.0":
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.2.0.tgz#1d7e19f17d88eda56228a263063826829e49eebe"
|
||||
@ -6078,6 +6125,42 @@ ethers@^5.2.0:
|
||||
"@ethersproject/web" "5.3.0"
|
||||
"@ethersproject/wordlists" "5.3.0"
|
||||
|
||||
ethers@^5.3.1:
|
||||
version "5.3.1"
|
||||
resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.3.1.tgz#1f018f0aeb651576cd84fd987a45f0b99646d761"
|
||||
integrity sha512-xCKmC0gsZ9gks89ZfK3B1y6LlPdvX5fxDtu9SytnpdDJR1M7pmJI+4H0AxQPMgUYr7GtQdmECLR0gWdJQ+lZYw==
|
||||
dependencies:
|
||||
"@ethersproject/abi" "5.3.1"
|
||||
"@ethersproject/abstract-provider" "5.3.0"
|
||||
"@ethersproject/abstract-signer" "5.3.0"
|
||||
"@ethersproject/address" "5.3.0"
|
||||
"@ethersproject/base64" "5.3.0"
|
||||
"@ethersproject/basex" "5.3.0"
|
||||
"@ethersproject/bignumber" "5.3.0"
|
||||
"@ethersproject/bytes" "5.3.0"
|
||||
"@ethersproject/constants" "5.3.0"
|
||||
"@ethersproject/contracts" "5.3.0"
|
||||
"@ethersproject/hash" "5.3.0"
|
||||
"@ethersproject/hdnode" "5.3.0"
|
||||
"@ethersproject/json-wallets" "5.3.0"
|
||||
"@ethersproject/keccak256" "5.3.0"
|
||||
"@ethersproject/logger" "5.3.0"
|
||||
"@ethersproject/networks" "5.3.1"
|
||||
"@ethersproject/pbkdf2" "5.3.0"
|
||||
"@ethersproject/properties" "5.3.0"
|
||||
"@ethersproject/providers" "5.3.1"
|
||||
"@ethersproject/random" "5.3.0"
|
||||
"@ethersproject/rlp" "5.3.0"
|
||||
"@ethersproject/sha2" "5.3.0"
|
||||
"@ethersproject/signing-key" "5.3.0"
|
||||
"@ethersproject/solidity" "5.3.0"
|
||||
"@ethersproject/strings" "5.3.0"
|
||||
"@ethersproject/transactions" "5.3.0"
|
||||
"@ethersproject/units" "5.3.0"
|
||||
"@ethersproject/wallet" "5.3.0"
|
||||
"@ethersproject/web" "5.3.0"
|
||||
"@ethersproject/wordlists" "5.3.0"
|
||||
|
||||
ethjs-unit@0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699"
|
||||
|
Loading…
Reference in New Issue
Block a user