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区块链是一个加密认证的分布式数据库 ...
随机推荐
- Java基础加强-泛型
/*泛型*/ (泛型是给编译器看的) 泛型是提供给 /*javac编译器使用的*/,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型带类型说明的集合时,会去掉 "类 ...
- json _ ajax_跨域
1 json 1 js 对象 语法: 1 通过一对{}表示一个对象 2 在{}中允许通过 key:value 的形式来表示属性 3 多对的属性和值之间使用 , 隔开 2 什么中JSON 按照JS对象的 ...
- sk_buff内核api函数记录
1.alloc_skb() 上层协议要发送数据包的时候或网络设备准备接收数据包的时候调用 2.kfree_skb() 释放sk_buff结构体 3.skb_put() 在数据区的末端添加某协议的尾部 ...
- “高可用性”(High Availability)??
“高可用性”(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性. 计算机的高可用性 计算机系统的可用性用平均无故障时间(MTTF)来度量 ...
- idou老师教你学Istio 22 : 如何用istio实现调用链跟踪
大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等一些功能. 每一个功能都帮助我们在不同场景中实现不同的业务.那么其中比如流量监控这种复杂的功能Istio是如何让我们在不同的应用中实现 ...
- idou教你学Istio10 : 如何用Istio实现K8S Egress流量管理
上一篇我们了解了如何控制入口流量,本文主要介绍在使用Istio时如何访问集群外服务,即对出口流量的管理. 默认安装的Istio是不能直接对集群外部服务进行访问的,如果需要将外部服务暴露给 Istio ...
- php中unserialize 返回false的解决方法
serialize 序列化 unserialize 反序列化 $content = 'a:5:{s:4:"img1";s:5:"35568";s:4:" ...
- 【C++/html版 代码 : 暴力破解数字红包 】-- 只要有编译器或者,不看运气,用手速敲代码说话,多人合作效果更佳!
需求分析: 或者是更大的范围! 是不是很捉急!运气背点不就over了! C++版: #include <stdio.h> #include <stdlib.h> #includ ...
- 企业IT运维以及信息管理部服务器管理
方法 1.服务器有必要保持简洁.除了必要的应用软件以及安全软件之外,尽量不要安全其它的软件. 2.要做好服务器帐号权利规划和分配,分配够用的权利就行,从而降低密码泄漏带来的损失. 3.注意关注服务器软 ...
- onbeforeunload、onpagehide、onunload、onload、onpageshow的正确执行顺序
一.Chrome支持onbeforeunload.onpagehide.onunload,只是在这些方法执行的时候alert,console这些方法已经被注销了. 二.浏览器跳转.关闭.刷新时都按a, ...