事务和状态
Aptos 区块链核心的两个基本概念是交易和状态:
- Transactions:交易代表 Aptos 区块链上账户之间的数据交换(例如 Aptos 币或 NFT)。
- States:状态,即 Aptos 区块链账本状态,代表 Aptos 区块链中所有账户的状态。
执行交易会改变账本状态
执行交易时,Aptos 区块链的状态会发生变化。
账本状态
Aptos 区块链的账本状态,或者说全局状态,代表了 Aptos 区块链中所有账户的状态。区块链中的每个验证者节点都必须知道最新版本的全局状态才能执行任何交易。
任何人都可以向 Aptos 区块链提交交易以修改账本状态。在执行交易时,会生成交易输出。交易输出包含零个或多个操作账本状态的操作,称为写集:结果事件的向量、消耗的 Gas 量和执行的交易状态。
版本化数据库
账本状态使用一个无符号 64 位整数进行版本控制,该整数对应于系统已执行的交易数量。这个版本化的数据库允许验证节点:
- 针对最新版本的账本状态执行交易。
- 响应客户对当前和以前版本的分类帐历史的查询。
交易改变账本状态
上图展示了执行交易 Ti 如何将 Aptos 区块链的状态从 Si-1 更改为 Si。
图中:
- 账户 A 和 B:代表 Alice 和 Bob 在 Aptos 区块链上的账户。
- Si-1 :表示区块链的第 (i-1) 状态。在这种状态下,Alice 的账户A 的余额为 110 APT(Aptos 币),Bob 的账户B 的余额为 52 APT。
- Ti :这是在区块链上执行的第i个交易。在这个例子中,它代表 Alice 向 Bob 发送了 10 个 APT。
- Apply():这是一个确定性函数,始终为特定初始状态和特定事务返回相同的最终状态。如果区块链当前状态为Si-1,交易Ti在状态S上执行i-1,那么区块链的新状态总是Si。 Aptos 区块链使用 Move 语言 来实现确定性执行函数Apply()。
- Si :这是区块链的第i个状态。当交易Ti应用到区块链时,它会生成新状态Si(应用Apply(S i-1, Ti) 到 Si-1 和 Ti)。这导致 Alice 的账户余额减少 10 到 100 APT,Bob 的账户余额增加 10 到 62 APT。新状态 Si 显示这些更新后的余额。
交易
当客户向 Aptos 区块链提交交易时,如果交易成功,则更新账本状态。
区块链上的签名交易包含以下信息:
- Signature:发件人使用数字签名来验证他们是否签署了交易(即身份验证)。
- Sender address:发件人的账户地址。
- Sender public key:发送方公钥,对应于用于签署交易的私有认证密钥的公共认证密钥。
- Program:该程序包括:
- Move模块和函数名称或Move字节码事务脚本。
- 脚本输入的可选列表。对于点对点交易,这些输入包含接收者的信息和转移给他们的金额。
- 要发布的Move字节码模块的可选列表。
- Gas price(以指定的 gas 单位表示):这是发送者愿意为每单位 gas 支付的金额以执行交易。 Gas 是一种支付计算和存储费用的方式。 Gas 单位是计算的抽象度量,没有内在的现实世界价值。
- Maximum gas amount:最大 Gas 量,是这笔交易允许消费的最大 Gas 单位。
- Sequence number:序列号,这是一个无符号整数,在执行时必须等于发送者的帐户序列号。
- Expiration time:到期时间,交易停止有效(即到期)之后的时间戳。
证明
Aptos 区块链使用证明来验证区块链数据的真实性和正确性。
Aptos 区块链中的所有数据都存储在单一版本的分布式数据库中。每个验证者和全节点的 storage 负责将商定的交易块及其执行结果持久化到数据库中。
区块链表示为一个不断增长的 Merkle 树,其中每个附加到树的叶子代表由区块链执行的单个事务。
区块链执行的所有操作和所有账户状态都可以加密验证。这些加密证明确保:
- 验证者节点就状态达成一致。
- 客户端不需要信任从其接收数据的实体。例如,如果客户从账户中获取最后 n 笔交易,则可以证明在响应中没有添加、省略或修改任何交易。客户端还可以查询帐户的状态,询问是否处理了特定的交易,等等。