Facebook libra开发者文档- 2 -Libra Protocol: Key Concepts核心概念

Libra Protocol: Key Concepts

https://developers.libra.org/docs/libra-protocol

Libra区块链是一个加密认证的分布式数据库,基于Libra协议。本文简要描述Libra协议的关键概念。有关Libra协议所有元素的详细描述,请参阅Libra区块链技术论文

Libra区块链由一个由验证器(validator)节点(也称为验证器)组成的分布式网络维护。验证器集体遵循一致协议(consensus protocol),使得区块链中的交易的总顺序达成一致。

Libra测试网(testnet)是Libra区块链软件的早期原型-Libra核心的一个示范。

 

Transactions and States交易和状态

Libra协议的核心是两个基本概念——交易和状态。在任何时候,区块链都有一个“状态”。状态(或账本状态)表示链上数据的当前快照。执行交易就会更改区块链的当前状态,如下图所示:

Figure1.1表示交易执行时Libra区块链状态的变化。例如,在状态SN-1下, Alice的Libra余额是110,Bob的Libra是52。当一个交易应用于区块链时,它将生成一个新状态。为了从SN-1过渡到SN,交易TN应用于状态SN-1。这导致Alice的Libra余额减少了10个Libra,Bob的Libra余额增加了10个Libra。新的状态SN现在显示了这些更新后的余额。如Figure1.1:

  • A和B代表Alice和Bob在区块链中的账户(accounts)。
  • SN-1表示区块链的第(N-1)个状态。
  • TN是在区块链上执行的第n个交易。
  1. 在这个例子中,TN是-“把10个Libra从A的账户转到B的账户的交易。”
  • F是一个确定性函数(deterministic function)。对于特定的初始状态和特定的交易,F总是计算返回相同的最终状态。如果区块链的当前状态是SN-1,并且交易TN在状态SN-1上执行,则区块链的新状态总是SN
  • SN是区块链的第n个状态。SN是将F应用于SN-1和TN的结果,如上图 SN = F(SN-1,TN)。

Libra协议使用Move语言实现确定性执行函数F。

 

Transactions交易

Libra区块链的客户(client)提交交易去请求更新账本状态( ledger state)。在区块链上签名过的交易中的内容包括:

  • 发送方地址-交易发送方的帐户地址(account address)。
  • 发送方公钥——对应于用于签名交易的私钥的公钥。
  • 程序(program)-程序包括以下内容:
  1. 一个Move字节码交易脚本,就相当于调用的交易函数的代码。
  2. 脚本的可选输入列表,即发送给交易函数的参数。对于点对点交易来说,输入包含关于接收方的信息和传输到接收方的金额。
  3. 要发布的Move字节码模块的可选列表
  • Gas价格(以microlibra/gas为单位表示)-发送方愿意支付的用来执行交易的每单位gas的价格。gas是支付计算和储存费用的一种方式。gas单位是计算的抽象度量,没有固有的实际价值。
  • 最大gas量-每笔交易允许消耗的最大gas数量,超过这个数量,该交易将不能成功执行。
  • 序列号——一个无符号整数,必须等于存储在发送方帐户下的序列号,即该发送方已经发送了序列号-1个交易,用户的序列号表示其下一个交易的序列号
  • 过期时间——交易失效后的时间,即如果在该时间内交易还没有上链,该交易将失效,即永不会上链,需要发送方重新发送一笔相同交易。
  • 签名-发送方的数字签名,用来证明该交易是该发送方发送的。

交易脚本是一个任意的程序,它对交易的逻辑进行编码,并与Libra区块链分布式数据库中发布的资源(resources)进行交互。

 

Ledger State账本状态

账本状态,或Libra区块链的全局状态,由区块链中的所有帐户状态组成。要执行交易,每个验证器(validator)必须知道区块链的分布式数据库的最新版本的全局状态。详情可见版本化数据库

 

Versioned Database版本化数据库

Libra区块链中的所有数据都保存在一个仅有单一版本的分布式数据库中(即每笔交易得到的最新状态只有一个,不会有两个或多个不同的状态出现)。版本号是一个无符号64位整数,对应于系统执行的交易数。

