Insights

Inside XRPL Ledgers 1–32570

The XRP Ledger’s first 32,569 ledgers are gone — no server on Earth has them. But the ledger that survives them holds enough evidence to reconstruct what happened: exactly 368 transactions, 382 recoverable ledger hashes, and the whole initial distribution of 100 billion XRP.

LOST — 32,569 ledgersledger 132570 — history begins105.9M at time of writingCOMPLETE
Every full-history server on the network reports the same floor: complete_ledgers: 32570-105910479. Nothing earlier exists anywhere.

The horizon

Ask any full-history XRPL server what it holds and it answers with the same floor: complete_ledgers: 32570-105910479. Ledger 32570 closed at 2013-01-01T03:21:10Z, and everything before it was lost early in the network’s life. It has never been recovered.

That makes 32570 the initial condition of all recorded XRPL history — and because an XRPL ledger carries complete state rather than deltas, it is also a full snapshot of everything that existed at that instant. That snapshot is what lets us work backwards.

Exact ranges used on this page
The lost range is ledgers 1 to 32,569 inclusive — 32,569 ledgers, none of which exists on any server. Ledger 32,570 is the first survivingledger and is not itself lost; it is the evidence. Where this page says “the lost era” it means 1–32,569, and every recovered hash and transaction count below refers to that range, never to 32,570 itself.
In plain terms

A “ledger” is one page of the XRP Ledger’s history — a new one closes every few seconds. The first 32,569 pages were lost early on and no copy survives anywhere. Page 32,570 is the oldest one that still exists.

The lucky part: each page records the complete state of every account, not just what changed. So that one surviving page is a full photograph of the entire network — and a photograph turns out to say a great deal about the pages that came before it.

Accounts
136
every account then alive
Transactions
368
in all 32,569 lost ledgers
XRP burned
3,680
drops, across all of it
Hashes recovered
382
of lost ledgers

What ledger 32570 actually contains

Its state tree holds 260 objects. That is the entire XRP Ledger as of 1 January 2013:

Object type
Count
What it is
AccountRoot
136
accounts in existence
DirectoryNode
65
60 owner + 5 order-book
RippleState
53
trustlines
Offer
4
resting orders
LedgerHashes
2
the hash skip-lists
In plain terms

Those are simply the kinds of thing a ledger stores: the accounts themselves, the trust relationships between them (needed before you can hold anyone’s IOU), any resting buy and sell orders, and some internal index pages that keep it all findable.

260 of them, in total, was the entire XRP Ledger.

For reference the ledger today carries hundreds of millions of objects. The whole of XRPL at the dawn of its recorded history fits in a file smaller than this page.

And there is no 137th account hiding anywhere
Counting 136 AccountRoot objects shows 136 accounts were stored. It does not by itself rule out one that existed and left only a footprint. That can be closed properly, because a ledger object’s address in the tree is a hash of what it describes — and unlike a transaction hash, the thing being hashed is short enough to search.
How each object is addressed — 2013 client, Ledger.cpp
AccountRoot   SHA512Half( 0x0061 || AccountID )
OwnerDir      SHA512Half( 0x004F || AccountID )
Offer         SHA512Half( 0x006F || AccountID || Sequence )
RippleState   SHA512Half( 0x0072 || lowID || highID || currency )

Every one of those takes account IDs as input, and we have 136 candidates — so each index can simply be recomputed and checked. Do that across the whole state tree and the question becomes: is there any object whose address the known accounts cannot produce? One would mean an account we have never seen.

Indexes reproduced
193/193
accounts, trustlines, offers
Owner directories
41
all match a known account
Order books
24
4 issuers, all known
Unexplained
0
no hidden account

Nothing is unaccounted for. The five order-book directories name their issuers independently of the accounts — USD/XRP, JPY/USD and BTC/USD — and all four resolve to accounts already in the set. Sweeping every address-bearing field in all 260 objects turns up 137 distinct addresses: the 136, plus rrrrrrrrrrrrrrrrrrrrBZbvji, which is not an account at all but noAccount()— the protocol’s placeholder, appearing once per trustline as the balance issuer. And all 183 internal pointers between objects resolve to objects we hold; none dangles toward something missing. So the 136 are not merely what was found. Nothing in the entire state tree requires a 137th account to exist.

In plain terms

One thing worth heading off, because it sounds like it should work: an XRPL address is not a public key. It is a hash of one — SHA-256 then RIPEMD-160, ending at 20 bytes — so an address cannot be turned back into the key that made it, any more than a fingerprint can be turned back into a finger.

And no key survives here to work from. Across all 136 accounts there is no MessageKey, no RegularKey, no Domain, no EmailHash — not one field of any kind that carries a key or an identity. Public keys travel inside transactions, and the transactions are exactly what is gone.

Not from these transactions, at least. An account reveals its public key every time it signs, so any founding account that transacted after the horizon published its key into surviving history. Collecting those gives 117 of the 136 — the other 19 have never signed anything that still exists.

Public keys recovered
117
of 136 accounts
Derive to their account
117/117
so these are master keys
Distinct keys
117
no two accounts share one
Curve
secp256k1
all of them, 2013-appropriate

Two things come out of that. Every one of the 117 reproduces its own address through RIPEMD160(SHA256(pubkey)), which confirms they are master keys rather than delegated signers, and re-verifies the derivation on live data. And there is no key reuse at all — 117 accounts, 117 distinct keys. That is a real negative result: a shared key is the cleanest evidence of common control there is, and if several of these wallets had been generated carelessly by one operator it would show here. It does not. (It does not prove the opposite either; one operator generating 136 proper keys leaves exactly this trace.)

