Deterministic Ordering through Linear Iterations
Chain Errata
Known supply events, security incidents and chain anomalies, documented for transparency
| Current mainnet | Genesis 2026-07-22 10:45:00 UTC |
| Genesis timestamp | 1784717100 |
| First release | v6.24.0 |
During development, from February to July 2026, mainnet was restarted from block 0 several times. The last two restarts were on 2026-07-08 and 2026-07-22. Balances did not carry over from one chain to the next. Entries marked Previous chain happened on a chain that no longer exists.
Note: the genesis message still names v6.14.11 and April 2026. That text was not updated at the July restarts. The current chain is identified by its genesis timestamp, not by the message.
Current chain
| First committed | 2026-03-15 — in a testnet key template in the public source repository |
| Detected | 2026-08-08 |
| Contained | 2026-08-30 — maintainer set rotated at blocks 331,442–331,457 |
| Closed | 2026-08-31 — v6.26.2 |
| Funds at risk | None — no user funds were lost. Other users' coins were never at risk. |
| Action | Run v6.26.1 or later. Nodes on v6.26.0 or older must upgrade manually. |
A testnet key template in the public source repository contained private keys. The same keys were in use on mainnet for two roles: the five maintainer keys, which sign releases and govern the maintainer set (3 of 5 signatures required), and the keys of the 12 block producers that the project operates.
- With 3 of the 5 maintainer keys: sign a release and change the maintainer set. To reach auto-updating nodes, an attacker also needed publish rights on the project's GitHub releases, the only source the updater accepts.
- With the producer keys: produce blocks and attest as those producers, which held most of the selection weight, and withdraw their bonds.
- Not possible: spend other users' coins. In the UTXO model, a key signs only for its own outputs.
- 2026-08-11 — GitHub accounts hardened: two-factor authentication, token cleanup, fewer collaborators, protected main branch and release tags.
- 2026-08-19 to 2026-08-28 — each exposed producer withdrew its bonds in full and registered again under new keys generated offline. No bond was lost and the chain did not fork.
- v6.25.0 and v6.26.0 — code that made a safe rotation possible: an on-chain trust root, governance transactions that can be mined, authorizations bound to a block height, and maintainer state that is undone on a reorg.
- 2026-08-30 — maintainer rotation: 10 transactions, one Remove then one Add, five times, one at a time. The signature threshold is recomputed at each change, so removing keys in a batch would have lowered it from 3 to 2.
- v6.26.1 and v6.26.2 — the key lists compiled into the binaries now hold only the new keys. A build test fails if any network ships a retired key.
No unauthorized maintainer change was seen: the maintainer set was still the original five just before the rotation. Every release was published by a project account or the CI bot. All producer bonds were recovered in full.
The old private keys remain public in the repository history, and this cannot be undone. On mainnet they no longer have any authority. Binaries v6.26.0 and older still trust the old keys and cannot verify new releases — upgrade them manually.
Signing-only keys. They are not producers and hold no bonds.
d07ec4ec146245e0ce31800ba2cf98b9fc649aa7a4021a09e8534a7764033f8d25c24110d98f2a34c37bab8fede0791d3de1281ca499a30fb7ff5223cdb0e23c2559a47ee898f8bb9a38d90573dcca2195a97a7c787b5712ba62102e225b9e0de477c1f245612f7351f66ce7936e4ffa1e0afef26a12f90f3a86ed3544ca5b8c3fd5be3de8285140a461b12dbd7d14ce0d026b5e369e38daebf89f6f7cbc0245
Previous chains
| Chain | Previous mainnet (genesis 2026-04-22, retired 2026-07-08) |
| Date | 2026-05-07 |
| Block Height | 130,320 (epoch boundary 362) |
| Impact | 457 DOLI excess (~0.31% of total supply at the time) |
| Ongoing | No — that chain was retired on 2026-07-08. The current chain does not contain this excess. |
| Funds at risk | None — no user funds were lost or stolen |
| Fix | v6.22.0 — spend errors are now checked, conservation invariant added |
During an operational recovery from a rolling deploy incident (INC-I-062),
456 reward pool UTXOs that had already been consumed by prior epoch
distributions were re-introduced into the UTXO set. At the next epoch
boundary (epoch 362, height 130,320), the EpochReward transaction consumed
all 816 pool UTXOs — 360 legitimate and 456 duplicates. A silent error
handling defect (let _ = on spend errors) allowed the outputs to be
created without valid inputs, producing 457 DOLI from nothing.
Three defensive checks failed simultaneously:
- Spend errors were silently discarded (Result not checked)
- Pool input verification was skipped during sync/reorg validation
- No post-block conservation invariant existed
The 457 DOLI stayed on that chain until it was retired. They were consensus-agreed across all 15 nodes and mixed into normal producer reward UTXOs. A retroactive correction would have required a chain reset or a punitive burn mechanism, and neither was justified for a 0.31% anomaly with no victim. The code defects were fixed to prevent any future occurrence. That chain was later replaced for unrelated reasons (see Chain history), so the excess does not exist on the current chain.
Incident: INC-I-064
Fix commit: 7191815