一、交易结构及其RLP编码描述

FISCO BCOS的交易结构在原以太坊的交易结构的基础上,有所增减字段。FISCO BCOS 2.0+的交易结构字段如下:

name type description RLP index RC1 RLP index RC2
type enum 交易类型,表明该交易是创建合约还是调用合约交易,初始为空合约 - -
nonce u256 消息发送方提供的随机数,用于唯一标识交易 0 0
value u256 转账数额,目前去币化的FISCO BCOS不使用该字段 5 5
receiveAddress h160 交易接收方地址,type为创建合约时该地址为0x0 4 4
gasPrice u256 本次交易的gas的单价,FISCO BCOS中为固定值300,000,000 1 1
gas u256 本次交易允许最多消耗的gas数量,FISCO BCOS可配置该值 2 2
data vector< byte > 与交易相关的数据,或者是创建合约时的初始化参数 6 6
chainId u256 记录本次交易所属的链信息/业务信息 - 7
groupId u256 记录本次交易所属的群组 - 8
extraData vector< byte > 预留字段,记录交易信息,内部使用“#”分割信息 - 9
vrs SignatureStruct 交易发送方对交易7字段RLP编码后的哈希值签名生成的数据 7,8,9 10,11,12
hashWith h256 交易结构所有字段(含签名信息)RLP编码后的哈希值 - -
sender h160 交易发送方地址,基于vrs生成 - -
blockLimit u256 交易生命周期,该交易最晚被处理的块高,FISCO BCOS新增字段 3 3
importTime u256 交易进入交易池的unix时间戳,FISCO BCOS新增字段 - -
rpcCallback function 交易出块后RPC回调,FISCO BCOS新增字段 - -

RC1的hashWith字段(也称交易hash/交易唯一标识)的生成流程如下:

RC2的生成流程也类似,只是在第一步rlp+hash的transaction结构体中增加chainId、groupId和extraData三个字段。

二、区块结构及其RLP编码描述

FISCO BCOS的区块由以下五部分组成

rc1版本

name description RLP index
blockHeader 区块头RLP编码 0
transactions 交易列表RLP编码 1
transactionReceipts 交易回执列表RLP编码 2
hash 区块头RLP编码后的哈希值 3
sigList PBFT共识落盘阶段收集到的节点签名信息,Raft不使用 4

rc2、rc3、2.0及以上版本

name description RLP index
blockHeader 区块头RLP编码 0
transactions 交易列表RLP编码 1
hash 区块头RLP编码后的哈希值 2
sigList PBFT共识落盘阶段收集到的节点签名信息,Raft不使用 3
transactionReceipts 交易回执列表RLP编码 4

FISCO BCOS的区块头中每个字段意义如下:

name type description RLP index
parentHash h256 父区块的哈希值 0
stateRoot h256 状态树的根哈希值 1
transactionsRoot h256 交易树的根哈希值 2
receiptsRoot h256 收据树的根哈希值 3
dbHash h256 分布式存储通过计算哈希值来记录一区块中写入的数据,FISCO BCOS新增字段 4
logBloom LogBloom 交易收据日志组成的Bloom过滤器,FISCO BCOS目前尚未使用 5
number int64_t 本区块的块号,块号从0号开始计算 6
gasLimit u256 本区块中所有交易消耗的Gas上限 7
gasUsed u256 本区块中所有交易使用的Gas之和 8
timestamp int64_t 打包区块的unix时间戳 9
extraData vector 区块的附加数据,FISCO BCOS目前只用于在第0块中记录群组genesis文件信息 10
sealer u256 打包区块的节点在共识节点列表中的索引,FISCO BCOS新增字段 11
sealerList vector 区块的共识节点列表(不含观察节点),FISCO BCOS新增字段 12
hash h256 区块头前13个字段RLP编码后的哈希值,FISCO BCOS新增字段 -

三、交易收据

name type description RLP index
stateRoot h256 区块状态根 0
gasUsed u256 交易消耗的gas 1
contractAddress Address 部署合约的地址 2
bloom h2048 布隆滤波器 3
status h256 交易执行结果的状态码 4
output LogBloom 交易返回值 5
logs LogEntry[] event logs 6

