交易——区块链系统的核心,负责记录区块链上发生的一切。

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

本文将梳理交易的整个流转过程,一窥FISCO BCOS交易完整生命周期。

交易生成

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

  1. 发送地址:即用户自己的账户,用于表明交易来自何处。
  2. 接收地址:FISCO BCOS中的交易分为两类,一类是部署合约的交易,一类是调用合约的交易。前者,由于交易并没有特定的接收对象,因此规定这类交易的接收地址固定为0x0;后者,则需要将交易的接收地址置为链上合约的地址。
  3. 交易相关的数据:一笔交易往往需要一些用户提供的输入来执行用户期望的操作,这些输入会以二进制的形式被编码到交易中。
  4. 交易签名:为了表明交易确实是由自己发送,用户会向SDK提供私钥来让客户端对交易进行签名,其中私钥和用户账户是一一对应的关系。

之后,区块链客户端会再向交易填充一些必要的字段,如用于防交易重放的交易ID及blockLimit。交易的具体结构和字段含义可以参考编码协议文档,交易构造完成后,客户端随后便通过Channel或RPC信道将交易发送给节点。

交易池

区块链交易被发送到节点后,节点会通过验证交易签名的方式来验证一笔交易是否合法。

若一笔交易合法,则节点会进一步检查该交易是否重复出现过,若从未出现过,则将交易加入交易池缓存起来。

若交易不合法或交易重复出现,则将直接丢弃交易。

交易广播

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

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

交易打包

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

交易执行

节点在收到区块后,会调用区块验证器把交易从区块中逐一拿出来执行。

如果是预编译合约代码,验证器中的执行引擎会直接调用相应的C++功能,否则执行引擎就会把交易交给EVM(以太坊虚拟机)执行。

交易可能会执行成功,也可能因为逻辑错误或Gas不足等原因执行失败。

交易执行的结果和状态会封装在交易回执中返回。

交易共识

区块链要求节点间就区块的执行结果达成一致才能出块。

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

交易落盘

在共识出块后,节点需要将区块中的交易及执行结果写入硬盘永久保存,

并更新区块高度与区块哈希的映射表等内容,

然后节点会从交易池中剔除已落盘的交易,

以开始新一轮的出块流程。

用户可以通过交易哈希等信息,在链上的历史数据中查询自己感兴趣的交易数据及回执信息。

https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/design/tx_procedure.html

FISCO BCOS 区块链交易流程 区块相关推荐

  1. 区块链入门教程(4)--搭建单机四节点FISCO BCOS联盟链

    文章目录 1. 任务背景 2. 任务目标 3. 相关知识点 4. 任务实操 4.1 切换root用户 4.2 安装依赖 4.3 创建目录,下载安装脚本 4.4 搭建单群组4节点联盟链 4.5 启动FI ...

  2. 区块链交易隐私如何保证?华为零知识证明技术实战解析

    摘要:本文通过介绍华为如何在同态加密及零知识证明框架的集成介绍来介绍了一些对金融领域交易隐私保护的思路,通过代码结和应用场景描述了zksnark如何集成到现有联盟链体系保护交易隐私. 本文分享自华为云 ...

  3. 基于区块链交易技术开发的证券

    基于区块链交易技术开发的证券 区块链交易技术在金融市场还不是主流的技术运用,但是加密货币在金融领域的影响力却不可同日而语.虽然目前的加密货币市场低迷,但是区块链技术却在全球各个国家引起了行业的重视. ...

  4. 第17讲 | 去中心化与区块链交易性能

    通过前面的文章我们了解了一些区块链的基本技术细节,今天这篇文章我将带你一起看看区块链争议的最大内容--去中心化与区块链交易性能. 比特币和以太坊的TPS一直被技术领域的人所诟病,或许这与工程师&quo ...

  5. Ubuntu部署 Blockscout 区块链浏览器流程

    Ubuntu部署 Blockscout 区块链浏览器流程 基础环境安装 Erlang 和 Elixir # 安装最新的erlang包源,不执行这一步,无法安装最新版本的erlang wget http ...

  6. FISCO BCOS 联盟链Pro搭建

    FISCO BCOS Pro版本 版本说明 FISCO BCOS 3.0支持Pro版本微服务区块链架构,Pro版本FISCO BCOS包含RPC服务.Gateway服务和节点服务,每个服务均可独立部署 ...

  7. BlockChain:区块链入门课程 -- 区块链之类型 、应用程序、技术挑战和潜力

    BlockChain:区块链 类型 .应用程序.面临挑战和潜力 区块链的类型 不同类型的区块链协议概述.我们将深入探讨共识方法,了解公共区块,财团区块和私有区块链之间的差异; 他们的用途和价值主张. ...

  8. 区块链为什么叫区块链

    各位朋友大家晚上好,今天和大家分享的主题是区块链为什么叫区块链. 我之所以想把这个问题拿出来单独说,是因为在网上有很多朋友容易把 比特币 区块链和数字货币 这三者混为一谈,认为三者是一个东西.那今天呢 ...

  9. 相亲时, 如何向 TA 解释区块链? | 春哥区块链创业记

    来源 | <春哥区块链创业记> 作者 | 陈炯.芮苏英.冯春.陆晟 责编 | 乔治 出品 | 区块链大本营(blockchain_camp) 信春哥得永生?哈哈哈,此春哥非彼春哥... 这 ...

  10. 什么是区块链?为什么需要区块链?

    从个故事开始吧 第一章:信任 账本时代的故事: 小王问你借100W,答应一年后还你200W.你心动了,可是又怕他不还.于是乎你找到了你们村长做鉴证人,你打了一个借条,上面写着:"2018年6 ...

最新文章

  1. 让AI计算无处不在,华为干了一件大事
  2. 739. Daily Temperatures
  3. atmega8 例程:T1定时器 快速PWM
  4. WebService大讲堂之Axis2(4):二进制文件传输
  5. 0.2 控制系统的状态空间表示法
  6. 网络爬虫(一):配置selenium、pycharm(windows平台)
  7. Java实现基数排序及其推导过程 Radix Sort
  8. C++ternary search三元搜索的实现算法(附完整源码)
  9. pcl_openmap_OpenMap教程–第1部分
  10. mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)
  11. 华为手机丢失定位网站_手机端网站优化要从网站的设计和定位开始入手
  12. 【李宏毅机器学习】Unsupervised Learning - Word Embedding 无监督学习 - 词嵌入(p22) 学习笔记
  13. python_16(bootstrap)
  14. d3 scale详解
  15. 地球上出现过的CPU完全收藏.part4
  16. CURL的学习和应用
  17. 数分下第5讲(8.3节) 二次曲面方程和曲线方程
  18. 找不到项目 该项不在计算机中,删除文件夹提示找不到该项目怎么删除?“找不到该项目”强删方法(图文)...
  19. 企业微信网页授权登陆
  20. 无损连接和保持依赖性(有脑就行,尽量说人话版本)

热门文章

  1. 一个很好的String组合连接的方法(StringBuffer)
  2. 39-java 输入输出总结
  3. SpringBoot 定义通过字段验证
  4. 常用tab选项卡代码
  5. JDBC数据源(DataSource)的简单实现
  6. win32收不到F10按键消息解决的方法
  7. 简单C#生成静态及相关读取模板文件
  8. VC编程-预编译头文件(precompiled header)
  9. 孙鑫VC学习笔记:第十八讲 ActiveX 控件
  10. matlab车牌定位与识别,基于matlab车牌的定位与分割识别程序概要