Libra教程之:Transaction的生命周期
文章目录
Transaction的生命周期
本文会以一个提交到Libra validator的transaction为例,来讲解Transaction和其他组件的交互,和具体的状态变化过程。
提交一个Transaction
这里我们举个例子,还是上篇文章的例子,A拥有110LBR,B拥有52LBR。接下来会构建一个原始交易Tn,将A拥有的10LBR转给B。
这个原始交易将包含如下字段:
A的帐户地址。
一个要代表A执行的动作的程序。它包含:
一个Move字节码表示的peer-to-peer交易脚本。
一个该脚本的输入列表(例如,B的帐户地址和付款金额)。
Gas价格 -A愿意为执行交易而为每单位Gas支付的金额。Gas是一种支付计算和存储费用的方式。Gas单位是对计算的抽象度量,没有固有的实际值。
A愿意为此交易支付的最大Gas金额。
交易的到期时间。
序列号
每个账号的交易都有一个唯一的序列号,用来标记这个账号发出的交易。
有了这个原始交易之后,我们会使用A的私钥对这个原始交易进行签名,签名后的交易包含如下内容:
- 原始交易
- A的公钥
- A的签名
我们假设这个Libra区块链上面有100个validators, 我们用V1到V100来表示。客户将这个Transaction提交到了V1。V1是这一轮共识的发起者。
交易入链的详细过程
我们先用一张图来表示这个Transaction入链的过程:

