兄弟连区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一
区块链教程Fabric1.0源代码分析Tx(Transaction 交易)一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。
Fabric 1.0源代码笔记 之 Tx(Transaction 交易)
1、Tx概述
Tx,即Transaction,交易或事务。
Tx代码分布目录结构如下:
- protos/common/common.pb.go,交易的封装即Envelope结构体。也包括Payload、Header、ChannelHeader和SignatureHeader。
- protos/utils目录,交易相关部分工具函数,包括txutils.go、proputils.go和commonutils.go。
- core/ledger/kvledger/txmgmt目录
* rwsetutil目录,读写集相关结构体及方法。
* version目录,version.Height结构体及方法。
* validator目录,Validator接口及实现。
* txmgr目录,TxMgr接口及实现。
2、交易的封装Envelope结构体
有个图4
2.1、Envelope结构体
Envelope直译为信封,封装Payload和Signature。
type Envelope struct { //用签名包装Payload,以便对信息做身份验证 Payload []byte //Payload序列化 Signature []byte //Payload header中指定的创建者签名 } //代码在protos/common/common.pb.go
2.2、Payload相关结构体
Payload直译为有效载荷。Payload结构体:
type Payload struct { Header *Header //Header Data []byte //Transaction序列化 } //代码在protos/common/common.pb.go
Header结构体:
type Header struct { ChannelHeader []byte SignatureHeader []byte } //代码在protos/common/common.pb.go
ChannelHeader结构体:
type ChannelHeader struct { Type int32 Version int32 //消息协议版本 Timestamp *google_protobuf.Timestamp //创建消息时的本地时间 ChannelId string //消息绑定的ChannelId TxId string //TxId Epoch uint64 //纪元 Extension []byte //可附加的扩展 } //代码在protos/common/common.pb.go
补充HeaderType:
type HeaderType int32 const ( HeaderType_MESSAGE HeaderType = 0 HeaderType_CONFIG HeaderType = 1 HeaderType_CONFIG_UPDATE HeaderType = 2 HeaderType_ENDORSER_TRANSACTION HeaderType = 3 HeaderType_ORDERER_TRANSACTION HeaderType = 4 HeaderType_DELIVER_SEEK_INFO HeaderType = 5 HeaderType_CHAINCODE_PACKAGE HeaderType = 6 ) //代码在protos/common/common.pb.go
SignatureHeader结构体:
type SignatureHeader struct { Creator []byte //消息的创建者, 指定为证书链 Nonce []byte //可能只使用一次的任意数字,可用于检测重播攻击 } //代码在protos/common/common.pb.go
2.3、Transaction相关结构体
Transaction结构体:
type Transaction struct { Actions []*TransactionAction //Payload.Data是个TransactionAction数组,容纳每个交易 } //代码在protos/peer/transaction.pb.go
TransactionAction结构体:
type TransactionAction struct { Header []byte Payload []byte } //代码在protos/peer/transaction.pb.go
2.4、ChaincodeActionPayload相关结构体
ChaincodeActionPayload结构体:
type ChaincodeActionPayload struct { ChaincodeProposalPayload []byte Action *ChaincodeEndorsedAction } //代码在protos/peer/transaction.pb.go
ChaincodeEndorsedAction结构体:
type ChaincodeEndorsedAction struct { ProposalResponsePayload []byte //ProposalResponsePayload序列化 Endorsements []*Endorsement } //代码在protos/peer/transaction.pb.go
ProposalResponsePayload结构体:
type ProposalResponsePayload struct { ProposalHash []byte Extension []byte //ChaincodeAction序列化 } //代码在protos/peer/proposal_response.pb.go
ChaincodeAction结构体:
type ChaincodeAction struct { Results []byte //TxRwSet序列化 Events []byte Response *Response ChaincodeId *ChaincodeID } //代码在protos/peer/proposal.pb.go
3、交易验证代码TxValidationFlags
TxValidationFlags是交易验证代码的数组,在commiter验证块时使用。
type TxValidationFlags []uint8 //创建TxValidationFlags数组 func NewTxValidationFlags(size int) TxValidationFlags //为指定的交易设置交易验证代码 func (obj TxValidationFlags) SetFlag(txIndex int, flag peer.TxValidationCode) //获取指定交易的交易验证代码 func (obj TxValidationFlags) Flag(txIndex int) peer.TxValidationCode //检查指定的交易是否有效 func (obj TxValidationFlags) IsValid(txIndex int) bool //检查指定的交易是否无效 func (obj TxValidationFlags) IsInvalid(txIndex int) bool //指定交易的交易验证代码与flag比较,相同为true func (obj TxValidationFlags) IsSetTo(txIndex int, flag peer.TxValidationCode) bool //代码在core/ledger/util/txvalidationflags.go
补充peer.TxValidationCode:
type TxValidationCode int32 const ( TxValidationCode_VALID TxValidationCode = 0 TxValidationCode_NIL_ENVELOPE TxValidationCode = 1 TxValidationCode_BAD_PAYLOAD TxValidationCode = 2 TxValidationCode_BAD_COMMON_HEADER TxValidationCode = 3 TxValidationCode_BAD_CREATOR_SIGNATURE TxValidationCode = 4 TxValidationCode_INVALID_ENDORSER_TRANSACTION TxValidationCode = 5 TxValidationCode_INVALID_CONFIG_TRANSACTION TxValidationCode = 6 TxValidationCode_UNSUPPORTED_TX_PAYLOAD TxValidationCode = 7 TxValidationCode_BAD_PROPOSAL_TXID TxValidationCode = 8 TxValidationCode_DUPLICATE_TXID TxValidationCode = 9 TxValidationCode_ENDORSEMENT_POLICY_FAILURE TxValidationCode = 10 TxValidationCode_MVCC_READ_CONFLICT TxValidationCode = 11 TxValidationCode_PHANTOM_READ_CONFLICT TxValidationCode = 12 TxValidationCode_UNKNOWN_TX_TYPE TxValidationCode = 13 TxValidationCode_TARGET_CHAIN_NOT_FOUND TxValidationCode = 14 TxValidationCode_MARSHAL_TX_ERROR TxValidationCode = 15 TxValidationCode_NIL_TXACTION TxValidationCode = 16 TxValidationCode_EXPIRED_CHAINCODE TxValidationCode = 17 TxValidationCode_CHAINCODE_VERSION_CONFLICT TxValidationCode = 18 TxValidationCode_BAD_HEADER_EXTENSION TxValidationCode = 19 TxValidationCode_BAD_CHANNEL_HEADER TxValidationCode = 20 TxValidationCode_BAD_RESPONSE_PAYLOAD TxValidationCode = 21 TxValidationCode_BAD_RWSET TxValidationCode = 22 TxValidationCode_ILLEGAL_WRITESET TxValidationCode = 23 TxValidationCode_INVALID_OTHER_REASON TxValidationCode = 255 ) //代码在protos/peer/transaction.pb.go 未完待续感谢关注兄弟连区块链教程分享!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
这门编程语言被误解18年,出生就遭鄙视,原因是“国产货”?
世界上有据可考的编程语言,一共不下600多种,它们的写法可以说是千奇百怪,有用英语作为媒介的,也有用符号编程的,甚至有模仿牛的叫声进行编程的。在众多编程语言中,一门语言被称作“国人骄傲”,只是自打它出生之后,特别是专业人士,对其评价都极低,甚至引来各方嘲讽,它就是易语言。 易语言的发明者是吴涛,2000年伊始,从事长期开发的吴涛,编写了70多万行源代码,发明了E语言,后来改称“易语言”,这是一个完全使用中文编程的语言,目的是降低编程门槛,让不懂英语的中国人,也可以学会编程,顺利迈过不会英语的门槛。 因为易语言的发明,吴涛被《程序员》杂志评为“影响中国软件开发的20人”之一。易语言汉语编程环境获中国十大自主创新软件产品奖。 一切是那么的美好,中国人终于拥有了自己的编程语言。可让吴涛没想到的是,易语言却成为了众矢之的,受到了很多程序员的批评。 最大的原因在于,易语言解决了一个不存在的痛点,即完全不会英语的程序员极少。具备英文能力的程序员从来不缺,将来更不可缺。 的确,虽然现实中,有很多程序员英语水平极差,除了常用的英文外,几乎看不懂其他,更别说阅读英文文档。一门编程语言,常用的英语词汇不过...
- 下一篇
业界 | 四大机器学习编程语言对比:R、Python、MATLAB、Octave
R 语言 R 是一种用于统计计算和图的语言及环境。它是一个 GNU 项目,与贝尔实验室的 John Chambers 及其同事开发的 S 语言及环境类似。R 可以视为 S 的一种不同实现。二者存在一些重要差异,但使用 S 写的很多代码在 R 下运行时无需修改。 优点: ●端到端开发到执行(一些 brokers package 允许执行,IB) ●开发速度快(比 Python 的代码少 60%) ●开源包多 ●成熟的量化交易包(quantstrat、quantmod、performanceanalyitics、xts) ●社区最大 ●使用 rcpp 可以整合 R 和 C++/C 缺点: ●比 Python 慢,尤其是在迭代循环和非向量化函数中 ●比 Matlab 绘图差,难以实现交互式图表 ●创建独立应用程序的能力有限 Python Python 是一种用于通用编程的解释型高级编程语言,由 Guido van Rossum 创建并于 1991 年首次发布。Python 的设计强调代码可读性,使用了大量空格。它的结构使其在大规模和小规模编程中都能清晰明了。 优点: ●端到端开发到执行(一些...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作