No. 24 · 13 November 2026 · Security · Forensics

The Binance heist, Part One: fifty valid signatures, one that landed, and an authority that stood for 3 hours 49 minutes

One Ethereum transaction carried 50 valid signatures from a Binance hot wallet. One took effect, and for 3 hours 49 minutes the wallet ran the attacker's code as its own. Part One measures it on chain, and reads it as authority that a withdrawal suspension did not reach.

On 29 October 2026 at 20:20:59 UTC, one Ethereum transaction carried 50 signatures from Binance's hot wallet "Binance14", each authorizing that wallet to run a contract the attacker's account had deployed 13. A hot wallet is an exchange account kept online so it can pay customers quickly. All 50 signatures are cryptographically valid, but only one took effect 16. With it, Binance 14 ran the attacker's code as its own for 3 hours 49 minutes 36 seconds, until Binance cleared it. In that window the attacker took assets seven times 15. These are our own measurements from the replies of two public Ethereum data providers, and we compute no dollar values. Apart from a small sample re-read from an explorer's index, they have not been independently reproduced 1. How the signatures were obtained is known only from Binance's own account, which describes unauthorized access to an internal signing service and gives no mechanism 2. That route, and where the assets went, are the subject of Part Two. Our thesis is a reading, not a finding: a signing service can produce valid signatures for actions the organization never meant to approve, and those signatures can create authority outside the path the organization uses to stop withdrawals. Sources are read through 12 November 2026.

What does the record offer? It depends on which desk you sit at.

"We" is hwtn.io's research pipeline. AI models read the sources, ran the measurements and drafted this text. Three AI models from three different labs fact-checked the text it was split from, and a person, the author, made the rulings.

We decoded the transactions ourselves from the replies of two public Ethereum data providers, scanning blocks 26,300,640 to 26,301,940 (19:58:23 UTC on 29 October to 00:19:23 UTC on 30 October 2026) 1. A node is a computer running Ethereum's software with a copy of the shared record. JSON-RPC is the standard way to ask a node questions, and a provider answers through an endpoint that may sit in front of several nodes or shared infrastructure, so two providers are not proven to be two independent nodes. A block is a batch of transactions added to the record together, about every 12 seconds. A transaction is mined when it is included in a block. An address is the public identifier of an account, a string beginning 0x. A comparison of 53 sampled block fingerprints between the two providers found no mismatch 1. That checks the data we received, not our code or our accounting. We used no explorer for these values. An explorer is a website, such as Etherscan or Blockscout, that indexes the chain for searching. We computed no dollar values, so every USD figure here belongs to the party named beside it 1. (If you see a dollar sign, it isn't ours.) Three Etherscan pages, read on 11 November 2026, show the delegation, the first sweep and the revocation. Their "Exploiter" labels are Etherscan's statement, not chain data 345. Where another publisher reported an observation before we measured it, we name the publisher. Several of them, such as ChainWard, Maborak, Hakhub and Oligamy, are small outfits, individuals' blogs or a software company's blog, cited only to credit who published a fact first 891014.

A factual point appears only if it rests on a primary source, a legitimate secondary source marked for what it is, or two weak sources that do not derive from each other. Our own readings stay in, labeled as readings. The claim register at the end gives each claim's status.

Binance's 3 November report is the victim's own account, and it calls itself "our initial report" 2. Our copy is text saved on 11 November 2026, not compared with the live page. We have read no later Binance statement. Chain times and our conversions are UTC. Chainalysis's start time of "around 4:20 p.m. ET" is 20:20 UTC, the minute of the delegation, because US daylight saving time was still in force on 29 October 11. This is Part One of two. Each part is meant to stand alone. If a term is new, it is in bold where it first appears and again in the glossary at the end. The long strings beginning 0x are addresses and transaction IDs. They are there so anyone can check our work. You can skip them.

The odd fact at the center of this theft is that a signature can be perfectly valid and still do nothing. To see why, you need three ideas first: a signature, a nonce and a delegation.

Fifty Letters

A signature is cryptographic proof that the holder of a secret key approved a particular message. From the signature and the message, anyone can work out which account signed. This is called "recovering" the signer. Every Ethereum account that is controlled by a key has a nonce, a counter that goes up by one each time the account acts. Ethereum uses it to put an account's actions in order and to stop an old instruction being replayed. A delegation comes from EIP-7702, a 2025 change to Ethereum. It lets an ordinary key-controlled account point at a smart contract, a program stored on the chain, and run that program's code as if it were the account's own. The account's owner grants it by signing an authorization, a small message with three fields: the chain it is for, the contract to run and a nonce. The specification warns that the code named this way "has unrestricted access to the account" 6.

The transaction. At index 138 (its position in the block) of block 26,300,753, mined at 20:20:59 UTC, the attacker's account (0x7c8601d4645b93cea45f71e118a729332e6b5ca0) sent Binance 14 (0x28C6c06298d514Db089934071355E5743bf21d60) a type-4 transaction, the kind that carries authorizations 13. Its hash, the fingerprint that identifies it, is 0xad99264d5532ae0dd04b2004eebda05f25657e70dacb764f7ac8d4ccd051298b. It carried 50 authorizations, one for each nonce from 18,914,775 to 18,914,824, all for chain id 1 (Ethereum's main network) and all naming one contract, 0x63e842B054Bd624a465454d533C33F573e9c6fAe13. That contract is a 1,674-byte sweeper, a program for moving everything out of an account, which the attacker's account had deployed at 15:59:11 the same day 1. To deploy a contract is to publish its code to the chain, where it gets an address of its own.

