# 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到期时自动删除未访问的状态项目,以鼓励开发者清理链上数据。