在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

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:421625

评论

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

什么会导致Java应用程序的CPU使用率飙升,高级Java开发技术

Java 程序员 后端

Vue进阶(幺伍幺):Vue 应用 key 提升页面渲染性能

No Silver Bullet

Vue 10月月更

从基础到源码统统帮你搞定,Spring中经典的9种设计模式,一定要记牢

Java 程序员 后端

作为一名Java面试者你应该知道的,阿里,快手,拼多多等7家大厂Java面试真题

Java 程序员 后端

中软国际Java面试,java基础入门传智播客课后答案,Java开发面试技巧

Java 程序员 后端

作为Java程序员应该怎样去规划自己的学习路线,Java面试知识点

Java 程序员 后端

作为一名Java面试者你应该知道的,Java多进程从头讲到尾

Java 程序员 后端

从基础到源码统统帮你搞定,mysql教程百度云,面试真题解析

Java 程序员 后端

价值2000元的Java学习资源泄露,Java中接口的使用你得知道

Java 程序员 后端

作为Java程序员,java尚学堂和尚硅谷,看完我工资从12K变成了20K

Java 程序员 后端

二本Java小菜鸟4面字节跳动被秒成渣渣,【Spring注解驱动开发

Java 程序员 后端

今年最新整理的《高频Java面试题集合》,Java开发者必须收藏的8个开源库

Java 程序员 后端

从零开始学数据结构和算法,offer来了java面试百度云版,学Java必看书籍

Java 程序员 后端

为什么StringBuilder是线程不安全的,Mybatis源码解析

Java 程序员 后端

京东面试真题解析,泪目

Java 程序员 后端

从青铜到王者的路线,mysql视频教程,MongoDB数据分布不均的解决方案

Java 程序员 后端

作为Java程序员应该怎样去规划自己的学习路线,2021Java者真的太难了

Java 程序员 后端

为什么StringBuilder是线程不安全的,Java高级工程师进阶学习

Java 程序员 后端

五面阿里拿下飞猪事业部offer,腾讯Redis压轴笔记

Java 程序员 后端

京东面试真题解析,程序员极客实验室,Java面试基本问题

Java 程序员 后端

从消息中间件看分布式系统的多种套路,Java进阶篇

Java 程序员 后端

互联网大厂面试必问的JVM底层原理,高级Java开发必看

Java 程序员 后端

五年Java开发者小米、阿里面经,2021最新Java框架体系架构面试题

Java 程序员 后端

京东数科Java面试,尚学堂马士兵java视频教程下载,满满的干货

Java 程序员 后端

从JDK源码学习Hashmap,跳槽面试大厂被拒

Java 程序员 后端

从思路到不断优化,字节跳动算法工程师面试经验

Java 程序员 后端

作为一个码农终于把MySQL日记看懂了,中软国际Java笔试题和答案

Java 程序员 后端

两年Java开发面试题,java教程视频马士兵,大厂Java面试真题精选

Java 程序员 后端

从头到尾,都是精华,java就业班百度网盘,字节跳动算法工程师面试总结

Java 程序员 后端

从底层开始带你了解并发编程,Java资料下载

Java 程序员 后端

五分钟搞懂MySQL主从复制原理,37岁程序员被裁

Java 程序员 后端

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