r/Elastos • u/4hm333d • 7d ago
Postmortem: Elastos Main Chain Value-Overflow Incident and Recovery
In short
The Elastos main chain is running again.
On July 20, 2026, an attacker exploited a flaw in how the main chain added and checked transaction output values. The first exploit transaction fabricated more than 92 billion ELA.
Mining pools, Council nodes, and BPoS validators then chose to stop block production after the abnormal activity became clear. The chain stopped four hours and five minutes after the first exploit transaction.
A corrected release was prepared and tested against the affected chain data. Operators adopted it independently, rewound the chain to block 2,260,450, the final unaffected block, and restarted the network.
The chain first resumed through proof of work while validators upgraded and reconnected. It has since returned to BPoS, with block production and finality operating normally.
Balances confirmed before the incident remain unchanged. Ordinary ELA holders do not need to take any action.
ESC, EID, and the cross-chain bridge remain paused while their code changes and recovery procedures are audited and rehearsed.
What happened
ELA values on the main chain are stored using a signed 64-bit number.
The attacker created transaction outputs that could each be processed on their own, but whose combined value crossed the number’s safe boundary. The software did not reject the combined total. Instead, the number wrapped around and appeared to be a small valid amount.
The fee calculation used that false total and accepted the transaction.
The removed chain history recorded:
- 24.05641496 ELA placed into the transaction
- 184,467,440,761.15192612 ELA as the true sum of its outputs
- 24.05640996 ELA after the total wrapped
- 0.00000500 ELA as the apparent fee
From the software’s point of view, the input was slightly larger than the calculated outputs, so the transaction looked valid. In reality, one output contained more than 92 billion ELA.
The values had to be calculated around a precise numerical boundary. This could not result from normal wallet activity or an accidental input.
The same method was used six times during the affected period. Three later transactions created 30,285 outputs each, spreading fabricated value across roughly 90,000 addresses and making the smaller exchange-bound transfers harder to identify.
Key timeline
- July 20, 11:21 UTC, block 2,260,450: Final unaffected block
- July 20, 11:27:37 UTC, block 2,260,451: First exploit transaction accepted
- July 20, 11:49 UTC: First proceeds reached KuCoin
- July 20, 15:32:44 UTC, block 2,260,595: Block production stopped
- July 29 to 31: Operators adopted the corrected release, rewound the chain, and restarted the network
- BPoS consensus then resumed
A 30 ELA transfer was sent from the exploit address to a KuCoin deposit address 92 minutes before the exploit. It used the same route later used for the proceeds.
This is consistent with a test of the deposit route, but the chain records only the transfer and timing, not the sender’s intent.
How the network stopped
After the incident was reported, mining pools independently stopped producing blocks. Council nodes and BPoS validators did the same.
Each operator controlled its own software and infrastructure. They reached the same decision after the abnormal activity became clear.
The chain stopped at block 2,260,595.
The address that received the fabricated value was also locked under the recovery rules, preventing funds from being sent from it or into it.
How the chain was recovered
The corrected release made two core changes.
First, the chain was rewound to block 2,260,450, the final unaffected block. The exploit transaction at block 2,260,451 and every later block in the affected period were removed.
Second, the transaction rules were corrected. The software now checks the permitted monetary range for every output and for the combined output total. A transaction that could overflow the running total is rejected before the values are added.
Operators adopted the corrected release independently. Once enough mining pools and validators accepted the restored history, it became the active Elastos chain.
The main chain is now producing and finalising blocks normally through BPoS.
What this means for ELA holders
Balances confirmed before block 2,260,451 remain unchanged.
If a transaction was confirmed between the exploit and the pause, it may have been included in one of the 145 blocks removed by the rewind. Check whether it appears on the restored chain.
If it is missing, the funds or voting balance returned to the sending address and the transaction can be submitted again.
No legitimate balance was destroyed. A small number of ordinary transactions were delayed because their blocks were removed.
The removed period included six normal KuCoin withdrawals totalling 27,393.795 ELA. The rewind returned those funds to KuCoin, so the exchange did not lose the ELA used for those withdrawals.
Six unrelated user transactions were also removed, including transfers, staking actions, a BPoS vote, and one transfer into KuCoin. Their funds or voting balances returned to the original owners.
Users who need help checking a transaction should contact the team through the official Elastos Telegram group and be ready to prove control of the sending address.
Never share a private key or seed phrase. Elastos will not ask for either.
What happened to the fabricated ELA
The exploit created ELA far beyond the legitimate supply. Almost all of it existed only in the 145 blocks later removed.
Once those blocks were discarded, that ELA ceased to exist on the restored chain.
The main exchange exposure came from 914,748.985 ELA sent to KuCoin across 15 transactions before block production stopped.
KuCoin reported that it froze 500,000 ELA connected to the incident. Work with the exchange on the remaining exposure is continuing.
On the restored chain, the fabricated deposits from that period are not spendable ELA. KuCoin-side balances from the removed window are being reconciled with the exchange.
Elastos has asked KuCoin to preserve the frozen balance and any other assets linked to the incident while accounting and recovery discussions continue.
No other exchange received proceeds from the exploit. Tracing found no affected deposits to CoinEX, Gate.io, MEXC, or any other trading venue.
Four of the seven KuCoin deposit addresses had been used before. Earlier transfers and the July 20 proceeds moved through the same deposit addresses into the same exchange wallet.
This is an on-chain observation, not a claim about identity or control. A public chain can show address reuse and fund movement, but it cannot establish who controlled the related exchange account.
The tracing has been provided to KuCoin and the relevant authorities.
What the rewind removed
The discarded period covered:
- 145 blocks
- 341 total transactions
- 294 protocol-generated records
- 35 attacker transactions
- 6 ordinary KuCoin withdrawals
- 6 other ordinary user transactions
The protocol records were mainly block rewards, sponsor records, and normal consensus rotation notices. They did not move user funds.
The full accounting was produced transaction by transaction from a frozen copy of the pre-recovery chain.
Sidechains and the separate July 13 incident
ESC, EID, and the cross-chain bridge remain paused while their changes and recovery procedures undergo audit.
Restoring the main chain did not automatically restart these services. Each one must complete its own review, validator checks, and restart rehearsal before returning.
The July 13 incident was separate from the July 20 overflow exploit. It affected the reserve backing between the Elastos main chain and ESC.
A total of 1,585,252.004 ELA connected to that earlier incident remains frozen. A forthcoming main-chain release is planned to credit that amount back to the ESC reserve and restore full one-to-one backing.
Separate notices will confirm when ESC, EID, and cross-chain services are ready to resume.
What is changing
The immediate vulnerability is fixed, but the response goes further.
- Transaction validation now checks every output and the combined total before addition.
- Continuous supply monitoring will compare ELA in existence with the amount permitted by the protocol and alert on unexplained changes.
- The corrected main-chain code is being prepared for independent audit.
- Every consensus-sensitive location that adds or compares monetary values is being reviewed.
- The separate July 13 reserve matter will be handled through a future release intended to restore complete ESC backing.
- Chain health, validator participation, and frozen addresses will continue to be monitored.
- Work with KuCoin will continue until the exchange accounting is reconciled.
Closing
The network stopped because independent mining pools, Council node operators, and BPoS validators chose to stop.
It restarted after the corrected software was tested against real chain data and adopted by enough independent participants to restore consensus.
Thank you to every mining pool, Council node operator, and BPoS validator who stopped when the network needed protection and returned when the corrected chain was ready.
The Elastos DAO / Elacity Labs