How close can we get to rebuilding a lost ledger? One hash away.
Ledger 32,569 is the best candidate anywhere: we have its hash, its parent’s hash, its close time, and it carried no transactions. Its header is nine fields and we can pin almost all of them — transaction_hash is the empty-tree constant, total_coins cannot have changed with no fees burned. Guess the one remaining field, hash the header, and it either matches 60A01EBF… or it does not. A complete lost ledger, verified against its own fingerprint.

It fails, and it fails for a reason worth knowing: an empty ledger is not an unchanged one. Every close runs updateSkipList(), which appends the parent hash to the rolling 256-entry list — so the state tree, and therefore account_hash, moves even when nothing was transacted. Ledger 32,569’s state is not 32,570’s.

Rebuilding it means rolling that list back one step. And the list holds exactly 256:

if (hashes.size() == 256)
    hashes.erase(hashes.begin());   // drop the oldest
hashes.push_back(mParentHash);

At ledger 32,570 the window covers 32,314–32,569. One ledger earlier it covered 32,313–32,568 — so the reconstruction needs the hash of ledger 32,313, which was evicted the instant 32,570 closed, and which is not a multiple of 256 so the skip-list never kept it either. We are one hash short, and the mechanism that destroyed it is the same rolling window that preserved the other 382. That is where this data ends.

And knowing the keys still does not open the transaction hashes, which is worth showing in numbers. The first transaction after the silence serialises to 183 bytes: 33 of public key, 79 of everything else — type, sender, recipient, amount, fee, sequence — and 71 bytes of signature. Grant yourself the public key and every other field, and the signature alone leaves 2568 possibilities to search. The observable universe holds about 2266 atoms. The hash covers all 183 bytes.

The same reasoning is what makes the 163 recovered transaction hashes a dead end, and it is worth being clear about the asymmetry. A transaction ID is SHA512Half("TXN\0" ‖ the whole signed transaction) — the client computes it over every field, signature included, which is a different hash from the one it signs with. Recovering a sender from it would mean guessing a 70-byte ECDSA signature along with everything else. An account index hashes 20 bytes drawn from a set of 136. One search finishes instantly; the other never finishes at all.

Exactly 368 transactions — and we can prove it

Every XRPL account stores a Sequence that increments once per transaction it submits. In 2013 sequences started at 1, so Sequence − 1 is a per-account transaction count. Summed across all 136 accounts: 368.

Separately, the ledger header’s total_coins is 99,999,999,999.996320 XRP. XRP is only ever destroyed by transaction fees, so the shortfall against the original 100 billion is the total fee burn of the lost era: 3,680 drops.

In plain terms

Two separate measurements, from unrelated parts of that photograph, land on the same answer.

First: every account keeps a little counter that ticks up by one each time it sends a transaction — and nothing else moves it. Add up all 136 counters and you get 368.

Second: XRP is destroyed by transaction fees and never created. So comparing the XRP that still exists against the 100 billion the network started with tells you the total fees ever paid: 3,680 drops (a drop is a millionth of an XRP).

Divide the fees by the transactions and the average lands on exactly 10.00 drops — precisely the base fee of that era. Strictly this is an average rather than a receipt for each individual transaction, but landing on a round 10 is what confirms the count: get the transaction total wrong and the ratio comes out untidy. Two different methods agreeing to the drop is why the number is trustworthy rather than a guess.

The arithmetic closes
3,680 drops ÷ 368 transactions = an average of exactly 10.00 drops — the base fee of that era. Two entirely independent quantities, derived from different parts of the ledger, agree to the drop. That is what makes the rest of this reconstruction trustworthy.

There is a sharper test than the average, and it is worth running because the average alone is one equation with 368 unknowns — a transaction that paid nothing would be invisible if another overpaid by the same amount. So check each account separately. Every payment in this era moved a whole number of XRP, which means an account’s balance should land back on a whole XRP once you add back the fees it spent — balance + 10 × (Sequence − 1). It does, for all 136 accounts. Try any other fee and only the 100 accounts that never transacted still fit, because for them the term is zero.

That converts one aggregate equation into 36 independent ones, each contributed by an account that actually sent something. It pins every sender’s totalfee spend exactly, and for the 10 accounts that sent precisely once it pins that single transaction’s fee at 10 drops outright. The remaining 358 sit inside multi-transaction accounts, where the total is fixed but the split across transactions is not — a 0 and a 20 would leave the same trace. Uniform 10 is the overwhelmingly likely reading, and it is the era’s base fee, but the ledger evidences the totals rather than each line.

The count is complete rather than a lower bound: AccountDelete did not exist until 2020, so no account could have been created and then removed before the snapshot. Every transaction ever submitted in the lost era came from one of these 136 accounts.

For scale: 368 transactions across 32,569 ledgers. The wall-clock span can be estimated rather than guessed, because one lost ledger does carry a real timestamp — 32,570’s header records its parent’s close time, putting ledger 32,569 at 2013-01-01 03:21:00 UTC. Run the clock back from there at the measured close rate just after the horizon (18.110 seconds per ledger, averaged over the next 1,000) and the lost era spans about 6 days 20 hours, putting ledger 1 around 25 December 2012. Use instead the average over a window exactly as long as the lost era — 21.576 s/ledger — and it stretches to 8 days 3 hours, moving ledger 1 back to the 24th. So: roughly a week, with about a day of slack.

That rests on the network never having stopped, which is the one assumption in it — and it survives an outside check. The XRP Ledger’s own documentation, describing the loss, says in passing that it represents “approximately the first week of ledger history”. Our figure was derived the other way round — from a recovered timestamp and a measured close rate, with no reference to that sentence — and lands in the same place. Worth noting because the network is often said to date from June 2012; that is when work on it began, not when ledger 1 closed. Either way the lost history is far emptier than its reputation suggests: the gap is mostly silence.

What 368 does and does not mean

