Skip to main content

GetTransaction

Query Executed Transaction Details#

The GetTransaction method retrieves comprehensive information about an executed Sui transaction using its digest. This includes transaction inputs, execution effects, emitted events, object changes, and balance modifications—essential for verifying transaction outcomes and building analytics tools.

Method Signature#

Service: sui.rpc.v2beta2.LedgerService Method: GetTransaction Type: Unary RPC

Parameters#

ParameterTypeRequiredDescription
digeststringYesTransaction digest (64-char base58 string)
read_maskFieldMaskNoFields to include in response

Field Mask Options#

PathDescription
digestTransaction identifier
transactionTransaction data and inputs
effectsExecution effects and state changes
eventsEmitted events
object_changesObject modifications
balance_changesBalance alterations
timestamp_msExecution timestamp

Response Structure#

message Transaction {
string digest = 1;
TransactionData transaction = 2;
TransactionEffects effects = 3;
repeated Event events = 4;
repeated ObjectChange object_changes = 5;
repeated BalanceChange balance_changes = 6;
uint64 timestamp_ms = 7;
}

Code Examples#

import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';

const ENDPOINT = 'api-sui-mainnet-full.n.dwellir.com';
const API_TOKEN = 'your_api_token_here';

const packageDefinition = protoLoader.loadSync('./protos/ledger.proto', {
keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true,
includeDirs: ['./protos']
});

const protoDescriptor = grpc.loadPackageDefinition(packageDefinition) as any;
const credentials = grpc.credentials.createSsl();
const client = new protoDescriptor.sui.rpc.v2beta2.LedgerService(ENDPOINT, credentials);

const metadata = new grpc.Metadata();
metadata.add('x-api-key', API_TOKEN);

async function getTransaction(digest: string): Promise<any> {
return new Promise((resolve, reject) => {
const request = {
digest: digest,
read_mask: {
paths: ['digest', 'transaction', 'effects', 'events', 'timestamp_ms']
}
};

client.GetTransaction(request, metadata, (error: any, response: any) => {
if (error) {
console.error('GetTransaction error:', error.message);
reject(error);
return;
}

resolve(response);
});
});
}

// Usage
const txDigest = 'HUwTkTFSGzKaDXUpLqZigkMb59J3T82zWQKcvQEL9G3X';
const tx = await getTransaction(txDigest);

console.log('Transaction:', tx.digest);
console.log('Status:', tx.effects.status.status);
console.log('Gas Used:', tx.effects.gasUsed);
console.log('Events:', tx.events.length);

Use Cases#

Transaction Verification#

async function verifyTransactionSuccess(digest: string): Promise<boolean> {
const tx = await getTransaction(digest);
return tx.effects?.status?.status === 'success';
}

Gas Cost Analysis#

async function analyzeGas(digest: string) {
const tx = await getTransaction(digest);
const gas = tx.effects.gasUsed;

return {
computation: parseInt(gas.computationCost),
storage: parseInt(gas.storageCost),
rebate: parseInt(gas.storageRebate),
total: parseInt(gas.computationCost) + parseInt(gas.storageCost) - parseInt(gas.storageRebate)
};
}

Need help? Contact support@dwellir.com or check the gRPC overview.