文章目录

  • Libra协议
  • 交易和状态
    • 交易详解
    • 账本状态详解
  • 版本数据库
  • 账户
  • 账户地址
  • Proof
  • 验证节点
  • 存储

Libra协议

Libra协议是Libra区块链的基础,本文主要讲解Libra协议的一些关键概念。

交易和状态

我们知道区块链也可以叫分布式账本,它主要的作用就是存储各种交易。而为了便于查询和提升效率,现代的区块链都会引入状态的概念,来代表某时刻链上数据的当前快照。

交易会改变相应的状态,如下图所示:

上图描述了执行交易发生时Libra区块链相应的状态改变。

其中T是交易,S是状态,为了便于描述,我们假设每个交易和状态是一一对应的,T1对应S1,T2对应S2,Tn对应Sn。随着时间的推移n的值不断变大。

假设在Sn-1状态时我们有两个用户A和B,A拥有110LBR,B拥有52LBR。接下来会进行一个交易Tn,将A拥有的10LBR转给B。

这里会使用一个确定函数F(Sn-1,Tn)=Sn 来获得最新的Sn。

确定函数的意思是:对于特定的初始状态和特定的交易,F始终返回相同的最终状态。

这个函数F在Libra中是使用Move语言来实现的。在后面的文章中我们会详细介绍Move语言。

交易详解

交易记录着账号之间的信息传递,是区块链的重要信息,每个区块都是由一个个交易组成的。 Libra区块链中的交易包含如下信息:

  • 交易发送人的账户地址
  • 发送人公钥-与用于签署交易的私钥相对应的公钥
  • 程序:
    1. 移动字节码的交易脚本
    2. 脚本输入的可选列表。对于点对点交易,输入包含有关接收者和转移到接收者的金额的信息。
    3. 要发布的移动字节码模块的可选列表。
  • Gas价格:发送方愿意为执行交易而为每单位Gas支付的金额。Gas是一种支付计算和存储费用的方式。Gas单位是对计算的抽象度量,没有固有的实际值。
  • 最大Gas数目:允许交易消耗的最大Gas量。
  • 序列号:一个无符号整数,必须等于在发件人帐户下存储的序列号。
  • 到期时间:交易停止有效的时间。
  • 签名:发送者的数字签名。

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

账本状态详解

Libra的账本状态由区块链中所有帐户的状态组成。为了执行交易,每个验证者必须知道最新版本的区块链分布式数据库的全局状态。

版本数据库

Libra区块链中的所有数据都保存在单版本的分布式数据库中。 版本号是一个无符号的64位整数,与系统已执行的事务数相对应。

版本数据库允许验证者执行以下操作:

  • 针对最新版本的账本状态执行事务。
  • 响应客户有关当前和以前版本账本历史记录的查询。

账户

Libra帐户包括Move modules和Move resources。它由帐户地址来标记的。这实质上意味着每个帐户的状态都由代码和数据组成:

  • Move modules包含代码(类型和过程声明),但它们不包含数据。模块用来对用于更新区块链全局状态的规则进行编码。
  • Move resources包含数据,但没有代码。每个资源值都有在区块链分布式数据库中发布的模块中声明的类型。

一个帐户可以包含任意数量的Move modules和Move resources。

账户地址

Libra帐户的地址为256位值。在公钥私钥体系中,帐户地址是用户公钥的加密哈希。要签署从其帐户地址发送的交易,用户(或代表该用户的托管客户端)必须使用与该帐户相对应的私钥。

Libra用户可以创建的账户可以是无限的,但是要创建帐户地址,需要从拥有住够Libra币的帐户发送交易用来支付帐户创建费用。

Proof

Libra区块链中的所有数据都存储在一个单版本的分布式数据库中。该存储用于持久存储已确定的交易块及其执行结果。这些数据是以不断增长的Merkle树来实现的。如果有需要,我会在后面的文章中讲解什么是Merkle树,这里我们只要知道对于在区块链上执行的每笔交易,都会以叶子节点的形式附加到树上。

Proof是一种验证Libra区块链中数据真实性的方法。

存储在区块链上的每个操作都可以进行密码验证,并且没有数据被遗漏。例如,如果客户从一个帐户中查询了最近的n笔交易,则Proof将验证查询响应中没有遗漏任何交易。

在区块链中,客户端不需要信任从其接收数据的实体。客户可以查询帐户余额,询问是否处理了特定交易,等等。与其他Merkle树一样,账本的历史记录可以提供特定交易对象的Proof。

验证节点

在区块链系统中,验证节点是一个非常关键的组件,通常来说验证节点运行共识协议(与其他验证者节点一起),执行交易,并将交易和执行结果存储在区块链中。 验证者节点决定将哪些交易添加到区块链中,并以什么顺序添加。Libra区块链的客户创建交易并将其提交到验证者节点。

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

  • Admission Control (AC)

    准入控制是验证程序节点的唯一外部接口。客户端对验证者节点的任何请求都首先转到AC。
    AC对请求执行初始检查,以保护验证器节点的其他部分不受损坏或输入量大的影响。

  • Mempool
    Mempool是一个缓冲区,用于保存正在等待执行的交易。
    将新交易添加到验证程序节点的内存池后,此验证程序节点的内存池将与系统中其他验证程序的内存池共享此交易。

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

  • 执行
    执行组件利用虚拟机(VM)执行事务。
    执行工作的任务是协调一系列交易的执行,并保持可以通过共识投票的临时状态。
    执行保持执行结果的内存表示形式,直到共识将块提交给分布式数据库为止。

  • 虚拟机(VM)
    AC和Mempool使用VM组件对事务执行验证检查。
    VM用于运行事务中包含的程序并确定结果。

上图是验证节点的示意图。

存储

存储用于持久存储已确定的交易块及其执行结果。

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考 flydean的博客

Libra教程之:Libra协议的关键概念相关推荐

  1. Libra教程之:Libra protocol的逻辑数据模型

    文章目录 Libra protocol简介 逻辑数据模型 账本状态 交易 账本历史 Libra protocol简介 Libra区块链本质上是一个加密数据库,这个数据库是通过Libra protoco ...

  2. Libra教程之:Libra testnet使用指南

    文章目录 Libra testnet网络 下载和安装Libra 编译Libra client并连接到Testnet网络 创建两个A和B的两个账号 检查libra cli Client是否运行 创建A的 ...

  3. 什么是python基础教程-python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...

  4. Libra教程之:move语言的特点和例子

    文章目录 move语言的特点 资源优先 灵活性 安全性 可验证性 Move语句初探 点对点支付交易脚本 Currency Module move语言的特点 Libra的目标是打造一个全球话的金融和货币 ...

  5. Libra教程之:数据结构和存储

    文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...

  6. Libra教程之:执行Transactions

    文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...

  7. Libra教程之:来了,你最爱的Move语言

    文章目录 Move语言 Move的核心概念 Move交易脚本 Move modules Move resources 写一个Move程序 编写交易脚本 编写自己的Modules Move语言 Move ...

  8. Libra教程之:Transaction的生命周期

    文章目录 Transaction的生命周期 提交一个Transaction 交易入链的详细过程 接收Transaction 和其他Validators共享这个Transaction 区块Proposi ...

  9. Libra教程之:运行自定义move modules

    文章目录 简介 创建Move modules 启动本地网络 创建账号并送测试币 编译Move Module 发布编译好的Module 创建交易脚本 编译编译脚本 执行脚本 简介 因为Libra和Mov ...

最新文章

  1. Gitlab CI更多内容学习(二)
  2. 实验:交换机生成树协议STP--功能验证
  3. linux基础(1)-yum源配置
  4. python硬盘api-使用python获取电脑的磁盘信息方法
  5. MongoDB在不同主机间复制数据库和集合的教程_MongoDB_脚本之家
  6. leetcode 48. 旋转图像
  7. mysql查询男生基本情况_MySQL数据库技术与应用:数据查询
  8. Strus2中关于ValueStack详解
  9. RESTful  Web APIs设计风格
  10. [ES6] 细化ES6之 -- 数组的扩展
  11. 设置checkbox的只读
  12. Python中父类和子类间类属性(非实例属性)的设置获取的传递
  13. 互信息特征选择python_基于互信息的特征选择算法MATLAB实现
  14. 软件设计学习笔记1_架构
  15. 基于Python+MySQL的书店销售管理管理子系统设计
  16. 第六章 Java API
  17. 计算机教案三年级冀教版,冀教版小学三年级信息技术教案lbrack;画美丽的早晨rsqb;...
  18. 使用kolla-ansible部署多节点OpenStack(T版)及对接Ceph
  19. 前端加载高德离线地图的解决方案
  20. 2021计算机技术考研国家线,2021考研国家线是怎么定的?

热门文章

  1. 03-树3 Tree Traversals Again (c++递归实现)
  2. HDU2665(函数式线段树-区间第K大)
  3. 16.枚举中的option和result.rs
  4. twisted.internet.error.TimeoutError错误的解决方法
  5. python获取cookies
  6. 面试官让我说出2种@Transactional注解的失效场景,我一口气给他说了六种
  7. 干货!全面认识Docker和基本指令
  8. 聊一聊ThreadLocal
  9. 使用VMware VSphere WebService SDK进行开发 (三)——获取主机(HostSystem)的基本信息
  10. LiveVideoStack成立5周年生日快乐!一路走来,感谢有你!