On October 31, THORChain halted trading on several blockchains.
An Ethereum block reorg caused THORChain to pay out 10 | Hanami
On October 31, THORChain halted trading on several blockchains.
An Ethereum block reorg caused THORChain to pay out 10 ETH that a vault never received. The automatic solvency checker caught the shortfall and halted ETH swaps. Within approximately two minutes, node operators halted ETH transaction signing, so no further ETH could leave the vaults.
Node operators then halted all chains as a precaution so core developers could investigate.
The 10 ETH has been returned by the user to make the vault solvent again.
Breakdown of what happened and next steps:
At 11:34 UTC Oct 31, Ethereum had a one-block reorg. A 10 ETH deposit to one of the vaults sat in the dropped block and never landed on the canonical chain.
THORChain had already observed and credited that deposit. The swap missed its price limit and was refunded, so the vault paid out 10 ETH it never received. The sender's real deposit was refunded as well.
Every node detected the reorg. But the re-check that should have removed the deposit could not get a clear answer in time, so it was finalized.
The solvency checker halted ETH swapping automatically, then three node votes halted all ETH outbound payments.
All chains were then halted by three node votes as a precaution. Now that this is public knowledge, every time there is a block re-org on an external chain, a malicious actor could perform a new transaction with the same nonce and would be paid funds by the THORChain vaults.
Note: Three node votes can trigger emergency halts to protect network solvency. However, that action can be reversed by four counter node votes, then five node votes can reverse the reversal, and so on, maintaining a balance between decentralization and rapid emergency intervention. Halting a chain does not give those nodes control of the assets.
Core developers have been working on the necessary fixes.
Nodes will decide to re-enable chains as they are deemed safe.
Trading blockchains: AVAX, BASE, RUNE, XRPL
Halted blockchains: ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON, ZEC