第 21 讲:EVM 的结构——一台 256 位栈机
从记账到运行程序:EVM 的六个数据区域及其成本差异;256 位字长的两个理由和三项代价(尤其是它为什么让 zkEVM 极其困难);JUMPDEST 规则为什么存在;一段字节码的完整逐指令推演;以及 2016 年上海 DoS 攻击如何暴露了操作码定价的本质困难。
从记账到运行程序:EVM 的六个数据区域及其成本差异;256 位字长的两个理由和三项代价(尤其是它为什么让 zkEVM 极其困难);JUMPDEST 规则为什么存在;一段字节码的完整逐指令推演;以及 2016 年上海 DoS 攻击如何暴露了操作码定价的本质困难。
Gas 的三项职责与「计量」和「计价」分离的设计智慧;EIP-1559 之前一价拍卖的三个失败模式;基础费调整公式、±12.5% 限幅、以及销毁基础费为什么是必需的;EIP-1559 真正解决的不是费用高低而是费用估计;冷热访问定价与 Gas 退款被削减的原因。
2²⁵⁶ 个存储槽如何被分配:顺序分配、变量打包、动态数组与 mapping 的哈希寻址公式;为什么 mapping 无法遍历;SSTORE 的四档定价与打包优化的真实收益边界;以及 private 变量为什么根本不是私密的。
CALL、DELEGATECALL、STATICCALL 三者上下文的精确差别;代理模式如何实现「可升级」以及存储冲突为什么会毁掉一切;EIP-1967 伪随机槽的巧妙之处;Parity 多签冻结 51 万 ETH 的完整成因;以及可升级性在信任模型上究竟改变了什么。
一笔交易从签名到最终确定的七个阶段;事件为什么合约自己读不到;EOA 的四个硬限制与账户抽象要解决的问题;EIP-4337 的 UserOperation 流水线与 EIP-7702 的思路差别;以及并行执行的三条路线——预声明读写集、乐观并行(Block-STM)与访问列表。
「把区块调大」为什么不行:带宽、状态增长、同步时间、重执行四个瓶颈的分别量化;把扩容拆成执行、数据、状态三个独立维度;Layer 2 的严格定义为什么是「能否单方面退出」,以及 Rollup、Validium、侧链在这个定义下各自的位置。
「默认相信,有异议再证明」的完整机制;交互式二分查找如何把「在 L1 重跑整个区块」压缩成「在 L1 执行一条指令」;挑战期为什么是 7 天(它不是技术需求而是安全边际);排序器中心化与强制包含机制;以及欺诈证明的活性为什么依赖链外的经济激励。
有效性证明与欺诈证明的本质差别;为什么「ZK Rollup」这个名字用错了词——真正需要的是简洁性而非零知识性;SNARK 与 STARK 的完整取舍与可信设置仪式的 1-of-N 假设;zkEVM 的五个类型及其兼容性与证明速度的权衡;以及 ZK Rollup 真正的风险为什么不在密码学而在电路实现。
数据可用性为什么是「发布」而不是「存储」,以及它为什么无法用签名或举报来解决;纠删码如何把「藏起 1% 数据」变成「必须藏起一半以上」,从而让随机采样有效;KZG 如何保证编码本身正确;EIP-4844 blob 的独立费用市场与 18 天后删除为什么不损害安全性。
为什么一条链读不到另一条链的状态,以及桥本质上是「关于另一条链的预言机」;按信任假设把桥分成原生验证、外部验证、乐观验证三类;历史上最大的几次损失为什么几乎全部集中在同一类;包装资产的连锁风险;以及「多链但非跨链」这个论点的完整含义。