# 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框架,未来工作方向包括: