HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

FISCO BCOS 中交易的一生

  • 2019-11-18
  • 本文字数:1400 字

    阅读完需:约 5 分钟

FISCO BCOS中交易的一生

交易——区块链系统的核心,负责记录区块链上发生的一切。区块链引入智能合约后,交易便超脱『价值转移』的原始定义,其更加精准的定义应该是区块链中一次事务的数字记录。无论大小事务,都需要交易的参与。


交易的一生,贯穿下图所示的各个阶段。本文将梳理交易的整个流转过程,一窥 FISCO BCOS 交易完整生命周期。


交易生成

用户的请求给到客户端后,客户端会构建出一笔有效交易,交易中包括以下关键信息:


发送地址:即用户自己的账户,用于表明交易来自何处。


接收地址:FISCO BCOS 中的交易分为两类,一类是部署合约的交易,一类是调用合约的交易。前者,由于交易并没有特定的接收对象,因此规定这类交易的接收地址固定为 0x0;后者,则需要将交易的接收地址置为链上合约的地址。


交易相关的数据:一笔交易往往需要一些用户提供的输入来执行用户期望的操作,这些输入会以二进制的形式被编码到交易中。


交易签名:为了表明交易确实是由自己发送,用户会向 SDK 提供私钥来让客户端对交易进行签名,其中私钥和用户账户是一一对应的关系。


之后,区块链客户端会再向交易填充一些必要的字段,如用于防交易重放的交易 ID 及 blockLimit。


交易的具体结构和字段含义可以参考编码协议文档


交易构造完成后,客户端随后便通过 Channel 或 RPC 信道将交易发送给节点。


交易池

区块链交易被发送到节点后,节点会通过验证交易签名的方式来验证一笔交易是否合法。若一笔交易合法,则节点会进一步检查该交易是否重复出现过,若从未出现过,则将交易加入交易池缓存起来。若交易不合法或交易重复出现,则将直接丢弃交易。


交易广播

节点在收到交易后,除了将交易缓存在交易池外,节点还会将交易广播至该节点已知的其他节点。


为了能让交易尽可能到达所有节点,其他收到广播过来的交易节点,也会根据一些精巧的策略选择一些节点,将交易再一次进行广播,比如:对于从其他节点转发过来的交易,节点只会随机选择 25%的节点再次广播,因为这种情况一般意味着交易已经开始在网络中被节点接力传递,缩减广播的规模有助于避免因网络中冗余的交易太多而出现的广播风暴问题。

交易打包

为了提高交易处理效率,同时也为了确定交易之后的执行顺序保证事务性,当交易池中有交易时,Sealer 线程负责从交易池中按照先进先出的顺序取出一定数量的交易,组装成待共识区块,随后待共识区块会被发往各个节点进行处理。


交易执行

节点在收到区块后,会调用区块验证器把交易从区块中逐一拿出来执行。如果是预编译合约代码,验证器中的执行引擎会直接调用相应的 C++功能,否则执行引擎就会把交易交给 EVM(以太坊虚拟机)执行。


交易可能会执行成功,也可能因为逻辑错误或 Gas 不足等原因执行失败。交易执行的结果和状态会封装在交易回执中返回。


交易共识

区块链要求节点间就区块的执行结果达成一致才能出块。FISCO BCOS 中一般采用 PBFT 算法保证整个系统的一致性,其大概流程是:各个节点先独立执行相同的区块,随后节点间交换各自的执行结果,如果发现超过 2/3 的节点都得出了相同的执行结果,那说明这个区块在大多数节点上取得了一致,节点便会开始出块。

交易落盘

在共识出块后,节点需要将区块中的交易及执行结果写入硬盘永久保存,并更新区块高度与区块哈希的映射表等内容,然后节点会从交易池中剔除已落盘的交易,以开始新一轮的出块流程。用户可以通过交易哈希等信息,在链上的历史数据中查询自己感兴趣的交易数据及回执信息。


本文转载自 FISCO BCOS 开源社区


2019-11-18 21:421261