Valid, and took effect. All 50 signatures recover to Binance 14 under EIP-7702's message format 16. Exactly one took effect 1.

The rule. EIP-7702 checks each authorization's nonce against the signer's nonce at the moment the transaction runs 6. The signed message carries no time at all 16. Our paraphrase, with the other checks left out:

# Pseudocode. Our paraphrase of one part of EIP-7702. Not runnable.
for each authorization in the list, in list order:
    signer = the account recovered from the authorization's signature
    if authorization.nonce != signer's nonce right now:  skip it
    signer's nonce = signer's nonce + 1
    point signer's code at authorization.address    # the all-zeros address clears it
# A skipped authorization does not stop the list. No step reads a clock.

So why that one? Binance 14's nonce stood at 18,914,809 when the transaction ran. The authorization for 18,914,809 matched, the nonce became 18,914,810, and the wallet's code went from empty to 0xef0100 followed by the sweeper's address 1. 0xef0100 is the marker Ethereum writes to show that an account's code is delegated. The chain's end-of-block state, the record of every account as it stood when the block closed, agrees with the rule 16. The short version: each of the 50 signatures was good for one value of the wallet's counter, and the counter stood at 18,914,809, so that signature was the one that worked. No source we read alleges a flaw in EIP-7702 1217.

What chose the one. Five places earlier in the same block, at index 133, Binance 14 used its nonce 18,914,808 for an ordinary-looking transaction: it called a function on a second wallet, which Blockaid's write-up labels Hot Wallet 34, and Hot Wallet 34 sent 5.000000 USDC to an outside address 1213. That moved Binance 14's nonce to 18,914,809. Without that transfer, the authorization for 18,914,808 would have matched instead and installed the same delegation 1. Different ticket, same result. Our inference, which changes nothing above, is that it was an ordinary customer withdrawal. At 20:25:35 the same route sent that address 3,156.562125 USDC, a small test followed by the rest 1. The address forwards to a wallet that took in USDC from thousands of small deposit-style addresses in the two months to 12 November and sent one daily batch on, consistent with an ordinary service 1. We have not identified the recipient and print nothing more about either address.

The 5 USDC transfer did not let anyone in; it only decided which of 50 waiting signatures the chain would accept.

Now Serving

The band of signed nonces. The 50 authorizations covered a band of nonces, and the delegation would install whenever the wallet's own nonce stood anywhere inside it. Binance 14 used the lowest signed nonce, 18,914,775, at 20:17:47 and the highest, 18,914,824, at 20:24:23, so the band spanned 6 minutes 36 seconds of the wallet's own traffic 1. ChainWard published the 20:17:47 observation, and Maborak the index-133 transaction, before we measured them 89.

The 50 authorizations were signed for nonces 18,914,775 to 18,914,824. The delegation was mined when the wallet's own traffic had brought its nonce to 18,914,809.

Data: Hawthorne's on-chain measurements 1: Binance 14's account nonce at 60 points from 20:15 to 20:27 UTC, and the 50 signed nonces, as measured 12 November 2026.

The order. The list runs in descending nonce order 1, which Hakhub and Maborak published before we measured it 109. With the same authorizations in ascending order and the same starting nonce, 16 would have taken effect one after another, 18,914,809 through 18,914,824 16. That is a computed counterfactual, a what-if worked out from the rules, not an observed event. Our reading is that the descending order was a choice, since it spends one of the wallet's nonces instead of sixteen. (A reading. We cannot see the attacker's reasons, only the list.)

The rehearsal. Earlier the same day, the attacker practiced the technique in public on accounts of its own. The attacker's account first held ETH on 28 October at 07:39:47 (0.098257 ETH) and deployed a 1,256-byte contract on 29 October at 02:28:59 1. Between 13:51:35 and 16:25:59 it sent type-4 transactions delegating three fresh accounts, each carrying 2 or 3 authorizations in descending nonce order, and made sweep calls that moved a few USDT and USDC 1. We read these as a rehearsal. TRM Labs, a tracing vendor, also reports one 7. Oligamy published the descending order before we measured it 114.

Three Small Sheds

Binance's wording. Binance writes that the attackers "submitted 50 signing transactions"2. We take that to mean the 50 authorizations, because the chain shows one transaction carrying them 1. Binance does not say so. The chain does not record when the 50 were signed.

A signature being valid and a signature taking effect are separate facts, and the second depends on whether the nonce the signer wrote down matches the account's nonce at the moment of execution, not on when the signature was made.

Once installed, the delegation stayed until someone removed it, and the usual emergency control was not built to remove it.

