Facebook币Libra学习-2.交易生命周期
交易生命周期
为了更加深入的理解Libra的交易生命周期,我们将跟随一个交易的全过程,从其被提交到Libra validator始,直至其被添加到区块链上止。我们将“放大”来看每个validator逻辑组件及与其他组件之间的交互。
客户端提交交易
Libra客户端构造 原始交易 (此处称为T5raw),从Alice的账户中转移10Libra币到Bob的账户中。原始交易应包含以下字段:每个字段都通过超链接关联到词汇定义表。
- Alice的账户地址.
- 一个表明Alice方将执行的操作的程序,包括:
- 一个Move 点对点字节码交易脚本.
- 脚本输入参数列表 (在这个例子中为Bob的账户地址和付款金额等).
- Gas价格 (以microlibra/gas为单位) — Alice愿意为执行本次交易所需的每单位Gas支付的价格。Gas用于支付区块链上的计算和存储费用。每一Gas单位是对计算量的抽象度量
- Alice愿意为为此次交易支付的Gas上限
- 此次交易的有效期
- 序号 — 5
- 序号为5的交易,只能在包含5个交易的账户中发起。
客户端使用Alice的私钥对交易T5raw 签名 。签名后的交易T5 包括下列内容:
- 原始交易
- Alice的公钥
- Alice的数字签名
交易前的假设
为了描述交易T5的生命周期, 我们有如下假设:
- Alice和Bob在Libra区块链上都拥有账户。
- Alice账户中有110Libra币。
- Alice账户中当前的序列号 是5 (表示Alice的账户已经发送了5次交易).
- 网络中共有100个validator—从 V1 到 V100 。
- 客户端将交易T5 提交给validator V1
- Validator V1 即为本轮共识的倡议者或领导者
交易的生命周期
在本节中我们将讨论交易T5的生命周期, 从其被提交到Libra validator始,直至其被添加到区块链上止。
下图展示了validator 节点相关组件之间的交互链的相关节点。在熟悉交易生命周期的所有步骤后,你可以进一步了解各步骤中相应组件的交互信息。
注意:本图标中的所有箭头都起始于发起交互或操作的组件,终止于执行操作的组件。此处箭头 不表示数据的读取,写入或返回。
FIGURE 1.1 交易生命周期
接收交易
1 — 客户端将交易T5 提交给validator V1 ,V1 的准入控制组件(AC)接受该交易。(客户端 → AC AC.1)
2 — AC 利用虚拟机组件 (VM) 执行查验,如签名验证,检查Alice账户余额是否充足,检查交易V1 是否 被重复广播等(AC → VM AC.2, VM.1)
3 — 当交易T5 通过查验后, AC 将交易T5 发送到to V1’的内存池(AC → 内存池 AC.3, MP.1)
发布交易到其他Validators
4 — 内存池将交易T5 保存在内存缓冲区中。内存池内可能已经包含了从Alice账户地址发送的多个交易。
5 — 利用内存池共享协议, V1 将发送其内存池中所有交易(包括交易T5) 给其他validator(V2 to V100) 并将从其他validator接受到的交易存储在自身的内存池中(Mempool →其他 Validators MP.2)
交易区块发起
6 — 作为本轮共识发起者V1 将从其内存池中提取一个区块,并通过共识组件复制分发给其他的validator。(共识组件 → 内存池MP.3, CO.1)
7 — V1 的共识组件负责协调所有validator发送的区块中交易的顺序。(共识 → 其他Validators CO.2).关于此处提出的共识协议LibraBFT,请参阅技术性文献Libra区块链中的状态机复制
###区块的执行和共识的达成
8 — 作为共识达成过程的一个步骤,交易区块(包括交易 T5) 被提交给执行组件。(共识 → 执行CO.3, EX.1)
9 — 执行组件通过虚拟机(VM)管理交易的执行。应注意,此处的执行是在达成共识前的推测性执行。(执行→ VM EX.2, VM.3)
10 — 在上述执行完成后,执行组件将交易区块将(包含T5)附加到 (分布式账本的历史)Merkle累加器 上,形成内存/临时版本Merkle累加器。执行(发起和推测)交易的结果会返回到共识组件。(共识 → 执行CO.3, EX.1).从共识指向执行的箭头表示该执行请求由共识组件发起。(为了减少歧义,本文中将不使用箭头表示数据流).
11 — (共识发起者)V1 试图与其他共识参与者,即其他validator就该区块的执行结果达成共识。(共识→ 其他 Validators CO.3)
###区块的提交
12 — 当对区块的执行结果达成共识并签名的validator数量上具有绝对优势时,V1'的执行组件将从缓存中读取区块的推测性执行结果,并将区块中的所有交易提交到永久存储中。(共识 → 执行CO.4, EX.3), (Execution → Storage EX.4, ST.3)
13 — Alice账户现在的余额为100Libra币,序列号为6.如T5 被Bob重复广播,该交易将被拒绝,因为Alice账户的序列号(6)大于被重复广播的交易的序号(5)
Validator 组件交互
在上一部分中, 我们举例说明了一个典型的交易生命周期,从其被提交到Libra validator始,直至其被添加到区块链上止。现在我们将更加深入的探究validator处理交易并响应请求时,组件间的交互。对下述人员,这些信息可能十分值得参考:
- 想要全面了解底层系统是如何运作的;
- 有兴趣为Libra Core软件做出贡献的
为叙述方便,我们假设客户端提交一个交易TN 给一个validatorVX.对每个validator组件,我们将在其相对应子章节中具体描述组件之间的交互。此处应注意,用以描述组件间交互的子章节顺序并未严格按照其执行顺序。组件间的大部分交互都与交易的执行有关,少数与客户端发出的(查询区块链上的已知信息)请求有关。
我们先来看validator 节点的核心逻辑组件:
每一小节结尾都附有Libra Core中的相应文档。
准入控制(AC)

