What is a transaction digest, and how do I look one up?
November 12, 2026
A transaction digest is the unique ID of a Sui transaction: a 32-byte Blake2b-256 hash of the transaction data, written in Base58, for example DqqPL1tWiZTqntqFthiSKAPSQj78SGzEwydEozsYY6q6. The digest is fixed as soon as the transaction is built, before anyone signs it. To look one up, paste it into a Sui explorer, run sui client tx-block <DIGEST>, or query it with getTransaction (gRPC) or transaction(digest:) (GraphQL).
How the digest is computed
The digest hashes the BCS-encoded TransactionData (sender, commands, inputs, gas data, expiration), prefixed with the type tag TransactionData:::
digest = base58( blake2b256( "TransactionData::" || bcs(TransactionData) ) )Signatures aren't part of the hash. That's why a sponsor and a user can both sign the same digest, and why you can know the digest before the transaction is sent. Change anything (the gas budget, an object version, the sender) and you get a different digest.
You can get it without executing anything:
import { Transaction } from '@mysten/sui/transactions'
const tx = new Transaction()
tx.moveCall({ target: `${PACKAGE_ID}::counter::increment`, arguments: [tx.object(COUNTER_ID)] })
tx.setSender(address)
const digest = await tx.getDigest({ client }) // resolves gas/objects, then hashesFrom the CLI, add --tx-digest to sui client call, sui client ptb and the other transaction commands to print the digest without executing.
Inside Move, ctx.digest() returns the raw 32 bytes of the current transaction's digest. The framework warns against using it as a source of randomness. Use sui::random for that.
Looking a digest up
Explorer. Paste the digest into the search box of a Sui explorer such as Suiscan or SuiVision, and make sure you're on the right network. A testnet digest won't show up on mainnet.
CLI.
sui client tx-block DqqPL1tWiZTqntqFthiSKAPSQj78SGzEwydEozsYY6q6This prints the transaction and its effects from the network your CLI is connected to. Add --json if you want machine-readable output.
TypeScript (@mysten/sui v2, gRPC).
import { SuiGrpcClient } from '@mysten/sui/grpc'
const client = new SuiGrpcClient({
network: 'mainnet',
baseUrl: 'https://fullnode.mainnet.sui.io:443',
})
const result = await client.getTransaction({
digest: 'DqqPL1tWiZTqntqFthiSKAPSQj78SGzEwydEozsYY6q6',
include: { effects: true, events: true, balanceChanges: true },
})
const tx = result.Transaction ?? result.FailedTransaction
console.log(tx.status, tx.checkpoint, tx.effects.gasUsed)result.$kind is 'FailedTransaction' when the transaction executed but aborted. Look at tx.status.error to find out why. To wait for a transaction you just submitted to be indexed, use client.waitForTransaction({ digest }).
GraphQL.
curl -s https://graphql.mainnet.sui.io/graphql -H 'content-type: application/json' -d '{
"query": "{ transaction(digest: \"DqqPL1tWiZTqntqFthiSKAPSQj78SGzEwydEozsYY6q6\") { digest effects { status timestamp checkpoint { sequenceNumber } gasEffects { gasSummary { computationCost storageCost storageRebate } } } } }"
}'Public fullnodes no longer serve the old JSON-RPC sui_getTransactionBlock method on mainnet. Use gRPC or GraphQL instead (see JSON-RPC deprecation).
Related digests
Sui uses the same Base58 32-byte format for other hashes, which is easy to mix up:
- Object digest: the hash of a specific object version. It's part of an object reference
(id, version, digest). - Effects digest: the hash of the transaction's effects.
- Checkpoint digest: the hash of a checkpoint summary.
An object ID is a 0x-prefixed hex string, not a Base58 digest. If an explorer can't find what you pasted, check which kind of identifier you have. isValidTransactionDigest() from @mysten/sui/utils checks the format.
Sources
- Transaction overview, Sui documentation
- Querying Data, Sui TypeScript SDK
- GraphQL transaction query, Sui documentation
- client_commands.rs (
tx-block,--tx-digest), Sui CLI source