The revocation, the transaction that cleared the delegation, 0xafbf94c92a8d749988411669fa14d4f8866d9b4420b4ebd299f28e958dac7209, was mined at 00:10:35 on 30 October, 3 hours 49 minutes 36 seconds after the delegation 15. It is a type-4 transaction from Binance 14 to itself, carrying one authorization that names the all-zeros address. Afterward the wallet's code is empty 15. Binance's account matches it and gives the time as 00:10 UTC 2.

Withdrawals Closed

Binance says that "suspending withdrawals alone could not stop all unauthorized asset movements. The malicious EIP-7702 authorizations existed on-chain and operated independently of Binance's normal withdrawal infrastructure" 2. Elliptic, a tracing vendor, also writes that the delegation "remained in place, so no new signatures were needed". Its page, last updated on 1 November, also reports that Binance "paused withdrawals, which it says stopped the outflows" 12.

Binance says its wallet used multi-party computation (MPC), an arrangement in which the private key, the secret number that controls an account, is split into shares held by separate machines, so that no single machine can sign alone. Binance writes that, because of MPC, "there was no single private key that could be used to immediately revoke the malicious EIP-7702 authorizations", and that its team "developed and executed a specialized procedure" 2. The report as we hold it gives no time for the suspension, so we do not say which of the attacker's calls came after it 2.

While the delegation stood, Binance 14 itself sent exactly 93 transactions, nonces 18,914,810 to 18,914,902. Three failed, and no other authorization signed by Binance 14 appears in the window 1. It sent 6 to 21 transactions per minute from 19:58 to 20:20, then 1 to 5 per minute from 20:21 until that run ended at 20:33:59 1. After that came seven single transactions, then 46 calls between 22:55:35 and 23:07:59, each moving a different token by that token's standard transfer function, then one transaction at 00:07:11, then the revocation 1. It looks as if routine withdrawals ended at about 20:33:59, 9 minutes 36 seconds after the first sweep. But that is one wallet's traffic on the chain, not Binance's internal suspension time. Who directed the 46 transfers is not established.

Transactions sent by Binance 14 itself, per minute. This is one wallet's on-chain traffic, not Binance's internal suspension time.

Data: Hawthorne's on-chain measurements 1: the transactions Binance 14 sent, counted per minute over 262 minutes from 19:58 to 00:19 UTC, as measured 12 November 2026.

The attacker's account sent 13 transactions to Binance 14, from the delegation to a last call at 23:56:47, 13 minutes 48 seconds before the revocation 1. The token issuers acted before that last call, which moved only ETH. A blacklist is a token issuer's freeze: the issuer's token contract refuses to move its tokens from a listed address. Tether blacklisted Binance 14 at 22:06:23. Circle blacklisted Binance 14 at 23:53:35 and Hot Wallet 34 at 23:54:59 1.

Time (UTC)RowEvent
20:20:59AttackerDelegation installed
20:24:23AttackerFirst sweep of Binance 14
20:30:11ArrivingLarger inflow to Binance 14
20:33:59Binance 14Last transaction of its routine run
20:41:23Hot Wallet 34780,000,000 USDC taken
20:59:47Hot Wallet 3443,000,000 USDC taken
21:00:11ArrivingLarger inflow to Binance 14
21:04:23AttackerSweep of Binance 14
21:30:11ArrivingLarger inflow to Binance 14
21:42:59Arriving200,000,000 USDT top-up
21:44:11AttackerSweep of Binance 14
22:39:35AttackerSweep of Binance 14
22:55:35 to 23:07:59Binance 1446 token transfer calls
23:55:47Arriving2,961.9909 ETH deposit
23:56:47Attacker2,961.9108 ETH taken
00:07:11Binance 14One transaction
00:10:35Binance 14Revocation

Data: the rows above restate figures given in this essay, from Hawthorne's on-chain measurements 1 of the delegation, the sweeps and the revocation, as measured 12 November 2026.

The delegation was live for 3 hours 49 minutes 36 seconds. In that time the attacker's account took assets seven times, the wallet was refilled five times, and Binance 14 kept sending its own transactions.

The leftover signatures. Clearing a delegation and keeping it cleared are two different jobs. When the delegation took effect, Binance 14's nonce became 18,914,810, and 15 of the unused authorizations named nonces the wallet had not yet reached: 18,914,810 to 18,914,824 1. Under EIP-7702 a skipped authorization is not marked as used, so each of those stayed valid until the wallet's nonce passed it 6. That last point is our inference from the specification's nonce rule, which does not state it in so many words.

This is the hardest stretch of Part One, so here is the short version first. For roughly the first three minutes after the delegation, a revocation could have been reversed with one of the unused signatures, depending on how it was sent. After that, the wallet's own ordinary transactions had used up every nonce the signatures named, and none of them could match again. (If that is all you carry out of this section, it's enough.) The long version follows.