四、网络传输协议

FISCO BCOS 目前有两类数据包格式,

  • 节点与节点间通信的数据包为P2PMessage格式,
  • 节点与SDK间通信的数据包为ChannelMessage格式。

1. P2PMessage

v2.0.0-rc2扩展了群组ID和模块ID范围,最多支持32767个群组,且新增了Version字段来支持其他特性(如网络压缩),包头大小为16字节,v2.0.0-rc2的网络数据包结构如下:

name type description
Length uint32_t 数据包长度,含包头和数据
Version uint16_t 记录数据包版本和特性信息,目前最高位0x8000用于记录数据包是否压缩
groupID (GID) int16_t 群组ID,范围1-32767
ModuleID (MID) uint16_t 模块ID,范围1-65535
PacketType uint16_t 数据包类型,同一模块ID下的子协议标识
Seq uint32_t 数据包序列号,每个数据包自增
Data vector 数据本身,长度为lenght-12

补充

  1. P2PMessage不限制包大小,由上层调用模块(共识/同步/AMOP等)进行包大小管理;
  2. 群组ID和模块ID可唯一标识协议ID(protocolID),三者关系为protocolID = (groupID << sizeof(groupID)*8) | ModuleID
  3. 数据包通过protocolID所在的16位二进制数值来区分请求包和响应包,大于0为请求包,小于0为相应包。
  4. 目前AMOP使用的packetType有SendTopicSeq = 1,RequestTopics = 2,SendTopics = 3

ChannelMessage v2

字段 类型 长度(Byte) 描述
length uint32_t 4 数据包长度,含包头和数据,大端
type uint16_t 2 数据包类型,大端
seq string 32 数据包序列号,32字节uuid
result int32_t 4 错误码,大端
data bytes length-42 数据包体,字节流

AMOP消息包

AMOP消息包继承ChannelMessage包结构,在data字段添加了自定义内容。包括0x30,0x31,0x35,0x1001

长度Byte 说明
length 1 Topic的长度
topic length topic名

五、消息包类型

数据包类型枚举值及其对应的含义如下:

类型 包体 描述 解释
0x12 JSONRPC 2.0格式 RPC接口消息包 SDK->节点
0x13 json格式心跳包{"heartbeat":"0"} 心跳包

0:SDK->节点,

1:节点->SDK

0x14

SDK->节点的包体{"minimumSupport":version,"maximumSupport":version,"clientType":"client type"},

节点->SDK的包体

