DefiingerMulti-Chain DeFi Data, News & Research

Weekly Deep Dive: How a Reused Memo Made Chainflip Pay Twice

How an attacker made Chainflip pay the same TRON deposit twice: a memo-attachment flaw, a refund path that trusted its own input, and the recovery plan that follows.

Weekly Deep Dive2026-09-1410 min readDefiinger Research Desk2093 words

This week's report covers the most instructive failure of the week by mechanism rather than by size: 736,442.17 USDT left Chainflip's TRON settlement path on 12 September 2026 — small beside Liquid's $320m, but produced by a flaw that will generalise to every protocol that reads instructions from a writable field.

We chose it because it fails in a direction the last fortnight had not yet shown. Liquid was value created upstream and accepted downstream. Chainflip was value created exactly once and paid out twice — and the deposit, at every moment, sat safely in the vault.

1 1. In brief

On 12 September 2026, an attacker drained 736,442.17 USDT from Chainflip's TRON settlement path without breaking cryptography, stealing a key, or moving a single deposit out of the protocol's vault. They attached a memo of their own to a transaction Chainflip's validators had already signed; the system read the memo as a new swap instruction, treated it as failed, and issued a refund — paying the same underlying deposit twice.

The pattern ran eight times in about ninety minutes in the early hours of Saturday. Six of the eight attempts produced payouts, doubling in size each round. Detection came only when later, legitimate USDT payouts began to fail. It is the first significant critical security event with a realised loss in the protocol's history.

736,442 USDT
Paid out twice
six unauthorised payouts
8 attempts
In about 90 minutes
six succeeded, sizes roughly doubled
115,654 USDT
Pending user swap
safe in the vault, payable on restart
~2.25%
Of FLIP market cap
loss relative to token value at the time

2 2. Background: what Chainflip is, and why the TRON route is different

Chainflip is a cross-chain swap protocol that routes assets natively between Bitcoin, Ethereum, Solana and TRON without wrapped tokens or conventional bridge contracts. Users deposit into vaults controlled by a validator set, which observes the deposit and pays out the destination asset. The security model rests on the validators correctly translating an incoming deposit into exactly one outgoing payment.

The TRON integration went live in mid-June 2026 and the team described it as its strongest chain launch: roughly $25.63m of volume across 956 swaps in the first thirty days. On 10 September — two days before the incident — USDT-TRC20 was added to Chainflip's lending product. TRON matters to this design for a practical reason: USDT on TRON is the deepest stablecoin rail in circulation, and the integration exists precisely because that depth is worth reaching.

One structural difference matters for everything that follows. Most chains Chainflip supports pass swap instructions through dedicated contract functions — the instruction is part of the call the protocol itself parses. TRON's integration instead reads the swap instruction from a memo attached to a transfer. The instruction channel and the value channel are the same field, and the memo is writable by anyone who can construct a transaction.

3 3. Mechanism: one deposit, two payouts

Reconstructing the sequence from Chainflip's incident blog and contemporaneous coverage gives a path with five steps and no exotic cryptography at any of them.

The attack path. The deposit never left the vault; the payout side was charged twice for it.
#StepWhat happenedWhy it passed
1DepositThe attacker sends USDT to Chainflip's TRON deposit addressA legitimate deposit; the vault correctly registers it
2Signed payoutValidators observe the deposit and sign the corresponding payoutThe swap is real; the signature is legitimate
3Memo attachmentThe attacker appends a custom memo to the already-signed transactionTRON memos are writable by the transaction builder; the signature covers the transfer, not the appended memo
4Re-parseChainflip's backend reads the new memo as a separate swap instructionThe input channel treats the memo as authoritative
5RefundThe second 'swap' appears to fail, so the protocol refunds itRefunds are the safe path by construction — no extra check exists for whether the swap was ever real

The step that fails safely on most designs is step 5. A refund exists because refusing to return funds is worse than double-checking a return — so refund paths are built to be generous, fast and rarely re-verified. Chainflip's own account is that the system treated the injected memo as a failed swap and paid out against the same underlying deposit a second time.

The attacker behaved like someone testing a working method rather than discovering one. Eight attempts over roughly ninety minutes, starting small and roughly doubling each round, is a sizing ladder: confirm the mechanism, then escalate while it lasts. Two attempts failed. Six paid out 736,442.17 USDT in total.

4 4. Root cause: an input channel that trusted its own input