Could a leftover have undone a revocation? That depends on how the revocation was sent. A revocation is itself a type-4 transaction carrying an authorization that names the all-zeros address. The specification raises the sender's nonce before it processes any authorization, and raises the signer's nonce again for each authorization that takes effect 6. So a revocation that Binance 14 sends itself, as Binance did at 00:10:35, uses two of the wallet's nonces. One sent by another account uses one 16. A leftover could reinstall the delegation only if it named the wallet's nonce after the revocation. Our computation, a counterfactual and not an event: a self-sent revocation would have left a leftover in reach only if the revocation transaction used nonce 18,914,822 or lower; one sent by another account, only if the wallet's nonce was 18,914,823 or lower when it ran. Binance 14's routine transactions used 18,914,822 at 20:23:59 and 18,914,823 at 20:24:11 1. So depending on the method, for roughly the first three minutes after the delegation, clearing it could have been undone with one more transaction. Binance 14 used the last signed nonce, 18,914,824, at 20:24:23, in the same block as the first sweep 1. After that block, every one of the 50 named a nonce already in the past, and no revocation of either kind could have been undone this way. Our reading is that Binance's own withdrawal traffic retired the leftover signatures, and nothing else did.

The attacker used the delegation by calling Binance 14 directly. Each call ran the sweeper's code inside Binance 14's account.

The first sweep, 0x53bd38b816c23e74134786c29a8c18d792777998a3b9326047b583100e88e2f3, mined at 20:24:23, 3 minutes 24 seconds after the delegation, moved 167,464.2479 ETH and made 63 token transfers, including 1,615,409,498.97 USDT 14. ETH is Ethereum's own currency. A token is an asset whose balances are kept inside a smart contract; a token transfer is a call to that contract. USDT, issued by Tether, and USDC, issued by Circle, are stablecoins: tokens designed to hold the value of one US dollar. Each is a separate asset from a separate company. Amounts here are rounded: ETH to four decimal places, USDT to two 14. Six later calls by the attacker's account also took assets 1:

Time (UTC, 29 October)What the call took
20:41:23780,000,000 USDC from Hot Wallet 34
20:59:4743,000,000 USDC from Hot Wallet 34
21:04:231,699.9229 ETH; 23 token transfers, including 3,917,639.77 USDT
21:44:11369.8319 ETH; 14 token transfers, including 200,397,771.82 USDT
22:39:35128.4911 ETH; 122 token transfers
23:56:472,961.9108 ETH

Hot Wallet 34 was not the delegated account. So how was it drained? Binance 14 could already call a function on it, as it had for the 5 USDC, and the attacker's calls on Binance 14 used that reach 1. The first four bytes of a call's input name the function being called, much as a menu number names a dish without saying what is in it. That four-byte name is the function selector. These calls carried the selector 0x043ff9d21. Blockaid published the 20:41:23 drain, and TRM Labs listed sweeps at these times, before we measured them 137.

What we have not established. We measured what the sweeper did, not everything it could do. We have not read its code to learn who could call it, whether its destinations were fixed or chosen per call, or what else it could reach through Binance 14. Because delegated code has unrestricted access to the account, those limits, if any, sit in the sweeper alone 6.

After the first sweep, the attacker's calls took 5,160.1567 ETH and 204,315,411.59 USDT from Binance 14, and 823,000,000 USDC from Hot Wallet 34 1. All five sweeps of Binance 14 together took 172,624.4046 ETH, each leaving exactly 1 ETH behind 1. (The same remainder, each time. We have not read the sweeper's code, so we offer no reason.) No block in the window shows Binance 14 losing more than 50 ETH that these calls and its own sends do not explain 1. These totals cover those two wallets only.

For the whole theft, Binance says approximately USD 6.34 billion was "impacted" 2. TRM Labs estimates USD 6.36 billion across ten chains, and Elliptic's estimate goes to eleven, at USD 6.43 billion 712. With no price source, we have valued neither the measured units nor the other tokens, so we do not size the delegation's part of the loss or compute a share of those totals.

Three different quantities. How big was the failure? The tempting answer is to count what moved after the alarm, and that number answers a narrower question than it seems to. At least three quantities are in play. Realized loss is what actually left the wallets. Accessible exposure is what the attacker could have reached with the authority it held, given the sweeper's code and the controls in its way. Containment effectiveness is how much the response changed either of those. They are related, but they are not interchangeable. Put simply: what was taken, what could have been taken, and how much the response changed either. The record does not say when Binance's response took hold, so even the amount that moved after it cannot yet be computed. Assets also kept arriving after the first sweep, as the next section shows, so an amount counted from the alarm is not simply what was there at the alarm.

What moved after the alarm measures a realized consequence of the compromise. It does not, by itself, measure the authority the attacker acquired, or the losses that authority could have produced.

A consolidation job is an automated process that moves funds from many deposit addresses into a central wallet. One of them, as far as we can tell, kept feeding Binance 14 after the attacker controlled it.

Between the first sweep and the 21:04:23 sweep, Binance 14 received 1,700.8708 ETH and 3,917,719.27 USDT. Between then and the 21:44:11 sweep it received 369.8538 ETH and 200,397,771.82 USDT 1. Each later sweep took about what had arrived. The larger inflows came at 20:30:11, 21:00:11 and 21:30:11 1, which looks like a half-hourly consolidation job that kept running. (Looks like. We have not identified it.)

Binance 14's ETH balance at every block after the main sweep. Each sweep leaves 1 ETH. The main sweep itself (167,464.25 ETH) is off this scale.

Data: Hawthorne's on-chain measurements 1: Binance 14's ETH balance at each of 1,301 blocks, and the five sweeps, as measured 12 November 2026.

The largest refill, 200,000,000 USDT, reached Binance 14 at 21:42:59. It stayed 72 seconds before the sweep took it 1. Its sender has sent Binance 14 76 transfers of exactly 200,000,000 USDT since 22 January 2026, and on 1 November it returned 800,000,000 USDT to its funder 1. The pattern reads as an automated reserve, a wallet that tops up a hot wallet when it runs low. We hold no label or Binance statement for this wallet, and who owns it is not measured.

The fee cap. Every Ethereum transaction pays a fee for the computing it uses, priced in gwei, a billionth of an ETH. Under the fee rules known as EIP-1559, the network sets a base fee each block that rises and falls with demand. A sender sets a fee cap, the most it will pay, and a transaction cannot be included in any block whose base fee is above its cap 16. The last nine of the reserve's transfers, the top-up included, carried a 50 gwei fee cap 1. The base fee was 0.17 gwei at the first sweep, 0.14 gwei at 20:34:23 and 0.67 gwei at 20:38:23, and crossed 2 gwei between 20:40:23 (1.92 gwei) and 20:40:35 (2.16 gwei), by Blockscout's block records read on 12 November 2026 15. It was above 50 gwei in every block from 20:47:59 to 21:42:35, peaking at 252.8 gwei, and first at or under 50 gwei at 21:42:47. The top-up was mined in the next block 1.

The fee cap establishes only that the top-up could not have been mined in that span 16. To broadcast a transaction is to send it to the network before it is included. Broadcast times are not recorded on the chain. Our reading, not established, is that the top-up was broadcast during the span, after the 20:47:47 block (45.87 gwei, the last under its cap) and so at least 23 minutes 24 seconds after the first sweep, and waited for the fee to fall 15. It may instead have been sent seconds before it was mined, or earlier and held back for another reason. The fee spike overlapped the theft, beginning ten to fourteen minutes after the first sweep 15. We have not measured the theft's share of the fees in those blocks, so we offer a link only as a hypothesis.

Ethereum's base fee stayed above 50 gwei, the fee cap on the 200M USDT top-up, from 20:47:59 to 21:42:47. The top-up was mined one block later. That it was waiting is our inference from these fees.

Data: Hawthorne's on-chain measurements 1: the base fee of each of 657 blocks, as measured 12 November 2026; the 2 gwei crossing is from Blockscout's block records 15.

The blacklists. Tether blacklisted the first receiving address, 0x5227f603…2f8c, at 21:01:35, 37 minutes 12 seconds after the first sweep, and Circle blacklisted it at 21:04:59 1. The USDT swept at 21:04:23 and 21:44:11, top-up included, reached that address after Tether's blacklist 1. Our reading is that the attacker could not move the top-up's USDT while the address stayed blacklisted, and that Binance still lost control of it.

The address received 1,819,724,910.56 USDT from Binance 14 in three sweeps. On 12 November 2026 it held 1,175,464,712.88 USDT and exactly 823,000,000 USDC 1. A wallet Blockaid labels Binance 16 also sent it 55,739,800.50 USDT at 20:24:47, a transfer Blockaid had reported, and dust transfers, tiny amounts, added under 2 USDT 11315. Before Tether's blacklist, two transfers took 700,000,000 USDT out: 500,000,000 at 20:30:11 and 200,000,000 at 20:33:23. Blockscout's index, read on 12 November 2026, lists the same two that we measured 115. The listed inflows less these two transfers come to 1,175,464,711.06 USDT (1,819,724,910.56 + 55,739,800.50 − 700,000,000), which is 1.82 USDT under the measured balance, a gap the dust transfers can cover. That is consistent with no balance having been destroyed, but it is not a reconciliation to the smallest unit, and we report no check of the event Tether's contract emits when it destroys a blacklisted balance. Where the 700,000,000 USDT went is traced in Part Two.

The last transfer. The last refill was one deposit of 2,961.9909 ETH at 23:55:47, and the attacker's call took 2,961.9108 ETH 60 seconds later 1. ChainWard published that pair first8. Binance's report says the final 2,961.9 ETH transfer "had previously been broadcast and remained pending" 2. The first five of the attacker's six calls from 23:36:47 to 23:56:47 moved nothing. The sixth, with the same 132-byte input, took the ETH 1. Their fee caps fell from 21.9 to 8.8 gwei, each about twice its own block's base fee, which fell from 11.14 to 3.97 gwei 1. Our reading, not established, is that each call was priced shortly before it was mined. Fee caps do not date a broadcast. Binance does not say how long the transfer was pending, so the chain neither confirms nor contradicts its sentence.

A compromised wallet that automation keeps refilling can go on being emptied for as long as the authority over it stands, unless another control, such as a token issuer's freeze, blocks the transfer.

The Fountain

Where does the record invite a stronger conclusion than it supports? Four places.

Our recommendations are afterwit, the wisdom that arrives after it was needed, and none has been tested:

Each claim names the result that would disprove it. Claims not marked as readings are measurements.

Every term below is also defined where it first appears.

