关于区块链:Aptos概念Gas费和交易手续费

68次阅读

共计 2599 个字符,预计需要花费 7 分钟才能阅读完成。

概念

在 Aptos 主网络上,想要实现任意一笔交易,都须要缴纳解决手续费。这笔手续费,会被分发给客户端利用、币权质押人、节点解决人或者投票人。交易手续费的多少,取决于你在链上耗费的计算和存储资源:

  1. 在链上解决交易
  2. 把已验证的交易记录流传到整个分布式网络
  3. 把交易记录写入链上分布式存储

    概念上,这个手续费跟咱们居家缴纳的水电费很像

交易优先级

如果你违心付出更多手续费,就能够晋升交易在链上的优先级。对于本人的交易,你在提交时,就能够给一个高出市场的价格。这能够让你的交易在优先级列表中晋升权重,从而更快失去解决。

Gas 单位

你能够创立简略而便宜的交易,也能够创立简单又贵的交易,后者显然要耗费更多的计算和存储资源。无论哪种状况,你都须要领取一笔足够实现交易的手续费。这就是 gas 这个名称的由来。零碎是这样解决的:
Aptos 链上,一个单位的 gas 代表了资源的根本生产单元。一个单位的 gas 蕴含了:

  • 计算资源
  • 存储资源

当你的交易在链上执行的时候,Aptos 链不会别离统计每种资源耗费了多少,而是对立表白为生产了多少个 gas 单位。
详见 根底 Gas 是如何工作的,这份文档形容了 gas 费的类型和优化计划。

Gas 费

Aptos 的治理规定,会设置一个最小 gas 单位价格,不过真正的最初单位价格,是由市场决定的。原理见 以太坊 Gas 追踪,这里能够看到以太坊的 Gas 费是如何随着市场价格变动的。

1 个单位的 gas,是个无穷纲数,用整型示意。一笔交易耗费的总 gas 单位,取决于交易的复杂度。另一方面,Gas 价格是以 Aptos 链上的原生币(Octas)来示意的。想理解交易如何被提交到链,能够查看 交易与状态 文档。

Aptos 链上的 Gas 和交易

任何一笔提交到链上的交易,都必须蕴含以下对于 Gas 的字段:

  • max_gas_amount:发送者违心为这笔交易付出的最大 gas 单元数。它决定了该交易能耗费的最大可计算资源
  • gas_price:发送者违心出的 gas 单位价格,用 Octa 示意:

    • 1 Octa = 10-8 APT
    • APT 即 Aptos 链上币

交易执行的总 gas 费,能够这样计算:
总耗费的 gas 单元数 * gas 单位价格
当然如果总 gas 费超过了 max_gas_amount 中定义的数,交易就被勾销了。所以最终,向客户端收取的最高费用,也就是gas_price * max_gas_amount

链上治理相干的 Gas 参数

Aptos 链上治理,会设置以下这些跟 Gas 相干的参数:

  • txn.maximum_numberof_gas_units:一笔交易中,能够破费的最大 gas 单位数(也就是客户端可能设置的 max_gas_amount 这个参数的下限)。这个设置,保障了在做动静价格调整的时候,总破费不会超过上限值。
  • txn.min_transaction_gas_units:能够破费的最小 gas 单位数,也就是客户端设置的 max_gas_amount 这个参数的上限。

    存储资源的动静 gas 价格

    Aptos 针对存储资源的价格,是动静调整的。这就意味着,随着 Aptos 链上状态数据库越填越满,存储的 gas 耗费(gas_used)会呈指数级增长。在 100% 的利用率下,存储老本会变得高大 100 倍。不过,有理由置信,验证者们将会应用更大、更便宜的存储设备,来缓解指数增长的老本。
    动静价格能够保障 Aptos 网络面临最蹩脚的情景仍然可用。不过,咱们预计在陷入这高老本的场面之前,会通过降级网络来取得更好的后果。

    示例

    示例 1:账户余额 vs 交易费

    发送者账户必须有短缺的资金,来缴纳交易费
    如果,你试图转走账户中所有的钱,以至于余额不足以领取交易费了,Aptos 链会反馈“交易失败”。也就是说,你不可能把账户中的钱转出为 0。

    示例 2:交易数额 vs 交易费

    交易费和交易数额无关
    有一笔交易,叫它“交易 A”吧,筹备把 1 千 个币,从一个账户转到另一个账户;同时有另外一笔“交易 B”,筹备把 10 万 个币,从一个账户转到另一个账户。假如它们简直同时产生,那么他们的交易费就简直是一样的。

    预估 gas 费

    能够通过模仿一笔交易的执行,来预估须要破费的 gas 费。在模仿交易的时候,返回的后果示意了,在过后那个 时刻 ,那个 特定 的链 状态 下,须要破费 gas 的精确数量。Gas 费会随着链的状态变动而变动。因而,所有模仿进去的后果,都是预估。在设置最大 gas 费的时候,应该在预估后果的根底上,加上一个你能承受的量。

    模仿交易来预估 gas 费

    能够通过SimulateTransactionAPI 来模仿交易。这个 API 会执行你的交易。

    留神模仿交易的 签名 必须为全 0,以预防某些人应用真正的签名。

模仿交易的的时候,有以下两个标记位参数:

  1. estimate_gas_unit_price:这个标记就批示 API 返回 gas_unit_price,就像调用 estimate_gas_price 这个 API 返回的后果一样。
  2. estimate_max_gas_amount:这个标记提醒 API 返回可能须要破费的最大 gas 费,并且通过模仿交易返回一个“理论 gas 费”(gas_used

    模仿步骤

    通过模仿交易,获取正确 gas 费设置的步骤如下:

  3. estimate_gas_unit_priceestimate_max_gas_amount这个标记都设置为true,模仿交易执行,并取得预估值。
  4. 应用返回的 gas_unit_price 值,作为新交易的gas_unit_price
  5. 把返回的gas_used * gas_unit_price,看作交易成本的上限。
  6. 要取得交易成本的下限,首先取返回的 max_gas_amount 中的最小值,而后计算 gas_used * safety factor(安全系数)。在 Aptos CLI 中,缺省安全系数为 1.5。把这个值当做你要真正提交交易的max_gas_amount 参数。请留神,交易费用的下限是max_gas_amount * gas_unit_price,也就是说,这是交易的发送者被收取的最高费用。
  7. 此时你曾经取得了提交交易须要的两个参数:

    1. gas_unit_price:从模仿交易的返回值间接失去
    2. max_gas_amountgas_used * safety factor中的最小值,或者,间接取回复的max_gas_amount
  8. 如果你须要扭转交易的优先级,就能够通过调整 gas_unit_price 来实现:调高价格进步优先级;调低价格升高优先级。

我的语雀原文链接在这里

正文完
 0