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用于运行事务中包含的程序并确定结果。

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

存储

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

更多教程请参考 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. Libra教程之:执行Transactions

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

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

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

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

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

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

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

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

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

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

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

  9. Python基础教程之udp和tcp协议介绍

    Python基础教程之udp和tcp协议介绍 UDP介绍 UDP --- 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议.UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但 ...

随机推荐

  1. Aho-Corasick automaton

    目录 KMP 算法 BF 算法 KMP 算法 避免重复遍历 算法思想 代码实现 匹配函数 求 next 数组 字典树 多模匹配 构造字典树 字典树的结构体定义 构造算法 伪代码 代码实现 失配指针 功 ...

  2. 理解 Hanoi 汉诺塔非递归算法

    汉诺塔介绍: 汉诺塔(港台:河内塔)是根据一个传说形成的数学问题: 最早发明这个问题的人是法国数学家爱德华·卢卡斯. 传说越南河内某间寺院有三根银棒,上串 64 个金盘.寺院里的僧侣依照一个古老的预言 ...

  3. Epicor support overview支持服务

    提供以下服务项目: •Support services 支持服务•Implementations 实施•Epicor software upgrades 软件升级•Database support & ...

  4. Unity 游戏框架搭建 2019 (二十七、二十八)弃用的代码警告解决&弃用的代码删除

    在前两篇,我们把所有的示例重头到尾整理了一遍. 当前的状态如下: 要做的事情: (完成) 备份:导出文件,并取一个合理的名字. 遗留问题: (完成) 第八个示例与之前的示例代码重复,功能重复. (完成 ...

  5. Python Requests-学习笔记(7)-Cookies

    如果某个响应中包含一些Cookie,你可以快速访问它们: url = 'http://example.com/some/cookie/setting/url' r = requests.get(url ...

  6. AJ学IOS(14)UI之UITableView扩充_表格的修改_(增删移动)

    AJ分享,必须精品 先看效果图 代码 // // Created by apple on 14-8-19. // Copyright (c) 2014年 itcast. All rights rese ...

  7. android学习笔记——计时器实现

    根据android疯狂讲义来写写代码,在博客里面将这些写过的代码汇总一下.实现的功能很简单:就是一个简单的计时器,点击启动按钮会开始计时,当计时到20秒时会自动停止计时. 界面如下: 界面代码: &l ...

  8. MySQL的事务隔离级别是什么?

    我是平也,这有一个专注Gopher技术成长的开源项目「go home」 背景介绍 想必事务大家都已经非常熟悉了,它是一组SQL组成的一个执行单元,要么全执行要么全不执行,这也是它的一个特性--原子性. ...

  9. L21 Momentum RMSProp等优化方法

    airfoil4755 下载 链接:https://pan.baidu.com/s/1YEtNjJ0_G9eeH6A6vHXhnA 提取码:dwjq 11.6 Momentum 在 Section 1 ...

  10. stand up meeting 12-14

    今日更新: 项目的refactor部分均已经基本完成.答题界面和结果展示界面与code hunters team项目的merge部分也已经完成. 当然在这其中我们也遇到了一个小问题,在背单词模块中的词 ...