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. 在openwrt 17.01上编译最新nginx 1.14.2的笔记

    openwrt 17.01源码对应的nginx版本是1.10.2,有些新功能没有,所以需要升级到nginx 1.14.2最新的稳定版 https://github.com/macports/macpo ...

  2. 赤池信息准则AIC,BIC

    很多参数估计问题均采用似然函数作为目标函数,当训练数据足够多时,可以不断提高模型精度,但是以提高模型复杂度为代价的,同时带来一个机器学习中非常普遍的问题——过拟合.所以,模型选择问题在模型复杂度与模型 ...

  3. framebufferfetch in mali multiple render targets mrt

    gl_LastFragColorARM https://www.khronos.org/registry/OpenGL/extensions/ARM/ARM_shader_framebuffer_fe ...

  4. Vue之nextTick()

    我们有时候操作 DOM,是想在 data 数据变更的时候进行操作. 那么,我们应该怎么做呢? index.html <!DOCTYPE html> <html lang=" ...

  5. ModbusRTU模式和结束符(转)

    Modbus RTU模式的协议字段 起始位 设备地址 功能码 数据 CRC校验 结束符 至少3.5个字符 8bit 8bit N*8bit 16bit 至少3.5个字符 Modbus协议RTU模式要求 ...

  6. this 总结

    谁最终调用函数,this指向谁!!! ① this指向的,永远只可能是对象!   ② this指向谁,永远不取决于this写在哪!而是取决于函数在哪调用.   ③ this指向的对象,我们称之为函数的 ...

  7. 064_将 Linux 系统中 UID 大于等于 1000 的普通用户都删除

    #!/bin/bash#先用 awk 提取所有 uid 大于等于 1000 的普通用户名称#再使用 for 循环逐个将每个用户删除即可 user=$(awk -F: '$3>=1000{prin ...

  8. Qt在pro中实现条件编译

    https://www.cnblogs.com/Braveliu/p/5107550.html https://blog.csdn.net/simonforfuture/article/details ...

  9. C#中的线程(一)入门 转载

    文章系参考转载,英文原文网址请参考:http://www.albahari.com/threading/ 转载:http://www.cnblogs.com/miniwiki/archive/2010 ...

  10. BZOJ 4570: [Scoi2016]妖怪

    二次联通门 : BZOJ 4570: [Scoi2016]妖怪 二次联通门 : luogu P3291 [SCOI2016]妖怪 LibreOJ : LibreOJ  #2015. 「SCOI2016 ...