MOVE首創GAS設計:鏈上資源消耗計算方法解析

robot
摘要生成中

MOVE語言中首個GAS設計:鏈上GAS花費計算方法

MOVE語言的上一個版本原本打算在無GAS的前提下運行,因此並未爲GAS計劃做好準備。近期爲某公鏈建立的GAS計劃是MOVE語言首個GAS設計,被稱爲"一場冒險"。

這個GAS計劃闡明了制定GAS的原則、流程、計算方法、後期調整以及接受社區建議等內容。

GAS計量是許多區塊鏈的基本概念,它定義了執行和存儲鏈上交易所需的計算和存儲資源量的抽象計算。GAS計劃確定了鏈上所有執行消耗的成本,用於計算執行交易期間使用的GAS花費。

流程

爲了有效執行,鏈上流程如下:

  1. 定義原則
  2. 準備評估框架,確定每個執行的價格
  3. 爲Move建立GAS計量系統和安全GAS代數
  4. 導入上遊GAS框架
  5. 使GAS框架具有存儲意識
  6. 進一步細化GAS計劃

原則

定義的原則包括:

  1. 操作成本應與網路可用資源直接相關,並隨技術進步而降低
  2. GAS應由鏈上治理設置,可無縫配置
  3. GAS可防止DoS攻擊,可根據網路情況快速調整
  4. GAS價格應反映加速增長和保持區塊鏈可及性的願景
  5. 鼓勵在設計中做出好的選擇,如優先考慮安全性、模塊化等

GAS計算

用戶提交交易時須指定:

  • 最大GAS數量:用戶願意爲執行交易花費的最大GAS單位數
  • GAS單價:以每單位GAS的八進制計算,1八進制=0.00000001 APT

交易執行過程中將收取:

  1. 固定成本
  2. 執行Move指令的成本
  3. 從持久存儲讀取數據的成本
  4. 向持久存儲寫入數據的成本

最終交易費用 = 消耗的GAS總量 × GAS單價

例如,若交易消耗670個GAS單位,用戶指定的GAS單價爲100 Octa/單位,則最終費用爲670 × 100 = 67000 Octa = 0.00067 APT。

如交易執行過程中耗盡GAS,發送方將按最大GAS量收費,該交易所做更改將被恢復。

GAS計劃表的建立

  1. 基本配置

GAS計劃包含與單個操作無關的組成部分,如交易大小和最大GAS單位。

  1. 交易規模

大多數交易規模在千字節級別。Move模塊發布可達幾千字節,某框架約100 KB。用戶模塊通常在4-40 KB之間。交易規模值最初設爲32 KB,後根據社區反饋調整爲64 KB。

過大規模交易會增加網路帶寬成本並可能影響性能。內存池可能會忽略規模較大的交易,因此需在最大規模和可訪問性間取得平衡。

  1. 最大GAS單位

GAS計劃中的最大GAS單位定義了單個交易可執行的最多操作數。設置過高可能對區塊鏈性能產生負面影響。經測試,即使進行最大框架升級,也僅使用不到90%的最大GAS單位(設定爲1,000,000)。

  1. 執行

通過構建基準框架並使用Valgrind分析Move VM來評估執行成本。輸出爲帶注釋的原始碼,顯示每行代碼產生的機器指令數。

據此粗略估算所有Move指令和本機函數的相對成本。注意到與內聯函數存在一些問題,可通過數字相加解決。

最終,考慮增強系統穩健性和安全性的編碼範例,得出執行的機器指令數量。將此數字與存儲和最大GAS單位權衡,確定GAS計劃中的當前值。

  1. 存儲

訪問帳本狀態項或數據時,節點會向存儲設備發出讀寫請求。每秒數據訪問總數取決於存儲設備帶寬和IOPS容量。數據訪問是用戶在系統負載時通過費用市場競爭的瞬時稀缺資源。寫入數據的磁盤佔用成本在鏈上是永久的。

訪問和存儲任何狀態項都會產生與驗證整個區塊鏈狀態的數據結構相關的成本。此成本與不同狀態項的基數有關($2^{256}$)。還有一個成本與每個項目的大小成正比。

對狀態項操作的費用(下節描述的例外情況除外)爲:

存儲GAS費 = item_fee + (byte_fee × bytes)

讀、創建和寫

狀態項訪問分爲三種類型:讀、創建或寫。訪問按項目費和字節費收費。

讀操作最常見,僅受瞬時資源稀缺限制。讀取費用根據磁盤IOPS和參考硬件規格的帶寬容量校準。

創建操作在狀態存儲中添加新項,增加了身分驗證數據結構成本,因此最昂貴。創建費用根據網路擁有的參考磁盤空間校準。

寫操作更新現有項,不會在身分驗證數據結構中產生額外開銷。但修改現有條目至更大字節數仍可能佔用磁盤,因此對更新項中的字節收取與創建相同的費用。

存儲相關成本基於每筆交易評估:即使多次讀/寫同一資源,也只收取一次費用。

基於上述考慮,定義了6個GAS參數構成總費用:

  • per_item_read:根據IOPs校準
  • per_byte_read:根據實際帶寬校準
  • per_item_create:根據目標總項目校準
  • per_byte_create:根據目標總大小校準(每項目含首個1KB)
  • per_item_write:與per_item_read相同
  • per_byte_write:與per_byte_create相同

穩定的GAS單位成本

每個操作和交易本身需要相對於存儲和執行成本的固定單位成本,無論以APT或法定貨幣計算的市場價值如何。固定GAS單位成本有助於保持GAS計劃不變,並與APT自由市場價值脫鉤。正確選擇GAS單位精確位數有助於保持GAS計劃穩定。考慮到這點,GAS單位以約3位數精度表示。因此,轉帳交易成本約爲700個GAS單位。

社區參與

社區成員可以:

  1. 找出GAS計劃不合理之處
  2. 提出擔憂並參與討論
  3. 就GAS相關治理提案進行投票

GAS成本調整

GAS計劃作爲鏈上配置存儲,可通過治理提案更改,並可無縫添加新指令或原生功能。

GAS計劃設計可擴展,允許通過治理提案升級。隨着不斷改進和納入用戶反饋,GAS參數可隨時間調整。

有時GAS公式可能需要復雜更改。這些公式通常用Rust編碼,通過鏈上GAS特徵標志區分。升級這些公式需更新節點軟件,大量採用,並通過治理提案批準使用新GAS版本。

未來工作

作爲Move首個可行GAS框架,未來工作方向包括:

  1. 降低執行成本:利用真實GAS模型顯示編譯器和虛擬機效率,改進以降低執行成本

  2. 多維GAS計算:允許用戶爲執行和存儲指定單獨預算,避免因代碼質量問題支付高昂GAS價格

  3. 緩解臃腫狀態:探索每個項目TTL概念,在TTL到期時刪除未訪問的狀態項目

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 讚賞
  • 5
  • 分享
留言
0/400
rugged_againvip
· 9小時前
讲这些不如直接说gas能降多少?
回復0
MetaverseMigrantvip
· 9小時前
啧 这gas还能再复杂点不
回復0
NewDAOdreamervip
· 9小時前
反着收钱也是coder一生的痛啊
回復0
¯\_(ツ)_/¯vip
· 9小時前
move真牛哇 搞复杂了?
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)