Facebook币Libra学习-2.交易生命周期的更多相关文章
- Facebook币Libra学习-1.核心概念
Libra区块链是一个基于Libra协议的加密认证的分布式数据库.本文将简略介绍Libra协议的核心概念.其详细说明请参阅Libra技术白皮书. Libra区块链由分布式的Validator节点网络维 ...
- Facebook币Libra学习-3.小试牛刀第一笔交易
我们提供了一个命令行界面(CLI)客户端来与区块链进行交互. 假设 本文档中的所有命令均假定: 您运行的是Linux(基于Red Hat或Debian)或macOS系统. 您可以稳定地连接到互联网. ...
- Facebook币Libra学习-6.发行属于自己的代币Token案例(含源码)
在这个简短的概述中,我们描述了我们在eToro标记化资产背后实施技术的初步经验,即MoveIR语言中的(eToken),用于在Libra网络上进行部署. Libra协议是一个确定性状态机,它将数据存储 ...
- Facebook币Libra学习-5.Move组织目录
Move是一种新的编程语言,旨在为Libra Blockchain提供安全可编程的基础. 组织 Move语言目录由五部分组成: 的虚拟机(VM),其中包含的字节码格式,字节码解释器,和基础设施执行事务 ...
- Facebook币Libra学习-4.新的智能合约语言Move入门
Move是一种新的编程语言,旨在为Libra Blockchain提供安全可编程的基础.Libra Blockchain中的帐户是任意数量的Move资源和Move模块的容器.提交给Libra Bloc ...
- Facebook libra开发者文档- 3 -Life of a Transaction交易生命周期
Life of a Transaction交易的生命周期 https://developers.libra.org/docs/life-of-a-transaction 为了更深入地了解Libra交易 ...
- Vue – 基础学习(1):对生命周期和钩子函的理解
一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...
- Android再学习-20141022-Activity的生命周期
20141022-Android再学习 如何在一个应用程序当中定义多个Activity 定义一个类,继承Activity 在该类当中,复写Activity当中的onCreate方法.onCreate( ...
- Cocos Creator学习三:生命周期回调函数
1.目的:学习生命周期回调函数以及回调顺序,更有利于我们逻辑的处理把控. 2.生命周期回调函数: 节点:指cc.Node:组件:指cc.Component. ①onLoad:脚本组件绑定的节点所在场景 ...
随机推荐
- javascript实现Html Table数据表分页
直接调用: <style type="text/css"> th { font-size:18px; ...
- springboot学习链接
https://github.com/wuyouzhuguli/SpringAll
- 《数据结构与算法之美》 <06>栈:如何实现浏览器的前进和后退功能?
浏览器的前进.后退功能,我想你肯定很熟悉吧? 当你依次访问完一串页面 a-b-c 之后,点击浏览器的后退按钮,就可以查看之前浏览过的页面 b 和 a.当你后退到页面 a,点击前进按钮,就可以重新查看页 ...
- linux(centos)下安装supervisor进程管理工具
在接触supervisor进程管理工具之前,使用springboot打包部署到linux服务器的流程是这样子的,如下图所示: 上图展示的就是最一般的流程,如果项目是小项目或者demo可以这样子去部署, ...
- YOLO---近段时间的练习目标
YOLO---近段时间的练习目标 yolo(darknet)官方主页:https://pjreddie.com/darknet/yolo/ 和在学校时用的不太一样了,有更新了- 还有一个常用版本: ...
- 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)
牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...
- gdb设置条件断点
b +行号 if i==9:设置条件断点 finish:执行到当前函数返回处(退出函数) bt:打印栈帧关系
- 那些吓人的 Linux 命令
本文转载于其它网站,原作者如有问题,请您及时联系我,及时删除! 哪些Linux命令会让人联想到妖魔鬼怪?不妨好好瞧一瞧! 每年一度的万圣节马上就要到来,是时候稍微关注一下Linux那吓人的一面了.哪些 ...
- 第90题:子集II
一. 问题描述 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2] 输出: [ [2], [1], [1, ...
- python基础认识
Python基础 一. 简介 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.豆瓣,Google.Yahoo等,甚至 ...