title |
---|
The `trace` Module |
The trace module is for getting a deeper insight into transaction processing. It includes two sets of calls; the transaction trace filtering API and the ad-hoc tracing API.
Note: In order to use these API Parity must be fully synced with flags $ parity --tracing on
.
The ad-hoc tracing API allows you to perform a number of different diagnostics on calls or transactions, either historical ones from the chain or hypothetical ones not yet mined. The diagnostics include:
trace
Transaction trace. An equivalent trace to that in the previous section.vmTrace
Virtual Machine execution trace. Provides a full trace of the VM's state throughout the execution of the transaction, including for any subcalls.stateDiff
State difference. Provides information detailing all altered portions of the Ethereum state made due to the execution of the transaction.
There are three means of providing a transaction to execute; either providing the same information as when making
a call using eth_call
(see trace_call
), through providing raw, signed, transaction data as when using
eth_sendRawTransaction
(see trace_rawTransaction
) or simply a transaction hash for a previously mined
transaction (see trace_replayTransaction
). In the latter case, your node must be in archive mode or the
transaction should be within the most recent 1000 blocks.
These APIs allow you to get a full externality trace on any transaction executed throughout the Parity chain.
Unlike the log filtering API, you are able to search and filter based only upon address information.
Information returned includes the execution of all CREATE
s, SUICIDE
s and all variants of CALL
together
with input data, output data, gas usage, amount transferred and the success status of each individual action.
The traceAddress
field of all returned traces, gives the exact location in the call trace [index in root,
index in first CALL
, index in second CALL
, ...].
i.e. if the trace is:
A
CALLs B
CALLs G
CALLs C
CALLs G
then it should look something like:
[ {A: []}, {B: [0]}, {G: [0, 0]}, {C: [1]}, {G: [1, 0]} ]
Executes the given call and returns a number of possible traces for it.
Object
- Call options, same aseth_call
.from
:Address
- (optional) 20 Bytes - The address the transaction is send from.to
:Address
- (optional when creating new contract) 20 Bytes - The address the transaction is directed to.gas
:Quantity
- (optional) Integer of the gas provided for the transaction execution. eth_call consumes zero gas, but this parameter may be needed by some executions.gasPrice
:Quantity
- (optional) Integer of the gas price used for each paid gas.value
:Quantity
- (optional) Integer of the value sent with this transaction.data
:Data
- (optional) 4 byte hash of the method signature followed by encoded parameters. For details see Ethereum Contract ABI.
Array
- Type of trace, one or more of:"vmTrace"
,"trace"
,"stateDiff"
.Quantity
|Tag
- (optional) Integer of a block number, or the string'earliest'
,'latest'
or'pending'
.
Array
- Block traces
Request
curl --data '{"method":"trace_call","params":[{ ... },["trace"]],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"output": "0x",
"stateDiff": null,
"trace": [{
"action": { ... },
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"type": "call"
}],
"vmTrace": null
}
}
Traces a call to eth_sendRawTransaction
without making the call, returning the traces
Data
- Raw transaction data.Array
- Type of trace, one or more of:"vmTrace"
,"trace"
,"stateDiff"
.
params: [
"0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675",
["trace"]
]
Object
- Block traces.
Request
curl --data '{"method":"trace_rawTransaction","params":["0xf86a8086d55698372431831e848094f0109fc8df283027b6285cc889f5aa624eac1f55843b9aca008025a009ebb6ca057a0535d6186462bc0b465b561c94a295bdb0621fc19208ab149a9ca0440ffd775ce91a833ab410777204d5341a6f9fa91216a6f3ee2c051fea6a0428",["trace"]],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"output": "0x",
"stateDiff": null,
"trace": [{
"action": {
"callType": "call",
"from": "0x2c7536e3605d9c16a7a3d7b1898e529396a65c23",
"gas": "0x1e3278",
"input": "0x",
"to": "0xf0109fc8df283027b6285cc889f5aa624eac1f55",
"value": "0x3b9aca00"
},
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"type": "call"
}],
"vmTrace": null
}, "id": 1
}
Replays a transaction, returning the traces.
Hash
- Transaction hash.Array
- Type of trace, one or more of:"vmTrace"
,"trace"
,"stateDiff"
.
params: [
"0x02d4a872e096445e80d05276ee756cefef7f3b376bcec14246469c0cd97dad8f",
["trace"]
]
Object
- Block traces.
Request
curl --data '{"method":"trace_replayTransaction","params":["0x02d4a872e096445e80d05276ee756cefef7f3b376bcec14246469c0cd97dad8f",["trace"]],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"output": "0x",
"stateDiff": null,
"trace": [{
"action": { ... },
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"type": "call"
}],
"vmTrace": null
}
}
Replays all transactions in a block returning the requested traces for each transaction.
Quantity
|Tag
- Integer of a block number, or the string'earliest'
,'latest'
or'pending'
.Array
- Type of trace, one or more of:"vmTrace"
,"trace"
,"stateDiff"
.
params: [
"0x2ed119",
["trace"]
]
Array
- Block transactions traces.
Request
curl --data '{"method":"trace_replayBlockTransactions","params":["0x2ed119",["trace"]],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"output": "0x",
"stateDiff": null,
"trace": [{
"action": { ... },
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"type": "call"
}],
"vmTrace": null
},
...
]
}
Returns traces created at given block.
Quantity
|Tag
- Integer of a block number, or the string'earliest'
,'latest'
or'pending'
.
params: [
"0x2ed119" // 3068185
]
Array
- Block traces.
Request
curl --data '{"method":"trace_block","params":["0x2ed119"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"action": {
"callType": "call",
"from": "0xaa7b131dc60b80d3cf5e59b5a21a666aa039c951",
"gas": "0x0",
"input": "0x",
"to": "0xd40aba8166a212d6892125f079c33e6f5ca19814",
"value": "0x4768d7effc3fbe"
},
"blockHash": "0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add",
"blockNumber": 3068185,
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"transactionHash": "0x07da28d752aba3b9dd7060005e554719c6205c8a3aea358599fc9b245c52f1f6",
"transactionPosition": 0,
"type": "call"
},
...
]
}
Returns traces matching given filter
Object
- The filter objectfromBlock
:Quantity
|Tag
- (optional) From this block.toBlock
:Quantity
|Tag
- (optional) To this block.fromAddress
:Array
- (optional) Sent from these addresses.toAddress
:Address
- (optional) Sent to these addresses.after
:Quantity
- (optional) The offset trace number.count
:Quantity
- (optional) Integer number of traces to display in a batch.
params: [{
"fromBlock": "0x2ed0c4", // 3068100
"toBlock": "0x2ed128", // 3068200
"toAddress": ["0x8bbB73BCB5d553B5A556358d27625323Fd781D37"],
"after": 1000,
"count": 100
}]
Array
- Traces matching given filter
Request
curl --data '{"method":"trace_filter","params":[{"fromBlock":"0x2ed0c4","toBlock":"0x2ed128","toAddress":["0x8bbB73BCB5d553B5A556358d27625323Fd781D37"]}],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"action": {
"callType": "call",
"from": "0x32be343b94f860124dc4fee278fdcbd38c102d88",
"gas": "0x4c40d",
"input": "0x",
"to": "0x8bbb73bcb5d553b5a556358d27625323fd781d37",
"value": "0x3f0650ec47fd240000"
},
"blockHash": "0x86df301bcdd8248d982dbf039f09faf792684e1aeee99d5b58b77d620008b80f",
"blockNumber": 3068183,
"result": {
"gasUsed": "0x0",
"output": "0x"
},
"subtraces": 0,
"traceAddress": [],
"transactionHash": "0x3321a7708b1083130bd78da0d62ead9f6683033231617c9d268e2c7e3fa6c104",
"transactionPosition": 3,
"type": "call"
},
...
]
}
Returns trace at given position.
Hash
- Transaction hash.Array
- Index positions of the traces.
params: [
"0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",
["0x0"]
]
Object
- Trace object
Request
curl --data '{"method":"trace_get","params":["0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",["0x0"]],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": {
"action": {
"callType": "call",
"from": "0x1c39ba39e4735cb65978d4db400ddd70a72dc750",
"gas": "0x13e99",
"input": "0x16c72721",
"to": "0x2bd2326c993dfaef84f696526064ff22eba5b362",
"value": "0x0"
},
"blockHash": "0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add",
"blockNumber": 3068185,
"result": {
"gasUsed": "0x183",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"subtraces": 0,
"traceAddress": [
0
],
"transactionHash": "0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",
"transactionPosition": 2,
"type": "call"
}
}
Returns all traces of given transaction
Hash
- Transaction hash
params: ["0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3"]
Array
- Traces of given transaction
Request
curl --data '{"method":"trace_transaction","params":["0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localhost:8545
Response
{
"id": 1,
"jsonrpc": "2.0",
"result": [
{
"action": {
"callType": "call",
"from": "0x1c39ba39e4735cb65978d4db400ddd70a72dc750",
"gas": "0x13e99",
"input": "0x16c72721",
"to": "0x2bd2326c993dfaef84f696526064ff22eba5b362",
"value": "0x0"
},
"blockHash": "0x7eb25504e4c202cf3d62fd585d3e238f592c780cca82dacb2ed3cb5b38883add",
"blockNumber": 3068185,
"result": {
"gasUsed": "0x183",
"output": "0x0000000000000000000000000000000000000000000000000000000000000001"
},
"subtraces": 0,
"traceAddress": [
0
],
"transactionHash": "0x17104ac9d3312d8c136b7f44d4b8b47852618065ebfa534bd2d3b5ef218ca1f3",
"transactionPosition": 2,
"type": "call"
},
...
]
}