声明:本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表MarsBit官方立场。
边肖:记得要集中注意力。
来源:Aptos实验室
原标题:Aptos天然气计划的制定
Aptos实验室在10月14日公布了Aptos的GAS计划,因为之前版本的MOVE语言实际上是打算在没有GAS的情况下运行的,所以没有做好GAS计划的准备。所以Aptos实验室这次为Aptos建立的GAS计划是MOVE语言的第一个GAS设计,官方称之为“一次冒险”。
在Aptos的燃气计划中,Aptos Labs展示了自己的原理、流程、燃气如何计算、后期燃气费的调整以及积极接受Aptos社区的建议。本文由Aptos Global编译。
气体计量是Aptos和许多其他区块链的基本概念。它定义了在链上执行和存储事务所需的存储资源量的计算和抽象计算。GAS计划确定了链中所有执行的成本,用于计算事务执行期间使用的GAS成本。
为了有效地执行流程,我们在Aptos链中的流程是:
1)明确我们的原则;
2)准备评估框架,以确定每次执行的价格;
3)建立燃气计量系统和安全用气代数;
4)将上游天然气框架导入Aptos;
5)使气体框架具有存储意识;
6)最后,进一步细化用气方案。
我们的定义原则是:
1.运营成本应该与网络上的可用资源(如CPU、内存、网络、存储I/O和空间使用等)直接相关。).另外,技术和工艺改进了,燃气的成本也要相应降低。
2.Gas应该由链上治理来设置,并且可以无缝配置。
3.Gas可以防止对网络中固定资源集的DoS攻击,可能需要根据网络情况通过治理建议快速调整。
4.Aptos的天然气价格反映了Aptos基金会加速增长并让每个人都能访问区块链的愿望。
5.鼓励设计中的好选择。比如3354,优先考虑安全性、模块化、断言等事件。
计算天然气当用户提交交易时,他们还必须在交易中指定两个数量:
最大气体量:以气体单位测量。这是用户(即,交易发送者)愿意花费来执行交易的气体单位的最大数量。
单价:以每单位气体的八进制计算,其中1八进制=0.0000001 apt (=$10 {-8} $)。这是用户愿意支付的气价。
在执行期间,将收集事务:
1)固定成本,固定基数加上大额交易的额外成本。
2)执行成本,用于执行Move指令。
3)读取成本,用于从持久存储中读取数据。
4)写入成本,用于将数据写入持久性存储。
最终的交易成本可以通过总用气量(用气单位)乘以气的单价来计算。例如,一次交易消耗670个气单位,用户在交易中指定的天然气单价为100 Octa单位,则最终交易成本为670 * 100=67000 Octa=0.00067 APT。
如果一个交易在执行过程中用完了gas,那么发送方将按照gas的最大数量进行收费,并且这个交换所做的所有更改都将被恢复。
建立燃气明细表1、基本配置
燃气计划中有几个组成部分与单次操作的细节无关,包括交易规模和最大燃气单位(不同于用户在交易中指定的最大燃气量)。
2.交易规模
对于大多数事务,事务大小可能在千字节的数量级。然而,Move模块的发布很容易是几千字节,而Aptos框架大约是100 KB。大多数用户模块的大小一般在4KB到40KB之间。最初,我们将事务大小设置为32KB,但是根据社区的反应,我们要求更多的空间来简化应用程序开发,因此我们将事务大小调整为64KB。
非常大规模的事务会增加整个网络的带宽成本,并可能对性能产生负面影响。如果被滥用,内存池将被鼓励忽略较大的事务,所以我们的方法是在最大事务的大小和可访问性之间取得平衡。
3.最大气体单位
GAS计划中的最大GAS单位定义了一个事务可以执行的最大操作数。立正!这与用户在交易中指定的最大气体量不同。
GAS计划的最大GAS单位直接影响交易可以执行多长时间。将其设置得太高可能会导致对区块链产生负面性能影响的交易。例如,用户可能会忘记while循环中有一个增量,从而导致无限循环,这是一个常见的错误。我们发现,即使我们进行了最大的框架升级,我们仍然没有达到gas计划的最大gas单位(设置为1,000,000)的90%。
4.执行
为了评估实施成本,我们构建了一个基准框架,并将其用于框架的实施。
valgrind(https://valgrind.org/)分析移动虚拟机。它的输出是一组带注释的源代码,告诉我们每行代码产生多少条机器指令。
在上述分析的帮助下,我们粗略估计了所有移动指令和本机函数的相对成本。然而,我们注意到这个方法对于内联函数有一些问题:它们不会自动包含在调用者的计数中。我们也看到只有在分析一些Move指令的时候才会出现这种情况,我们可以通过加数来解决这个问题。
然后,通过考虑增强系统健壮性和安全性的编码示例,团队得到了最终执行的机器指令数量。这个数字依次与存储和最大气体单位进行权衡,以确定它们在气体计划中的当前值。
5.储存;储备
每当访问存储在永久存储器中的帐簿状态项目或数据时,Aptos节点将向存储设备发出读取或写入命令。每秒的数据访问总数取决于存储设备的带宽和IOPS容量。类似于燃气调度计算部分的CPU周期,数据访问是系统加载时区块链用户通过费用市场竞争的瞬时稀缺性。此外,写入数据的磁盘占用成本在链中是永久的。Aptos团队通过考虑这些成本设计了储气计划。
并且访问和存储任何状态项将生成和验证整个区块链状态的数据结构。
水母默克尔树:
3359 github . com/aptos-labs/aptos-core/blob/main/developer-docs-site/static/papers/水母-merkle-tree/2021-01-14.pdf)。这个成本与不同状态项的基数有关($2 {256} $)。另一个成本与每个项目的规模成正比。对状态项目进行操作的成本为(下一节描述的例外情况除外):
储气费=项目费(字节费*字节数)
读取、创建和写入对状态项目的任何访问都属于以下三种类型之一:读取、创建或写入。收取访问费和字节费,如上式所示。
阅读是最常见的操作,只是受限于瞬间资源的稀缺。因此,根据磁盘IOPS(项目成本)和参考硬件规格的带宽容量来校准读取成本。
Create是将新项目添加到状态存储中。因此,create增加了认证数据结构,使得一切都变得更加昂贵,因此成本是最高的。创建成本根据网络拥有的参考磁盘空间进行校准。所以,用items (item_fee)和byte(byte _ fee)填充磁盘需要耗费大量的气体。
写操作更新状态存储中的现有项目。因此,写操作不会在认证数据结构中产生额外的开销。但是,通过将现有条目修改为更大的字节,磁盘仍然可能被损坏。因此,我们对更新项中的字节收取与创建时相同的费用。
应该注意的是,与存储相关的成本是基于每个事务进行评估的:即使多次读/写相同的资源,您也只需支付一次。
基于以上考虑,我们定义了气体的六个参数,它们构成了气体总成本的一部分。见下文:
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相同
欲了解更多信息,请访问
https://aptos.dev/concepts/base-gas/#storage-gas。
稳定的天然气单位成本不管执行操作的成本是按APT的市值还是法定货币计算的,每一项操作和交易本身都需要一个相对于储存和执行成本的固定单位成本。天然气的固定单位成本有助于保持天然气计划不变,并与APT的自由市场价值脱钩。此外,正确选择用气单位的准确数字有助于保持用气计划不变。考虑到这一点,Aptos团队以大约3位数的精度表示气体单位。因此,转让交易的成本约为700个燃气单位。
社区参与尽管我们在天然气项目上投入了大量的精力,但它远非完美。作为一个社区项目,Aptos社区成员可以选择:
1)根据自己的经验,找出燃气方案不合理的地方;
2)说出您对天然气项目的担忧,并参与社区讨论。
3)对Aptos上与GAS相关的治理提案进行表决。
燃气费用怎么调整?GAS计划存储为链上配置,但是可以通过Aptos治理提案进行更改,并且可以无缝地添加新的指令或本机功能。
天然气计划被设计成可扩展的,允许它通过治理方案升级。随着Aptos和Aptos社区不断改进Move VM并纳入用户反馈,GAS参数可以随着时间的推移进行调整。
有时,气体配方可能需要复杂的变化,超出了链上的配置。这些气体分子式通常用铁锈来编码,通过链上气体的特征标记来区分。为了升级这些公式,节点软件必须用新的公式更新,并通过不同的气体特性进行区分。然后节点软件必须发布并被节点运营商广泛采用。最后,在可以使用新的gas版本之前,必须发布和批准治理提案。
未来工作这是Move的第一个可行的GAS框架。移动VM和Aptos-Core需要大量的修改。我们希望这项工作将为今后的工作铺平道路:
1)降低执行成本。拥有一个真实的GAS模型可以显示编译器和虚拟机的效率,团队可以改进其中的大部分以降低执行成本。
2)多维气体计算,允许用户为执行和存储指定单独的预算。这样用户就不用花太长的执行时间,也不用为代码编写很差的应用付出高昂的气价。它还将允许更精细地定义区块链方交易的最高天然气价格;
3)缓解臃肿状态。目前,除了契约(或用户)显式删除东西,没有简单的方法来减少状态集。用户付费删除数据可能带来套利机会。用户在存储便宜时创建存储,在存储贵时删除存储。Aptos延迟解决这个挑战,可能会削弱开发者删除链上数据的动力。该团队正在为每个项目探索TTL的概念,当TTL过期时,将删除未访问的状态项。
编辑:费利克斯