# MOVE语言首个GAS设计:链上GAS费用计算方法探析MOVE语言的上一版本原本设计为无GAS运行,因此并未为GAS计划做好准备。近期某区块链项目为其MOVE语言链推出的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原生代币交易执行过程中将收取:1. 固定成本:固定基数加大额交易的额外费用2. 执行成本:用于执行Move指令3. 读取成本:用于从持久存储读取数据4. 写入成本:用于将数据写入持久存储最终交易费用 = 消耗的GAS总量 × GAS单价例如,若交易消耗670个GAS单位,用户指定GAS单价为100 Octa/单位,则最终费用为670 × 100 = 67000 Octa = 0.00067原生代币。若交易执行中耗尽GAS,发送方将按最大GAS量收费,交易所做更改将被恢复。## 建立GAS计划表### 基本配置GAS计划包含与单个操作细节无关的组成部分,如交易大小和最大GAS单位。### 交易规模大多数交易规模在KB级别,但模块发布可达几千字节。最初交易规模设为32KB,后根据社区反馈调整为64KB,以简化应用开发。大规模交易会增加网络带宽成本,可能影响性能。内存池会倾向忽略更大规模交易,因此需在最大规模和可访问性间平衡。### 最大GAS单位GAS计划的最大GAS单位定义了交易最多可执行的操作量。设置过高可能导致负面性能影响。目前即使进行最大框架升级,也不到最大GAS单位(1,000,000)的90%。### 执行通过基准框架和Valgrind分析Move VM,估算所有Move指令和本机函数的相对成本。考虑系统稳健性和安全性,得出最终执行的机器指令数量,与存储和最大GAS单位权衡确定GAS计划中的当前值。### 存储访问账本状态项或数据时,节点向存储设备发出读写。数据访问总数受存储设备带宽和IOPS限制。存储GAS计划考虑了这些成本。访问和存储任何状态项都产生与验证区块链状态数据结构相关的成本。费用与状态项基数和大小相关:存储GAS费 = 项目费 + (字节费 × 字节数)### 读、创建和写状态项访问分为读、创建或写三种类型:- 读操作最常见,仅受瞬时资源稀缺限制- 创建在状态存储中添加新项,成本最高- 写操作更新现有项,对更新项中的字节收取与创建相同的费用存储相关成本基于每笔交易评估,即使多次读写同一资源也只收取一次费用。### 稳定的GAS单位成本每个操作和交易本身需要相对于存储和执行成本的固定单位成本,有助于保持GAS计划不变。GAS单位精度约为3位,如转账交易成本约700个GAS单位。## 社区参与社区成员可以:1. 找出GAS计划不合理之处2. 参与社区讨论3. 就相关治理提案投票## GAS成本调整GAS计划作为链上配置存储,可通过治理提案更改。设计为可扩展,允许通过提案升级。随时间推移,GAS参数可根据用户反馈调整。复杂的GAS公式更改需更新节点软件,大规模采用后通过治理提案批准使用新版本。## 未来工作作为Move首个可行GAS框架,未来工作方向包括:1. 降低执行成本2. 多维GAS计算,允许用户为执行和存储指定单独预算3. 缓解臃肿状态,探索每个项目TTL概念,在TTL到期时删除未访问的状态项目
MOVE语言首创GAS计划:链上费用计算方法全解析
MOVE语言首个GAS设计:链上GAS费用计算方法探析
MOVE语言的上一版本原本设计为无GAS运行,因此并未为GAS计划做好准备。近期某区块链项目为其MOVE语言链推出的GAS计划,是MOVE语言首个GAS设计,被称为"一场冒险"。
该GAS计划阐明了制定GAS的原则、流程、计算方法、后期调整等内容,并表示欢迎社区建议。
GAS计量是许多区块链的基本概念,用于定义执行和存储链上交易所需的计算和存储资源量。GAS计划确定了链上所有执行的成本,用于计算交易执行期间的GAS花费。
流程
为实现有效执行,该项目链上流程包括:
原则
定义的原则包括:
计算GAS
用户提交交易时需指定:
交易执行过程中将收取:
最终交易费用 = 消耗的GAS总量 × GAS单价
例如,若交易消耗670个GAS单位,用户指定GAS单价为100 Octa/单位,则最终费用为670 × 100 = 67000 Octa = 0.00067原生代币。
若交易执行中耗尽GAS,发送方将按最大GAS量收费,交易所做更改将被恢复。
建立GAS计划表
基本配置
GAS计划包含与单个操作细节无关的组成部分,如交易大小和最大GAS单位。
交易规模
大多数交易规模在KB级别,但模块发布可达几千字节。最初交易规模设为32KB,后根据社区反馈调整为64KB,以简化应用开发。
大规模交易会增加网络带宽成本,可能影响性能。内存池会倾向忽略更大规模交易,因此需在最大规模和可访问性间平衡。
最大GAS单位
GAS计划的最大GAS单位定义了交易最多可执行的操作量。设置过高可能导致负面性能影响。目前即使进行最大框架升级,也不到最大GAS单位(1,000,000)的90%。
执行
通过基准框架和Valgrind分析Move VM,估算所有Move指令和本机函数的相对成本。考虑系统稳健性和安全性,得出最终执行的机器指令数量,与存储和最大GAS单位权衡确定GAS计划中的当前值。
存储
访问账本状态项或数据时,节点向存储设备发出读写。数据访问总数受存储设备带宽和IOPS限制。存储GAS计划考虑了这些成本。
访问和存储任何状态项都产生与验证区块链状态数据结构相关的成本。费用与状态项基数和大小相关:
存储GAS费 = 项目费 + (字节费 × 字节数)
读、创建和写
状态项访问分为读、创建或写三种类型:
存储相关成本基于每笔交易评估,即使多次读写同一资源也只收取一次费用。
稳定的GAS单位成本
每个操作和交易本身需要相对于存储和执行成本的固定单位成本,有助于保持GAS计划不变。GAS单位精度约为3位,如转账交易成本约700个GAS单位。
社区参与
社区成员可以:
GAS成本调整
GAS计划作为链上配置存储,可通过治理提案更改。设计为可扩展,允许通过提案升级。随时间推移,GAS参数可根据用户反馈调整。
复杂的GAS公式更改需更新节点软件,大规模采用后通过治理提案批准使用新版本。
未来工作
作为Move首个可行GAS框架,未来工作方向包括: