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存储

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

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

Facebook libra开发者文档- 2 -Libra Protocol: Key Concepts核心概念的更多相关文章

  1. Facebook libra开发者文档- 1 -welcome

    参考https://developers.libra.org/docs/welcome-to-libra 欢迎来到Libra开发者网站!Libra的使命是建立一个简单的全球货币和金融基础设施,为数十亿 ...

  2. Facebook libra开发者文档- 3 -Life of a Transaction交易生命周期

    Life of a Transaction交易的生命周期 https://developers.libra.org/docs/life-of-a-transaction 为了更深入地了解Libra交易 ...

  3. developers.google.com上的开发者文档如何切换显示语言

    一个小的tip,搜索到developers.google.com上的开发者文档,有些被翻译了的会自动显示中本版,如果想看英文版,可以在当前url后面加?hl=en,就会变成英文版.估计是根据地区直接推 ...

  4. 【swagger】1.swagger提供开发者文档--简单集成到spring boot中【spring mvc】【spring boot】

    swagger提供开发者文档 ======================================================== 作用:想使用swagger的同学,一定是想用它来做前后台 ...

  5. layuiAdmin pro v1.x 【单页版】开发者文档

    layuiAdmin std v1.x [iframe版]开发者文档 题外 该文档适用于 layuiAdmin 专业版(单页面),阅读之前请务必确认是否与你使用的版本对应. 熟练掌握 layuiAdm ...

  6. layuiAdmin std v1.x 【iframe版】开发者文档

    layuiAdmin pro v1.x [单页版]开发者文档 layuiAdmin.std(iframe 版) 是完全基于 layui 架构而成的通用型后台管理模板系统,采用传统的 iframe 多页 ...

  7. Typora+PicGo+cos图床打造开发者文档神器

    一.Typora简介 markdown简单.高效的语法,被每一个开发者所喜爱.Typora又是一款简约.强悍的实时渲染markdown编辑器.本文将介绍Typora搭配PicGo与腾讯cos对象存储( ...

  8. Android 开发者文档 -- 应用基础知识

    https://developer.android.com/guide/components/fundamentals 应用基础知识 Android 应用采用 Java 编程语言编写.Android ...

  9. 详解微信开发者文档——5 access_token管理

    写在前面的话:前几篇博客详细讲解了如何获取用户发送的消息并进行回复,这里的回复是一种被动的回复,而被动回复的方式便是通过echo返回信息给微信服务器的POST请求,因此,其实我们并没有算的上调用了微信 ...

随机推荐

  1. FAILED: SemanticException Unable to determine if hdfs://tmaster:8020/user/root/words.db/test_t2 is encrypted

    使用hive时,建立数据库,建表,写数据: 读数据:select *  from test_t2; 报错SemanticException 原因:建表时使用了其他路径,或者在另一个路径的数据库(建立数 ...

  2. Oracle基础知识【1】

    目录: 1.Oracle创建库.表 2.Oracle数据怎删查改操作 3.Oracle数据约束条件 Oracle创建库.表: create user user05 identified by 1234 ...

  3. Opencv---零碎记录

    OpenCV支持CPU和OpenCL推断,但OpenCL只支持Intel自家GPU,Satya设置了CPU推断模式(cv.dnn.DNN_TARGET_CPU) https://docs.opencv ...

  4. BZOJ 2321 星器

    星器 思路: 势能分析法. 假设每颗星星的势能为\(x^2+y^2\) 那么对于一行的两颗星星\((i, j), (i, k), j < k\) 它转移到\((i, j+1), (i, k-1) ...

  5. P1282 多米诺骨牌[可行性01背包]

    题目来源:洛谷 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+ ...

  6. LINUX 新手 入门 教程

    新手入门教程 点评: linux 入门 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声

  7. 前端开发规范:命名规范、HTML 规范、CSS 规范、JavaScript 规范

    一个好的程序员肯定是要能书写可维护的代码,而不是一次性的代码,怎么能让团队当中其他人甚至一段时间时候你再看你某个时候写的代码也能看懂呢,这就需要规范你的代码了.我是有一点强迫症的人,上周我们后端给我了 ...

  8. 三十五.MySQL读写分离 MySQL多实例 、MySQL性能调优

    1.实现MySQL读写分离 搭建一主一从结构 配置maxscale代理服务器 测试分离配置   1.1 搭建一主一从结构 192.168.4.51 主 192.168.4.52 从 测试OK   1. ...

  9. vue自定义弹框

    vue 全局自定义简单弹框 https://www.jianshu.com/p/1307329aa09e https://www.cnblogs.com/crazycode2/p/7907905.ht ...

  10. 洛谷P1021邮票面值设计

    题目 一道很经典的搜索题,可以锻炼搜索的能力,比如可以用dfs覆盖加dp的方式来寻找+更新答案.而且还可以通过在递归中增加数组的方式来辅助搜索. #include <bits/stdc++.h& ...