Facebook币Libra学习-1.核心概念
Libra区块链是一个基于Libra协议的加密认证的分布式数据库。本文将简略介绍Libra协议的核心概念。其详细说明请参阅Libra技术白皮书.
Libra区块链由分布式的Validator节点网络维护, 或简称为Validator。Validator集体遵循共识协议 决定区块链中交易的进行次序。
Libra测试网络是Libra区块链项目早期原型,即Libra Core的Demo 。
交易和状态
Libra协议的两个核心基本概念为交易和状态在任一时间点,区块链都有一个所谓的状态。状态(或成为分布式账本状态)表示区块链上数据此时的快照。交易的执行会改变区块链的状态。
图 1.1 交易状态变更.
图 1.1 展示了执行交易时,Libra区块链的状态变化。例如,在状态 SN-1 时,Alice 的余额为110 Libra币, Bob的余额为52 Libra币.交易发生后,区块链生成一个新的状态。在状态 SN-1 的前提下,交易 TN 发生,则状态由 SN-1 变更为 SN 。Alice的余额减少10Libra币,Bob的余额增加了10Libra币新的状态SN 展示了状态更新后的账户余额情况。在图1.1中:
- A and B 分别代表Alice和Bob在区块链上的账户。
- SN-1 代表区块链中第(N-1)个状态。
- TN 代表区块链中执行的第N个交易。
- 从图中的例子可以看出,TN 代表的交易是:从A账户中转10 Libra币到B账户中。
- F为一个确定性函数。在特定的初始状态执行特定的交易,F函数总会返回相同的最终状态。如果当前区块链状态为 SN-1, 执行交易 TN ,则返回的新状态恒为 SN 。
- SN 代表区块链的第N个状态。SN 为将函数F应用于 SN-1 和 TN 的结果。
Libra协议使用 Move 语言 来实现函数F的确定性执行。
交易
Libra区块链客户端通过提交交易请求来更新分布式账本状态。区块链上一个签名交易包括:
- 发送方地址 — 交易发起者的账户地址。
- 发送方公钥 — 用于签署交易的私钥所对应的公钥。
- 程序 — 程序包括以下内容:
- 一个Move语言的字节码交易脚本;
- 可选的输入列表:在点对点交易中,输入包括接受者信息及金额;
- 可选的Move字节码模块部署列表;
- Gas价格 (以microlibra/gas 为单位—执行交易时,发送方愿意为一单位gas 所支付的价格。Gas是用来支付在区块链上计算和存储费用。每一Gas单位是对计算量的抽象度量;
- Gas上限 — 交易允许消耗的Gas最大值;
- 序号 — 无符号整型,必须和发送者账户中的序列号相等;
- 有效期 — 交易的有效截止时间;
- 签名 — 发送者的数字签名。
交易脚本是任意包含对交易逻辑编码的程序,能够与Libra区块链中发布的数字资产进行交互。
分布式账本状态
分布式账本状态,又称为Libra区块链全局状态,是区块链上所有账户状态的集合。想要执行交易,每个Validator必须获得区块链上分布式数据库的最新全局状态。更多见版本化数据库.
版本化数据库
Libra区块链上的所有数据都存储在一个单一版本化的分布式数据库上。版本号为无符号的64位整数,与系统内已经执行的交易数量相对应。
版本化数据库允许Validator:
- 在最新的全局状态下进行交易;
- 响应客户端发送的对当前或历史全局状态的请求。
账户
Libra账户包括Move模块和Move资源。由账户地址标识。这也意味着每个账户的状态都包含代码和数据两方面。
- Move模块 包含代码(类型和过程声明),但不包含数据。模块中的子程序对区块链全局状态的更新规则进行编码。
- Move资源 包含数据不包含代码。每个资源的类型都应在区块链的分布式数据库中已发布模块里声明过。
账户可以包含任意数量的Move资源和Move模块。
账户地址
Libra账户地址为一个256位的值。用户可以使用电子签名来声明地址。对于一个账户,其地址由用户的公钥通过密码学Hash(或托管的客户端)生成,用户必须通过相应的私钥签名才能从此账户发起交易。
Libra对用户的账户地址的数量不做限制。但申请新账户地址时,必须通过另一Libra币充足的账户支付申请费用。
证明
Libra区块链上的所有数据都存储在一个单一版本化的分布式数据库上,存储被用来对交易区块和交易结果的持续确认。区块链是一个不断增长的Merkle交易树. 每次区块链上有新的交易执行,交易树都会增加一片“叶子”。
- 证明是验证Libra区块链中数据真实性的一种方式;
- 区块链上存储的每个操作都可以进行加密验证,结果性证明也可以证实没有数据缺损。例如,如果客户端发送了对最新的 n 笔交易的查询请求,证明可以验证查询响应中没有遗漏任何一笔交易记录。
在区块链中,客户端不需要信任接受数据的实体。客户端可以查询账户余额,以及特定交易的交易状态等。与其他Merkle树类似,分布式账本记录可以对特定的交易提供 O(\log n)O(logn) 时间复杂度证明, n 为处理的交易总量。
Validator 节点 (validator)
Libra区块链的客户端创建交易并提交到Validator节点。Validator节点(和其他Validator节点共同)运行共识协议,执行交易,并将交易和执行结果存储在区块链中。Validator节点判定哪些交易可以被添加到区块链上,以及以何种次序添加。图 1.2 VALIDATOR逻辑组件
Validator节点 包括以下逻辑组件:
准入控制 (AC)
- 准入控制是Validator节点的唯一外部接口。客户端向Validator节点发送的任何请求都将先转入AC;
- 准入控制通过对请求进行初始检查,来保护Validator节点的其他部件免受损坏或大量输入的影响。
内存池
- 内存池是一个缓存区,用于保存“等待”执行的交易。
- 当一个内存池中添加了新交易时,这个内存池会和系统中其他Validator节点的内存池共享此交易。
共识
- 共识组件负责判断交易区块的顺序,并与区块链中其他的Validator节点在共识协议 下共同决定执行结果,
执行
- 执行组件利用虚拟机(VM)交易。
- 执行组件的作用是协调一个区块中的交易的执行,并维护一个可用于协商投票的瞬时状态;
- 执行组件维护内存中执行结果,直至共识组件允许其被提交到分布式数据库。
虚拟机 (VM)
- 准入控制和内存池借助虚拟机组件对交易进行校验。
- 虚拟机用于运行交易中所包括的程序,并确定结果。
存储
存储被用来持久化保存已确认的交易区块和交易结果;
更多Validator组件与其他组件的交互信息,请参考交易生命周期.
参考:
- 欢迎页.
- My First Transaction — Guides you through executing your very first transaction on the Libra Blockchain using the Libra CLI client.
- Getting Started with Move — Introduces you to a new blockchain programming language called Move.
- Life of a Transaction — Provides a look at what happens “under the hood” when a transaction is submitted and executed.
- Libra Core Overview — Provides the concept and implementation details of the Libra Core components through READMEs.
- CLI Guide — Lists the commands (and their usage) of the Libra CLI client.
- Libra Glossary — Provides a quick reference to Libra terminology.
翻译:Jadris Lau 校对:Zhe Wang
Libra国内开发者微信交流群:
不能入群请加管理微信,拉你进群=>
Facebook币Libra学习-1.核心概念的更多相关文章
- Facebook币Libra学习-3.小试牛刀第一笔交易
我们提供了一个命令行界面(CLI)客户端来与区块链进行交互. 假设 本文档中的所有命令均假定: 您运行的是Linux(基于Red Hat或Debian)或macOS系统. 您可以稳定地连接到互联网. ...
- Facebook币Libra学习-6.发行属于自己的代币Token案例(含源码)
在这个简短的概述中,我们描述了我们在eToro标记化资产背后实施技术的初步经验,即MoveIR语言中的(eToken),用于在Libra网络上进行部署. Libra协议是一个确定性状态机,它将数据存储 ...
- Facebook币Libra学习-2.交易生命周期
交易生命周期 为了更加深入的理解Libra的交易生命周期,我们将跟随一个交易的全过程,从其被提交到Libra validator始,直至其被添加到区块链上止.我们将“放大”来看每个validator逻 ...
- Facebook币Libra学习-5.Move组织目录
Move是一种新的编程语言,旨在为Libra Blockchain提供安全可编程的基础. 组织 Move语言目录由五部分组成: 的虚拟机(VM),其中包含的字节码格式,字节码解释器,和基础设施执行事务 ...
- Facebook币Libra学习-4.新的智能合约语言Move入门
Move是一种新的编程语言,旨在为Libra Blockchain提供安全可编程的基础.Libra Blockchain中的帐户是任意数量的Move资源和Move模块的容器.提交给Libra Bloc ...
- Hadoop YARN学习之核心概念(2)
Hadoop YARN学习之核心概念(2) 1. Hadoop 2.X YARN引入的新服务 1.1 新的ResourceManager纯碎作为资源调度器,是集群资源的唯一仲裁者: 1.2 用户应用程 ...
- fusionjs 学习二 核心概念
核心概念 middleware 类似express 的中间件模型(实际上是构建在koa中间件模型上的),但是和koa 的中间件有差异 fusionjs 的中间件同时可以运行在浏览器页面加载的时候 se ...
- 【ShardingSphere】ShardingSphere学习(二)-核心概念-SQL
逻辑表 水平拆分的数据库(表)的相同逻辑和数据结构表的总称. 例:订单数据根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order. 真实表 在分片的数 ...
- Facebook libra开发者文档- 2 -Libra Protocol: Key Concepts核心概念
Libra Protocol: Key Concepts https://developers.libra.org/docs/libra-protocol Libra区块链是一个加密认证的分布式数据库 ...
随机推荐
- PowerBulider获取计算机mac地址
PowerBulider获取计算机mac地址 1.下载GETNET.DLL获取网络资源的API 2.PB的全局函数中的引入需要API,常用API列表如下 //得到计算机名字 function bool ...
- 有关linux中出现systemctl status network.service" and "journalctl -xe" for details.
Job for network.service failed because the control process exited with error code >**[root@mina0 ...
- Linux 下DNS详解
配置之前先了解一下bind DNS服务器软件:BIND是一种开源的DNS(Domain Name System)协议的实现,包含对域名的查询和响应所需的所有软件.它是互联网上最广泛使用的一种DNS服务 ...
- windows上使用Jenkins&Github实现CICD
一.摘要 本篇文章笔者将详细介绍Jenkins和Github如何实现CICD的,文章将以Jenkins的使用为主线,伴随着介绍Git的使用,加上一些python代码的执行,最终生成测试报告 二.Jen ...
- Hadoop添加LZO压缩支持
启用lzo的压缩方式对于小规模集群是很有用处,压缩比率大概能降到原始日志大小的1/3.同时解压缩的速度也比较快. 安装 准备jar包 1)先下载lzo的jar项目https://github.com/ ...
- JDK源码那些事儿之HashMap.TreeNode
前面几篇文章已经讲解过HashMap内部实现以及红黑树的基础知识,今天这篇文章就讲解之前HashMap中未讲解的红黑树操作部分,如果没了解红黑树,请去阅读前面的两篇文章,能更好的理解本章所讲解的红黑树 ...
- 机器学习mark一下
https://developers.google.cn/machine-learning/crash-course/ml-intro
- C# ClickOnce发布方式
首先编写ClickOnce更新事件, private void button1_Click(object sender, EventArgs e) { if (ApplicationDeploymen ...
- 2018 开始认真学习点python
2018 伊始,又是春暖花开.俗语,“一年之计在于春”.又是一年立志时. 决定认真学习一些web. 本来倾向与学习NodeJS的.可是之前买的python的书太多了.就先紧手头的资源看了再说吧. 今天 ...
- Flutter 踩坑集
1.Flutter Packages Get 一直重试或一直失败的问题 翻车原因:万恶之源-----天朝的长城防火墙 解决方法 详见:https://flutter.dev/community/chi ...