A settlement system needs to bind every instruction it acts on to something it can verify. On chains where instructions arrive through contract calls, the binding is implicit — the protocol's own code parses the call, so no third party can substitute the instruction after the fact. A memo-based channel has no such binding unless the protocol adds one, because the memo field is writable up to the moment the transaction is final.

payment_authorised = signed_transfer + memo_instruction # what the system accepted
payment_authorised_required = signed_transfer + memo_validator(signature, deposit_id)

In plain terms, the system read an instruction attached to a transaction it had already signed, and did not ask whether the instruction predated the signature. The validator signature proves the transfer happened; it does not prove the memo was part of what the validators approved. Treating the second as covered by the first is the defect in one sentence.

The failure is therefore not in TRON, not in USDT, and not in the vault cryptography. Every component behaved as specified. The specification itself contained the gap: an input format that third parties can edit, feeding a state machine that assumes inputs arrive exactly once.

5 5. Detection, response and the recovery plan

The breach was discovered the way most vault drains are: downstream payments began failing. Once legitimate USDT payouts started to fail, the team traced the failures to repeated processing of the same deposits through altered memos. By the time of the public statement on 13 September, the network was fully paused, the exploited code path was analysed, and a fix was described as fleshed out — with the restart plan, not the fix, named as the remaining work.

Three commitments matter for assessing the outcome. First, impacted users will be made whole, though the funding mechanism — treasury, revenue, insurance-style buffer — had not been named at the time of writing. Second, one legitimate user swap of 115,654.41 USDT never left the vault and is payable on restart. Third, the moved funds were flagged with counterparties as they transited the market, which is the standard and rarely sufficient recovery route.

Context is worth recording honestly. On 24 August the team contained an attempted exploit targeting cross-chain messaging and refund logic, with no loss — the same family of flaw, caught early. Two weeks later the refund path paid out. That sequence is the strongest available argument for treating near-misses as findings rather than incidents that resolved themselves.

6 6. Data: the numbers, and what each one measures

This incident produced a small set of quantities, and conflating them is how coverage of it goes wrong. Each row below is a different measurement.

All figures are per Chainflip's own accounting at the time of the 13 September statement; no independent forensic report had been published.
QuantityValueWhat it measuresSource
Unauthorised payouts736,442.17 USDTSix successful duplicate payoutsChainflip
Failed attempts2 of 8Attacker rounds that produced no payoutChainflip
Attack durationabout 90 minutesFirst attempt to lastChainflip
Escalation patternroughly 2x per roundSizing ladder across attemptsChainflip
Pending user swap115,654.41 USDTLegitimate funds held in the vaultChainflip
Loss versus FLIP market capabout 2.25%Economic weight of the loss on the tokenMarket data

The derived number worth stating plainly is the ratio between the theoretical exposure and the realised loss. The vault path could pay out repeatedly, but only against deposits that actually existed — so the ceiling was the vault balance, not the mint. Liquid's attacker two weeks earlier faced the same bound and reached it almost exactly; Chainflip's attacker never tested it to the same degree — the exploit ended when later payouts began to fail, at an absolute scale several hundred times smaller.

7 7. The same window, three bridge-class failures

Chainflip was one of three bridge-class systems to fail in the same seven days, and the three make a controlled comparison almost nobody would design on purpose.

Three incidents, three different mechanisms, one shared assumption: that downstream systems could trust what upstream produced.
DateVenueHow value was createdRealised lossContained by
9 SepNomic / OsmosisDouble-spent nBTC via a deposit-forwarding bug; unbacked vouchers crossed IBC~$3.15mValidator freeze; 22.65 BTC frozen pending seizure vote
11 SepSymbiosisUnauthorised mint of ~46.1bn syBTC through BridgeV2~$336kPool reserves bounded the drain; 15 BTC recovered
12 SepChainflipDuplicate refund against one deposit via memo reuse736,442 USDTNetwork pause; fix shipped; users to be made whole

Scale the differences and the pattern is the finding. Liquid lost $320m a week earlier because unbacked supply met deep exit liquidity. Symbiosis minted more unbacked supply than Liquid did, in raw token terms, and lost about a tenth of one percent as much — because the pools it could reach were shallow. Chainflip's vault could only pay against real deposits, so the attacker's ceiling was small. In every case the realised loss equals the exit liquidity the attacker could reach before someone pulled a switch.

8 8. Impact assessment: who is actually exposed

