黑暗森林的候车室:Mempool的崩溃与秩序演进

引言:历史之前的等待区 在区块链的世界里,区块链 Txpool(Transaction Pool,交易内存池) 就像是一个"炼狱"或者说火车站的候车大厅。每一笔交易在被正式打包进区块(成为永恒的历史)之前,都必须在这个混沌的等待区里停留。 这里充满了人类的欲望:有人想插队(高 Gas 费),有人在捡漏(套利),还有人纯粹是为了搞破坏(DoS 攻击)。当候车大厅的秩序失控,整个网络就会面临节点崩溃 (Node Crash)。本文将带你通过三个真实的灾难案例,以最通俗的语言重新审视这个区块链世界的"炼狱"。 以太坊 Mempool 是什么 火车站的比喻说完了,现在说技术现实。 当你发起一笔以太坊转账——比如从钱包 A 转 1 ETH 到钱包 B——这笔交易不会立即上链。它的旅程是这样的: 钱包签署交易,附上 Gas 价格,发送到某个以太坊节点(通常是你的钱包连接的 RPC 节点) 节点把它放入自己的 Txpool(Transaction Pool),也就是内存池。内存池是"待处理交易"的暂存区 矿工/验证者从内存池里挑交易,按 Gas 价格从高到低排序,把它们打包进下一个区块 交易被打包进区块,成为链上永恒的历史,内存池里相应删除 内存池里的交易,理论上每个全节点都有自己的副本,但内容大致相同——它们都在"等车"。 **Gas 价格决定优先级。**Gas 价格高的交易,矿工先捡;Gas 价格低的,可能等很久,甚至被丢弃(如果网络持续拥堵)。 **内存池是公开的。**这不像银行内部排队——任何人都可以查询以太坊的公共内存池,看见 pending 的交易。这就是 MEV(矿工可提取价值)的来源:机器人监视内存池,看见有大额套利机会的交易,就用更高的 Gas 抢先一步。 Geth 是以太坊最流行的节点客户端,运行着全球最多的全节点。你的钱包连接的可能就是某个 Geth 节点。当 Geth 的内存池处理逻辑出错,整个网络都可能受影响。 理解了这些,我们再来看三个真实发生的内存池崩溃事件。 案例 1:2022 年 Optimism 的"幽灵闪客" (节点被刷) 2022 年,以太坊二层网络 Optimism 遭遇了一场严重的压力测试。攻击者控制了几千个地址,同时发送了几万笔低 Gas 费且"Nonce 跳号"的交易。这种极端的并发行为导致 Optimism 的序列器 (Sequencer) 内存池瞬间爆炸,数十万笔垃圾交易塞满通道,最终导致节点直接崩溃宕机。 如果把 Txpool 比作火车站的候车大厅,这场攻击就像是 5000 个蒙面人冲进大厅,他们每个人不仅只买了一分钱的便宜车票,而且还故意扰乱排队号码(比如手里拿着 5 号的票,却非要站在 100 号的位置)。站长(序列器)为了弄清楚这群人到底该怎么排队,耗尽了所有脑力,最终大脑宕机,火车站被迫关门。 ...

May 21, 2026 · 1 min · Warren Wong

KelpDAO — 当受害者成为武器:2.9 亿美元跨链桥攻击复盘

