这篇文章介绍了以太坊的传统交易格式(类型0x0),即EIP-2718之前的交易结构。它通过使用Go语言和go-ethereum库,详细演示了如何在Polygon Amoy测试网上创建、签名和广播一个传统以太坊交易,并解释了其中的关键字段和EIP-155兼容性。
EIP-7702 引入了一种新的交易类型,允许 EOA 账户在交易执行期间临时地表现得像智能合约,无需部署或改变长期状态。它通过授权列表和短期的委托存根实现,从而提升用户体验,支持批量交易、交易赞助和权限委托等功能。
本文深入探讨了Solidity高级特性如何映射到EVM的实际行为,详细讲解了payable、receive、fallback函数处理以太币、低级调用类型(如CALL、DELEGATECALL)的区别、内部与外部调用的机制,以及交易回滚的传播原理,帮助开发者理解智能合约的执行流程和错误处理。
payable
receive
fallback
CALL
DELEGATECALL
本文深入探讨了以太坊ABI编码机制,详细解释了Solidity函数调用和自定义结构体数据如何被编码成EVM可处理的十六进制字节。文章通过具体示例,包括函数选择器和参数的编码规则,展示了静态和动态类型数据的处理过程,并总结了ABI编码的核心原理。
本文介绍了智能合约工厂模式,它通过一个智能合约来部署、初始化和跟踪其他合约,实现标准化、可发现性、初始化安全和确定性部署。文章通过一个 Foundry 示例,展示了如何使用工厂合约部署和交互合约,并解释了为什么现代协议几乎都包含工厂模式。
本文介绍了EIP-1167最小代理(Minimal Proxy)合约,它通过部署极小的bytecode stub,将所有调用委托给单个实现合约,从而降低了大量合约实例的部署成本。与普通代理不同,最小代理不可升级,但非常小巧高效,适用于需要大量相同逻辑但独立状态的场景,例如DEX中的流动性交易对。
本文介绍了 UUPS 代理模式,它将升级逻辑从代理合约转移到实现合约中,从而减少了 bytecode 大小、部署成本和复杂性。通过将升级功能放在实现合约中,每个实现都可以定义自己的升级规则。文章还通过 Foundry 演示了 UUPS 代理的部署和升级过程。
本文详细解释了以太坊智能合约的部署过程,包括部署交易的原理、EVM如何确定合约地址,以及如何使用CREATE和CREATE2预先计算合约地址。文章通过示例展示了如何手动计算合约地址,并解释了CREATE2在预先确定合约地址方面的重要作用。
本文介绍了以太坊智能合约升级的常用模式:透明代理(Transparent Proxy,EIP-1967)。文章解释了代理合约如何通过 delegatecall 将调用转发到可替换的实现合约,从而在保持合约地址不变的情况下实现逻辑升级。文章还通过 Foundry 演示了代理合约的部署、升级和状态保持的过程,并强调了 EIP-1967 标准化存储槽位的重要性。
delegatecall
本文介绍了以太坊虚拟机(EVM)中事件(也称为日志)的工作原理,包括事件的定义、存储位置(交易回执日志而非合约存储)、以及如何通过eth_getLogs直接查询事件。文章详细解释了topics(索引字段,用于过滤)和data(非索引字段,存储原始字节)的结构,并通过ERC-20代币转账事件的示例,展示了如何手动解码日志以及如何在区块浏览器上理解事件信息。
eth_getLogs
topics
data