RFC:使用 this.balance 作為坎昆會議後的無存儲停用機制

本文為機器翻譯
展示原文

RFC: 使用 this.balance 作為無儲存停用機制的後Cancun方案

在Cancun升級和EIP-6780引入的變更之後,動態停用和重新啟用合約的能力變得更加具有挑戰性,特別是在每次交易都需要查詢儲存的情況下。我提出了一種最小化的機制,使用內建的 this.balance 變數作為控制標誌來啟用和停用合約(特別是路由器合約)。

使用案例

所討論的路由器合約:

  • 持有使用者批准但沒有代幣或重要的業務邏輯。
  • 在正常操作中不持有ETH
  • 需要一種可靠的、無儲存的方式來切換啟用停用狀態。

這在以下情況特別有用:

  • 發現合約中存在bug,需要阻止使用者與之互動,直到修復完成。
  • 需要快速停用路由器,而不需要手動撤銷使用者批准。

提議的機制

該機制完全依賴於合約的ETH餘額(this.balance)來切換其狀態。邏輯如下:

  1. 狀態定義:
  • 停用: this.balance == 0。合約拒絕所有互動。
  • 啟用: this.balance == 1 wei。合約正常執行。
    1. 狀態轉換:
    • 啟用合約: activate()函式(限制為不可變的DEACTIVATOR地址)向合約傳送1 wei,將其設定為啟用狀態。
    • 停用合約: deactivate()函式(也有限制)將合約中的所有ETH轉回DEACTIVATOR,將餘額設定為零。
      1. 關鍵特性:
      • 路由器沒有receive函式,確保ETH不會意外或惡意地傳送到它。
      • 所有狀態轉換完全依賴於ETH餘額,消除了查詢或儲存自定義狀態變數的需要。

      優勢

      1. 無儲存讀取:狀態檢查依賴於this.balance,避免了從儲存中讀取的gas成本。
      2. 高效的狀態轉換:啟用或停用只涉及最小的ETH轉賬。
      3. 安全性:沒有receive函式確保路由器不會意外積累ETH。

      為什麼這很有用

      這種機制提供了一種輕量級的方式來處理路由器停用,特別是在以下情況下:

      • 路由器合約中的bug迫使使用者手動撤銷批准。
      • 由於gas成本或複雜性,每次交易都進行狀態查詢是不可取的。

      使用合約的ETH餘額作為切換開關避免了對儲存變數的需求,同時實現了快速高效的狀態變更。這種方法可能會使其他需要類似啟用/停用機制的合約設計受益,而無需依賴儲存。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論