{"protocol":version,"nodeVersion":"fisco-bcos version"

握手包,json格式的协议版本协商 SDK<->节点,双向
0x30 AMOP消息包包体 AMOP请求包 SDK<->节点,双向
0x31 失败的AMOP消息的包体 AMOP失败响应包 节点->SDK或节点->节点
0x32 json数组,存储SDK监听的Topics 上报Topic信息 SDK->节点
0x35 AMOP消息包包体 AMOP多播消息 节点->节点
0x1000 json格式的交易上链通知 交易上链回调 节点->SDK
0x1001 json格式的区块上链通知{"groupID":"groupID","blockNumber":"blockNumber"} 区块高度通知 节点->SDK

错误码

code message
0 成功
100 节点不可达
101 SDK不可达
102 超时

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

FISCO BCOS 数据结构与编码协议 交易结构 区块结构相关推荐

  1. 向彪fisco bcos入门教程,为了直观安装区块链浏览器(九)

    前言: 上一章节,我们的应用已经改造并且上线部署测试成功了,但是为了更好的查询区块信息,彪哥准备改造一下官方的区块链浏览器. 正文: 参考官方的教程:https://fisco-bcos-docume ...

  2. 公告 | FISCO BCOS v3.0-rc4发布,新增Max版,可支撑海量交易上链

    作为一个稳定.高效.安全的区块链底层平台,FISCO BCOS一方面致力于保障系统稳定性.兼容性.鲁棒性.易用性,另一方面专注于提升区块链底层平台的性能.可扩展性. 自FISCO BCOS v3.0开 ...

  3. fisco bcos区块链的同步及其性能优化方法

    作者:石翔 FISCO BCOS开源社区 2019-09-05 同步,是区块链中非常重要的流程,从功能上分为"交易同步"和"状态同步". 交易同步在交易提交时执 ...

  4. 区块链码农飙车 | FISCO BCOS的性能优化方案最全解密

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

  5. FISCO BCOS 2022年度贡献者榜单

    平台践行开源共创的精神,FISCO BCOS开源社区致力打造开放多元的开源联盟链生态. 目前,社区已汇聚了超70000名社区用户,大家聚集于此碰撞观点.交流技术,围绕FISCO BCOS开发各类实用的 ...

  6. 区块链 Fisco bcos 智能合约(19)-区块链性能腾飞:基于DAG的并行交易执行引擎PTE

    在区块链世界中,交易是组成事务的基本单元. 交易吞吐量很大程度上能限制或拓宽区块链业务的适用场景,愈高的吞吐量,意味着区块链能够支持愈广的适用范围和愈大的用户规模. 当前,反映交易吞吐量的TPS(Tr ...

  7. FISCO BCOS Transaction execution error交易事务合约执行失败原因

    error|2022-06-21 19:31:31.351916|[g:1][EXECUTIVE][TxExeError]Transaction execution error,Transaction ...

  8. FISCO BCOS 区块链

    FISCO BCOS是由国内企业主导研发.对外开源.安全可控的企业级金融联盟链底层平台,由金链盟开源工作组协作打造,并于2017年正式对外开源. 社区以开源链接多方,截止2020年5月,汇聚了超100 ...

  9. 联盟链中的Hyperledger Fabric、FISCO BCOS和CITA

    本文援引自链接:https://mp.weixin.qq.com/s/4JAZGwI32bZNlxBqPfkihg 一.摘要 第 46 届世界经济论坛达沃斯年会将区块链与人工智能.自动驾驶等一并列入& ...

  10. 区块链底层平台FISCO BCOS的网络压缩功能如何?

    FISCO BCOS是完全开源的联盟区块链底层技术平台,由金融区块链合作联盟(深圳)(简称金链盟)成立开源工作组通力打造.开源工作组成员包括博彦科技.华为.深证通.神州数码.四方精创.腾讯.微众银行. ...

最新文章

  1. oracle全组件安装,Oracle text组件安装
  2. .h头文件 .lib动态链接库文件 .dll 动态链接库
  3. 协方差矩阵的概念,算法以及自己的一些理解
  4. objective-c 逐帧动画
  5. 如何使用Java keytool命令行创建一个自签名证书
  6. 云服务器,价格其实不便宜,但为什么还要用呢
  7. k8s-自动横向伸缩pod 根据CPU使用率,QPS访问数监控指标
  8. 测试 MathJax 排版功效
  9. mysql 字段存文件_使用数据库(mysql)字段保存文件
  10. 完全背包问题python_令人头疼的背包九讲(2)完全背包问题
  11. CodeForces round 753 problem A Linear Keyboard(线性键盘)
  12. 计算机视觉中的特征提取方式
  13. android 动画中插值器Interpolator详解
  14. C#爬虫项目:SWorld阅读
  15. 浅谈计算机软硬件的日常维修与维护,浅谈计算机硬件的日常维护工作
  16. 【知识分享】Batch(批处理)-学生管理系统可视化界面的应用
  17. 小白新人Python哪些基础知识必学?
  18. IRQL深入解析(1)--IRQL级别
  19. 富士康Java开发面试题目
  20. miui nexus5x_谷歌太子式微,Nexus是否将要被废?

热门文章

  1. inode-软链接与硬链接
  2. 奇怪的Adobe dynamic link
  3. bzoj2631:tree
  4. Comet OJ 热身赛(K题)principal(括号匹配问题+stack模拟)
  5. iOS自动布局高级用法 纯代码约束写法
  6. 渗透杂记-2013-07-13 关于SMB版本的扫描
  7. MSSQL自动备份数据库(转载)
  8. Oracle常用函数笔记
  9. java池模式_JAVA模式 对象池 简要代码示例
  10. oauth2 token为空拦截_OAuth2 Token 一定要放在请求头中吗?