No items found.

Post-Mortem Report: TAC Bridge Appendix II - Onchain Tracing

TAC.Build
May 20, 2026
 • 
Technical Blog

Summary

This document is an appendix to the main Post Mortem analysis of the security incident that affected TAC Bridge. It addresses the detailed tracing of the incident that happened on May 11th, 2026. Refer to the main document for the overall context.

Timeline and Sequence of events

11.05.2026

The attack on the TON/TAC sides was executed by a single TON address, with the proceeds consolidated to a single Ethereum receiver. The on-chain sequence was:

  • Deployment of a fake jetton wallet on TON:
    EQA8rR5ofiIdpOO7l1JNSE0dthUp1AOxw0T5tO7ONIOkv9e9— a contract that looked like a USD₮ jetton wallet from the bridge's perspective, which belongs to the responsible party’s wallet EQBPHhXyG_vbsAEnB6YccNhhaVc6I3ixOCc7vriaOzo4AFA8.
  • Bridge message sent to the TAC Proxy contract: transaction bcc1f5c1…49154.
  • Sequencer set acceptance and mint on TAC: the quorum of sequencer set accepted the fake USD₮ as valid because the software did not verify the minter code of the sender jetton wallet. This is the real bug identified. The equivalent tokens were minted on TAC to the responsible party 's TAC address 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD (14 mint transactions across BLUM, USD₮, tsTON).
  • Drain of the TON bridge: the responsible party bridged the minted tokens back from TAC to TON, releasing the bridge's locked assets on TON.
  • Cross-chain exfiltration: USD₮ was bridged from TON to Ethereum mainnet via LayerZero (USDT0) in 13 transactions, and BLUM was bridged from TAC to BSC in 2 transactions.
  • Mixing on Ethereum: the proceeds were split into DAI (held on a second ETH address), ETH (forwarded through NEAR Deposit, later withdrawn via Zcash), and WBTC (routed through THORChain to a Bitcoin address).
  • Mixing on BSC: BLUM is being actively swapped into BNB and deposited into the HOT protocol; approximately 14M BLUM (52K$) remains unswapped at the time of writing.

14.05.2026

The investigation resulted in a one-way recovery proposal, which was publicly announced. Three multisig wallets under the TAC team's full control were set up and communicated as part of the recovery process. Following additional on-chain consolidations, partial refund transactions were executed:

  • The responsible party used THORChain to swap back the Bitcoin to wBTC on Ethereum and moved the remaining BLUM on BSC to a different address
  • The responsible party started sending funds to the 4 multisigs, keeping for himself the 10% of the funds as agreed: 300 ZEC (partially transparent, partially shielded), 13 ETH in Tornado protocol, 1007 SOL coming from a Near Intents bridge used with 108 BNB resulting from BLUM exfiltration on BSC
  • The responsible party, moreover, handed over the private key for the wallet 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD because it was flagged by the Near Intents team that froze 77.2BNB

Technical Details

Refer to the main Post Mortem analysis for details

Impact

All numbers below are taken directly from on-chain data. The responsible party 's TAC address is 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD.

Headline loss

Token Amount USD value
USD₮ 2,434,872.769394 ≈ $2,433,655.33
BLUM 117,414,348.59482776 ≈ $403,200.87
tsTON 8,277 ≈ $17,630.01
Total ≈ $2,854,486.22

Tokens minted on TAC to the responsible party (via bridging)

Token Total minted Mint transactions
BLUM 302,409,771.820527101
(59,414,348.594827759 - returned to TAC)
5
TON 2 1
USD₮ 2,439,872.769394 5
tsTON 25,751.500908505 3

Tokens bridged back from TAC to TON (drain target)

Token Total outgoing to the target Transactions
BLUM 242,803,355.776763477 3
USD₮ 2,434,872.769394 8
tsTON 25,751.232759343 3

Other outgoing transfers from the responsible party's TAC address

Token Total other outgoing Txs Destination
BLUM 59,414,348.594827759 2 BlumAdapterUpgradeable 0xfDc8Cd47848c0C67dF66F7120F4e3371181cFA5e (bridge to BSC — see below)
USD₮ 5,000 1 CurveRouter 0x3F5A41B922a76759b9C77D36b3d337E88cD1dc5e

Note: the 5,000 USD₮ routed through Curve was swapped for ~240,000 TAC, probably to pay for transaction fees, which still sits on the responsible party's TAC address (0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD) and has not been moved.

Responsible party’s mint transactions on TAC

