EIP-1153:瞬态存储 – ImmuneBytes

文章介绍了以太坊中一种新的临时存储方案,称为瞬态存储(Transient Storage)。瞬态存储仅在交易期间存在,并在交易结束后被丢弃,与永久存储相比,它可以降低gas成本,简化EVM设计,并增强智能合约的安全性。文章还讨论了瞬态存储的适用场景、gas成本,以及它对智能合约开发的影响。

2025年6月10日

理解以太坊中的临时存储

定义和概念化:

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

另一种存储类型

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

适用性和临时存储的效用

在不断发展的以太坊交易环境中,交易越来越多地涉及与多个合约的复杂交互,临时存储具有重要意义。当合约需要在某个调用帧中临时存储数据,以便在同一交易的后续调用帧中访问这些数据时,它尤其有利。

示例说明:
  • 重入锁: 这涉及合约在某个调用帧中临时存储一个标志,以监控后续帧中潜在的重入。
  • Token Permissions(代币许可): 通常用于在同一交易中设置授权额度,代币许可可以利用临时存储来提高成本效益,尤其是在使用后重置授权额度的情况下。
  • 回调利用合约: 这些合约可以有效地使用临时存储来临时保存回调期间所需的动态数据。
  • 多步骤交易中的状态变量: 在涉及多步骤流程的合约中(如多阶段游戏或复杂的金融交易),使用临时存储来保存仅与交易相关的中间状态变量。
  • 投票机制: 在去中心化投票系统中,临时存储可以临时保存仅在投票期间相关的投票或计数,从而减少了对更昂贵的永久存储写入的需求。
  • 合约交互中的数据传递: 当一个合约调用另一个合约时,使用临时存储在它们之间传递数据。这在多个合约交互并需要临时共享数据的复杂DApp中尤其有用。
  • 临时数据缓冲区: 使用临时存储作为临时数据聚合或计算的缓冲区,例如在完成输出之前,在合约函数中累积值或中间结果。
  • 条件逻辑和检查: 在合约必须根据当前交易上下文执行检查或条件逻辑的情况下,临时存储可以保存用于指导这些条件路径的标志或数据。

临时存储操作的Gas成本

EIP-1153,有两个临时存储操作码:TLOADTSTORE。它们将通过在每次交易后丢弃相关值,共同为交易期间的帧间通信提供更节省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/TLOADSSTORE/SLOAD 之间的寻址方案的相似性,从而允许无缝扩展现有代码生成例程以支持临时存储。

暂时存储的优点:

  • 简化 EVM 设计: 当前用于临时用例的常规存储需要不必要的磁盘读取。临时存储消除了这种需求,从而简化了以太坊虚拟机 (EVM) 的设计。
  • 降低退款逻辑的复杂性: 现有的存储槽退款逻辑在 gas 记账方面复杂且不可预测。临时存储通过消除对此类退款的需求来简化这一点。
  • 节省大量 gas: 临时存储显着降低了 gas 成本。例如,从存储中进行冷读取需要 2100 gas。dirty 写入存储需要 2900 gas。由于对退款设置了上限,因此在达到上限后,任何临时存储的使用成本都与使用常规存储(~5000 gas,如果写回 dirty 值)的成本相同。如果不使用这个 dirty 值技巧,成本会更高,因为 clean 写入存储需要 20,000 gas。临时存储可以节省这些成本,尤其是在退款上限使得常规存储使用更加昂贵的情况下。

对智能合约开发的影响:

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

一个简单而强大的升级:

EIP-1153 的实施已在 Nethermind、Besu 和 Geth 等主要的以太坊客户端中成功完成。这种广泛采用证明了它易于集成和具有潜在的影响。针对单个交易和更广泛的区块链交互的综合测试已经完成,并且可以在 ethereum/tests 存储库中找到。这些测试已针对上述客户端有效运行。

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

0 条评论

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