Higher counts for the lost era circulate — one figure put about is 534. Both can be true, because they measure different things, and the surviving data says exactly which.

Sequence only advances when a transaction is applied against an account, so 368 is the count of transactions that consumed a sequence. Nothing is missing from it: account deletion did not exist until 2020, so no sender could have disappeared before the snapshot took their counter with them.

The fee burn then pins the rest. Exactly 3,680 drops were destroyed, and XRP is destroyed only by fees. At the era’s 10-drop fee that is 368 fee-paying transactions on the nose. For 534 the average would have to be 6.89 drops — not a fee any node charged.

The client of that era settles what 368 covers, and it can be read: the commit below is dated 1 January 2013, the same day ledger 32,570 closed. A transaction only reached a ledger down one of three paths, and every one of them advanced the sender’s sequence — including the path that exists purely to claim a fee from a failed transaction, which sets the counter explicitly. Everything else was rejected and never written. So within those ledgers, sequence-consuming and ledger-written are the same set, and 368 counts it.

Which leaves the gap genuinely open
A higher figure cannot be explained by transactions that skipped the counter — that path did not exist. So either a larger count is measuring something other than entries written into ledgers 1–32,569 (submitted, relayed, or seen, rather than applied), or it draws on records of the lost ledgers themselves, which this page has no access to. We can say what the surviving ledger supports; we cannot say what a private archive might hold.

One thing the client does change: a zero fee was legal. Declare no fee and the fee routine returned success without destroying anything, and the required fee was only checked while a ledger was still open. Earlier still, negative and non-XRP fees were possible. Both were closed off on 26 December 2012 — inside the lost window, while these very ledgers were closing:

Commit
Change
Date
Do not allow negative fees
26 Dec 2012
Disallow non-native transaction fees
26 Dec 2012
Begin to sanitize the fee structure. Implement load scaling
26 Dec 2012

Which makes the 10.00 drops a finding rather than an assumption. Nothing compelled those 368 transactions to pay anything at all; that they average exactly the reference fee, to the drop, is evidence about how the network was actually used — not a property it was forced to have.

382 lost ledger hashes, recovered

Every ledger keeps LedgerHashes objects: a rolling list of the previous 256 ledger hashes, plus a skip-list holding every 256th hash going back to the start. Ledger 32570 carries both — so its own state hands back the hashes of ledgers it can no longer show us.

In plain terms

A hash is a short fingerprint of something. Change one byte of the original and the fingerprint changes completely, so a fingerprint is proof you are talking about one exact thing.

The XRP Ledger keeps a running index of its previous pages’ fingerprints, and page 32,570 still carries it. That hands back 382 fingerprints of pages nobody has a copy of — plus 163 fingerprints of individual transactions. Ask any server for one of those transactions and it replies “not found”: a genuine identifier pointing at something that no longer exists.

the lost range — 32,569 ledgers, hashes unknown127 hashes — every 256th ledger256 contiguous (32314–32569)
Self-validating: the recovered hash for ledger 32569 is byte-identical to ledger 32570’s parent_hash.
Skip list
127
every 256th, from 256 to 32512
Recent list
256
contiguous, 32314–32569
Distinct total
382
one index overlaps
Tx hashes
163
from PreviousTxnID fields

A second haul comes from the objects themselves. Every ledger entry records PreviousTxnID — the transaction that last modified it — yielding 163 transaction hashes from transactions whose contents no longer exist. Query one against a full-history node and it returns txnNotFound: a real, verifiable identifier pointing at nothing.

Why these hashes are proven, not merely reported
  1. 1
    A recovered hash, e.g. ledger 32,569
    60A01EBF11537D8394EA1235253293508BDA7131D5F8710EFE9413AA129653A2
  2. 2
    is stored in a LedgerHashes object, which hashes to
    AD77EB424FC85BAFDEBF42B139CDD4D16449DAB56096313B24B4E49A6568F8B9
  3. 3
    combined with 24 sibling hashes over 3 levels, the state tree root
    3806AF8F22037DE598D30D38C8861FADF391171D26F7DE34ACFA038996EA6BEB
  4. 4
    that root is ledger 32,570’s account_hash — its header hashes to
    4109C6F2045FC7EFF4CDE8F9905D19C28820D86304080FF886B299F0206E42B5

The final value is ledger 32,570’s published hash — the one every full-history server agrees on. Change any recovered hash and the root changes and that last line breaks. This is what separates a reconstruction from a claim.

In plain terms

Everything above rests on trusting that ledger 32,570’s contents are genuine — so it is worth saying that this does not have to be taken on trust. The ledger’s own fingerprint is built from its contents by a chain of hashes, and that chain can be recomputed from scratch. We did: re-hashing all 260 surviving objects reproduces the fingerprint published in the header, digit for digit.

Because the recovered hashes sit inside those objects, altering even one of them would change the fingerprint and the check would fail. So they are not merely what a server reported. They are proven.

Every datable event on this page falls between ledger 7 and ledger 32,359. Nothing in the surviving state points earlier than 7 or later than 32,359, so that is the window the evidence actually covers.

The same fields prove which ledgers were busy: 163 distinct indices in the range 7–32,359 are provably non-empty — 0.5% of the 32,569 lost ledgers. The earliest is ledger 7.

Stated precisely: ledger 7 is the earliest ledger we can prove contained a transaction — not proof that ledgers 1–6 were empty. PreviousTxnLgrSeq records only the last modification of an object, so a transaction in an early ledger whose effects were later overwritten leaves no trace.

The top of the range is different, and stronger. Every transaction bumps its sender’s account — sequence up, fee deducted — so the highest index across all accounts is the last ledger that contained any transaction at all. That figure is 32,359, and nothing could have overwritten it because 32,570 is the snapshot. Ledger 32,570 itself carries zero transactions. So ledgers 32,360–32,570 are provably empty — 211 consecutive ledgers in which nothing happened.

