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会把所有的数据都存储在账本中.为了方便业务逻辑和数据的校验,这个存储是以特定的数据结构来实现的,这里我们叫做验证 ...
随机推荐
- 在函数中修改全局变量的值,需要加global关键字
一.引用 使用到的全局变量只是作为引用,不在函数中修改它的值的话,不需要加global关键字.如: #! /usr/bin/python a = 1 b = [2, 3] def func(): if ...
- Nginx知多少系列之(五)Linux下托管.NET Core项目
目录 1.前言 2.安装 3.配置文件详解 4.Linux下托管.NET Core项目 5.Linux下.NET Core项目负载均衡 6.Linux下.NET Core项目Nginx+Keepali ...
- JSP 简介(转载)
什么是Java Server Pages? JSP全称Java Server Pages,是一种动态网页开发技术.它使用JSP标签在HTML网页中插入Java代码.标签通常以<%开头以%> ...
- shell编写一个判断脚本
shell编写一个判断脚本 4.1问题 本例要求在虚拟机server0上创建/roo ...
- Vulnhub DC-7靶机渗透
信息搜集 nmap -sP 192.168.146.0/24 #主机发现 nmap -A 192.168.146.144 #端口扫描 查看robots.txt,看看admin,403,其他没有什么可利 ...
- Array(数组)对象-->数组的访问
1.访问数组: 通过指定数组名以及索引号码,你可以访问某个特定的元素. 格式: 数组对象名[下标] 例如:arr[0] 就是访问数组第一个值 var arr = new Array(3); arr[ ...
- Vue-router 第10节 路由中的钩子
Vue-router 第10节 路由中的钩子 [TOC] 第10节 路由中的钩子 我们知道一个组件从进入到销毁有很多的钩子函数,同样在路由中也设置了钩子函数.路由的钩子选项可以写在路由配置文件中,也可 ...
- buuctf misc wp 02
buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...
- 使用ffprobe 查询wav文件信息
使用ffprobe 查询wav文件信息 安装 安装过程和ffmepg相同不在赘述 不带参数查询文件信息 ffprobe ZH_biaobei_标准合成_甜美女声_楠楠_5_5_5_6_1_4047db ...
- Linux终端命令格式
01.终端命令格式 command [-options] [parameter] 说明: command:命令名,响应功能的英文单词或单词的缩写 [-options]:选项,可用来对命令进行控制,也可 ...