getAssetProof
Solana / https://triport.io/sol
Minimum tier: Basic
Last updated:
How a compressed NFT proof works
A compressed NFT (cNFT) has no account of its own: it is a leaf in a concurrent Merkle tree, whose on-chain account keeps the tree's root, not its leaves. To transfer, burn or delegate the asset, the Bubblegum program (through SPL Account Compression) recomputes that root from the leaf and the sibling hashes on the path up to it, and checks that it matches.
getAssetProof returns exactly those pieces for one asset ID: root, proof (the sibling hashes from the leaf up), node_index, leaf and tree_id. Every change to the same tree moves its root, and a concurrent tree accepts a proof only against its current root or a recent one still in its change-log buffer, so fetch the proof right before building the instruction. Trees with a canopy keep their top levels on-chain, and the instruction then carries only the part of the proof below the canopy.
Sources: Metaplex Bubblegum: concurrent Merkle trees, Digital Asset Standard API specification.
Request, response, errors and plan for this call on the Triport Solana endpoint: getAssetProof API reference →
getAssetProof returns the Merkle proof for a single compressed NFT (cNFT),
looked up by its Digital Asset Standard (DAS) asset ID. Compressed NFTs are not
stored as individual on-chain accounts — they live as leaves in a concurrent
Merkle tree, and their authenticity is established by a proof against that
tree's root. This method gives you exactly that proof: the leaf, the tree's
current root, and the sibling hashes along the path from the leaf to the root.
Use it whenever you need to verify or act on a compressed NFT on-chain — for
example, when constructing a Bubblegum transfer, burn, or delegate instruction,
which require the proof as input so the program can recompute and check the root.
Pair it with getAsset, which returns the asset's metadata and
ownership, while getAssetProof returns the cryptographic proof for the same
asset.
This method belongs to the sol_das category and requires the basic tier or
higher. It is not available on the free tier — a free-tier key will be rejected
with an authorization error.
Parameters
This method takes no parameters.
Returns
| Field | Type |
|---|---|
| result | object |
Examples
curl https://triport.io/sol \
-X POST -H 'Content-Type: application/json' \
-H 'x-token: <api-key>' \
-d '{"id":1,"method":"getAssetProof","params":[],"jsonrpc":"2.0"}'const res = await fetch("https://triport.io/sol", {
method: "POST",
headers: { "Content-Type": "application/json", "x-token": "<api-key>" },
body: JSON.stringify({
"id": 1,
"method": "getAssetProof",
"params": [],
"jsonrpc": "2.0"
}),
});
const data = await res.json();import requests
resp = requests.post(
"https://triport.io/sol",
headers={"x-token": "<api-key>"},
json={"id":1,"method":"getAssetProof","params":[],"jsonrpc":"2.0"},
)
print(resp.json())Usage
- Transport: HTTP (JSON-RPC).
- Chain: Solana.
- Clusters: mainnet.
- Billing: included in the flat monthly plan, no per-call credits.