Transaction hash Symbol Amount
0x9b577ff47cf47b8999c40ebbab1e67b3cbd2dd67fb44264544b4dbb6e8fc283d TON 2.0
(real)
0x5926012f0ecd683521e7237762927d3b6c6dfe3d4bba2143da9034b38a04d72b BLUM 65994214.306281957
(not collateralized on TON)
0xf2b70bc49c4798d66e80ea9206cb23d1d0a478a40aba65293b9099c7f393f130 tsTON 9196.964610181
(not collateralized on TON)
0x0942a5661236a0d73fb2c95ee27baca031a0b2b445bd86301b763f4b0dad224d USD₮ 2169728.232276 (not collateralized on TON)
0x0bef4248ddff273d19e5ccef42fad61d61d88e1d8369a4b00b105109b2564614 BLUM 59394792.875653761 (not collateralized on TON)
0x299670970a86f7b0c71e1e28deb6b8fcff1a24e2015d9ea8c4354f71bb10ff11 USD₮ 223746.064042
(not collateralized on TON)
0xba0e0ad072834fbf86ee76a1f723413e54a527f99aa44c96531ee41d78d696bf BLUM 59414348.594827759
(not collateralized on TON)
0x840f1bafff575fc44e4320974596782a17a581e1bf6cec2f05010a616205a3df tsTON 8277.268149162
(not collateralized on TON)
0x36c27fd36fe8b01be662b9597d09bf5b32ccd70e4da4a29c309d911840e91492 USD₮ 22736.85291
(not collateralized on TON)
0x081b9baa6af84ff617d099225ff45e88b3df25ab561b331181593061e8593783 USD₮ 15309.585324
(not collateralized on TON)
0xcc6cbe7cc5e412aa6ac861a7661fcebe60687eea960f1195243dcefa8c735ddd BLUM 59414348.594827759
(real)
0x290fca9f960d9703cbc9c4163774bdea48bc949691061e6a5141fa50a4974a1e USD₮ 8352.034842
(not collateralized on TON)
0xdb09da895e12503f203f968fd3be8f905711a27b7a87d85c2de28e80edcfa981 BLUM 58192067.448935865
(not collateralized on TON)
0x7de28960968514c50b9351edf4b3656bb62d2f48e286d5a583d613868f266aab tsTON 8277.268149162
(not collateralized on TON)

Responsible party’s transactions on TON

Transaction link Symbol Amount
https://tonviewer.com/transaction/b8b3cc02a558568f4a2e25df5a62972b88cf985fa8070a35e961ed07dcea30f9 tsTON 200
https://tonviewer.com/transaction/dbc25d9d6c4eb7e7199a5e88be5b227567264d66ce15e806cd0a5ca7f6e870a8 USDT 8352.034842
https://tonviewer.com/transaction/077caac3cd7a1fb16caabdd0d24782610b8b639f93967c88eada2b9328a234d3 tsTON 8077
https://tonviewer.com/transaction/996bf7fd44104d2a677c99f51a159522c97bc51f32e31aa8ce2a154fa67f6a5f USDT 67000
https://tonviewer.com/transaction/c1dcd39ef3f6a95f0169806c9ff4035e576fb50a10276f2d8712c5317cdf5988 USDT 250000
https://tonviewer.com/transaction/5302c91fed089175c931ba95522f92591da9de7be14224f396e795dc238ee600 BLUM (tx reverted via insufficient balance on our JettonProxy contract) ** 125389007.181936
https://tonviewer.com/transaction/6a633544f93db083de9721e4ae0d01945e2b379625a73a5b7893e490eaffe378 USDT 800000
https://tonviewer.com/transaction/0127405ca644af830fad3cae65cd15851fbb73aac665c7c0eecbd449da2260a6 USDT 1047728.232276
https://tonviewer.com/transaction/f2cb7811a610dc45ad3eb0f895e1489043ba9f57802a044ddd788c580eb914aa USDT 223746.064042
https://tonviewer.com/transaction/c30fd40489267a985762800746165e2632c410d2834e0c95804ccd4284b7497c BLUM 59414348.5948278
https://tonviewer.com/transaction/05cb84a5ab7bcca36965149385cf58db856b01771e59919051be2465a4c66c20 USDT 22736.85291
https://tonviewer.com/transaction/73993773b48b5895b0135a8907b5086b3fb743662a8db9af5373a461141feecf tsTON
(unstake request)
8,277
https://tonviewer.com/transaction/9f90165237a6c7bd030858ecfb39d26661f5800a09bf9347ea3b6561e5c92e1f tsTON
(tx reverted via insufficient balance on our JettonProxy contract) *
17474.232759343
https://tonviewer.com/transaction/9b9f9b0296cbf02a5b0b4ee4e3b4f3285e0411c9c8191cf098d4c24022f84af8 USDT 15309.585324
https://tonviewer.com/transaction/d1495bc9b4535497f21139218cea5fedf18415563f8a65272bd976de26f49728 BLUM 58000000

