simulateTransaction
Simulate sending a transaction. This method is useful for testing and debugging transactions before sending them to the network.
Parameters
transaction
: (string) [required] - The transaction as an encoded string. The transaction must have a valid block hash, but doesn't need to be signed.config
: (object) [optional] - Configuration object with the following options:commitment
: (string) [optional] - The commitment level to use for the query. The default isfinalized
. Possible values are:finalized
- Queries the most recent block confirmed by a super majority of the cluster as having reached maximum lockout, meaning the cluster has recognized this block as finalized.confirmed
- Queries the most recent block that has been voted on by a super majority of the cluster.processed
- Queries its most recent block. The block may still be skipped by the cluster.
sigVerify
: (boolean) [optional] - Iftrue
, verifies the signatures in the transaction. Conflicts withreplaceRecentBlockhash
. The default isfalse
.replaceRecentBlockhash
: (boolean) [optional] - Iftrue
, replaces the recent block hash in the transaction with the latest block hash. Conflicts withsigVerify
. The default isfalse
.encoding
: (string) [optional] - The encoding format to use. Can be one ofbase58
(deprecated) orbase64
.minContextSlot
: [optional] - The minimum slot to use for the query.innerInstructions
: (boolean) [optional] - Iftrue
, returns the inner instructions of the transaction. The inner instructions will bejsonParsed
where possible, otherwisejson
.accounts
: (object) [optional] - An object containing the following fields:addresses
: (array) [optional] - An array of addresses to include in the response.encoding
: (string) [optional] - The encoding format to use. Can be one ofbase58
,base64
,base64+zstd
, orjsonParsed
.
Returns
result
- null
if the account doesn't exist; otherwise an object with the following fields:
context
- An object containing the following keys:slot
- The slot number of the block that was queried.apiVersion
- The API version used for the query.
value
- An object with the following fields:err
- An error if transaction failed,null
if transaction succeeded.logs
- An array of log messages generated by the transaction. Returnsnull
if the simulation failed.accounts
-data
- The account data, encoded in the specified format.executable
- A boolean indicating whether the account is executable.lamports
- The number of lamports in the account.owner
- The public key of the program that owns the account.rentEpoch
- The epoch in which the account will next be due for rent.space
- The size of the account data in bytes.
unitsConsumed
- The number of compute units consumed by the transaction.returnData
- An array of objects containing the following fields:programId
- The public key of the program that executed the transaction.data
- The account data, encoded asbase64
binary data.
innerInstructions
- An array of inner instructions.
Request
- curl
curl https://solana-testnet.infura.io/v3/<YOUR-API-KEY> \
-X POST \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "simulateTransaction", "params": ["AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEDArczbMia1tLmq7zz4DinMNN0pJ1JtLdqIJPUw3YrGCzYAMHBsgN27lcgB6H2WQvFgyZuJYHa46puOQo9yQ8CVQbd9uHXZaGT2cvhRs7reawctIXtX1s3kTqM9YV+/wCp20C7Wj2aiuk5TReAXo+VTVg8QTHjs0UjNMMKCvpzZ+ABAgEBARU=", {"encoding": "base64"}]}'
Response
- JSON
{
"jsonrpc": "2.0",
"result": {
"context": { "slot": 218 },
"value": {
"err": null,
"accounts": null,
"logs": [
"Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri invoke [1]",
"Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri consumed 2366 of 1400000 compute units",
"Program return: 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri KgAAAAAAAAA=",
"Program 83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri success"
],
"returnData": {
"data": ["Kg==", "base64"],
"programId": "83astBRguLMdt2h5U1Tpdq5tjFoJ6noeGwaY3mDLVcri"
},
"unitsConsumed": 2366
}
},
"id": 1
}