And they are not where the silence ends. Ledger 32,570 survives, so we can simply look at what follows it: every ledger from there to 38,128 is empty too, and the next transaction on the XRP Ledger does not land until ledger 38,129, at 06:43:20 UTC on 2 January 2013. That is 5,769 consecutive empty ledgers — about 27 and a half hours — of which only the first 210 are lost. Recorded XRPL history does not begin at a moment of activity. It begins in the middle of a day-long silence, and the horizon falls where it does for reasons that have nothing to do with what the network was doing.

The low end gives nothing back, and it is worth being blunt about the scale. Only 163 of the 32,569 lost ledgers left any trace in the surviving state — 99.5% carry none at all. Ledgers 1–6 are not a special blind spot, just the first six of 32,406; there are far larger runs, the worst being 3,744 consecutive ledgers between 4,175 and 7,918 about which the ledger says precisely nothing. Slightly more than half of the 368 transactions — 205 of them — are known to exist by arithmetic while being impossible to place in any particular ledger.

Specimens: actual data out of a lost ledger

The recovery is concrete, not statistical. One hundred accounts still had Sequence 1 at ledger 32,570 — they had never sent a transaction — and each carries a PreviousTxnID pointing at a specific transaction inside a ledger nobody has a copy of, together with the ledger index it landed in.

In plain terms

Every item in the ledger remembers two things: which transaction last touched it, and which page that transaction was on. For an account that was funded once and then sat completely still, that pointer leads straight back to the payment that created it — a specific transaction on a page that no longer exists.

One caveat, stated plainly. PreviousTxnID records the last transaction to modify an account, not its first. For an account that never sent anything and received only its funding Payment, the two are the same transaction — but a second incoming payment would overwrite the link, and the snapshot alone cannot rule that out. The case for these being the funding payments is circumstantial and strong rather than proven: the balances sit exactly on the observed grant tiers (10,000 and 2,000 XRP), and at ledger indices this low there is barely any window for a top-up to have happened first.

On that reading each row recovers four things — the exact ledger, the transaction hash, the account brought into existence, and the amount delivered. The sender is unrecoverable either way.

Ledger
Transaction hash (lost)
Account it funded
XRP
7
DF530FB14C5304852F20080B
10,000
8
0735A0B32B2A3F4C938B76D6
10,000
9
5D2CC18F142044F1D792DC33
10,000
10
26B0EFCF1501118BD60F2BCD
10,000
12
16112AA178A920DA89B5F8D9
2,000
16
12B9558B22BB2DF05643B745
20,300
21
07F84B7AF363F23B82210507
10,000
28
DA64AD82376A8162070421BB
10,000
Both halves check out
Ask a full-history server for transaction DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF and it answers txnNotFound — the body is genuinely gone. Ask it for the account that transaction funded, rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv, and it is still there today, thirteen years later — down to 4,507 XRP at Sequence 6, having sat untouched through the whole snapshot and spent only since. A transaction that cannot be retrieved, with an effect that has persisted ever since.

The ledger hashes come back the same way — real identifiers for ledgers whose contents are gone:

Ledger
Recovered ledger hash
256
46CA85D119A4FDF7644339663A813131C791BD21472BB85C526E9E4072F87ABA
512
30E34F73546C514C1BD389E1A71FBC266DCED3FC1DB7A186F3F0FCF117484528
1,024
D7349AEAE4337A11FDF98A60F01CEDD7CA38CE8835FE66CCA2E4B227928A2AF5
16,384
BB4569ABCAE972A58BBE235AA15804A1A5C338A88D58105EE156E691379FF6D6
32,568
8BBBD0230172632B3D7AF8E8282332D40C3B9C2222AD03880762E1ACF650EFAB
32,569
60A01EBF11537D8394EA1235253293508BDA7131D5F8710EFE9413AA129653A2

The last row is the load-bearing one. Ledger 32,569’s hash, recovered from the skip-list, is byte-identical to the parent_hash that ledger 32,570 independently records. The recovery validates itself.

Walk the lost range, ledger by ledger

Every index from 1 to 32,570 falls into one of five evidence states. Scrub through them, or jump between the 163 ledgers we can prove held a transaction.

The chart plots the whole distribution: where each account was funded and how much it received. Each dot is one payment out of a ledger nobody has a copy of, positioned by ledger index across the bottom and by amount up the side. The vertical scale is logarithmic because the grants run from 200 XRP to a billion — seven orders of magnitude, which a linear axis would flatten into a single line along the bottom. Click any dot to jump the walker to that ledger.

Only the 100 accounts that never sent a transaction are priced. For them the balance at the horizon is exactly what they were handed, and the ledger that last touched them is the ledger that handed it over. The other 36 spent, so their balance is not their allocation — they appear as grey ticks along the axis: present, dated, deliberately unpriced.

That split is also most of the family tree the ledger will give up, and it narrows further. An account that never signed anything cannot have paid anyone, so all 100 priced dots are terminal. But nine of the 36 that did sign spent their entire transaction budget on trustlines they own — their OwnerCount equals their transaction count, and each of those lines carries a non-zero limit on their own side, which only a TrustSet they signed could have written. So they never sent a payment either. That makes 109 of the 136 provably unable to have paid anyone, and every funding payment in the entire lost era came from one of at most 27 accounts. What the ledger will notgive up is any account’s depth in that tree. Generation numbers need at least one genesis-to-child edge to anchor them, and there is not one: the transaction hash genesis last wrote appears on exactly one object in the whole state tree, its own. We know genesis sent 46 transactions and we cannot attach a single one to a recipient. The count still bounds the shape — 46 transactions cannot have created 135 accounts, so at least 89 of them were funded by somebody other than genesis — but that is a number, not a list of names.