Transaction的入链过程可以分为五大步:
- 接收Transaction
- 和其他Validators共享这个Transaction
- 区块Proposing
- 执行区块并达成共识
- 提交区块
接收Transaction
客户端将transaction提交给V1,V1的admission Control(AC)模块将会接收这个transaction。
AC是验证器的唯一外部接口。 客户端对验证器的任何请求都将首先转到AC。
AC调用虚拟机(VM)的接口来验证该交易的正确性,包括:签名认证,判断账户是否有足够的金额,Tn不是一个重放交易等等信息。用以防止恶意节点。
这里虚拟机是用来执行Move脚本,也是Libra业务逻辑运行的地方。
如果Tn通过了VM的验证,那么进入下一步,AC将会把Transaction送到MemPool中。
Mempool是一个共享缓冲区,用于保存“等待”执行的事务。 将新事务添加到内存池后,内存池将与系统中的其他验证程序共享此事务。 为了减少“共享内存池”中的网络消耗,每个验证器负责将自己的事务传递给其他验证器。 当验证者从另一个验证者的内存池接收到事务时,该事务将添加到接收者验证者的内存池中。
和其他Validators共享这个Transaction
- Mempool将会把接收到的Transaction缓存起来,用于和其他验证器共享。
- 通过共享Mempool的协议,V1将会把自己mempool的交易和其他验证节点共享,并将从其他验证节点收到的交易放到自己的mempool中。
区块Proposing
我们假设V1是Proposing节点,那么它会将自己mempool的交易打包成一个Block,然后通过共识模块向其他验证节点提交一个Proposal。
共识模块负责通过与网络中的其他验证者一起参与共识协议来对交易块进行排序并就执行结果达成一致。
V1的共识模块负责协调所有验证者之间对拟议区块中交易顺序的协议。
执行区块并达成共识
为了达成共识,在第六步生成的Block会被传递到执行模块。执行的工作是协调一组事务的执行,并保持一个可以通过共识投票的临时状态。
执行模块管理虚拟机(VM)中事务的执行。 请注意,这里的执行是在区块中的交易达成一致之前进行的推测性执行。
将Block中的Transaction执行完成后,执行模块将Block中的Transaction追加到Libra区块链的Merkle累加器。 这是Merkle累加器的内存/临时版本。 执行这些事务的(提议/推测)结果将返回到共识组件。从“共识”到“执行”的箭头表示执行交易的请求是由共识组件发出的。
V1(共识领导者)试图与参与该共识的其他验证者就块的执行结果达成共识。
提交区块
如果区块的执行结果由一组具有多数表决权的验证器达成一致并签名,则验证器V1的执行模块从推测执行缓存中读取区块执行的结果,并提交区块中的所有事务并永久存储。
A的帐户现在将具有100LBR,其序列号将为n+1。如果Tn被B重放,则它将被拒绝,因为A的帐户的序列号n+1大于重放的事务的序列号n。
更多教程请参考 flydean的博客
Libra教程之:Transaction的生命周期的更多相关文章
- Facebook libra开发者文档- 3 -Life of a Transaction交易生命周期
Life of a Transaction交易的生命周期 https://developers.libra.org/docs/life-of-a-transaction 为了更深入地了解Libra交易 ...
- Libra教程之:执行Transactions
文章目录 Transactions是什么 Transactions运行的基础条件 Transactions的结构 执行Transactions Transactions是什么 我们讲到了Libra是一 ...
- Libra教程之:Libra protocol的逻辑数据模型
文章目录 Libra protocol简介 逻辑数据模型 账本状态 交易 账本历史 Libra protocol简介 Libra区块链本质上是一个加密数据库,这个数据库是通过Libra protoco ...
- Libra教程之:运行自定义move modules
文章目录 简介 创建Move modules 启动本地网络 创建账号并送测试币 编译Move Module 发布编译好的Module 创建交易脚本 编译编译脚本 执行脚本 简介 因为Libra和Mov ...
- Libra教程之:来了,你最爱的Move语言
文章目录 Move语言 Move的核心概念 Move交易脚本 Move modules Move resources 写一个Move程序 编写交易脚本 编写自己的Modules Move语言 Move ...
- Libra教程之:Libra testnet使用指南
文章目录 Libra testnet网络 下载和安装Libra 编译Libra client并连接到Testnet网络 创建两个A和B的两个账号 检查libra cli Client是否运行 创建A的 ...
- Libra教程之:move语言的特点和例子
文章目录 move语言的特点 资源优先 灵活性 安全性 可验证性 Move语句初探 点对点支付交易脚本 Currency Module move语言的特点 Libra的目标是打造一个全球话的金融和货币 ...
- Libra教程之:Libra协议的关键概念
文章目录 Libra协议 交易和状态 交易详解 账本状态详解 版本数据库 账户 账户地址 Proof 验证节点 存储 Libra协议 Libra协议是Libra区块链的基础,本文主要讲解Libra协议 ...
- Libra教程之:数据结构和存储
文章目录 存储的数据结构 账本历史 账本状态 账户 事件 前面的文章我们知道,libra会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...
随机推荐
- vulnhub~incllusiveness
这个机子相对简单一点,但是也是从中发现了自己不少问题 技能一: nmap 扫描发现了21,22 ,80三个端口,并且ftp服务允许匿名登录,在pub目录下面有writeable权限,这就好办了.我以 ...
- Zookeeper是如何实现分布式锁的
[toc] Zookeeper是如何实现分布式锁的 标签 : Zookeeper 分布式 实现分布式锁要考虑的重要问题 1. 三个核心要素 加锁, 解锁, 锁超时 2. 三个问题 要保证原子性操作, ...
- python:列表生成式的学习
看个例子: # 定义一个列表 l=[1,2,3,4,5] #()用于创建一个list,结果依次返回列表l的元素的平方,返回list s=[i*i for i in l] # 打印列表s print(s ...
- python--一些知识点
一. ==和is的区别 1. ==意为左右两端的值是否相等 2. is意为,左边是否就是右边,python会检测左右两边的引用位置,相等才是True(注:一定范围内的数字,左右两边为True) 二. ...
- JavaScript form表单提交与验证
原网址:https://blog.csdn.net/vipwxs/article/details/79119701 一.form对象的属性: name:获取表单的名称,该name一般给JS使用 met ...
- Linux命文件与目录属性
一.linux系统中文件标志 d ===> 目录 - ===> 文件 l ===> 连接文件 b ===> 可供存储设备文件 c ===> 串形端口设备文件(鼠标,键盘) ...
- Python库-Pandas
Pandas是基于NumPy的一种数据分析工具,提供了大量使我们快速便捷处理数据的函数和方法. 中文官网地址:https://www.pypandas.cn Pandas基于两种数据类型:Series ...
- String 对象-->判断是否相等
1.定义和用法 == 值相等 === 绝对相等(值和类型都相等) 举例: var str = '8' var str1 = 8 console.log(str == str1) console.log ...
- "额外插入的文本"组件:<ins> —— 快应用组件库H-UI
 <import name="ins" src="../Common/ui/h-ui/text/c_tag_underline"></imp ...
- lr组织架构模式
基本模式:默认目录由三部分组成 Vuser_int Action,…… Vuser_end 执行时会按照这三个顺序执行(Action部分是可以循环的,也可多个action) 1.lr12录制前可以设置 ...