# 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. 操作成本與網路可用資源直接相關,技術改進後GAS成本應相應降低2. GAS由鏈上治理設置,可無縫配置 3. GAS可防止DoS攻擊,可根據網路情況快速調整4. GAS價格反映了加速增長和保持區塊鏈普及性的願景5. 鼓勵在設計中優先考慮安全性、模塊化等因素### GAS計算用戶提交交易時需指定兩個數量:**最大GAS數量:** 以GAS單位計量,爲用戶願意支付的最大GAS單位數。**GAS單價:** 以每單位GAS的八進制計算,1八進制=0.00000001 APT。交易執行過程中將收取:1. 固定成本:固定基數加大額交易的額外費用2. 執行成本:用於執行Move指令 3. 讀取成本:用於從持久存儲讀取數據4. 寫入成本:用於將數據寫入持久存儲最終交易費用 = 消耗的GAS總量 × GAS單價。例如,若交易消耗670個GAS單位,用戶指定的單價爲100 Octa/單位,則最終費用爲670 × 100 = 67000 Octa = 0.00067 APT。若交易執行耗盡GAS,發送方將根據最大GAS量收費,交易所做更改將被恢復。### GAS計劃表建立**1. 基本配置**GAS計劃包含與單個操作無關的組成部分,如交易大小和最大GAS單位。**2. 交易規模**大多數交易規模在千字節量級,Move模塊發布可達幾千字節。最初交易規模設爲32KB,後根據社區反饋調整爲64KB,以簡化應用開發。大規模交易可能增加網路帶寬成本,影響性能。內存池可能忽略規模過大的交易,因此在最大規模和可訪問性間需取得平衡。**3. 最大GAS單位**GAS計劃中的最大GAS單位定義了單個交易可執行的最大操作數。設置過高可能對區塊鏈性能產生負面影響。目前設定爲1,000,000,即使進行最大框架升級也不超過90%。**4. 執行**通過構建基準框架並使用Valgrind分析Move VM,估算所有Move指令和本機函數的相對成本。考慮增強系統穩健性和安全性的編碼範例,得出最終執行的機器指令數量,並與存儲和最大GAS單位權衡,確定GAS計劃中的當前值。**5. 存儲**訪問持久存儲中的帳本狀態項或數據時,節點會向存儲設備發出讀寫請求。數據訪問總數取決於存儲設備帶寬和IOPS容量。團隊通過考慮這些成本設計存儲GAS計劃。訪問和存儲任何狀態項都會產生與驗證整個區塊鏈狀態的數據結構相關的成本。此成本與不同狀態項的基數有關。還有一個與每個項目大小成正比的成本。**存儲GAS費 = 項目費 + (字節費 × 字節數)**### 讀、創建和寫狀態項訪問分爲讀、創建和寫三種類型:- 讀操作最常見,僅受瞬時資源稀缺限制。- 創建操作在狀態存儲中添加新項,成本最高。- 寫操作更新現有項,不產生額外身分驗證數據結構開銷。基於上述考慮,定義了6個GAS參數:- per_item_read: 根據IOPs校正- per_byte_read: 根據實際帶寬校準- per_item_create: 根據目標總項目校準- per_byte_create: 根據目標總大小校準- per_item_write: 與per_item_read相同- per_byte_write: 與per_byte_create相同### 穩定GAS單位成本每個操作和交易本身需要相對於存儲和執行成本的固定單位成本。固定GAS單位成本有助於保持GAS計劃不變,並與代幣市場價值脫鉤。團隊以約3位數精度表示GAS單位,轉帳交易成本約爲700個GAS單位。### 社區參與社區成員可以:1. 找出GAS計劃不合理之處2. 提出擔憂並參與討論3. 就相關治理提案進行投票### GAS成本調整GAS計劃作爲鏈上配置存儲,可通過治理提案更改,並可無縫添加新指令或原生功能。隨時間推移,GAS參數可根據用戶反饋進行調整。復雜的GAS公式更改需更新節點軟件,並通過新的GAS特徵標志區分。節點運營商採用新軟件後,需發布並批準治理提案以使用新版本。### 未來工作作爲Move首個可行GAS框架,未來工作方向包括:1. 降低執行成本2. 實現多維GAS計算,允許用戶爲執行和存儲指定單獨預算3. 緩解臃腫狀態,探索每個項目TTL概念,在TTL到期時刪除未訪問的狀態項目
MOVE語言首個GAS方案亮相 探討鏈上資源計費新模式
MOVE語言首個GAS設計:探討鏈上GAS花費計算方式
MOVE語言的上一個版本原本打算在無GAS環境下運行,因此並未爲GAS計劃做好準備。近期,某公鏈爲其建立的GAS計劃被稱爲"一場冒險",這是MOVE語言的首個GAS設計。
該GAS計劃闡明了制定GAS的原則、流程、計算方法,以及後期調整機制。GAS計量是許多區塊鏈的基本概念,它定義了執行和存儲鏈上交易所需的計算和存儲資源量的抽象計算。GAS計劃將確定鏈上所有執行的消耗成本,用於計算交易執行期間的GAS花費。
流程
爲實現有效執行,該公鏈採用以下流程:
原則
定義的原則包括:
GAS計算
用戶提交交易時需指定兩個數量:
最大GAS數量: 以GAS單位計量,爲用戶願意支付的最大GAS單位數。
GAS單價: 以每單位GAS的八進制計算,1八進制=0.00000001 APT。
交易執行過程中將收取:
最終交易費用 = 消耗的GAS總量 × GAS單價。例如,若交易消耗670個GAS單位,用戶指定的單價爲100 Octa/單位,則最終費用爲670 × 100 = 67000 Octa = 0.00067 APT。
若交易執行耗盡GAS,發送方將根據最大GAS量收費,交易所做更改將被恢復。
GAS計劃表建立
1. 基本配置
GAS計劃包含與單個操作無關的組成部分,如交易大小和最大GAS單位。
2. 交易規模
大多數交易規模在千字節量級,Move模塊發布可達幾千字節。最初交易規模設爲32KB,後根據社區反饋調整爲64KB,以簡化應用開發。
大規模交易可能增加網路帶寬成本,影響性能。內存池可能忽略規模過大的交易,因此在最大規模和可訪問性間需取得平衡。
3. 最大GAS單位
GAS計劃中的最大GAS單位定義了單個交易可執行的最大操作數。設置過高可能對區塊鏈性能產生負面影響。目前設定爲1,000,000,即使進行最大框架升級也不超過90%。
4. 執行
通過構建基準框架並使用Valgrind分析Move VM,估算所有Move指令和本機函數的相對成本。考慮增強系統穩健性和安全性的編碼範例,得出最終執行的機器指令數量,並與存儲和最大GAS單位權衡,確定GAS計劃中的當前值。
5. 存儲
訪問持久存儲中的帳本狀態項或數據時,節點會向存儲設備發出讀寫請求。數據訪問總數取決於存儲設備帶寬和IOPS容量。團隊通過考慮這些成本設計存儲GAS計劃。
訪問和存儲任何狀態項都會產生與驗證整個區塊鏈狀態的數據結構相關的成本。此成本與不同狀態項的基數有關。還有一個與每個項目大小成正比的成本。
存儲GAS費 = 項目費 + (字節費 × 字節數)
讀、創建和寫
狀態項訪問分爲讀、創建和寫三種類型:
基於上述考慮,定義了6個GAS參數:
穩定GAS單位成本
每個操作和交易本身需要相對於存儲和執行成本的固定單位成本。固定GAS單位成本有助於保持GAS計劃不變,並與代幣市場價值脫鉤。團隊以約3位數精度表示GAS單位,轉帳交易成本約爲700個GAS單位。
社區參與
社區成員可以:
GAS成本調整
GAS計劃作爲鏈上配置存儲,可通過治理提案更改,並可無縫添加新指令或原生功能。隨時間推移,GAS參數可根據用戶反饋進行調整。
復雜的GAS公式更改需更新節點軟件,並通過新的GAS特徵標志區分。節點運營商採用新軟件後,需發布並批準治理提案以使用新版本。
未來工作
作爲Move首個可行GAS框架,未來工作方向包括: