Aptos开发者文档
  • Aptos 开发者文档
  • 开发环境准备
  • 开发者教程
    • 你的第一笔交易
    • 你的第一个 Move 模块
    • 第一个代币
    • 你的第一个 DApp
    • 第一个 NFT
  • 概念
    • 交易和状态
    • 帐户
    • 事件
    • 燃料和交易费用
    • 验证
    • 全节点
    • 验证节点
    • 节点网络和同步
    • 质押
    • 治理
  • Guides 指南
    • 交易的生命周期
    • 创建签名交易
    • 与 Aptos 区块链交互
    • 安装 Petra 扩展
    • 构建钱包扩展
    • 系统集成商指南
    • 基于本地测试网的开发流程
    • Move 教程
      • 在 Aptos 上使用 Move 语言开发
      • Move 包更新
      • Move 事务测试
  • 节点
    • 不同环境下的 Aptos 区块链部署
    • AIT-3
      • AIT-3的新功能
      • AIT-3的参与步骤
      • 节点要求
      • 节点活跃度标准
      • 链接到Aptos激励测试网
      • 激励测试网的附加文档
    • Validators
      • 在 AWS 上运行
      • 在 Azure 上运行
      • 在 GCP 上运行
      • 使用 Docker
      • 使用 Aptos-core 源代码
    • FullNode for Devnet
      • 用Aptos源或Docker来搭建全节点
      • 通过新版本来更新全节点
      • 全节点的网络身份
      • 全节点设置故障排除
      • 在 CGP 上运行全节点
    • 本地测试网
      • 用 CLI 运行本地测试网
      • 用验证器运行本地测试网
    • 节点健康检测器
    • Aptos 节点健康检查器
  • SDKs
    • Python SDK
    • Typescript
      • Typescript SDK
      • Typescript SDK 概览
    • Rust SDK
  • Aptos CLI
    • 安装 Aptos CLI
    • 使用 Aptos CLI
  • Telemetry
    • Telemetry 遥测
  • Aptos White Paper
  • Glossary 术语表
    • Glossary 词汇表
Powered by GitBook
On this page
  • 介绍
  • 资源使用类型
  • 使用 gas 计算交易费用
  • 使用 gas 确定交易的优先级
  • 核心设计原则
  1. 概念

燃料和交易费用

当在 Aptos 区块链上执行交易时,会以 gas 跟踪和衡量资源使用情况。

介绍

Gas 确保在 Aptos 区块链上运行的所有 Move 程序最终终止。这限制了所使用的计算资源。 Gas 还提供了收取交易费用的能力,部分基于执行期间消耗的资源。

当客户向 Aptos 区块链提交要执行的交易时,它包含指定的:

  • 最大燃料数量:可用于执行交易的最大gas单位数量。这限制了事务可以消耗的计算资源。

  • 燃料价格:区块链实用代币中的gas价格。 Gas 价格是一种将 Gas 单位(虚拟机消耗的资源的抽象单位)转换为区块链实用代币中的交易费用的方法。

向客户收取的交易费用最多为燃料价格*最大燃料数量

随着资源供需的波动,gas 价格以及交易费用应遵循 Aptos 区块链的市场特征。

资源使用类型

为了让虚拟机 (VM) 执行交易,gas 系统需要跟踪交易使用的主要资源。这些分为三个资源维度:

  1. 执行交易的计算成本。

  2. 通过 Aptos 生态系统传播交易的网络成本。

  3. Aptos 区块链交易执行过程中创建和使用的数据的存储成本。

这些资源中的前两个(计算和网络)是短暂的。但是,第三个(存储)是长久的。一旦分配了数据,该数据就会一直存在,直到它被删除。在帐户的情况下,数据无限期地存在。

这些资源维度中的每一个都可以独立波动。但是,也只有一个 gas 价格。因此,这意味着必须正确跟踪每个维度的 gas 使用量,因为 gas 价格仅作为总 gas 使用量的一个乘数。因此,交易的 gas 使用量需要与执行交易相关的实际成本密切相关。

使用 gas 计算交易费用

当您发送交易时,执行的交易费用是gas价格乘以虚拟机为该交易计算的资源使用量。 在交易流程的不同时间点,对资源使用的不同方面进行收费。下图详细介绍了交易流程的基础知识和与gas相关的逻辑:

图片1.0: 燃料和交易流程

在图中,序言和尾声部分都用相同的颜色标记。这是因为交易流程中的这些部分需要不计量:

  • 在序言(prologue)中,不知道提交账户是否有足够的资金来支付其 gas ,或者提交交易的用户是否甚至对提交账户有权限。由于缺乏这种知识,在执行序言时,需要不计量。为失败的交易扣除 gas 可能会导致未经授权的账户扣除。

  • 结语部分负责从提交帐户中扣除执行费用并进行分配。正因为如此,即使事务执行已经用完gas,尾声也必须运行。同样,我们不希望它在向提交账户扣款时耗尽 gas,因为这会导致执行额外的计算而不收取任何交易费用。

这意味着最低交易费用 MIN_TXN_FEE 需要足以支付运行序言和尾声的平均成本。

在序幕运行后,我们已经部分检查了该帐户是否可以承担其 gas 责任,其余的交易流程从 max_gas_amount 的“gas tank”满开始。收取 MIN_TXN_FEE 费用,然后为 VM 执行的每条指令向油箱收取费用。这种每条指令的扣除一直持续到:

  • 交易执行完成,之后收取存储交易数据的费用,运行epilogue并扣除执行费用,或

  • “油箱”变空,在这种情况下会引发 OutOfGas 错误。

在前者中,收取费用并将交易结果保存在 Aptos 区块链上。在后者中,当出现错误时,事务的执行将停止。之后,收集交易的总 Gas 负债。除了本案中的扣除外,没有其他的执行余款。

使用 gas 确定交易的优先级

当您发送交易时,它会根据不同的标准进行优先级排序。其中之一是交易的标准化gas价格。

例如:

  • Bob 使用 gas_price 10 发送交易。

  • 爱丽丝同时发送一笔交易,使用 gas_price 20。 Alice 的交易排名将高于 Bob 的交易。

核心设计原则

三个核心原则激发了 Aptos 和 Move 中 gas 的设计:

Design Principle/设计原则
Description/描述

Move 是图灵完备的

因此,不能静态地确定给定的 Move 程序是否终止。然而,通过确保 - 每个字节码指令具有非零的 gas 消耗,并且 - 任何程序可以启动的 gas 量是有界的,我们几乎可以免费获得程序的终止属性

阻止 DDoS 攻击并鼓励明智地使用网络

交易的gas使用量与该交易的资源消耗相关。gas价格以及交易费用应该随着网络中的竞争而上升和下降。在发布时,我们预计gas价格将处于或接近于零。但在竞争激烈的时期,您可以使用 gas 价格优先交易,这将鼓励在此期间仅发送重要交易。

程序的资源使用需要达成共识

这意味着计算资源消耗的方法需要是确定性的。这排除了跟踪资源使用的其他方法,例如循环计数器或任何类型的基于时间的方法,因为它们不能保证在节点之间是确定性的。跟踪资源使用情况的方法需要抽象。

Previous事件Next验证

Last updated 2 years ago