← All articles

Node Types and the API Data Surface

Key takeaways

  • TRON has three node roles: Super Representatives produce blocks, Full Nodes hold the complete latest state and are the network's entry point, and Solidity Nodes serve only solidified — irreversible — data.
  • A Full Node answers on two surfaces: /wallet/* returns a transaction as soon as it is on-chain, even if it could still be reversed; /walletsolidity/* returns it only once it has solidified.
  • The same query can therefore give two answers. A result from the latest-state surface is provisional; a result from the solidified surface is final.
  • For anything you will act on — a finding, a trace, a decision — read the solidified surface. Reading the latest surface means reading state that can still change.

Nothing about the chain reaches you directly. Every balance, every transaction, every event is served by a node answering an API query, and nodes do not all answer the same way. The data surface has two depths, the latest state and the solidified state, and reading the wrong one is how a confident finding ends up built on a transaction that no longer exists.

This article is about where on-chain data comes from: the node roles, the two query surfaces a Full Node exposes, and why the same question can have a provisional answer and a final one. The mechanism that makes a block final — solidification through consensus — is the subject of the field-book chapter Block Finality and Solidified Blocks; here the concern is the data surface that mechanism produces.

Three kinds of node

The work is divided three ways.

NodeRole
Super Representative (Witness)The 27 elected block producers. They run the consensus that appends blocks to the chain.
Full NodeHolds full historical data and is “the entry point into the TRON network” — it accepts and broadcasts transactions and serves the complete, latest state.
Solidity NodeStores “irrevocable blocks, a few blocks behind Full Nodes,” which makes it “more suitable for the confirmation of transfer.”
Super Representative produces blocks the 27 · consensus Full Node full data · latest state the entry point Solidity Node solidified · irreversible a few blocks behind a Full Node can serve the solidified surface itself — no separate machine required
Producers append the chain; Full Nodes serve the latest state; Solidity Nodes serve only what has become irreversible.

Blocks come from the Super Representatives. Most queries go to a Full Node, which holds everything and answers fast. A Solidity Node deliberately lags: it holds only blocks that have become irreversible, which is what you want when an answer has to hold up.

In practice these are not always three separate machines. A Full Node “already supports the query of solidified blocks,” so the solidified data is available from the Full Node itself — “there is no need to build a solidity node.” In day-to-day use the distinction is which endpoint you ask.

Two answers to the same question

Both depths are served by the same Full Node, through two families of endpoints.

The /wallet/* endpoints return the latest state. A transaction shows up there as soon as it is included in a block — but, in the documentation’s words, these are “transactions that have been on the chain but not necessarily confirmed.” The /walletsolidity/* endpoints return only solidified data: “transactions that have been on the chain and solidified, that is, the transactions have been confirmed.”

a recent tx just included /wallet/* → returned · on-chain, still reversible /walletsolidity/* → not yet · block has not solidified the gap between them is the not-yet-final tip of the chain
One query, two surfaces: the latest answer may still change; the solidified answer will not.

So the same request — is this transaction on the chain, what is this account’s balance — can return one result from /wallet/* and a different one from /walletsolidity/*. The gap between them is the handful of most recent blocks that are on the chain but not yet irreversible. A transaction that appears on the latest surface and not on the solidified surface is real — its block just has not finished settling.

Confirmed versus unconfirmed data

What separates the two surfaces is solidification. A freshly produced block is on the chain, but it is not yet irreversible — it becomes so only after enough subsequent blocks are built on top of it by enough different producers. Until a block reaches that point, the transactions in it can, in principle, still be displaced.

The solidified surface exists to hide that uncertainty. It withholds a transaction until the block carrying it can no longer be reversed, which is why the documentation calls the Solidity data “suitable for the confirmation of transfer” — an exchange crediting a deposit, or an analyst recording a movement as fact, wants the version that will not be walked back. The exact rule for when a block crosses into irreversibility, and how many producers it takes, is the substance of block finality; the data-surface consequence is that /walletsolidity/* shows you only the settled chain.

The event surface

Queries are not the only way data leaves a node. Through event subscription, a node streams the event logs that contract executions emit — the same Transfer and Approval records that carry token movement — as they are produced, with no query per transaction. The underlying data is the same on-chain log layer; the subscription only changes how it arrives. Indexers and monitors depend on this stream to keep up with contract activity in near-real time.

What this means for a reader

The practical discipline is knowing which surface a fact came from.

A latest-state answer is provisional. Anything from /wallet/* is true as of now and could still change. That is fine for watching activity as it happens, and wrong as the basis for a conclusion.

A solidified answer is final. Anything from /walletsolidity/* describes the irreversible chain. For a finding you will stand behind — a trace, a labeled address, anything you will put your name to — this is the surface to read.

And a discrepancy between the two carries information of its own. When the surfaces disagree, the difference is exactly the not-yet-final tip of the chain, so a transaction present on one and absent from the other is sitting in a block that has not solidified. Give it a few blocks and the gap closes.

The chain is one thing, but the data surface shows it at two confirmation depths, and the reader chooses which. For live monitoring, read the latest surface. For anything you intend to build on, read the solidified one.

Sources