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. Ansible批量自动化管理工具

    一,工具与环境介绍 1.1 ansible简介 批量管理服务器的工具 无需部署agent,通过ssh进行管理 流行的自动化运维工具:https://github.com/ansible/ansible ...

  2. 【转】通过BeanNameAutoProxyCreator改变臃肿代码

    https://www.cnblogs.com/zdd-java/p/7861824.html 前言: 最近接手了一个项目,大概过了下需求,然后打开项目准备开搞的时候发现一个问题,这个项目是提供res ...

  3. 为什么要设置HTTP timeout?

    先看一个不设置timeout造成的线上事故. 一次线上事故 有一次生产上的一个服务出了点故障,一个原本每5分钟执行一次的定时任务突然不执行了.第一反应是任务执行报错,查看日志,却没有找到任何异常报错信 ...

  4. Mac OS下安装MongoDB以及配置方法总结【笔记】

    首先打开命令框,输入: brew install mongodb 安装完成后  启动.停止.重启如下 brew services start mongodb brew services stop mo ...

  5. RabbitMQ3 单机及集群安装配置及优化

    一.操作系统需求及配置 # 1.1.操作系统推荐配置 4C*8G*40G磁盘 # 1.2.内核参数优化 # 系统参数需要留有swap空间,rabbitmq 启动进程用户打开文件数至少需要5万,yum安 ...

  6. vue 传入一个对象的所有属性

  7. LightOJ - 1214-Large Division(数学,同余)

    链接: https://vjudge.net/problem/LightOJ-1214 题意: Given two integers, a and b, you should check whethe ...

  8. Time Intersection

    Description Give two users' ordered online time series, and each section records the user's login ti ...

  9. Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    Python tkinter 实现简单登陆注册 最终效果 开始界面 ​ 注册 登陆 ​ 源码 login.py # encoding=utf-8 from tkinter import * from ...

  10. 利用亚马逊AWS搭建个人服务器

    转载博客地址:https://www.jianshu.com/p/a045d4217175