Aptos 区块链中,最基本的两个概念,就是交易(transaction)和状态(state):
- 交易:交易是指在 Aptos 链上,两个账户之间的数据(比如 Aptos 币,或者 NFT 都是数据)交换
状态:这里指 Aptos 链上账户的状态,比如记账簿(ledger)的状态
! 执行一笔交易,就会改变Aptos链上记账簿的状态
记账簿状态
所谓 Aptos 链上记账簿状态,也称为全局状态,是指链上所有账户的状态。任意一个验证节点,只有在知道全局状态最新版本的情况下,才能执行一笔交易。
任何人都可以提交一笔交易,来改变链上的记账簿状态。在该交易执行期间,会产生交易输出;交易输出可能会包含多项修改记账簿状态的操作(也可能不含)。这些操作被称为写入集合(write sets):产生事件的向量(a vector of resulting events),被消耗的gas费,以及执行交易后的状态(status)。
版本化数据库
每个状态总是有一个相关的版本号,用64位无符号整数,记录系统中交易被执行的次数。这个版本化的数据库,让验证节点可以做到:
- 总是基于记账簿状态的最终版本,来执行一笔交易
在客户端查询的时候,总是能返回当前或历史版本
交易变更状态
前面的图,展示了交易 Ti 是如何把链上状态,从 Si-1,变成 Si 的:
- 有两个账户,A 和 B:分别代表 Alice 和 Bob 的账户
- Si-1: 表示链上的第
i - 1
个状态, 在此状态中, Alice 的账户有 100 个 APT(Aptos coins),Bob的账户中有 52 个 APT - Ti:链上执行的第
i
笔交易,在本示例中, Alice 准备给 Bob 10 APT - Apply():这是一个确定性函数,保证在特定的初始状态和指定交易下,一定会返回同样的最终状态。如果当前链上状态是 Si-1,那么执行过 Ti 交易之后,链上状态就一定会变为 Si。Aptos 链使用 Move 语言 来实现确定性函数 Apply()
Si:表示链上的第
i
个状态,当交易 Ti 被执行完毕后,状态 Si 就生成了 (也就是 Apply(Si-1, Ti) 函数的输出结果)。这会让 Alice 的账户减少 10 APT,变为100 APT,而 Bob 的账户增加 10 APT,成为 62 APT。最新的 Si 状态会表现出更新过的账户余额交易
客户端提交一笔交易到链上之后,如果该交易被成功执行,记账簿状态就会被更新。
一笔签署过的交易,应该包含下列信息:- 签名:发送人通过一个数字签名,表示他们签署了交易
- 发送人地址:发送人的账户地址
- 发送人公钥:公钥和私钥组成一个秘钥对,用于签署交易,其中公钥将附带在交易信息中,用于让验证节点完成身份验证
程序:程序包括:
- 一个 Move 模块和函数名,或者一段 Move 字节码表示的脚本
- 一组可选的输入信息。对于端对端的交易,这些输入包含接收人的地址 和 需要发送的 货币数量
- Gas费价格(单位价格):这是发送人打算支付的每单位gas费。Gas费用于支付交易中需要的耗费的计算和存储资源。一个 gas 单位,是抽象的度量标准,并不对应实体世界的价值。
- 最大Gas费:发送人准备支付 gas 费的最大上限
- 序列号:这是一个无符号整数,必须等于发送人执行交易的次数
过期时间:表示交易失效的时间点,是个时间戳类型的数据
证明
Aptos 链使用证明(proof)来确认链上数据的真实性和正确性。
所有的链上数据,都存在一个单版本的分布式数据库中。每个验证器和全节点,都负责把共识和执行交易的结果存储到数据库中。
整个区块链可以看做一颗不停增长的默克尔树,树上的每个叶子节点,都代表了一笔执行过的交易。
所有的链上操作和账户状态,都可以通过加密的方式进行验证。这些加密证明,保证了:- 所有验证节点对状态达成一致
- 客户端不需要信任它获取数据的来源。例如,如果一个客户端从某个账户查询最后 n 笔交易,加密证明能帮它确信:返回的结果集没有被添加、忽略或者修改任何信息。同样,客户端也可以查询账户的状态,查询一笔特定的交易是否执行完毕等等,这些信息都是可靠的。
原文链接:《Aptos概念——交易和状态》
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。