评论

发布
暂无评论
发现更多内容

英特尔Flex系列GPU支持数字内容创作,提高创意生产力

E科讯

如何用好数智员工实现轻松采购?

用友BIP

数智底座 Pass平台 采购云

SaaS产品如何用好大模型?腾讯云给出了一个参考答案

ToB行业头条

ABAQUS 在按键手感分析中的应用

思茂信息

软件设计 abaqus abaqus软件 abaqus有限元仿真 有限元仿真技术

国内外常用的Scrum敏捷看板工具

顿顿顿

Scrum 敏捷开发

堡垒机免费版有哪些优点?哪家免费堡垒机好用?

行云管家

网络安全 堡垒机 行云管家 免费软件 免费堡垒机

深度解读 Linux 内核级通用内存池 —— kmalloc 体系

bin的技术小屋

内存管理 Linux内核 Linux内核源码 kernel

性能提升30%!袋鼠云数栈基于 Apache Hudi 的性能优化实战解析

袋鼠云数栈

数据湖 Hudi 企业号 6 月 PK 榜

软件测试/测试开发丨学习笔记之Python运算符

测试人

Python 程序员 软件测试 运算符

2023京东全球科技探索者大会暨京东云峰会来了!

京东科技开发者

人工智能 AI 京东云 AIGC 企业号 6 月 PK 榜

稳,从数据库连接池 testOnBorrow 看架构设计 | 京东云技术团队

京东科技开发者

数据库 架构设计 数据库连接池 企业号 6 月 PK 榜 testOnBorrow

TDengine 3.0.5.0 正式发布,系统稳定性进一步提升

爱倒腾的程序员

涛思数据 时序数据库 ​TDengine

敏捷项目管理流程及工具

顿顿顿

敏捷项目 敏捷项目管理 敏捷工具 scrum敏捷工具

PAGC2023 金帆奖 | 融云三度荣膺「年度优秀出海产品技术服务」奖

融云 RongCloud

网络 通信 融云 PAGC

透明LED橱窗屏的作用

Dylan

解决方案 LED显示屏 室外显示屏 屏幕

ZEGO 即构音乐场景降噪技术解析

ZEGO即构

音视频

华为云AI实战训练营即将截止,赶紧报名,不要错过!

华为云PaaS服务小智

云计算 华为 华为云 华为云开发者联盟

师资培训|《经管大数据》课程教学能力提升训练营课程安排

ModelWhale

数据分析 数据科学 经管 交叉学科 师资

常用的表格检测识别方法——表格内容识别方法

合合技术团队

人工智能 表格识别 表格检测

金华等保测评机构名单以及电话信息看这里!

行云管家

等保 等级保护 等保测评 金华 浙江

AI教你实现敏捷游戏自由,再也不用担心陷入瓶颈啦!

禅道项目管理

项目管理 AI ChatGPT

详解深度学习中推荐系统的经典模型

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 6 月 PK 榜

OpenHarmony中Ability组件基本用法

坚果

OpenHarmony 6 月 优质更文活动

如何使用敏捷工具管理敏捷缺陷

顿顿顿

Scrum 敏捷开发 缺陷管理

火山引擎DataTester:企业如何使用A/B实验优化商业化能力

字节跳动数据平台

A/B 测试

软件测试/测试开发丨学习笔记之Python控制流-分支、循环

测试人

Python 程序员 软件测试 分支 循环

Go应用性能优化的8个最佳实践,快速提升资源利用效率!

SEAL安全

Go 企业号 6 月 PK 榜

建设数字工厂:华为云数字工厂平台接入第三方网关设备数据

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

客户案例|某知名连锁咖啡品牌点餐小程序排障实录

观测云

可观测性 观测云 云原生可观测 可观测性用观测云

师资培训通知 | 数字化转型背景下《经管大数据》课程教学能力进阶提升训练营

ModelWhale

数据分析 大数据课程 经管 师资培训

FISCO BCOS中交易的一生_开源_李陈希_InfoQ精选文章