MOVE首创GAS设计:链上资源消耗计算方法解析

robot
摘要生成中

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. 操作成本应与网络可用资源直接相关,并随技术进步而降低
  2. GAS应由链上治理设置,可无缝配置
  3. GAS可防止DoS攻击,可根据网络情况快速调整
  4. GAS价格应反映加速增长和保持区块链可及性的愿景
  5. 鼓励在设计中做出好的选择,如优先考虑安全性、模块化等

GAS计算

用户提交交易时须指定:

  • 最大GAS数量:用户愿意为执行交易花费的最大GAS单位数
  • GAS单价:以每单位GAS的八进制计算,1八进制=0.00000001 APT

交易执行过程中将收取:

  1. 固定成本
  2. 执行Move指令的成本
  3. 从持久存储读取数据的成本
  4. 向持久存储写入数据的成本

最终交易费用 = 消耗的GAS总量 × GAS单价

例如,若交易消耗670个GAS单位,用户指定的GAS单价为100 Octa/单位,则最终费用为670 × 100 = 67000 Octa = 0.00067 APT。

如交易执行过程中耗尽GAS,发送方将按最大GAS量收费,该交易所做更改将被恢复。

GAS计划表的建立

  1. 基本配置

GAS计划包含与单个操作无关的组成部分,如交易大小和最大GAS单位。

  1. 交易规模

大多数交易规模在千字节级别。Move模块发布可达几千字节,某框架约100 KB。用户模块通常在4-40 KB之间。交易规模值最初设为32 KB,后根据社区反馈调整为64 KB。

过大规模交易会增加网络带宽成本并可能影响性能。内存池可能会忽略规模较大的交易,因此需在最大规模和可访问性间取得平衡。

  1. 最大GAS单位

GAS计划中的最大GAS单位定义了单个交易可执行的最多操作数。设置过高可能对区块链性能产生负面影响。经测试,即使进行最大框架升级,也仅使用不到90%的最大GAS单位(设定为1,000,000)。

  1. 执行

通过构建基准框架并使用Valgrind分析Move VM来评估执行成本。输出为带注释的源代码,显示每行代码产生的机器指令数。

据此粗略估算所有Move指令和本机函数的相对成本。注意到与内联函数存在一些问题,可通过数字相加解决。

最终,考虑增强系统稳健性和安全性的编码范例,得出执行的机器指令数量。将此数字与存储和最大GAS单位权衡,确定GAS计划中的当前值。

  1. 存储

访问账本状态项或数据时,节点会向存储设备发出读写请求。每秒数据访问总数取决于存储设备带宽和IOPS容量。数据访问是用户在系统负载时通过费用市场竞争的瞬时稀缺资源。写入数据的磁盘占用成本在链上是永久的。

访问和存储任何状态项都会产生与验证整个区块链状态的数据结构相关的成本。此成本与不同状态项的基数有关($2^{256}$)。还有一个成本与每个项目的大小成正比。

对状态项操作的费用(下节描述的例外情况除外)为:

存储GAS费 = item_fee + (byte_fee × bytes)

读、创建和写

状态项访问分为三种类型:读、创建或写。访问按项目费和字节费收费。

读操作最常见,仅受瞬时资源稀缺限制。读取费用根据磁盘IOPS和参考硬件规格的带宽容量校准。

创建操作在状态存储中添加新项,增加了身份验证数据结构成本,因此最昂贵。创建费用根据网络拥有的参考磁盘空间校准。

写操作更新现有项,不会在身份验证数据结构中产生额外开销。但修改现有条目至更大字节数仍可能占用磁盘,因此对更新项中的字节收取与创建相同的费用。

存储相关成本基于每笔交易评估:即使多次读/写同一资源,也只收取一次费用。

基于上述考虑,定义了6个GAS参数构成总费用:

  • per_item_read:根据IOPs校准
  • per_byte_read:根据实际带宽校准
  • per_item_create:根据目标总项目校准
  • per_byte_create:根据目标总大小校准(每项目含首个1KB)
  • per_item_write:与per_item_read相同
  • per_byte_write:与per_byte_create相同

稳定的GAS单位成本

每个操作和交易本身需要相对于存储和执行成本的固定单位成本,无论以APT或法定货币计算的市场价值如何。固定GAS单位成本有助于保持GAS计划不变,并与APT自由市场价值脱钩。正确选择GAS单位精确位数有助于保持GAS计划稳定。考虑到这点,GAS单位以约3位数精度表示。因此,转账交易成本约为700个GAS单位。

社区参与

社区成员可以:

  1. 找出GAS计划不合理之处
  2. 提出担忧并参与讨论
  3. 就GAS相关治理提案进行投票

GAS成本调整

GAS计划作为链上配置存储,可通过治理提案更改,并可无缝添加新指令或原生功能。

GAS计划设计可扩展,允许通过治理提案升级。随着不断改进和纳入用户反馈,GAS参数可随时间调整。

有时GAS公式可能需要复杂更改。这些公式通常用Rust编码,通过链上GAS特征标志区分。升级这些公式需更新节点软件,大量采用,并通过治理提案批准使用新GAS版本。

未来工作

作为Move首个可行GAS框架,未来工作方向包括:

  1. 降低执行成本:利用真实GAS模型显示编译器和虚拟机效率,改进以降低执行成本

  2. 多维GAS计算:允许用户为执行和存储指定单独预算,避免因代码质量问题支付高昂GAS价格

  3. 缓解臃肿状态:探索每个项目TTL概念,在TTL到期时删除未访问的状态项目

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 5
  • 分享
评论
0/400
rugged_againvip
· 9小时前
讲这些不如直接说gas能降多少?
回复0
MetaverseMigrantvip
· 9小时前
啧 这gas还能再复杂点不
回复0
NewDAOdreamervip
· 9小时前
反着收钱也是coder一生的痛啊
回复0
¯\_(ツ)_/¯vip
· 9小时前
move真牛哇 搞复杂了?
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)