Loading ledger index…

Explore it yourself

Everything recovered from the lost era, in one place: all 136 accounts that existed at the horizon, all 382 recovered ledger hashes, and the 163 transactions we can pin to a specific lost ledger — listed as 193 rows, because 27 of them stamped more than one object and each object is its own piece of evidence. Filter by address, label, ledger number or hash.

Loading ledger 32,570…

Who transacted with whom

The specimens above recover transactions. This recovers counterparties — with one assumption, which is worth stating before the table rather than after it.

In plain terms

Each account records which transaction last changed it. So when two different accounts point at the same transaction, that one transaction touched both of them. That much is certain — you have found two ends of something.

What you have not found is necessarily a payment. Setting up a trustline can also touch two accounts, so a shared transaction proves contact, not a transfer. And if one of the pair never sent a transaction in its life, it cannot have been the initiator — that part does settle the direction.

Nine transaction hashes appear on more than one account, and seven of those pair a sender with an account that never sent anything, which fixes the direction. Calling them payments would go further than the evidence: a TrustSet can stamp both accounts too, which is verifiable in surviving history — ledger 193,722contains three that do exactly that. Three of the nine below moved a trustline in the same transaction and are therefore trustline operations rather than XRP sends. For the remaining six there is no line between the pair at all, which makes an XRP payment the overwhelmingly likely reading — though a line opened and later closed would leave the same trace, so “almost certainly” is as far as this goes:

Ledger
From
To
XRP
31,317
r3kmLJN5D2…aocV (direction unresolved)
31,179
rB5TihdPbK…BdeYChris Larsen
not attributable
26,917
rhdAw3LiEf…56Qo (direction unresolved)
One of the nine is fully proven — amount, direction and count
rJQx7Jpa… paid rDy7Um1… exactly 200 XRP at ledger 23,095, and nothing else about it is open. The 2013 client set the base account reserve at 200 XRP (DEFAULT_FEE_ACCOUNT_RESERVE), and a payment that creates an account must deliver at least that or it fails. rDy7Um1… never sent anything, so its balance is its entire lifetime income — and that balance is exactly 200 XRP, the floor. A second inbound payment of any size would have pushed it above. So it received one payment, of exactly the minimum, and the shared transaction hash names the payer. The amount, the direction and the fact that there was only one are all forced.

Two of the nine go the other way and are provably notpayments. At ledgers 8,897 and 8,901 both parties’ entire transaction budgets are accounted for by trustlines they own, so neither had a payment to spend — and creating a trustline threads the transaction onto both parties’ account records, which is exactly the trace we see. Contact without a transfer.

Two of these are somebody's last recorded act
The final transaction from rf8kg7r5…, the account registered to the handle ahbritto, landed at ledger 31,802 and funded a new account with 10,000 XRP. Chris Larsen’s final transaction, at ledger 31,179, reached an account that came out of the lost era holding exactly 1,000,000 XRP — though a trustline moved in that same transaction, so what it actually delivered is not something we can pin down. Neither transaction exists anywhere — both ledgers are gone — yet the sender, the recipient, the ledger and the hash are all recoverable.

The amounts carry two caveats. Where the recipient never sent anything, its balance is everything it ever received, which equals this payment only if it received nothing else — the counterparties and the ledger are exact; the amount is exact provided that was its only inbound payment. And in three of these nine, a trustline moved in the same transaction, which means it may have been an IOU payment or a TrustSet rather than an XRP send. There the balance proves nothing about the amount, so the table declines to state one.

Nine edges out of 368 transactions is a thin slice, and it is thin for a structural reason: only the last transaction to touch an account leaves a pointer. Every earlier payment was overwritten by whatever came next. What survives is the final act of each account — which is why the recovered set skews so heavily toward the closing ledgers.

When things happened

Bucketing every object by the ledger that last touched it gives the shape of activity across the lost range. It is dramatically front-loaded — the founders distributed the supply almost immediately, then the network fell quiet for weeks at a time.

03162622419171808,00016,00024,00032,000ledger index
Objects last modified per 2,000-ledger bucket. 62 of 193 land in the first bucket — the initial distribution happened almost immediately, then the network went quiet.

The initial distribution

Seven accounts held 98.11% of all XRP. The remaining 129 accounts shared 1.89% between them.

7 accounts · 98.11%the other 129 accounts share 1.89%0%100% of 100B XRP
1B+×7
100M–1B×8
10M–100M×26
1M–10M×3
10k–1M×54
1k–10k×24
<1k×14
#
Account
XRP
Txs
Last seen
1
79,997,608,219
2
150
2
rB5TihdPbK…BdeYChris Larsen
8,189,000,000
59
31,179
3
5,919,999,800
16
26,946
4
1,000,000,000
0
3,732
5
1,000,000,000
0
85
6
1,000,000,000
0
87
7
1,000,000,000
0
3,734
8
200,000,000
0
3,736
9
200,000,000
0
8,412
10
200,000,000
0
8,410
80% of all XRP was settled by ledger 150
r8TR1AeB… received 79,997,608,219 XRP — it holds 20 drops less, having sent twice — and its account was last modified at ledger 150— out of 32,569. The single largest allocation in XRP’s history was done inside the first half-percent of the lost range and never touched again. Two of the four billion-XRP grants are just as early: ledger 85 and ledger 87.

The distribution was plainly scripted. Every one of the 136 allocations is a whole number of XRP, and they cluster hard on round tiers — counted here by what each account received rather than what it holds, since an account that has since paid a fee reads 9,999.99999 and would otherwise look like a tier of its own:

10,000 XRP ×4510,000,000 XRP ×1650,000,000 XRP ×51,000,000,000 XRP ×42,000 XRP ×4370 XRP ×4

