Transient storage, a transient trend? | Valerian Callens (Quantstamp)
三句話摘要
EIP-1153 引入的 Transient Storage(T 存儲)並非短暫趨勢,而是 EVM 生態系統正在健康早期採用的持久性機制。 Transient Storage 不是曇花一現,它有堅實的標準基礎、主流工具支援與頭部協議背書,掌握其槽管理的安全模式才是立即可落地的核心競爭力。 T 存儲有雙重作用域:合約層(只有自身合約可存取,對外需專用 view 函數)與交易層(交易結束後自動重置為零),這兩個特性共同決定了它的適用場景。
重點整理
重點- 1
T 存儲有雙重作用域:合約層(只有自身合約可存取,對外需專用 view 函數)與交易層(交易結束後自動重置為零),這兩個特性共同決定了它的適用場景。
- 2
實際採用集中在兩類用途:大多數項目先從瞬態重入保護切入,進階用法則是以「Transient Context」模式管理一組瞬態變量,Uniswap V4 與 Balancer V3 的 Flash Accounting 是最具代表性的案例。
- 3
安全風險核心在槽管理:混合使用 `delegatecall` 時容易發生槽衝突;若同一個槽被多個用例或多個 Actor 共用,可能引發意外行為或 DoS——账戶抽象(Account Abstraction)場景尤需警惕。
- 4
可組合性是雙面刃:交易級計數器雖能防止重複調用,但也可能限制協議在同一交易中的可組合性,批次交易工具有可能被濫用。
實用技巧與重點
乾貨- 標準:EIP-1153,Dencun 升級引入 EVM
- 操作碼:`TLOAD` / `TSTORE`;Solidity/Viper 使用 `transient` 關鍵字
- 槽大小:32-bit 標識符
- 成本:比持久存儲(SLOAD/SSTORE)更便宜
- 採用項目:Uniswap V4(Flash Accounting)、Balancer V3
- EIP 原始六大用例:瞬態重入保護、具持久餘額的代幣、瞬態授權、可支付費用的代幣、解鎖代幣轉移至交易結束
- 工具:EVM diff 工具(用於驗證 T 存儲實作正確性)
- 採用延遲案例:部分代碼庫因尚未準備好升級 Solidity 編譯器至 0.8.24 而推遲採用
- 設計模式三種:Transient Read-Return 保護、Transient Context 生命週期管理、Transaction-Level Counter
- Transient Context 鎖定步驟:確認未被鎖定 → 鎖定 → 清理槽 → 初始化 → 使用 → 清除 → 解鎖
結論
結論“Transient Storage 不是曇花一現,它有堅實的標準基礎、主流工具支援與頭部協議背書,掌握其槽管理的安全模式才是立即可落地的核心競爭力。”
完整解析
詳細Transient Storage 的故事始於六年前的 EIP-1153 提案,直到今年的 Dencun 升級才正式並入 EVM。它的核心特性只有兩點:便宜,以及交易結束即清零。開發者可以在 Solidity 與 Viper 中透過 `transient` 關鍵字直接使用,也可透過底層操作碼 `TLOAD`/`TSTORE` 操作,每個槽以 32-bit 標識符定址。EIP 最初預設了六種應用場景,從重入保護到代幣授權均有涵蓋,為這項技術描繪了一張相當完整的用途地圖。
在實際採用上,透過 GitHub 搜尋可以發現,早期結果多為客戶端與開發工具在跟進 Dencun 支援,但真正具代表性的生產用例已經出現:Uniswap V4 與 Balancer V3 以 T 存儲實作 Flash Accounting(閃存記帳),利用交易結束自動清零的特性省去了手動重置的成本。多數項目的採用路徑相似——先以最簡單的瞬態重入保護切入,再視需求升級為「Transient Context」模式,即將一組相關的瞬態變量統一管理,並搭配專用庫(如 Transient Slot Doo 庫)處理槽的分配與清理。少數項目的採用被推遲,原因通常是代碼庫其餘部分尚未準備好升級至 Solidity 0.8.24。
安全方面,講者歸納出四個值得關注的風險點。首先,重入檢查邏輯不能只看持久存儲,必須同時考慮 T 存儲的狀態。其次,面向多條 EVM 相容鏈部署時,需用 EVM diff 工具確認各鏈對 T 存儲的實作是否一致。第三,混合使用 `staticcall`(靜態調用)與 `delegatecall` 時,不同槽之間可能發生衝突或偏移。第四,也是最需要設計層面應對的:若同一個槽可被多個用例或多個 Actor 並發存取,Account Abstraction 與批次交易工具有可能觸發意外行為甚至 DoS 攻擊。
針對這些風險,講者提出三個設計模式。「Transient Read-Return 保護」用來防止只讀區域被濫用,透過為 view 函數指定 ID(如 42)並以修飾符在暴露區域前後鎖定/解鎖來實作。「Transient Context 生命週期管理」是其中最重要的模式:核心原則是單用途槽(一槽一用途),以及避免多個 Actor 並行操作同一槽,具體流程為「確認未鎖定 → 鎖定 → 清理 → 初始化 → 使用 → 清除 → 解鎖」。「交易級計數器」則允許對函數在單一交易內的調用次數設限,優點是比持久存儲便宜且能阻止重複重入,缺點是可能限制協議的可組合性。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