版本数据库允许验证器(validator)做的事情有:

  • 根据最新版本的账本状态(即上面的SN)执行交易。
  • 回答用户(client)关于当前和以前版本的账本历史记录的查询。

 

Account账户

Libra帐户是Move模块和Move资源(Move resources)的容器。它由一个帐户地址(account address)标识。这基本上意味着每个帐户的状态都由代码和数据组成:

Move模块——包含代码(类型和过程声明),但不包含数据。该模块的程序编码用于更新区块链的全局状态的规则(即有点像以太坊上某用户发布的存储在账户中的智能合约代码codeHash)。
Move资源——包含数据,但不包含代码。每个资源值都有一个类型,该类型在发布在区块链分布式数据库中的模块中声明(就有点像是以太坊中账户自己交易的状态数据storageRoot)。
帐户可以包含任意数量的Move资源和Move模块。

 

Account Address账户地址

Libra帐户的地址是256位的值。用户可以使用数字签名来声明地址。帐户地址是用户的公共验证密钥的加密hash后的值。要签署从帐户地址发送的交易,用户(或代表用户的托管用户custodial client)必须使用该帐户对应的私钥进行签署。

Libra的用户可以申请的地址数量没有限制。要索取帐户地址,必须从拥有足够支付创建Libra帐户费用的帐户上发送交易(该交易用于创建账户)。

 

Proof证明(Merkle树)

Libra区块链中的所有数据都存储在一个仅有单一版本的分布式数据库中。存储(storage)用于对交易块及其执行结果进行持久存储。区块链表示为一个不断增长的交易Merkle树。对于区块链上执行的每个交易,Merkle树后面都附加一个“叶子Leaf”,即Merkle树上的叶节点表示一个交易数据。

  • 证明(proof)是一种验证Libra区块链数据真实性的方法。
  • 存储在区块链上的每一个操作都可以进行加密验证,从而证明没有遗漏任何数据。例如,如果用户从帐户查询最新的n个交易,则proof将会从查询响应中证实没有遗漏任何交易。

在区块链中,用户不需要信任接收数据的实体。用户可以查询某个帐户余额,询问是否处理了特定的交易,等等。与其他Merkle树一样,账本历史可以提供一个特定交易对象大小为O(logn)的证明proof(即一个大小为O(logn)的Merkle树),其中n是处理的交易总数。

 

Validator Node (Validator)验证节点

Libra区块链的用户创建交易并将它们提交到验证器节点。验证器节点运行一致协议(与其他验证器节点一起),执行交易,并将交易和执行得到的结果存储在区块链中。验证器节点决定将哪些交易添加到区块链中,以及以何种顺序添加。

验证器节点包含以下逻辑组件:


Admission Control (AC)许可控制

  • 许可控制是验证器节点唯一的外部接口。用户向验证器节点发出的任何请求都将首先到达AC。
  • AC对请求执行初始检查,以保护验证器节点的其他部分不受损坏或高容量输入的影响。


Mempool内存池

  • Mempool是一个缓冲区,它保存状态为“等待waiting”的交易。
  • 当向验证器节点的mempool添加新交易时,该验证器节点的mempool与系统中其他验证器的mempool共享该交易。


Consensus共识

  • 共识组件负责对交易块进行排序,并通过与网络中的其他验证器节点参与共识协议(consensus protocol),就执行结果达成一致。


Execution执行

  • 执行组件使用虚拟机(VM)来执行交易。
  • 执行的工作是协调一个交易块的执行,并维护一个可以通过协商一致后进行表决的临时状态,即上面执行完要记录到链上的交易后,会从SN-1状态得到一个SN临时状态。
  • 执行维护执行结果的内存表示形式,直到协商一致后将块提交到分布式数据库为止,即将临时状态确认为确定状态。

 

Virtual Machine (VM)虚拟机、

  • AC和Mempool使用VM组件对交易执行验证检查。
  • VM用于运行包含在交易中的程序并确定结果。


Storage存储

  • 存储用于对交易块及其执行结果进行持久存储。


有关每个验证器组件与其他组件交互的信息,请参阅交易的生命周期

 

posted @ 2019-07-01 20:05  慢行厚积  阅读(452)  评论(0编辑  收藏  举报