"Measured" means read or computed by us from node data on 12 November 2026. It is our own provenance label, and apart from the Blockscout sample described under Limits, no second party has reproduced the values. "Stated" means the named party says it and we have not verified it. "Our reading" is editorial.

Claim (short)RefTestStatus
Method: two public JSON- RPC providers (not shown to be independent nodes), blocks 26,300,640 to 26,301,940, 53 sampled block hashes with no mismatch, no dollar values[1]primaryMeasured
Delegation tx: 20:20:59 UTC 29 Oct 2026, block 26,300,753, index 138, type 4, attacker nonce 10; 50 authorizations, nonces 18,914,775 to 18,914,824, chain id 1, all naming the sweeper[1][3]primaryMeasured
The 50 are in descending nonce order[1]; earlier [9][10]primaryMeasured
All 50 signatures recover to Binance 14; exactly one (18,914,809) took effect; nonce became 18,914,810; code went from empty to 0xef0100 plus the sweeper address[1][3][6]primaryMeasured
Delegated code "has unrestricted access to the account"[6]primaryEstablished (the specification's words)
Binance 14 tx at nonce 18,914,808, index 133, sent 5.000000 USDC through Hot Wallet 34 and moved the nonce to 18,914,809; without it the authorization for 18,914,808 would have applied[1]; earlier [9]primaryMeasured; counterfactual computed
3,156.562125 USDC to the same address at 20:25:35[1]primaryMeasured
The two transfers were an ordinary customer withdrawal[1]editorialOur reading (decision pending: keep or cut)
The wallet the recipient forwards to took in USDC from thousands of small deposit-style addresses in the two months to 12 November 2026 and sent one daily batch on; consistent with an ordinary service[1]primary; editorialPattern measured; "ordinary service" is our reading; no address printed
Ascending order would have applied 16 authorizations (18,914,809 to 18,914,824)[1][6]primaryComputed counterfactual, not observed
The descending order was a choice[1]editorialOur reading
EIP-7702 checks the nonce at execution; the message has three fields and no timestamp[1][6]primaryEstablished; our paraphrase
Nonce 18,914,775 used at 20:17:47; 18,914,775 to 18,914,808 took 192 seconds; 18,914,824 used at 20:24:23; band of 6 min 36 s[1]; earlier [8]primaryMeasured; band length is arithmetic
A skipped authorization stays valid until the signer's nonce passes it[6]primary; editorialOur inference from the specification's nonce rule; not stated in the specification
A self-sent revocation uses two of the wallet's nonces and one sent by another account uses one; a leftover could have reinstalled the delegation after a self-sent revocation at transaction nonce 18,914,822 or lower (used at 20:23:59), or after another account's revocation with the wallet's nonce at 18,914,823 or lower (used at 20:24:11); from the end of the 20:24:23 block none could match[1][6]primary; editorialComputed counterfactual (13 Nov 2026), not observed; corrected after the adversarial review
Binance's own withdrawal traffic retired the leftover signatures[1]editorialOur reading
Attacker's account: 0.098257 ETH on 28 Oct 07:39:47; 1,256-byte contract at 02:28:59 on 29 Oct; test delegations of three fresh accounts, 2 or 3 authorizations each, descending, 13:51:35 to 16:25:59; sweeper (1,674 bytes) at 15:59:11[1]; descending order earlier [14]primaryMeasured
The tests were a rehearsal[1][7]editorialOur reading; TRM Labs also reports one
"50 signing transactions" means the 50 authorizations[1][2]editorialOur reading
No source we read alleges a flaw in EIP-7702[12][17][1][6]legit secondary, primaryEstablished for the sources we read
First sweep: 20:24:23, block 26,300,770, 3 min 24 s after the delegation; 167,464.2479 ETH; 63 token transfers including 1,615,409,498.97 USDT[1][4]primaryMeasured
Revocation: 00:10:35 UTC 30 Oct, block 26,301,896, type 4, self-sent at nonce 18,914,903, authorization nonce 18,914,904 to the zero address; code empty after[1][5][2]primaryMeasured
Delegation stood 3 h 49 min 36 s[1][3][5]primaryMeasured (arithmetic)
Suspending withdrawals did not stop all movements; MPC meant no single key to revoke quickly[2][12]primary, self- reportedStated by Binance
Time withdrawals were suspended[2]noneNot established
Binance 14 sent exactly 93 transactions (18,914,810 to 18,914,902); 3 failed; no other authorization by Binance 14[1]primaryMeasured
Binance 14 traffic: 6 to 21 per minute 19:58 to 20:20; 1 to 5 from 20:21 to 20:33, last at 20:33:59; seven singles 20:41:11 to 22:27:35; 46 transfer calls to 46 token contracts 22:55:35 to 23:07:59; one at 00:07:11[1]primaryMeasured
Routine withdrawals ended about 20:33:59, 9 min 36 s after the first sweep[1]editorialOur reading; one wallet only
Who directed the 46 transfersnonenoneNot established
Attacker's account sent 13 transactions to Binance 14 (nonces 10 to 22); seven took assets; last at 23:56:47, 13 min 48 s before the revocation[1]primaryMeasured
Blacklists: Tether, receiving address 21:01:35 (37 min 12 s after the first sweep); Circle, receiving address 21:04:59; Tether, Binance 14 22:06:23; Circle, Binance 14 23:53:35; Circle, Hot Wallet 34 23:54:59[1]primaryMeasured
Hot Wallet 34 lost 780,000,000 USDC at 20:41:23 and 43,000,000 at 20:59:47, 823,000,000 in total, through calls on Binance 14 with selector 0x043ff9d2[1]; earlier [13][7]primaryMeasured
What the sweeper could do beyond what it did[6]noneNot established; code not read
Later sweeps: 21:04:23 (1,699.9229 ETH; 23 token transfers incl. 3,917,639.77 USDT); 21:44:11 (369.8319 ETH; 14 incl. 200,397,771.82 USDT); 22:39:35 (128.4911 ETH; 122 token transfers); 23:56:47 (2,961.9108 ETH)[1]primaryMeasured
ETH across five sweeps 172,624.4046; after the first 5,160.1567; each sweep left 1 ETH; no unexplained drop above 50 ETH[1]primaryMeasured; Binance 14 only
Stablecoins after the first sweep: 823,000,000 USDC and 204,315,411.59 USDT, reported separately[1]primaryMeasured; not summed; not a dollar figure
The delegation's share of the loss[1]noneNot computed; the measured units are not valued
Realized loss, accessible exposure and containment effectiveness are distinct; what moved after the alarm measures a realized consequence only[1]editorialOur reading (replaces v6's "what was still there to take")
Approximately USD 6.34B "impacted"[2]primary, self- reportedStated by Binance
USD 6.36B across ten chains[7]legit secondaryTRM Labs estimate
USD 6.43B across eleven chains[12]legit secondaryElliptic estimate
Inflows: 60 ETH transfers (1,700.8708 ETH) and 231 USDT transfers (3,917,719.27) before 21:04:23; 51 ETH transfers (369.8538 ETH) and 95 USDT transfers (200,397,771.82) before 21:44:11; 2,961.9909 ETH at 23:55:47, swept 60 seconds later[1]; earlier [8]primaryMeasured
Inflows at 20:30:11, 21:00:11 and 21:30:11 are a half-hourly consolidation job[1]editorialOur reading
200,000,000 USDT top- up at 21:42:59, swept 72 seconds later; sender made 76 such transfers since 22 January 2026, last nine at 50 gwei cap and 1 gwei tip; returned 800,000,000 USDT on 1 November[1]primaryMeasured; owner not measured
The sender is an automated reserve[1]editorialOur reading
Base fee crossed 2 gwei between 20:40:23 and 20:40:35; above 50 gwei 20:47:59 to 21:42:35; peak 252.8 at 21:13:59; at or under 50 at 21:42:47; top- up mined next block[1][15]primaryMeasured; the 2 gwei crossing read from Blockscout
Top-up sent after the 20:47:47 block and before 21:42:59, at least 23 min 24 s after the first sweep, and waited for the fee to fall[1][15][16]editorialOur reading; not established; broadcast time is not on chain
The fee spike was congestion the theft caused[15]editorialHypothesis; fee demand not attributed
USDT swept at 21:04:23 and 21:44:11 went to the receiving address after Tether's blacklist[1]primaryMeasured
The attacker could not move the top-up's USDT while the receiving address stayed blacklisted; Binance lost control of it[1]editorialOur reading
Receiving address received 1,819,724,910.56 USDT from three Binance 14 sweeps; held 1,175,464,712.88 USDT and 823,000,000 USDC on 12 November 2026[1]primaryMeasured as of 12 November 2026
Receiving address also received 55,739,800.50 USDT at 20:24:47 from a wallet Blockaid labels Binance 16, and sent 700,000,000 USDT in two transfers, at 20:30:11 and 20:33:23[1][15]; earlier [13]primaryMeasured; first read from Blockscout during fact-checking; the 20:24:47 time is from Blockscout only; the label is Blockaid's
Both outgoing USDT transfers preceded Tether's blacklist at 21:01:35[1][15]primaryMeasured (arithmetic)
Last six attacker calls: fee caps 21.9, 19.7, 18.7, 18.3, 8.9, 8.8 gwei; base fees 11.14, 9.86, 9.55, 8.33, 4.59, 3.97 gwei[1]primaryMeasured
Final transfer "had previously been broadcast and remained pending"[2]primary, self- reportedQuoted only; not admitted as fact
The last call was priced shortly before it was mined; Binance's "previously been broadcast" sentence is neither confirmed nor contradicted by the chain[1][2]editorialOur reading; not established
Approximately USD 2.85B "frozen or intercepted"[2]primary, self- reportedStated by Binance
98% replenished "As of 31 October 2026"[2]primary, self- reportedStated by Binance
Chainalysis start time "around 4:20 p.m. ET" is 20:20 UTC[11]legit secondaryConversion shown
Signer-path policy, authorization-list monitoring, revocation rehearsal and refill cut-off would help[1][2][6]editorialOur recommendations; untested

References

  1. 01Hawthorne (hwtn.io). "Hawthorne on-chain measurements, t0401, 12 November 2026: PLAN.md, measure.py, results.json, RESULTS.md." Evidence folder, measured 2026-11-12 from JSON-RPC replies of two public Ethereum data providers (eth.drpc.org, ethereum-rpc.publicnode.com). Includes the blacklist events and address walks added the same day. The leftover-signature conditions were computed on 2026-11-13 from the same results. Primary (our own measurements; items we mark as readings are editorial).
  2. 02Binance. "29 October 2026 Binance Security Incident: Initial Findings and Response Update." Binance Blog, 2026-11-03. https://www.binance.com/en/blog/community/3229153443759566763 (accessed 2026-11-11). Primary, self-reported: Binance's own account of itself. Text saved to our files; not compared with the live page.
  3. 03Etherscan. Transaction page, delegation. https://etherscan.io/tx/0xad99264d5532ae0dd04b2004eebda05f25657e70dacb764f7ac8d4ccd051298b (accessed 2026-11-11). Primary: the transaction as shown on an explorer page; address labels are Etherscan's.
  4. 04Etherscan. Transaction page, main sweep. https://etherscan.io/tx/0x53bd38b816c23e74134786c29a8c18d792777998a3b9326047b583100e88e2f3 (accessed 2026-11-11). Primary: explorer page; labels are Etherscan's.
  5. 05Etherscan. Transaction page, revocation. https://etherscan.io/tx/0xafbf94c92a8d749988411669fa14d4f8866d9b4420b4ebd299f28e958dac7209 (accessed 2026-11-11). Primary: explorer page.
  6. 06Ethereum Improvement Proposals. "EIP-7702." https://eips.ethereum.org/EIPS/eip-7702 (accessed 2026-11-11; re-read 2026-11-13 for the skip rule and the "unrestricted access" wording). Primary: the specification.
  7. 07TRM Labs. "North Korea Steals USD 6.36 Billion From Binance in the Largest Hack in History." https://www.trmlabs.com/resources/blog/north-korea-steals-usd-6-36-billion-from-binance-in-the-largest-hack-in-history (accessed 2026-11-11). Secondary (vendor analysis; sells related services); relays Binance for one frozen figure.
  8. 08ChainWard. Title not captured. Filed 2026-10-30, edited since. https://chainward.ai/decodes/binance-7702-delegation (accessed 2026-11-11). Weak: small outfit's analysis page. Cited only as prior publication of facts we measured.
  9. 09Maborak. Title not captured. https://www.maborak.com/blog/binance-incident-root-cause-evidence (accessed 2026-11-11). Weak: individual's blog. Cited only as prior publication.
  10. 10Hakhub. Title not captured. https://blog.hakhub.net/en/blog/binance-eip-7702-nonce-spray-incident/ (accessed 2026-11-11). Weak: individual's blog. Cited only as prior publication.
  11. 11Chainalysis. "The $6.4 Billion Binance Hack: Tracing the North Korea Link." 2026-10-30, revised. https://www.chainalysis.com/blog/binance-exploit-latest-findings-and-response/ (accessed 2026-11-11). Secondary (vendor analysis; sells related services).
  12. 12Elliptic. "The largest theft in history: North Korea behind the $6.4 billion Binance hack." Headline as read on 12 November 2026; the page's browser title reads "North Korea likely behind". 2026-10-30, updated 2026-11-01. https://www.elliptic.co/insights/binance-largest-hack-in-history/ (accessed 2026-11-11). Secondary (vendor analysis; sells related services); quotes Binance.
  13. 13Blockaid. Title not captured. 2026-10-29. https://blockaid.io/blog/binance-55b-hack-using-advanced-ai-models-blockaid-detects-the-biggest-theft-in-crypto-history (accessed 2026-11-11). Secondary (vendor analysis; sells related services); promotional framing.
  14. 14Oligamy (Kuba Strugarek). "Binance Hack Explained: How $6.3 Billion Was Stolen." 2026-11-01, updated 2026-11-04. https://www.oligamy.com/design/blog-post/binance-hack-explained-6-3-billion-eip-7702 (accessed 2026-11-12). Weak: a software company's blog. Cited only as prior publication of a fact we measured.
  15. 15Blockscout. Ethereum mainnet explorer API: the delegation transaction, block records from 26,300,770 to 26,301,162, and USDT transfers of the receiving address. https://eth.blockscout.com/api/v2/addresses/0x5227f603C1eE34CE3C06eFe6477003BDfCCB2f8c/token-transfers?type=ERC-20&filter=from&token=0xdAC17F958D2ee523a2206206994597C13D831ec7 and https:// eth.blockscout.com/api/v2/blocks/26300851 (accessed 2026-11-12). Primary: an explorer's index of chain data, read during fact-checking; not part of ; address labels are Blockscout's.
  16. 16Ethereum Improvement Proposals. "EIP-1559." https://eips.ethereum.org/EIPS/eip-1559 (accessed 2026-11-12). Primary: the specification.
  17. 17StepSecurity. Title not captured. 2026-10-30, updated 2026-11-03. https://www.stepsecurity.io/blog/binance-hack-developer-machine-security (accessed 2026-11-11). Secondary (vendor analysis; sells related services); reads .