瞬态存储EIP-1153 – ImmuneBytes

这篇文章详细介绍了以太坊中的瞬态存储(EIP-1153),这是一种仅在交易执行期间存在的可写入数据存储位置。它旨在提供比传统存储更高效、更低成本的跨帧通信方式,从而简化EVM设计,显著降低Gas成本,并增强智能合约的安全性。

2026年2月24日

理解以太坊中的瞬态存储(Transient Storage)

瞬态存储的定义与概念化

瞬态存储代表了以太坊架构中一种创新的、可写入的数据位置,其特点是仅在交易持续期间持久化。瞬态存储特定于执行层,将类似于EVM中现有的存储操作码运行,但有一个关键区别:它们将在每笔交易结束时被丢弃,很像计算机内存(RAM)在不再需要时被清除的方式。这种数据存储的临时性提供了一个显著优势:交易结束后,区块链无需保留这些数据,从而消除了节点对磁盘存储的需求。因此,瞬态存储相较于其他传统存储方法,成为一种经济高效的替代方案。

另一种存储类型

在以太坊中,一笔交易可能涉及多个“执行帧”。例如,如果一笔交易调用一个智能合约,而该智能合约又调用另一个智能合约,这些调用中的每一个都代表一个不同的执行帧。目前,这些帧之间的通信只能通过EVM的存储进行,这在gas方面是昂贵的。EIP-1153引入的瞬态存储为这种帧间通信提供了一个更节省gas的解决方案,因为数据可以在同一交易中的不同帧之间临时存储和访问,而无需向EVM的永久存储进行昂贵的写入。

瞬态存储的适用性与实用性

在以太坊交易不断发展的格局中,交易日益涉及与多个合约之间复杂的交互,瞬态存储的重要性由此体现。它在合约需要在某个调用帧中临时存储数据,并打算在同一交易的后续调用帧中访问此数据的情况下,尤其有益。

示例:

  • 重入锁(Reentrancy Locks): 这涉及合约在一个调用帧中临时存储一个标志,以监测后续帧中潜在的重入。

  • Token Permits: 通常用于在同一交易中设置限额,Token Permits可以利用瞬态存储提高成本效率,特别是因为限额在使用后会重置。

  • 利用回调的合约: 这些合约可以有效地使用瞬态存储来临时保存回调期间所需的动态数据。

  • 多步交易中的状态变量:

    在涉及多步流程(如多阶段游戏或复杂的金融交易)的合约中,使用瞬态存储来保存仅在交易上下文中相关的中间状态变量。

  • 投票机制:

    在去中心化投票系统中,瞬态存储可以临时保存仅在投票期间相关的投票或计票结果,减少了对更昂贵的永久存储写入的需求。

  • 合约交互中的数据传递:

    当一个合约调用另一个合约时,使用瞬态存储在它们之间传递数据。这在多个合约交互并需要临时共享数据的复杂DApp中特别有用。

  • 临时数据缓冲区:

    使用瞬态存储作为临时数据聚合或计算的缓冲区,例如在合约函数中积累值或中间结果,然后再确定输出。

  • 条件逻辑和检查:

    在合约必须根据当前交易上下文执行检查或条件逻辑的场景中,瞬态存储可以保存用于引导这些条件路径的标志或数据。

瞬态存储操作的Gas成本

EIP-1153中,有两种瞬态存储操作码:TLOADTSTORE。它们将共同提供一个更节省gas的解决方案,用于交易期间的帧间通信,通过在每笔交易后丢弃相关值。

TSTORE 操作:100 gas

TLOAD 操作:100 gas

这些值与“热”和“脏”存储操作相关的成本相符,为gas消耗提供了一种平衡的方法。

与存储的比较

虽然根据伦敦硬分叉引入的EIP-3529,存储gas退款部分解决了类似的需求,但其上限为交易总gas支出的20%。这一限制约束了瞬态存储退款的有效性,尤其是在总gas使用量较低的交易中。在当前设置中,以太坊使用常规存储来满足临时数据需求,这导致了不必要的磁盘数据读取。为了管理这种临时数据,称为“瞬态数据”,以太坊虚拟机(EVM)在同一交易中将存储槽中的数据重置为其原始值时提供gas退款。然而,这个退款系统在gas成本方面是复杂且不可预测的。开发者大多不得不使用变通方法,例如将值重置为非零的“”状态,来管理这些成本。此外,这种方法可能导致gas浪费,尤其是在交易被逆转或失败时。

EIP-1153旨在简化这一过程。通过引入一个专用的瞬态存储机制,它消除了对这些复杂退款策略的需求,并减少了不必要的gas支出,使整个系统对开发者来说更高效、更易于使用。

增强合约安全性

瞬态存储的引入有望显著增强智能合约安全性。许多合约目前由于gas成本而放弃了重入保护,但有了瞬态存储,这些保护措施变得更可行。此外,瞬态存储为新的、更直接、更可审计的智能合约模式铺平了道路。

集成到智能合约语言中

调整Solidity等智能合约语言以适应瞬态存储可以非常简单。例如,Solidity可以引入一个“transient”修饰符,类似于其现有的“memory”和“storage”修饰符。这得益于TSTORE/TLOADSSTORE/SLOAD之间寻址方案的相似性,从而允许无缝扩展现有的代码生成例程以支持瞬态存储。

瞬态存储的优势:

  • 简化EVM设计: 常规存储目前用于瞬态用例,需要不必要的磁盘读取。瞬态存储消除了这一需求,简化了以太坊虚拟机(EVM)的设计。
  • 减少退款逻辑的复杂性: 存储槽的现有退款逻辑在gas核算方面是复杂且不可预测的。瞬态存储通过消除对此类退款的需求来简化这一点。
  • 节省大量gas: 瞬态存储显著降低了gas成本。例如,从存储进行一次冷读取是2100 gas。对存储进行一次脏写入是2900。有了退款上限,超出上限后使用瞬态存储的成本将与使用常规存储相同,如果写回“脏”值,则约为5000 gas。如果不使用这种“脏值”技巧,成本会高得多,因为一次干净的存储写入是20,000。瞬态存储可以节省这些成本,特别是因为退款上限使得常规存储的使用更加昂贵。

对智能合约开发的影响:

  • 增强开发者体验: 瞬态存储的引入简化了智能合约设计模式。例如,将瞬态存储用于重入锁将像使用一个transient关键字一样简单。
  • 向前兼容性: 在开发时考虑了瞬态存储的合约将与以太坊的未来愿景和设计兼容。

一个简单而强大的升级:

EIP-1153的实现在主要的以太坊客户端,如Nethermind、Besu和Geth中已成功完成。这种广泛采用证明了其易于集成和潜在影响。针对单个交易和更广泛的区块链交互,都进行了全面的测试,并可在 ethereum/tests 仓库中找到。这些测试已针对上述客户端成功运行。

  • 原文链接: blog.immunebytes.com/202...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
ImmuneBytes
ImmuneBytes
Stay Ahead of the Security Curve.