The most concentrated exposure sits with the protocol's own balance sheet, not with users — a rarity among bridge failures.
LayerWho is affectedImmediate effectResolution depends on
Chainflip usersSwappers through the TRON routeDeposits and swaps halted network-wideA secure restart and the make-whole mechanism
One pending swapperA single 115,654 USDT swapFunds held, not lostProcessing on restart
FLIP holdersToken holdersA realised loss equal to roughly 2.25% of market cap, plus recovery costsCompensation funding and post-mortem quality
Memo-based integrationsEvery protocol reading instructions from writable fieldsReputational re-pricing of the patternWhether this becomes a standard audit check

That last row is the one to generalise. The industry now has a small catalogue of writable-input settlement bugs, and the fix is unglamorous: bind instructions to signatures, sequence deposits, and treat refunds as payouts that require the same verification as any other. None of it is novel cryptography. All of it is the kind of work that gets skipped when an input format seems trusted because it always has been.

9 9. What this changes for due diligence

  • For any protocol reading instructions from memos, notes or free-text fields: ask what prevents an instruction from being appended, duplicated or replayed after authorisation.
  • For refund logic specifically: ask whether a refund is verified as rigorously as the payment it reverses — Chainflip's own August near-miss pointed at exactly this family.
  • For vault-based designs: reconcile total payouts against total deposits on a rolling basis. The duplicate-payment class is invisible until the vault runs dry.
  • For users of cross-chain rails: a pause is a cost, but a pause that precedes a make-whole commitment is the good outcome. Treat instant restarts with more suspicion, not less.

10 10. What would change our read

This assessment rests on Chainflip's own accounting, published before any independent forensic report. It would change materially if a post-mortem attributes the loss to a different mechanism than memo reuse on signed transactions, if the eight-attempt timeline or the 736,442.17 USDT figure is revised, or if the recovery terms leave any affected user short. The restart plan and the named compensation mechanism are the specific things to read when they arrive.

The broader conclusion does not depend on those details. Three bridge-class systems failed in seven days through three different mechanisms, and in each case the realised loss was set by exit liquidity and response speed rather than by the size of the flaw. Until upstream provenance and downstream reconciliation are standard requirements rather than post-incident upgrades, that is the distribution to expect: frequent small failures, and occasional enormous ones.

11 11. In brief

Chainflip lost 736,442.17 USDT because a refund path paid twice against a deposit that never moved. The attacker found the one integration where the instruction channel is writable, sized the exploit responsibly, and was stopped when payouts began to fail rather than by any provenance check. The protocol's response — fast pause, a committed restart, an explicit make-whole promise — is the correct shape, and the recovery will be the test of whether the shape holds.

For the wider system, the lesson is identical to the one Liquid taught a week earlier, at a different layer: every downstream check verified procedure, and none verified provenance. The fix is boring, known, and not yet standard. That combination is what these weeks keep purchasing.

DE
Defiinger Research Desk

The Defiinger Research Desk compiles multi-chain DeFi data and commentary from public on-chain sources and vetted industry publishers. Our editorial process prioritizes verifiable figures and clearly dated references.

Sources & Methodology

  1. Chainflip — official incident blog, 'Tron USDT exploit: what happened and what happens next' (13 September), and the 13 September statement.
  2. SlowMist — incident record and classification of the Chainflip TRON USDT exploit.
  3. The Crypto Times — coverage of the network pause, the pending swap and compensation plans.
  4. KuCoin News — reporting on the pause timeline and the eight-attempt sequence.
  5. CoinMarketCap — independent cross-check of the loss figure and payout count.
  6. DefiLlama — TRON chain-level context used for background.

Headlines and figures on this page are drawn from the outlets listed above; commentary is clearly labelled opinion and is not investment advice. Last reviewed 2026-09-14.

Frequently Asked Questions

Was TRON itself affected?
No. The flaw was in Chainflip's handling of TRON transaction memos, not in TRON, its validators, or the USDT contract.
Were users' funds lost?
The 736,442.17 USDT came out of Chainflip's vault path rather than from individual deposits. One pending user swap of 115,654.41 USDT was never paid and remains in the vault. Chainflip has committed to making affected users whole.
Is Chainflip paused for good?
No. The network was paused pending a restart plan, with the earliest restart indicated as the Monday after the incident. The fix itself was described as already fleshed out.
How is this different from the Liquid Network incident?
Liquid's attacker created value that should not have existed and redeemed it through normal exits. Chainflip's attacker made the protocol pay twice against value that did exist. Both are failures to check provenance, but they sit on opposite sides of the settlement.
Is this investment advice?
No. This is an incident analysis. Nothing here accounts for your holdings, mandates or risk appetite.