id | title |
---|---|
libra-protocol |
Libra 协议核心概念 |
Libra区块链是一个基于Libra协议通过加密认证的分布式数据库。本文档简要介绍了Libra协议中的关键概念,有关Libra协议中所有元素的详细说明,请参阅Libra区块链技术白皮书。
Libra区块链分布式网络由验证器节点来维护。或简称称为验证器。验证人(验证节点)通过遵守共识协议来达成区块链中的交易的一致。
Libra 测试网络(testnet)是区块链协议实现早期原型即Libra Core 的展示。
Libra协议两个核心基本概念 — 交易和状态。 在任何时间点,区块链都有一个“状态”。状态(或称为分布式账本状态)表示链上数据的当前快照。 在执行了交易后会更改区块链的状态。
图1.1表示在Libra区块链上执行交易时状态的变化。例:在状态 SN-1 时,Alice拥有 110 Libra 币,Bob拥有52个Libra 币。当交易(TN)发生后,区块链生成一个新的状态。交易 TN(发送10Libra Coin从Alice到Bob)发生,状态从SN-1变更为SN。可以看到Alice的Libra 币减少10,Bob的Libra 币增加10。新的状态(SN)显示更新后的Libra 币余额,在图1.1中:
- A 和 B 区块链中的Alice和Bob的帐户。
- S
N-1表示区块链中第 N-1 个的状态。 - T
N区块链上执行的第 N 个交易- 在图中例子是,T
N表示是: “将10个Libra 币从Alice的账户发送到Bob的账户”
- 在图中例子是,T
- F 一个确定性函数。F函数对于确定初始状态在执行特定交易后始终会返回一个相同的的最终状态。如果区块链当前状态是S
N-1,那么在状态SN-1上执行了交易TN,最后区块链的状态一定是SN。 - S
N是区块链的第N个状态。 SN是在TN与SN-1上应用函数F 后的结果。
Libra协议使用 Move 语言 来实现函数F的确定性执行。
Libra 区块链的客户端通过提交交易来请求更改分布式账本的状态,在区块链上一个签名交易包含如下部分:
- 发送人地址 — 交易发起人的帐户地址。
- 发送人的公钥 — 用于签署交易的私钥所对应的公钥。
- 程序 — 程序包含以下内容:
- Move语言的字节码交易脚本。
- 可选的输入参数列表。对于点对点的交易中,输入包含接收人的信息,交易发送的金额。
- 可选的需发布的字节码模块
- Gas 价格 (以 microlibra/gas 为单位) — 发送方执行交易时需要为每单位gas支付的价格。 Gas是支付的是在区块链上计算和存储的费用。Gas是一个计算量的抽象,没有具体固定的真实价值。
- Gas 上限 — 交易允许消耗的最大 Gas 量。
- 序号 — 无符号整型,必须等于发送者帐户中存储的序列号。
- 过期时间 — 交易有效截止的时间。
- 签名 — 发送人的数字签名。
交易脚本是一个任意的程序,用于对交易逻辑进行编码,并与Libra区块链中发布的数字资产(资源)进行交互。
T分布式账本或者称为Libra区块链的全局状态,它是由区块链中所有账户状态组成总状态。在执行交易时,每个验证节点必须知道区块链中的分布式数据库的最新的全局状态。 参考版本化数据库.
Libra区块链中的所有数据都保存在单个版本化分布式数据库中(single-versioned distributed database)。版本号是一个无符号的 64 位整数,对应于系统已执行的交易数量。
版本化数据库(versioned database)允许验证器:
- 在最新版本状态下执行交易。
- 响应客户端对当前和以前版本的账本历史记录数据的查询
Libra账户包含 Move 模块(modules)和Move 资源(resources)。账户通过账户地址来标识。这意味上每个账户的状态都包含代码和数据:
-
Move 模块 包含代码(类型和过程声明),但他们不包含数据。模块过程(procedures)编码了更新区块链的全局状态的规则。
-
Move 资源 包含数据不包含代码。每个资源值的类型都需要是在已发布的模块中声明过。
账户可以包含任意数量的Move资源和Move模块。
Libra账户的是地址是256位的值。用户使用签名后来声明地址所有权,账户的地址由公钥Hash加密生成。用户(自己或者代用户保管私钥的客户端)必须通过私钥签名才能发出交易。
Libra用户想要拥有的地址是没有限制的,不过要想拥有一个地址需要从一个账户支付一笔创建账号的费用。
Libra区块链中的所有数据都存储在单个版本化分布式数据库中。存储是用于记录确定过的区块交易及执行结果。区块链链用一个不断增长的 Merkle交易树 来表示。对于在区块链上执行的每个交易,交易树都会追加一个"叶子"。
- 证明是验证Libra区块链中数据真实性的一种方式。
- 区块链上存储的每个操作都可以进行加密验证,因此,结果证明也证明没有遗漏任何数据。例如,如果客户端查询帐户最新的 n 个交易记录,则证明会验证查询响应中未省略任何交易记录。
在区块链中,客户端不需要信任接收数据的实体。客户端可以查询帐户的余额,询问是否处理了特定交易等等。与其他 Merkle 树一样, 分布式账本记录可以对一个特定的交易提供
Libra 区块链的客户创建交易并将其提交到验证器节点。验证器节点运行共识协议(与其他验证器节点一起),执行交易,并将交易和执行结果存储在区块链中。验证器节点决定哪些交易将添加到区块链,以及按什么样顺序进行交易。
验证器节点包含以下逻辑组件:
准入控制 (AC)
- 准入控制是验证器节点的唯一外部接口。客户端对验证器节点发出的任何请求首先将转到准入控制组件。
- 准入控制对请求执行初始检查,以保护验证器节点的其他部分免受损坏或大量输入的影响。
内存池(Mempool)
- 内存池是一个缓存区,用于保存正"等待"执行的交易。
- 当新交易添加到验证器节点的内存池时,此验证器节点的内存池与系统中其他验证器的内存池共享此交易。
共识 Consensus
- 共识组件负责对交易区块进行排序,并与网络中的其他验证器节点在共识协议下商定执行结果。
执行 Execution
- 执行组件利用虚拟机 (VM) 执行交易。
- 执行的工作是协调交易块的执行,并保持一个瞬时状态,用户共识协商投票。
- 执行组件会维护执行结果的内存,直到共识将块提交到分布式数据库。
虚拟机(VM)
- 准入控制 和 内存池 使用 VM 组件对交易执行验证检查。
- VM 用于运行交易中包含的程序并确定结果。
存储 Storage
存储用于持久化保存已经商定过的交易块及其执行结果。
有关每个验证器组件与其他组件的交互的信息,参考交易生命周期
- 来到 Libra 世界.
- Libra上的第一笔交易 — 指导使用Libra CLI客户端在Libra区块链上执行第一笔交易。
- 了解 Move 语言 — 介绍新区块链编程语言Move。
- 交易的生命周期 — 提供交易提交和执行时“幕后”发生的事情。
- Libra Core 概要 — Libra Core 组件的概念和实现细节。
- CLI 命令指南 — 列出Libra CLI客户端的命令及其用法。
- Libra 术语表 — 提供Libra术语的快速参考。