🔍 trace_callMany RPC Method - Base Chain
Executes multiple calls like eth_call
but returns traces for each call. In trace_callMany
you can specify multiple trace_call
objects and execute them on the same block of the Base blockchain.
Returns
array
- The list of trace objectsoutput
- The output (return value) of the callstateDiff
- The state changes that would happen due to the transaction in the given eth_calltrace
- The trace of the callaction
- The action to be performedfrom
- The address of the sendercallType
- The type of method such as call, delegatecallgas
- The gas provided by the senderinput
- The input data of the call or delegatecallto
- The address of the receivervalue
- The amount of ETH sent with this transaction
result
- The result of the transactiongasUsed
- Gas used by the transactionoutput
- The return value of the call. Can be empty.
subtraces
- The traces of internal transactions (calls made by the contract)traceAddress
- The list of addresses where the call was executed, the address of the parents and the order of the current sub calltype
- The value of the method such as call or create
vmTrace
- The full trace of the virtual machine's state during execution of the given eth_call, including any sub-calls
Need RPC API keys?
Get 12.5M archival requests for free today.
Parameters
1.ARRAY OF TRACE CALL PARAM ARRAYS
[required]
The individual objects are similar to eth_call
. The difference to trace_call
is that you provide an array of trace_call
params and get a response for each trace.
1st inner param of the array
object
- The eth_call data
from
[optional] - The address from which the transaction is sent.to
- The address where the transaction is sent to.gas
[optional] - Integer of the gas provided for the transaction execution. Althougheth_call
consumes zero gas, this parameter may still be needed by some executions.gasPrice
[optional] - Integer of the gasPrice used for each paid gas as hexadecimal.value
[optional] - Integer of the value sent with a stated transactiondata
[optional] - Hash of the method signature and encoded parameters. More info 👉 Ethereum Contract ABI (opens in a new tab)
2nd inner param of the array
array
- The type of traces to includevmTrace
- Include the full trace of the virtual machine during the transactiontrace
- Include the basic trace of the transactionstateDiff
- Include state changes caused by the transaction
2.Block number or Tag
[required]
Hexadecimal block number or a Tag
"latest", "earliest", or "pending".
Note: Unlike Ethereum mainnet, Base chain does not support the "safe" and "finalized" tags.
Request
POST https://base-mainnet.chainnodes.org/YOUR-API-KEY
Example
Confusing? Ask blockchain developers in Chainnodes Telegram Chat (opens in a new tab)
- HTTPS POST Request with a JSON RPC call in the body
- Replace YOUR-API-KEY with the API key from your Chainnodes.org Dashboard
- You can use a different supported network by replacing
base-mainnet
curl https://base-mainnet.chainnodes.org/YOUR-API-KEY \
-X POST \
-H "Content-Type: application/json" \
-d '{"method":"trace_callMany","params":[[[{"from":null,"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","data":"0x70a082310000000000000000000000004200000000000000000000000000000000000011"},["stateDiff"]],[{"from":null,"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","data":"0x70a082310000000000000000000000004200000000000000000000000000000000000011"},["trace"]]],"latest"],"id":1,"jsonrpc":"2.0"}'
Body
{
"jsonrpc": "2.0",
"id": 1,
"result": [
{
"output": "0x00000000000000000000000000000000000000000000000000000000e8d4a51000",
"stateDiff": {
"0x0000000000000000000000000000000000000000": {
"balance": {
"*": {
"from": "0x1bc16cf6c9dac36f8",
"to": "0x1bc16cf6c7e65f1e0"
}
},
"code": "=",
"nonce": {
"*": {
"from": "0x0",
"to": "0x1"
}
},
"storage": {}
}
},
"trace": [],
"vmTrace": null
},
{
"output": "0x00000000000000000000000000000000000000000000000000000000e8d4a51000",
"stateDiff": null,
"trace": [
{
"action": {
"from": "0x0000000000000000000000000000000000000000",
"callType": "call",
"gas": "0x2fa9cc8",
"input": "0x70a082310000000000000000000000004200000000000000000000000000000000000011",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"value": "0x0"
},
"result": {
"gasUsed": "0xa2a",
"output": "0x00000000000000000000000000000000000000000000000000000000e8d4a51000"
},
"subtraces": 0,
"traceAddress": [],
"type": "call"
}
],
"vmTrace": null
}
]
}
Common Use Cases
Multi-Token Balance Checking
This example checks USDC and WETH balances in a single request:
{"method":"trace_callMany","params":[
[
[
{"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","data":"0x70a08231000000000000000000000000YourAddress"},
["trace"]
],
[
{"to":"0x4200000000000000000000000000000000000006","data":"0x70a08231000000000000000000000000YourAddress"},
["trace"]
]
],
"latest"
],"id":1,"jsonrpc":"2.0"}
Transaction Simulation with State Changes
Simulate a token transfer while also seeing state changes:
{"method":"trace_callMany","params":[
[
[
{
"from":"0xYourAddress",
"to":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"data":"0xa9059cbb000000000000000000000000RecipientAddress0000000000000000000000000000000000000000000000000000000000000064"
},
["stateDiff","trace"]
]
],
"latest"
],"id":1,"jsonrpc":"2.0"}
Related Methods
- trace_call - Execute a single call and get its trace
- trace_transaction - Get trace for an existing transaction
- trace_block - Get traces for all transactions in a block