# MOVE語言首個GAS設計:鏈上GAS花費計算方法解析MOVE語言的早期版本原本計劃在無GAS的環境下運行,因此並未爲GAS機制做好準備。近期,某公鏈團隊爲其區塊鏈設計了MOVE語言的首個GAS方案,這被稱爲一次"冒險"嘗試。在這個GAS方案中,制定團隊闡述了設計原則、實施流程、GAS計算方法、後續調整機制,並表示歡迎社區提供建議。GAS計量是許多區塊鏈的基本概念,它抽象地定義了執行和存儲鏈上交易所需的計算和存儲資源量。GAS方案確定了鏈上所有執行操作的成本,用於計算交易執行期間的GAS花費。### 實施流程爲了有效執行,該鏈上的流程包括:1. 定義設計原則2. 準備評估框架,確定每個執行操作的價格3. 爲Move建立GAS計量系統和安全GAS代數4. 將上遊GAS框架導入區塊鏈5. 使GAS框架具備存儲感知能力6. 進一步優化GAS方案### 設計原則1. 操作成本應與網路可用資源(如CPU、內存、網路、存儲I/O和空間使用等)直接相關。隨着技術和流程改進,GAS成本應相應降低。2. GAS應由鏈上治理設置,並可無縫配置。3. GAS可防止對網路固定資源的DoS攻擊,並可根據網路情況通過治理迅速調整。4. GAS價格應反映加速增長和保持區塊鏈普及性的願景。5. 鼓勵在設計中做出優秀選擇,如優先考慮安全性、模塊化和斷言等。### GAS計算方法用戶提交交易時需指定兩個數值:- 最大GAS數量:用戶願意爲執行交易支付的最大GAS單位數。- GAS單位價格:以每單位GAS的八進制計算,1八進制=0.00000001原生代幣。交易執行過程中將收取:1. 固定成本:基礎費用加上大額交易的額外費用2. 執行成本:用於執行Move指令3. 讀取成本:從持久存儲讀取數據的費用4. 寫入成本:將數據寫入持久存儲的費用最終交易費用 = 消耗的GAS總量 × GAS單價例如,一筆交易消耗670個GAS單位,用戶指定的GAS單價爲100 Octa/單位,則最終費用爲670 × 100 = 67000 Octa = 0.00067原生代幣。如果交易執行中耗盡GAS,發送方將按最大GAS量收費,且所有更改將被撤銷。### GAS方案詳解1. 基本配置GAS方案包含一些與單個操作無關的組成部分,如交易大小和最大GAS單位。2. 交易規模大多數交易規模在千字節級別。Move模塊發布可能達到幾千字節,而某框架約爲100KB。用戶模塊通常在4KB到40KB之間。初始交易規模設爲32KB,後根據社區反饋調整爲64KB,以簡化應用開發。過大的交易會增加網路帶寬成本並可能影響性能。爲平衡規模和可訪問性,內存池可能會忽略過大的交易。3. 最大GAS單位GAS方案中的最大GAS單位定義了單個交易可執行的最大操作數。這與用戶指定的最大GAS量不同。設置過高可能導致性能問題,如無限循環。目前,即使進行最大規模的框架升級,也僅使用了最大GAS單位(設爲1,000,000)的不到90%。4. 執行成本評估團隊使用基準框架和Valgrind分析工具評估執行成本,得出Move指令和原生函數的相對成本。通過考慮增強系統穩健性和安全性的編碼範例,確定了最終執行的機器指令數量。5. 存儲成本存儲GAS計劃考慮了數據訪問的帶寬、IOPS容量以及永久存儲成本。訪問任何狀態項都涉及與驗證區塊鏈狀態相關的成本。存儲GAS費用計算公式爲:存儲GAS費 = 項目費 + (字節費 × 字節數)6. 讀取、創建和寫入操作- 讀取:最常見操作,根據磁盤IOPS和帶寬容量校準費用。- 創建:在狀態存儲中添加新項,成本最高,根據網路磁盤空間校準。- 寫入:更新現有項,字節費用與創建相同。存儲相關成本基於每筆交易評估,即使多次讀/寫同一資源,也只收取一次費用。### 社區參與作爲社區項目,成員可以:1. 指出GAS方案中不合理之處2. 提出擔憂並參與討論3. 對相關治理提案進行投票### GAS成本調整GAS方案作爲鏈上配置存儲,可通過治理提案更改。它被設計爲可擴展的,允許通過治理升級。隨着技術進步和用戶反饋,GAS參數可隨時間調整。復雜的GAS公式更改可能需要更新節點軟件,並通過新的GAS特徵標志區分。這需要節點運營商廣泛採用新版本,並通過治理提案批準使用。### 未來工作作爲MOVE語言的首個GAS框架,該設計爲未來工作奠定了基礎:1. 降低執行成本:通過改進編譯器和虛擬機效率。2. 多維GAS計算:允許用戶爲執行和存儲指定單獨預算,實現更細粒度的最大GAS價格定義。3. 緩解狀態膨脹:探索每個項目TTL概念,在TTL到期時自動刪除未訪問的狀態項目,以鼓勵開發者清理鏈上數據。
MOVE語言首創GAS機制:鏈上資源計費方案全解析
MOVE語言首個GAS設計:鏈上GAS花費計算方法解析
MOVE語言的早期版本原本計劃在無GAS的環境下運行,因此並未爲GAS機制做好準備。近期,某公鏈團隊爲其區塊鏈設計了MOVE語言的首個GAS方案,這被稱爲一次"冒險"嘗試。
在這個GAS方案中,制定團隊闡述了設計原則、實施流程、GAS計算方法、後續調整機制,並表示歡迎社區提供建議。
GAS計量是許多區塊鏈的基本概念,它抽象地定義了執行和存儲鏈上交易所需的計算和存儲資源量。GAS方案確定了鏈上所有執行操作的成本,用於計算交易執行期間的GAS花費。
實施流程
爲了有效執行,該鏈上的流程包括:
設計原則
操作成本應與網路可用資源(如CPU、內存、網路、存儲I/O和空間使用等)直接相關。隨着技術和流程改進,GAS成本應相應降低。
GAS應由鏈上治理設置,並可無縫配置。
GAS可防止對網路固定資源的DoS攻擊,並可根據網路情況通過治理迅速調整。
GAS價格應反映加速增長和保持區塊鏈普及性的願景。
鼓勵在設計中做出優秀選擇,如優先考慮安全性、模塊化和斷言等。
GAS計算方法
用戶提交交易時需指定兩個數值:
交易執行過程中將收取:
最終交易費用 = 消耗的GAS總量 × GAS單價
例如,一筆交易消耗670個GAS單位,用戶指定的GAS單價爲100 Octa/單位,則最終費用爲670 × 100 = 67000 Octa = 0.00067原生代幣。
如果交易執行中耗盡GAS,發送方將按最大GAS量收費,且所有更改將被撤銷。
GAS方案詳解
GAS方案包含一些與單個操作無關的組成部分,如交易大小和最大GAS單位。
大多數交易規模在千字節級別。Move模塊發布可能達到幾千字節,而某框架約爲100KB。用戶模塊通常在4KB到40KB之間。初始交易規模設爲32KB,後根據社區反饋調整爲64KB,以簡化應用開發。
過大的交易會增加網路帶寬成本並可能影響性能。爲平衡規模和可訪問性,內存池可能會忽略過大的交易。
GAS方案中的最大GAS單位定義了單個交易可執行的最大操作數。這與用戶指定的最大GAS量不同。設置過高可能導致性能問題,如無限循環。目前,即使進行最大規模的框架升級,也僅使用了最大GAS單位(設爲1,000,000)的不到90%。
團隊使用基準框架和Valgrind分析工具評估執行成本,得出Move指令和原生函數的相對成本。通過考慮增強系統穩健性和安全性的編碼範例,確定了最終執行的機器指令數量。
存儲GAS計劃考慮了數據訪問的帶寬、IOPS容量以及永久存儲成本。訪問任何狀態項都涉及與驗證區塊鏈狀態相關的成本。存儲GAS費用計算公式爲:
存儲GAS費 = 項目費 + (字節費 × 字節數)
存儲相關成本基於每筆交易評估,即使多次讀/寫同一資源,也只收取一次費用。
社區參與
作爲社區項目,成員可以:
GAS成本調整
GAS方案作爲鏈上配置存儲,可通過治理提案更改。它被設計爲可擴展的,允許通過治理升級。隨着技術進步和用戶反饋,GAS參數可隨時間調整。
復雜的GAS公式更改可能需要更新節點軟件,並通過新的GAS特徵標志區分。這需要節點運營商廣泛採用新版本,並通過治理提案批準使用。
未來工作
作爲MOVE語言的首個GAS框架,該設計爲未來工作奠定了基礎:
降低執行成本:通過改進編譯器和虛擬機效率。
多維GAS計算:允許用戶爲執行和存儲指定單獨預算,實現更細粒度的最大GAS價格定義。
緩解狀態膨脹:探索每個項目TTL概念,在TTL到期時自動刪除未訪問的狀態項目,以鼓勵開發者清理鏈上數據。