Forty-five accounts were granted exactly 10,000 XRP — the standard small allocation. Forty of them still hold it untouched to the drop. The other five read 9,999.99996 to 9,999.99999 because they have each sent between one and four transactions since, and the missing 10 to 40 drops are precisely the fees. One more sits at 10,001, topped up rather than granted twice.

The genesis account was already empty

rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh is the account the protocol creates at ledger 1, holding the entire 100 billion XRP supply. Every XRP that has ever existed was issued into that one account at the moment the network started; none has been created since.

It held 200.99954 XRP, and went quiet at ledger 12,718
By ledger 32,570 the genesis account was down to 200.99954 XRP at Sequence 47 — a round 201 less the 460 drops of fees its 46 transactions cost. Its last transaction landed at ledger 12,718 — it spent the final 61% of the lost range doing nothing at all. It had already given everything away. Chains of activation cannot terminate there in visible history: the money had moved on well before the first surviving ledger.

Which means the practical origin of every XRP lineage is not the genesis account but r8TR1AeB… — 79,997,608,219 XRP, 80% of the supply, sitting at Sequence 3. Two transactions sent, ever.

Creation was hierarchical

Genesis sent only 46 transactions, but 136 accounts existed. Even if every one of those transactions created an account, that leaves at least 89 accounts funded by someone other than genesis. The tree was already branching before history begins.

genesis46 txs only2nd generation3rd generation≥89 accounts funded by non-genesis accounts

The transaction budget accounts for itself neatly: 135 account creations (136 accounts, less genesis itself), ~53 TrustSets to open the trustlines, at least 4 OfferCreates, leaving roughly 176 for payments and IOU issuance. That is the complete pre-history of the XRP Ledger.

The first accounts ever funded

One hundred accounts never sent a transaction at all — their Sequence is still 1. For those, the ledger recorded in PreviousTxnLgrSeq is the funding payment itself, giving a tight upper bound on when each was created:

Four accounts in the first four active ledgers, each with exactly 10,000 XRP. The distribution began immediately and ran to a script.

Who was actually using it

Ranking the 136 accounts by transactions sent gives the operators of the lost era. Between them, these ten account for 281 of all 368 transactions:

Txs
Account
Label
XRP held
Last active
61
Ripple
991,482
31,317
59
Chris Larsen
8,189,000,000
31,179
46
Genesis Account
201
12,718
31
9,973
18,585
17
9,500
32,301
16
5,919,999,800
26,946
14
8,288
23,085
13
5,025
240
13
ahbritto
50,000
31,802
11
200
23,230
These eleven labels are not equally good — three tiers
Not one of the 136 accounts carries an on-chain identity field. Every field present across all of them is one of the eight mandatory ones, and Flags is 0 on every single account — no Domain, no RegularKey, nothing. So every name here is attached from outside the ledger, and they are not the same strength.
1 · Requires trusting nobody

rHb9CJAW… — the genesis account is not an attribution but a derivation. Take SHA-512 of the string masterpassphrase, keep the first 16 bytes (DEDCE9CE67B451D852FD4E846FCDE31C), encode as seed snoPBrXtMeMyMHUVTgbuqAfg1SUTb, and the address that falls out is exactly this one. Anyone can run it — the same passphrase seeds the genesis account of every new XRPL test network, and rippled’s own test suite ships it.

Which raises the obvious question, so: no, that is not a live key. The mainnet genesis account set lsfDisableMaster long ago and signs with a regular key instead, so the key this derivation produces cannot move anything. It is a historical artifact, not a credential — which is precisely why it can be printed here.

2 · Proven by the ledger’s own identity mechanism

rHzWtXTB… set Domain = distributedagreement.com— an AccountSet at ledger 76,819,012 on 1 January 2023 — and that domain’s xrp-ledger.toml names the address straight back, under a principal reading David Schwartz. Both directions hold, which is as strong as XRPL identity gets. Note the date: it proves who controlled the key in 2023, not in 2013.

3 · A self-chosen handle in a registry

Everything else, and only five of the 136 accounts have any curated attribution at all: genesis, r8TR1AeB… (listed as Ripple Labs), r3kmLJN5… (Ripple), and two carrying ahbritto. rB5Tihd… carries the Bithomp username chrislarsen; registering one requires a payment from the address, so it proves control of the key — not who the person is, and the handle was picked by whoever registered it. Where the article prints a full personal name for one of these it is expanding a handle, which is an inference. Two of the three ahbritto accounts appear in XRPScan’s curated list; the third, rf8kg7r5…, carries the handle only as a registry username that Bithomp itself no longer displays for the address — the thinnest label on the page. And a handle echoed across explorers is still one registration, not two independent identifications.

What the ledger can attribute to the people who built it

The XRP Ledger was written by three engineers — David Schwartz, Jed McCaleb and Arthur Britto — and two of the three appear in this snapshot. Set side by side, the attributions are lopsided in a way worth stating carefully.

Attributed to
Evidence
Held
Ledger
Arthur Britto
XRPScan curated list — ahbritto 7
1,000,000,000
85
Arthur Britto
XRPScan curated list — ahbritto 1
1,000,000,000
87
David Schwartz
xrp-ledger.toml round trip, both ways
10,000
14,186
Jed McCaleb
nothing attributable, from any source checked

The two accounts curated to Britto hold a billion XRP each and were funded at ledgers 85 and 87 — inside the first three-tenths of one percent of the lost range, which makes them the earliest large allocations in recoverable XRPL history. Both are terminal: they received, and never sent anything, before or since.

In plain terms

It matters not to read that as a statement about who owned what. What the ledger supports is narrower: these are the accounts that can be attributed. Someone could hold a dozen accounts here under no label at all, and 27 of the 136 carry no attribution from any source.

So the honest version is that Britto’s name is attached to the two earliest billion-XRP grants, Schwartz’s to a single standard 10,000 XRP grant, and McCaleb’s to nothing — and all three of those are facts about labelling, not about holdings.

The protocol was bare

Across all 136 accounts, only the eight mandatory AccountRoot fields appear. Not one account had set Domain, RegularKey, MessageKey, EmailHash or TransferRate, and every single Flags value is zero. No account settings had been changed by anyone, anywhere, ever.

Worth noting for anyone doing lineage forensics: domain-based identity verification, which underpins most modern XRPL attribution, has nothing to work with in this era.

When the DEX started — and it was not day one

Three order books were open at the snapshot — USD/XRP, JPY/USD and BTC/USD — alongside 53 trustlines in six currencies:

USD ×29BTC ×16CAD ×5EUR ×1JPY ×1MEA ×1

Dating them matters, and the objects date themselves. Each carries PreviousTxnLgrSeq, so we get an upper bound on when each was created — it existed at or before that ledger:

Object
Count
Earliest
Median
Latest
Trustlines
53
147
8,901
32,359
Resting offers
4
10,084
17,823
17,835

Every figure in that table is a last-touched ledger, so each is a ceiling rather than a birthday. A payment flowing through a trustline, or a partial fill against an offer, rewrites the field — so the real median trustline creation is at or below 8,901, possibly well below.

So the ledger opened for accounts at ledger 7, but the first datable trustline is ledger 147 and the four resting orders are late: 10,084, 17,819, 17,826 and 17,835 — between a third and two-thirds of the way through the lost range, not at its start. Trading was not switched on with the network; it arrived after the supply had been handed out.

And it was scaffolding, not a market. Only 3 of 53 trustlines carried a non-zero balance — 2 USD and 1 unit of a currency called MEA. Total IOU circulation on the XRP Ledger was three units of value.

The four offers imply mutually contradictory XRP prices ($10.50 against $1.15), so they are test orders rather than a price signal. The BTC/USD offer prices bitcoin at $13.33, which is close to its real market price over the days this range covers — a reasonable sanity check on the snapshot, though with one order it is a plausibility check and not a measurement.

What happened next — 79 billion XRP in five minutes

Everything above stops at the horizon. But the 136 accounts did not, and what became of them is in surviving history where anyone can check it. Twenty-five days after ledger 32,570, the account holding 80% of all XRP emptied itself.

On 26 January 2013, between 22:35:20 and 22:40:40 UTC, r8TR1AeB… sent twelve payments totalling 79,000,000,000 XRP to exactly nine addresses. Seventy-nine percent of every XRP that will ever exist moved in five minutes and twenty seconds, in round eight- and nine-billion blocks, on a metronome:

Time (UTC)
Amount
To
22:35:20
9,000,000,000
22:36:00
9,000,000,000
22:36:40
8,000,000,000
22:37:10
8,000,000,000
22:37:40
8,000,000,000
22:38:00
8,000,000,000
22:38:30
8,000,000,000
22:39:00
9,000,000,000
22:39:30
9,000,000,000
22:40:00
1,000,000,000
22:40:20
1,000,000,000
22:40:40
1,000,000,000

Those twelve are not quite the whole day. Forty-seven minutes before the run, the account sent 100,000,000 XRP to its operational account, and two minutes after it, a final 800,000,000 topped up one of the nine — 79.9 billion moved on 26 January in all. The five-minute window is the event; the table is exact within it, and all fourteen are one account_tx call away.

In plain terms

Nine accounts each received several billion XRP. None of them kept it — but none of them moved it quickly either. The money sat untouched for four months. Then, on a single day — 27 May 2013 — eight of the nine signed the only transactions of their lives: each split its balance the same three ways, 3.55 billion, 3.55 billion, and the remainder, and went back to sleep with about a hundred XRP left. The ninth paid out in stages between March and August.

They were not wallets. They were holding pens — and they were emptied on a script, just like they were filled.

The nine, today
Balance
Lifetime txs
Passed through
79B
XRP, in 5m 20s
Held today
856.10
XRP, all nine combined
Retained
0.000001%
of what they received
Founding cohort
0.0497%
of 100B still held

The nine hold 856.10 XRP between them today — about a millionth of one percent of what passed through. And the pattern holds for the cohort as a whole: all 136 founding accounts still exist, none was ever deleted, and together they now hold 49,681,555.5 XRP of the 100 billion they started with. 0.0497%.

Which is worth holding next to the reconstruction above. The lost ledgers are treated as the great unknown of XRP’s history, and they are genuinely gone — but the concentration they created did not survive them by much. The single account that held 80% of the supply at the horizon kept it for twenty-five days.

Why the history is missing

The XRP Ledger’s documentation attributes the loss to “a mishap early in the XRP Ledger’s history” and does not say what the mishap was. The client of the time is public, and its commit history over those three weeks is fairly explicit.

Date
Commit
Message
2012-11-08
“Make the skip lists self-descriptive. This change will cause old and new servers to diverge ledgers.”David Schwartz
2012-12-22
“Clean up — Ledger breaking changes.”Arthur Britto
2012-12-25
“Remove obsolete TERs in prep for ledger wipe.”Arthur Britto
2012-12-29
“Function to retrieve previous ledger hashes from the ledger.”David Schwartz
2012-12-31
“Add the code to walk to the ledger chain.”David Schwartz
2013-01-13
“Fix the reason we couldn’t recover ledgers. Ledger base data must be stored in CAS.”David Schwartz

Two separate things are visible there. The first is that the restart was deliberate. Three days after a commit making breaking changes to the ledger and transaction formats, Arthur Britto removed dead error codes “in prep for ledger wipe” — on 25 December 2012, at 00:06 UTC. Our own estimate, derived from the recovered timestamp and the measured close rate with no knowledge of this commit, puts ledger 1 of the current chain at about 07:30 UTC that same morning. The two land seven hours apart.