* - In this transaction, the responsible party attempted to transfer 17,474.232759343 tsTON from the TAC’s jetton proxy wallet to their address. The flow reached the jetton_transfer call, but the transaction failed during the compute phase: success=false, aborted=true, exit_code=706. In the jetton wallet code, exit code 706 maps to INSUFFICIENT_JETTON_BALANCE: after subtracting the requested amount, the wallet balance would have become negative, so execution was stopped. In short, the exploit path reached the withdrawal attempt, but the jetton proxy wallet did not hold enough tsTON. As a result, this attempted transfer failed, and no tsTON was moved (except for 8277 tsTON, which was moved by the following transaction, as the amount was available on the jetton proxy).
** - The same thing happened in this transaction.

Post incident: On-Chain Fund Tracing

The responsible party consolidated proceeds onto a single Ethereum receiver and then split them across DAI (Uniswap), ETH (forwarded via NEAR Deposit), and WBTC (routed through THORChain to Bitcoin). BLUM was bridged separately from TAC to BSC using LayerZero OFT endpoint and is being progressively swapped to BNB and deposited into the HOT protocol.

Responsible party’s bridge operations: TON → Ethereum (LayerZero / USDT0)

Thirteen LayerZero transactions were used to move USD₮ from TON to Ethereum mainnet. Each row can be independently confirmed on LayerZero Scan.

Subtotal: $2,454,631.42

Responsible party’s bridge operations: TAC → BSC (BLUM)

# LayerZero tx hash BLUM amount USD value
A 0xaef3a391981aefb0060167a5d085953f775fd7ac21a52a54f79020baf4cb5b84 58,414,348.594827759 $210,296.91
B 0x41ee6503903bf5e210720a0d060dd87e7664fd105794e6aa24dddced97411462 1,000,000 $3,600.09

Subtotal: 59,414,348.594827759 BLUM (≈$213,897.00)

Total extracted assets observed in-flight across USD₮ + BLUM leaving TON blockchain: $2,668,528.42.

Ethereum mainnet

Initial receiver of all bridged tokens on Ethereum: 0xDFf18B83BB3F6b78918C045D84E075ED54b45fC4.

DAI: $1,040,163 worth of DAI (swapped via Uniswap) is held on a second responsible party’s address 0x46FB375EAc7a44C231b2b7aB762040ee74908CDc.

USD₮ → ETH swaps (subsequently forwarded to NEAR Deposit):

Subtotal swapped to ETH: $958,612.27.

ETH forwarded to NEAR Deposit → ZCash :

All the ETH routed via NEAR were subsequently withdrawn via Zcash landing on this address: t1h6NcBAciYGdaVb4Ej1AELTx1D9UF9WUDr

WBTC → THORChain → Bitcoin

The remaining Ethereum proceeds were swapped to WBTC and routed through THORChain to a Bitcoin address.

WBTC swaps:

THORChain router transactions:

Final Bitcoin destination: bc1qjhqztgk0k2l35r6tfv9fw7y3q4r6yh3x6c9l8j, confirmed via THORChain scan: tx 67754C26…A988EDA2, tx ED69C35E…517D62C5, tx E9B4F539…61CE4C38. THORChain account view.

Binance Smart Chain (BLUM)

On BSC, the initial receiver of BLUM is 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD — the same EVM key as the responsible party's TAC address. The responsible party is actively swapping BLUM and has not finished; the proceeds (BNB) are aggregated into 0x4A123c832D7D1A2bC9c5279c6f122b5d52215b9b and then deposited into the HOT protocol.

HOT protocol deposits observed so far:

Approximately 14M BLUM tokens (52K$) remain on the BSC receiver, not yet swapped as of 12th May 2026.

Money flow overview

  • Exploit on TON + TAC, executed from a single TON address.
  • All ETH-side assets are bridged to a single Ethereum receiver.
  • Split into three streams on Ethereum: DAI (held on a second ETH address), WBTC (routed to Bitcoin via THORChain), ETH (routed via NEAR Deposit, later exiting through Zcash).
  • BLUM stream bridged TAC → BSC; being progressively swapped to BNB and deposited into the HOT protocol.

Funds Recovery phase

As of May 14th, around 00:00 UTC, the TAC team posted on X the list of multisigs under full control to be used for the refund:

The hacker performed some consolidation transactions before initiating a refund toward the multisig under the team’s control:

Bitcoin → THORChain → wBTC

Bitcoin were swapped back to wBTC on Ethereum

THORChain router transactions:

