MOVE语言的GAS机制:打造Aptos 链上稳定廉价成本
在Aptos 的GAS 计划中,Aptos Labs 表明了自己制定GAS 的原则、流程、如何计算GAS、后期GAS 费调整以及积极接受Aptos 社群的建议
GAS 计量是Aptos和其他很多区块链的基本概念,它定义了执行和储存链上交易所需的计算和储存资源量的抽象计算。GAS 计划将链上所有执行所消耗的成本确定,用于计算执行交易期间使用的GAS 花
流程
为了有效的执行,我们在Aptos 链上的流程是:
定义我们的原则;
准备一个评估框架,以确定每个执行的价格;
为Move建立GAS 计量系统和安全GAS 代数;
将上游GAS 框架导入Aptos;
使GAS 框架具有储存意识;
最后,进一步细化GAS 计划
原则
我们的定义原则是:
操作的成本应该与网路上的可用资源直接相关(例如CPU、内存、网路、储存I/O 和空间使用等)。此外,当技术和流程改进后,GAS 所需的成本应该要随之降低
Gas 应该由链上治理设置,并且可以无缝配置
Gas 可以防止对网路中固定资源集的DoS攻击,并且可能需要根据网路情况通过治理建议迅速进行调整
Aptos 的GAS 价格反应了Aptos基金会加速增长和保持区块链人人可及的愿望
鼓励在设计中做出好的选择——例如优先考虑安全性、模块化、断言等事件
建立一个GAS 计划表
1.基本配置
GAS 计划中有几个组成部分与单个操作的细节无关,包括交易大小和最大GAS 单位(不同于用户在交易中指定的最大GAS量)
2、交易规模
对于大多数交易,交易规模可能在千字节的数量级。然而,Move模块的发布很容易就有几千字节,而Aptos框架大约有100 KB。大多数用户模块的大小一般在4KB到40KB之间。最初,我们将交易规模的值设置为32KB,但根据社群的反应,要求提供更多空间以简化应用程式开发,因此我们将交易规模调整为64KB
非常大规模的交易会导致整个网路的带宽成本提高,并可能对性能产生负面影响。如果被滥用,内存池会被鼓励忽略规模更大的交易,因此我们的方法是在最大规模交易的大小和可访问性之间取得平衡
3、最大GAS单位
GAS 计划中的的最大GAS 单位定义了一个交易最多可以执行多少操作。注意!这不同于用户在交易中指定的最大GAS量
GAS 计划的最大GAS单位直接影响到一个交易可以执行多长时间,将其设置过高可能会导致对区块链产生负面性能影响交易。例如,用户可能忘记在while循环中有一个增量,从而导致无限循环,这是一个常见错误。我们发现,即使我们进行了最大的框架升级,我们仍然不到gas 计划的最大gas 单位(设定为1,000,000)的90%
4、执行
为了评估执行成本,我们构建了一个基准框架,并在执行该框架时使用
在上述分析的帮助下,我们粗略估计了所有Move 指令和本机函数的相对成本。然而,我们注意到这个方法与内联函数存在一些问题:它们不会自动包含在调用者的计数中。我们还看到,这只发生在我们分析某些Move 指令时,我们可以通过将数位相加来解决这个问题
随后,通过考虑增强系统稳健性和安全性的编码范例,团队得出了最终执行的机器指令数量。这个数位依次与储存和最大GAS 单位进行权衡,以确定它们在GAS 计划中的当前值
5、储存
每当访问储存在持久储存中的账本状态项或数据时,Aptos 节点都会向储存设备发出读取或写入。每秒的数据访问总数取决于储存设备的带宽和IOPS 容量。与gas 调度计算部分的CPU 周期类似,数据访问是区块链用户在系统负载时通过费用市场竞争的瞬时稀缺性,此外,写入数据的磁盘占用成本在链上是永久的。Aptos 团队通过考虑这些成本来设计储存GAS 计划
访问和储存任何状态项都会产生与验证整个区块链状态的数据结构
稳定的GAS 单位成本
无论以APT 或法定货币的市场价值计算执行操作的成本如何,每个操作和交易本身都需要相对于储存和执行成本的固定单位成本。固定的gas 单位成本有助于保持gas 计划不变,并与APT 的自由市场价值脱钩。此外,正确选择GAS 单位的精确位数有助于保持GAS 计划不变。考虑到这一点,Aptos 团队以大约3 位数的精度来表示GAS 单位。因此,转账交易的成本大约是700 个gas 单位
如何调整GAS 成本?
GAS 计划作为链上配置被储存,但是可以通过Aptos 治理提案进行更改,并且可以无缝添加新指令或原生功能
GAS 计划被设计为可扩展的,允许通过治理提案对其进行升级。随着Aptos 和Aptos 社群不断改进Move VM 并纳入用户回馈,GAS 参数可以随着时间的推移进行调整
有时,GAS 公式可能需要超出链上配置的复杂更改。这些GAS 公式通常用Rust 编码,并通过链上GAS 特征标志来区分。要升级这些公式,必须使用新公式更新节点软体,并以不同的GAS 特征标志进行区分。然后必须发布节点软体并为节点运营商大量采用,最后,必须发布并批准治理提案才能使用新的gas 版本
未来的工作
这是Move的第一个可行的GAS 框架。它需要对Move VM和Aptos-Core进行大量修改。我们希望这项工作为今后的工作铺平道路:
降低执行成本,拥有一个真实的GAS 模型表明编译器和虚拟机在哪里有效率,团队可以改进其中的大部分以降低执行成本
多维GAS 计算,允许用户为执行和储存指定单独的预算。这样,用户就不必为因为程式码编写不佳的应用程式花费过长的执行时间,支付高昂的gas 价格。它还将允许对区块链端交易的最大Gas 价格进行更细粒度的定义;
缓解臃肿状态,目前没有简单的方法来缩小状态集,除了合约(或用户)显式删除事物。用户付钱删除数据可能会带来套利机会,用户在便宜的时候创建储存,在昂贵的时候删除它。Aptos 推迟了解决这一挑战,这可能会削弱开发人员删除链上数据的动力。该团队正在探索每个项目TTL 的概念,该概念将在TTL 到期时删除未访问的状态项目
欢迎志同道合的币圈人一起探讨~
感谢阅读,喜欢的朋友可以点个赞关注哦,我们下期再见!