这篇文章详细介绍了以太坊中的瞬态存储(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中,有两种瞬态存储操作码:TLOAD 和 TSTORE。它们将共同提供一个更节省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/TLOAD和SSTORE/SLOAD之间寻址方案的相似性,从而允许无缝扩展现有的代码生成例程以支持瞬态存储。
瞬态存储的优势:
对智能合约开发的影响:
transient关键字一样简单。一个简单而强大的升级:
EIP-1153的实现在主要的以太坊客户端,如Nethermind、Besu和Geth中已成功完成。这种广泛采用证明了其易于集成和潜在影响。针对单个交易和更广泛的区块链交互,都进行了全面的测试,并可在 ethereum/tests 仓库中找到。这些测试已针对上述客户端成功运行。
- 原文链接: blog.immunebytes.com/202...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!