17:35 UTC,4月18日。 116,500个rsETH从KelpDAO的金库消失。这一刻,它们从未在Unichain上存在过——链上nonce记录清清楚楚:Unichain最后发出的编号是307,第308号数据包从未出现过。 但以太坊这边,adapter收到了"有效"签名,把钱放出去了。 2.9亿美元。用时不到一个区块。 这不是一次漏洞攻击。这是穿越信任边界的一刀——精准,干净,在没有任何人来得及反应之前就结束了。 背景铺垫 KelpDAO是一个流动性质押协议。 用户把ETH存进来,KelpDAO通过EigenLayer做再质押,用户收到rsETH作为凭证——可以交易,可以跨链,可以在DeFi里当抵押物用。 到2026年4月,rsETH已经部署到了超过20条链上:Arbitrum、Base、Mantle、Unichain、Linea……所有链上的rsETH,最终都连回以太坊主网的一个共享金库——通过LayerZero的OFT跨链标准连接。 这个金库里,装着用户信任KelpDAO保管的所有ETH。 跨链的意思是:你在Arbitrum上看到的"我的rsETH",实际上是一张欠条,欠条的主人是以太坊主网上的金库。金库安全,你的资产就安全。金库破了,你的资产就没了。 LayerZero是那条连接金库和各条链的管道。每一笔跨链操作,都要经过LayerZero的DVN(去中心化验证网络)来确认:真的有人锁了ETH,可以发币了。 LayerZero的架构允许——也推荐——运行多个独立的DVN,要求跨验证者共识后才授权转账。 KelpDAO的配置是:1个DVN,0个备用,0个门槛。 唯一被授权的验证者:LayerZero Labs自己的基础设施,标签是"LayerZero: DVN"。 事件发生 攻击者并不是从外部攻进来的。 他们先拿到了LayerZero内部RPC节点的访问权限——具体怎么拿到的,LayerZero至今没有给出完整解释。 拿到之后,他们做了两件事: 第一,在两个独立节点集群上替换了geth二进制文件。 这是供应链攻击。节点运营商以为自己在运行正常的软件,实际上每一个字节都被换过了。 第二,对剩余的干净节点发起DDoS攻击,迫使所有流量切换到被植入恶意程序的节点上。 这些被污染的节点只向DVN的IP地址发送伪造数据——告诉DVN"Unichain上发生了一笔交易"。而它们对其他所有查询者返回真实数据,包括LayerZero自己的监控系统。 DVN只看到了它被允许看到的东西。 恶意节点向DVN提交了一个伪造数据包:声称有116,500 rsETH在Unichain上被锁定并销毁。DVN的2-of-3多签签了字。数据包被认证为有效。 以太坊的adapter做了它唯一该做的事:检查哈希值是否匹配(匹配,因为签名是对的),放币。 签名是真的。数据包是假的。 这就是链上证据——Unichain的nonce 308从未存在过,Unichain上rsETH总供应量只有49.26个,不可能销毁116,500个,没有Transfer事件,没有PacketSent事件。 Nonce 307是一次真实转账,nonce 308是凭空出现的。两个数据包结构完全相同,区别只在于:一个是真实的,一个是被签出来的。 攻击者还准备了第二个数据包,nonce 309,目标再拿40,000 rsETH(约1亿美元)。但KelpDAO的紧急多签刚好在那个时候冻结了收款地址,第二笔没有成功。 这就是为什么最终损失是2.9亿美元而不是4亿美元。运气成分只有这么多。 整个攻击的种子资金:约230美元,从Tornado Cash出来,距离攻击不到10小时。 结果与余波 被盗的rsETH直接进了Aave V3。 8个预先进好的钱包同时行动:存rsETH进Aave,开E-Mode,用几乎99%的借款率借走真实的WETH,然后把WETH汇总到一个收集地址。 单最大一个分支:53,000 rsETH进了Aave V3,拿走了约52,440 ETH。整个过程4分钟。然后WETH转走,rsETH抵押物留在原地。 现在Aave V3的合约里还锁着89,567个rsETH——这些代币现在毫无价值,因为KelpDAO的合约已被冻结。但Aave的合约无法清算它们,因为市场无法消化这个量级。 这就是坏账。 与此同时,75,701 ETH(约1.75亿美元)开始通过THORChain、Umbra、Chainflip和BitTorrent洗出去。每一步都转成比特币。 36小时之内,清洗完成。 比特币无法追踪,无法冻结,无法归还。 Arbitrum做了唯一一次有效的反击:4月20日,12人安全委员会投票(9票赞成),动用紧急权限,把攻击者在Arbitrum上的30,766 ETH强行转到一个冻结地址。约7360万美元保住了。 这个决定充满争议——一个链上治理机构,有没有权力单方面冻结资金? Marc Zeller的说法代表了很多人的矛盾心理:“我天生反对Arbitrum刚才做的事。但我理解这个决定。让人拿回钱,比坚持一种会让朝鲜黑客带着钱走人的立场更重要。” 但75,700 ETH不在Arbitrum上。它已经在链上换成了比特币,没有任何机构可以冻结。 余震 Aave在48小时内净流出84.5亿美元。WETH资金池利用率触及100%——所有存款都被借出去了,正常用户无法提款。 这不是Aave的坏账问题。这是银行挤提。 MEXC撤了4.31亿。Abraxas Capital撤了3.92亿。一个标记为Nonco的巨鲸撤了4.057亿。 Curve、Euler、SparkLend、Ethena、EtherFi、WBTC、TRON、Pengu、Morpho——一共31个以上协议暂停了LayerZero跨链操作。不是因为它们被攻击了,而是因为它们不确定自己是不是下一个。 ...

April 20, 2026 · 2 min · Warren Wong