# Bitcoin tx hash (THOR router) Amount
1 9B59D6A8B4F9C863EB6524CD86F447B1BDBE831355D8FA7B97921FAF97CB8899 5.53 BTC

BLUM on BSC

Blum tokens held on BSC waiting to be swapped were moved to a different address before being sent to the multisig under TAC control:

After this consolidation, the responsible party then proceeded to transfer the refund to the multisigs communicated by the TAC team:

Previously, Near Intents team froze 77.2 BNB across 3 different responsible party’s transactions while he was executing exfiltration from BNB on BSC toward SOL on Solana:

To allow the TAC team to recover these funds, the responsible party decided to pass over the Private key of the address that originated these transactions: https://bscscan.com/txs?a=0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD

The TAC team, later on, used this private key to recover the remaining dust owned by this address on BSC and TAC chain and move everything (leaving just some gas tokens) to multisigs under full control of TAC team:

After all these transactions, the full set of recovered assets under the control of the TAC team is the following:

Chain Token Amount (Tok) Value (USD) Multisig
ZCash ZEC 1,315.00 697,844.20 t1dXd2EUAe34BYEtNUtNfrBFQTTs8LhoTUH
TON BLUM 58,000,000.00 199,172.00 EQAkTfPo4zo72Zyr5dk1QrWvCWlgA0gRd3njyg5hqmwdrVcN
TON 1 1.92
Ethereum ETH 3.09 6,493.17 0xa05CBfF7b395DeA456539Db279AbC6EE5a8150f9
DAI 864,702.59 864,702.59
wBTC 5.51 420,268.25
BSC BNB 0.04 25.46 0xa05CBfF7b395DeA456539Db279AbC6EE5a8150f9
BLUM 13,903,127.70 47,743.34
BNB (Still frozen) 77.20 49,139.34 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD
TAC TAC 240,459.00 4,633.64 0xDB85fF37f797C821F37dE9845700Aec1443ccae8?tab=tokens
BLUM 192,067.45 659.56
tsTON 0.27 0.58
TON 2.00 3.84

Summary of total recovered funds: 2,290,687.90 USD

As part of the negotiated recovery process, a portion of the affected assets was not recovered and remained outside TAC-controlled addresses following the incident response process:

  • 300 ZEC, partially shielded, on t1h6NcBAciYGdaVb4Ej1AELTx1D9UF9WUDr
  • 13 ETH on Ethereum, moved into Tornado Cash pool
  • 1007 SOL were bridged to 5iUJeMixRp2AP88DJ8Ud4Z4qkrYFUQSLgpVaj64ALgPw and subsequently deposited into the privacy protocol Umbra. A portion of the funds was later observed moving to additional addresses, including HAxKVDEgmnNGaaRHBU4J579RXCuoEGP9iqUKuD2snBwv and 4vBBFZwJHmLZqZRZX1nM2UwPqE9qVaPqiKpWesaNCjca.

During the incident response process, this was accounted for at 287,915.79 USD (which is 10,07% of the total hack). The difference between recovered assets and 90% of the total hack was given to crypto volatility, slippage, bridging fees in the complex exfiltration process over 5 different chains and multiple assets.

Appendix I: Key Addresses

Adding for reference from the main Post Mortem document:

Role Address
(i) DAI holder / second responsible party’s address on Ethereum 0x46FB375EAc7a44C231b2b7aB762040ee74908CDc
(ii) Bitcoin receiver / THORChain account bc1qjhqztgk0k2l35r6tfv9fw7y3q4r6yh3x6c9l8j
(iii) NEAR Deposit address (BNB aggregator on the BSC side, same EVM key) 0x4A123c832D7D1A2bC9c5279c6f122b5d52215b9b 0x4A123c832D7D1A2bC9c5279c6f122b5d52215b9b
(iv) Receiver of BLUM on BSC 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD
(v) Initial responsible party’s address on TON EQBPHhXyG_vbsAEnB6YccNhhaVc6I3ixOCc7vriaOzo4AFA8
(vi) Responsible party’s address on TAC 0xB8D5E0a0100361fb0c67085Fc122F64de2D796BD
(vii) Initial receiver / main responsible party’s address on Ethereum 0xDFf18B83BB3F6b78918C045D84E075ED54b45fC4
(viii) BlumAdapterUpgradeable (BLUM bridge endpoint, TAC → BSC) 0xfDc8Cd47848c0C67dF66F7120F4e3371181cFA5e
(ix) CurveRouter (USD₮ → TAC swap) 0x3F5A41B922a76759b9C77D36b3d337E88cD1dc5e
(x) ZCash Address (destination of Near Intents) t1h6NcBAciYGdaVb4Ej1AELTx1D9UF9WUDr