Research · Cross-chain
Four ways to record a transaction, and four ways to grow state
Bitcoin: outputs, spent whole
Bitcoin does not store balances. The Bitcoin documentation describes the ledger as a set of unspent transaction outputs, each of which records a value and the condition under which it may be spent. A transaction consumes one or more existing outputs as its inputs and creates new outputs as its effects, and the outputs it consumes cease to exist. There is no account whose balance is decremented; there is a set of coins, and a spend removes some and creates others.
The model has consequences that reach into everything else. An output is spent whole, so a payment that does not consume an entire output must create a second output returning the remainder to the sender, which is why change addresses exist. A wallet's balance is not stored anywhere; it is the sum of the outputs the wallet can spend, which is why a wallet has to scan the chain to know what it holds. And because each output is a discrete object with its own history, the set of outputs a wallet chooses to spend is itself a privacy decision, which is the subject of the coin control page.
State growth follows from the same design. The set of unspent outputs is what a node must track to validate new transactions, and it grows as coins are created and shrinks as they are spent. The full history of spent outputs is what makes the chain large, and the unspent set is what makes validation possible. The two are different quantities, and the documentation's distinction between them is why pruning can discard history without affecting a node's ability to validate new blocks.
Ethereum and Solana: accounts, with and without programs
Ethereum replaces the output set with a global mapping from addresses to accounts. The documentation describes two kinds of account: externally owned accounts, controlled by a private key, and contract accounts, which carry code and a storage map. A transaction names a sender, a recipient, a value and optional data, and its effect is a state transition applied to the global state. Balances are stored per account rather than derived from a set of coins, so a wallet's balance is a single lookup rather than a scan.
The account model makes some things simpler and others harder. A balance is directly readable, and a contract can hold and move value without the change-output machinery that Bitcoin requires. But because every account's state is part of one global trie, the state a node must maintain grows with the number of accounts and the storage they use, and the documentation's discussion of state growth and state expiry is a response to exactly that pressure. An account that is created and never touched again still occupies space in the trie.
Solana keeps the account model but separates the code from the data. The documentation describes a program as stateless executable code and an account as the container for data and lamports, with the program operating on accounts that the transaction passes to it. Every instruction declares the accounts it will read and write, which is what lets the runtime schedule non-overlapping instructions in parallel. The declaration is also a data-model statement: the transaction carries an explicit list of the state it touches, and the runtime's safety argument depends on that list being complete.
The Internet Computer: messages to stateful canisters
The Internet Computer's data model is neither an output set nor a global account trie. The documentation describes a canister as a WebAssembly module with its own persistent memory, and a transaction as a message delivered to a canister's method. The canister's state is its own memory, replicated across the nodes of the subnet it runs on, and it is not part of a network-wide state space that other canisters read directly. A call from one canister to another is an asynchronous message, and the state each canister holds is private to it.
That arrangement changes what state growth means. Because a canister's memory is local to its subnet, the state a subnet must replicate is the state of the canisters deployed to it, and the platform's answer to growth is to add subnets rather than to make one state space larger. The documentation describes subnets as independent blockchains that can be added to the network, which is a horizontal scaling story rather than a state-pruning one. The cost is that cross-subnet calls are messages with the latency and asynchrony that implies, and a developer who wants two pieces of state to be updated atomically has to keep them on the same subnet.
Storage is charged for directly. The documentation describes cycles as paying for memory as well as computation, so a canister that holds a large state pays for it continuously, and the developer has an explicit incentive to keep state small. That is a different pressure from Bitcoin's, where the unspent set is a shared cost borne by every node, and from Ethereum's, where storage is paid for once at the time it is written. Each model puts the cost of state somewhere different, and the placement decides who has an incentive to economise.
The four data models side by side
The table states what each network records and what a node must store. It describes mechanisms from the cited documentation and asserts no size or growth figure.
| Network | What a transaction is | How state is represented | How state grows | Who bears the storage cost |
|---|---|---|---|---|
| Bitcoin | Inputs that consume outputs, and new outputs created | A set of unspent outputs, each with a value and a spend condition | The unspent set grows and shrinks; the spent history only grows | Every node stores the unspent set; history may be pruned |
| Ethereum | A state transition from a sender to a recipient, with optional data | A global trie of accounts, each with a balance, code and storage | The trie grows with accounts and storage slots written | Storage is paid for once, when it is written |
| Solana | Instructions that name the accounts they read and write | Accounts holding data and lamports; programs are stateless | Accounts are created and funded; rent keeps them alive | Rent is a balance proportional to the space an account occupies |
| Internet Computer | A message delivered to a canister method | Each canister's own persistent memory, replicated on its subnet | Subnets are added; each canister's memory is charged for | Cycles, charged continuously for the memory a canister holds |
Last reviewed 2026-09-21Source: Bitcoin, Ethereum, Solana and ICP documentationMechanism comparison; no size, growth or cost figure is asserted.
What the comparison does not settle
The table describes structures, not sizes. It does not say how large any network's state is, how fast it grows, or what it costs to store a byte on each one, because all three change and none of them is a property of the data model alone. A reader who wants current figures should go to the networks' own dashboards rather than to a comparison page.
The comparison is also silent on the questions this cluster covers elsewhere. It does not describe how each network reaches finality, which the finality comparison takes up, and it does not describe how each one executes a block, which the execution model comparison covers. The four pages are meant to be read together, because a data model only makes sense alongside the execution and settlement rules it serves.
Finally, the models are not fixed. Ethereum's roadmap includes work on state growth and data availability, Solana's account and rent rules have been revised, and the Internet Computer's subnet model continues to develop. This page describes each model as its documentation describes it at the review date, and it does not present a proposed change as a deployed one.
Sources and references
Each network's transaction and data model is described from its own documentation. No size, growth or cost figure is asserted that the cited source does not state.
- Bitcoin's unspent outputs. Bitcoin Developer Reference, Transactions: a transaction consumes existing outputs as inputs and creates new outputs, and an output is spent whole.
- Ethereum's accounts and state. ethereum.org, Ethereum accounts: externally owned and contract accounts, with contract storage held in the global state.
- Solana's accounts and rent. Solana Docs, Accounts: programs are stateless, accounts hold data and lamports, and rent is proportional to the space an account occupies.
- Canister state and cycles. ICP Developer Docs, Canisters and code and Tokens and cycles: a canister holds persistent memory on its subnet, and cycles pay for the memory and computation it uses.
Related reading
- Research HubEvery dataset on the site, with methodology and provenance.
- Altcoin ResearchAltcoins measured against Bitcoin: design intent, consensus, execution, scaling and market structure.
- The ETH-BTC Correlation RecordHow the correlation is measured, how it behaves across windows, and where it breaks down.
- The ETH/BTC RatioWhat the ratio measures, how to read its trend, and why it is not a forecast.
- ETH During Bitcoin Bull PhasesAssociation within a common market factor, and what co-movement cannot establish.
- ETH During Bitcoin Bear PhasesDrawdown depth and duration compared over identical windows, and the limits of the comparison.