Why nothing could be recovered afterwards
On 13 January 2013 David Schwartz committed “Fix the reason we couldn’t recover ledgers. Ledger base data must be stored in CAS.” It is six lines, and this is all of them:
9fd2b543e8f7 · src/cpp/ripple/Ledger.cppLedger::saveAcceptedLedger, +6 / −0
  assert (getAccountHash() == mAccountStateMap->getHash());
  assert (getTransHash()   == mTransactionMap->getHash());

+ // Save the ledger header in the hashed object store
+ Serializer s(128);
+ s.add32(sHP_Ledger);
+ addRaw(s);
+ theApp->getHashedObjectStore().store(hotLEDGER, mLedgerSeq, s.peekData(), mHash);

The addition is the tell. Before this commit, a server that closeda ledger never wrote that ledger’s header into the hashed object store — the content-addressed pool that servers fetch from each other by hash. Checking the parent commit directly: saveAcceptedLedger went from its asserts straight into the SQL block, and the only thing Ledger.cpp put in the store was hotACCOUNT_NODE, the account-state tree. The one place in the whole codebase that stored a hotLEDGER header was the acquisition path — LedgerAcquire::takeBase, which files a header away after fetching it from a peer. A header could be passed around once somebody had it; no server ever seeded its own.

So a server missing a ledger could ask its peers for that ledger’s state tree and get it, and ask for its transaction tree and get it, and never obtain the header that binds the two together and states which ledger they belong to. Without a header there is no ledger. History could not be backfilled from the network at all, by anyone, until this line existed.

In plain terms

Think of each ledger as a book: a cover page listing what is inside, plus the contents. The contents were being filed in a shared library that any server could borrow from. The cover pages were only ever kept on the shelf of whichever server made the book.

So when the servers holding those early cover pages no longer had them, no one else could supply one. The contents were still borrowable and the books were still unreadable.

That is exactly the asymmetry this whole reconstruction runs on, thirteen years later. Everything on this page comes out of a state tree— balances, sequence numbers, trustlines, the hash index — because state was the part being stored in a form that survived. Not one lost ledger’s header survives, which is why no lost ledger has a transaction root, and why ledger 32,569’s close time reaches us only as a field inside its child.

One caveat on all of this: the commits prove a wipe was planned and that header data was absent from the recoverable store until 13 January 2013. They do not, on their own, prove that the wipe is what removed ledgers 1 to 32,569 — those are ledgers of the chain that followed it. The defensible reading is that the current chain began with the December restart, and that whatever became of its first week of ledgers locally, the missing header path is why they could never be fetched back. The fix landed twelve days after the horizon. Everything already gone stayed gone.

What cannot be recovered

Transaction bodies are gone for good. We have 163 hashes and the ledgers they landed in, but no senders, destinations, amounts or memos, and no way to map a hash to the account it created. Intermediate balances are unrecoverable — only the final position survives.

Ledgers 1–255 have no recoverable hash at all, since the skip-list begins at 256, as do all non-multiples of 256 below 32314. And reconstructing an actual ledger is infeasible: knowing ledger 32569’s hash makes any candidate checkable, not derivable. You would have to guess 368 exact transactions and their precise ordering.

None of this is a consensus problem
An XRPL ledger commits to complete state, not deltas. Ledger 32570’s account_hash3806AF8F22037DE598D30D38C8861FADF391171D26F7DE34ACFA038996EA6BEB — fixes every balance, trustline and offer in existence at that moment. Nothing before it can affect anything after it. That is why servers happily run from 32570 as their floor: the gap is a historical hole, not a ledger one.

Method

Everything here comes from ledger 32570’s own state tree, pulled from a full-history node with ledger_data (260 objects over two pages) and ledger for the header. Transaction counts derive from account Sequence fields; the fee burn from total_coins; ledger hashes from the two LedgerHashes objects; activity timing from PreviousTxnLgrSeq.

ledger index32570
close time2013-01-01T03:21:10Z
ledger hash4109C6F2045FC7EFF4CDE8F9905D19C28820D86304080FF886B299F0206E42B5
parent hash (ledger 32569)60A01EBF11537D8394EA1235253293508BDA7131D5F8710EFE9413AA129653A2
account state hash3806AF8F22037DE598D30D38C8861FADF391171D26F7DE34ACFA038996EA6BEB

These values are permanent. Ledger 32570 closed in January 2013 and cannot change, so every figure on this page is fixed for as long as the XRP Ledger exists.

None of it needs an API key, an archive, or any access you do not already have. Two public JSON-RPC calls against any full-history server reproduce the core numbers — the header for total_coins and the hashes, then the state tree for everything else:

N=https://s1.ripple.com:51234/

# 1 — header: total_coins and the hash chain
curl -s $N -H 'Content-Type: application/json' \
  -d '{"method":"ledger","params":[{"ledger_index":32570}]}'

# 2 — the full state tree, 260 objects over two pages
#     (repeat with "marker" from the response until it stops coming back)
curl -s $N -H 'Content-Type: application/json' \
  -d '{"method":"ledger_data","params":[{"ledger_index":32570,"limit":2000}]}'

# then, from those two responses alone:
#   objects        260
#   accounts       136   AccountRoot entries
#   transactions   368   sum of (Sequence - 1)
#   drops burned  3680   100,000,000,000 XRP - total_coins
#   fee per tx      10   3680 / 368

Every other figure on this page — the 382 recovered hashes, the 163 transaction IDs, the distribution tiers, the per-ledger timing — comes out of that same second response. Nothing here is privileged information; it is one public ledger, read carefully.