文章介绍了以太坊中一种新的临时存储方案,称为瞬态存储(Transient Storage)。瞬态存储仅在交易期间存在,并在交易结束后被丢弃,与永久存储相比,它可以降低gas成本,简化EVM设计,并增强智能合约的安全性。文章还讨论了瞬态存储的适用场景、gas成本,以及它对智能合约开发的影响。
2025年6月10日
临时存储代表了以太坊架构中一种创新的、可写的数据位置,其特点是仅在交易期间持续存在。临时存储特定于执行层,其运行方式与EVM中现有的存储操作码类似,但有一个关键区别:它们将在每个交易结束时被丢弃,就像计算机的RAM在不再需要时被清除一样。这种数据存储的临时性提供了一个显著的优势:交易后,区块链不需要保留这些数据,从而消除了节点对磁盘存储的需求。因此,与传统的存储方法相比,临时存储成为一种经济高效的替代方案。
在以太坊中,一个交易可能涉及多个执行“帧”。例如,如果一个交易调用一个智能合约,而该智能合约又调用另一个智能合约,那么每个调用都代表一个不同的执行帧。目前,这些帧之间的通信只能通过EVM的存储来实现,这在gas方面代价高昂。EIP-1153引入的临时存储为这种帧间通信提供了一种更节省gas的解决方案,因为数据可以在一个交易内的不同帧之间临时存储和访问,而无需对EVM的永久存储进行昂贵的写入。
在不断发展的以太坊交易环境中,交易越来越多地涉及与多个合约的复杂交互,临时存储具有重要意义。当合约需要在某个调用帧中临时存储数据,以便在同一交易的后续调用帧中访问这些数据时,它尤其有利。
EIP-1153,有两个临时存储操作码:TLOAD 和 TSTORE。它们将通过在每次交易后丢弃相关值,共同为交易期间的帧间通信提供更节省gas的解决方案。
TSTORE 操作:100 gas
TLOAD 操作:100 gas
这些值与 warm 和 dirty 存储操作相关的成本一致,从而为 gas 消耗提供了一种平衡的方法。
虽然伦敦硬分叉中引入的EIP-3529规定的存储gas退款在一定程度上满足了类似的需求,但它们被限制在交易总gas支出的20%。这一限制降低了退款对临时存储的有效性,尤其是在总体gas使用量较低的交易中。在当前的设置中,以太坊使用常规存储来满足临时数据需求,这导致了不必要的从磁盘读取数据。为了管理这些临时数据,即“临时数据”,当存储在某个槽中的数据在同一交易中重置为其原始值时,以太坊虚拟机(EVM)会提供gas退款。但是,这种退款系统在gas成本方面是复杂且不可预测的。开发人员大多必须使用变通方法,例如将值重置为非零的 “dirty” 状态,以管理这些成本。此外,这种方法可能会导致gas浪费,尤其是在交易被撤销或失败时。
EIP-1153旨在简化此过程。通过引入专用的临时存储机制,它消除了对这些复杂退款策略的需求,并减少了不必要的gas支出,从而使整个系统对于开发人员而言更加高效且易于使用。
临时存储的引入有望显著增强智能合约的安全性。由于gas成本的原因,许多合约目前放弃了重入保护,但有了临时存储,这些保护措施变得更加可行。此外,临时存储为新的、更直接且可审计的智能合约模式铺平了道路。
调整像Solidity这样的智能合约语言以适应临时存储可能非常简单。例如,Solidity可以引入一个 “transient” 限定符,类似于其现有的 “memory” 和 “storage” 限定符。这种集成得益于 TSTORE/TLOAD 和 SSTORE/SLOAD 之间的寻址方案的相似性,从而允许无缝扩展现有代码生成例程以支持临时存储。
EIP-1153 的实施已在 Nethermind、Besu 和 Geth 等主要的以太坊客户端中成功完成。这种广泛采用证明了它易于集成和具有潜在的影响。针对单个交易和更广泛的区块链交互的综合测试已经完成,并且可以在 ethereum/tests 存储库中找到。这些测试已针对上述客户端有效运行。
- 原文链接: blog.immunebytes.com/202...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!