Getting started
How state archival works
Soroban state is rented, not owned. Every entry carries a ledger count, every closed ledger takes one off, and what happens at zero depends on which kind of entry it is.
Ledgers, not dates
A time to live is a ledger number, not a timestamp. An entry is live until a given ledger closes, and the network closes ledgers at roughly five seconds each — measured at 5.000000 s ± 0.000050 on 2026-09-10, not assumed.
Every date in this documentation and on this site is derived from that rate and travels with a ~. The ledger beside it is the exact value. When the two disagree, the ledger is right.
The four kinds
| Kind | Holds | At zero |
|---|---|---|
| instance | The contract’s own state pointer. | Archived — recoverable |
| code | The compiled Wasm, shared by every contract deployed from it. | Archived — recoverable |
| persistent | Durable stored values. | Archived — recoverable |
| temporary | Disposable stored values. | Deleted — gone permanently |
A temporary entry’s minimum lifetime is 720 ledgers, about an hour, read from the network’s own configuration. Our own temporary entry had 688 left when it was first sampled.
Archived is not deleted
An archived entry still exists. Its data is moved out of the live state and the contract stops working until someone restores it with RestoreFootprintOp and pays for the restoration. It is an outage and a bill, not a loss.
A deleted temporary entry is a loss. There is no restore operation for it, and no amount of XLM brings it back. This is the single asymmetry worth carrying away from this page: three of the four kinds are a bill, and one is a burial.
The entry that is shared
A contract’s instance can be healthy until December while the code it runs expires in October, and without its code the contract cannot execute at all. So the real expiry is the earliest entry — which is rarely the obvious one, and is shared by every contract deployed from the same Wasm.
On guinea-pig A that one shared code entry is 8,116,648 of 8,264,289 stroops — 98% of the rent across all four entries. Scanning only its instance and code, the same entry is 99%: identical rent, different denominator. The scope travels with the number.
Why one scan cannot settle it
The chain does not index reverse dependencies. Given one contract, a scan can see which code entry it points at; it cannot ask which other contracts point at the same entry. So a single-contract scan reports sharing as undetermined rather than concluding the entry is unshared.
Naming several contracts in one scan resolves it as far as the chain allows — and the answer is still a lower bound. Contracts you did not list may also depend on that entry, which is why the count reads “at least”.
Archival parameters on this page come from the live network read; the rent figures were measured against CANZNTAW7DYMCZ6EAY5BP672H4AL2O2HVRBP4O4HRUEZRATHQRRLXL6L.
Next