# Fabric 1.0源代码笔记 之 putils(protos/utils工具包)
## 1、putils概述
putils,即protos/utils工具包,代码分布在:protos/utils目录下。
包括:txutils.go、proputils.go、commonutils.go、blockutils.go。
## 2、txutils
```go
//TransactionAction.Payload => ChaincodeActionPayload
//ChaincodeActionPayload.Action.ProposalResponsePayload => ProposalResponsePayload
//ProposalResponsePayload.Extension => ChaincodeAction
//从TransactionAction中获取ChaincodeActionPayload和ChaincodeAction
func GetPayloads(txActions *peer.TransactionAction) (*peer.ChaincodeActionPayload, *peer.ChaincodeAction, error)
//[]byte反序列化为Envelope
func GetEnvelopeFromBlock(data []byte) (*common.Envelope, error)
func CreateSignedEnvelope(txType common.HeaderType, channelID string, signer crypto.LocalSigner, dataMsg proto.Message, msgVersion int32, epoch uint64) (*common.Envelope, error)
//由Proposal创建签名交易Envelope
func CreateSignedTx(proposal *peer.Proposal, signer msp.SigningIdentity, resps ...*peer.ProposalResponse) (*common.Envelope, error) {
func CreateProposalResponse(hdrbytes []byte, payl []byte, response *peer.Response, results []byte, events []byte, ccid *peer.ChaincodeID, visibility []byte, signingEndorser msp.SigningIdentity) (*peer.ProposalResponse, error)
func CreateProposalResponseFailure(hdrbytes []byte, payl []byte, response *peer.Response, results []byte, events []byte, ccid *peer.ChaincodeID, visibility []byte) (*peer.ProposalResponse, error)
//签名Proposal
func GetSignedProposal(prop *peer.Proposal, signer msp.SigningIdentity) (*peer.SignedProposal, error)
func GetSignedEvent(evt *peer.Event, signer msp.SigningIdentity) (*peer.SignedEvent, error)
func MockSignedEndorserProposalOrPanic(chainID string, cs *peer.ChaincodeSpec, creator, signature []byte) (*peer.SignedProposal, *peer.Proposal)
func MockSignedEndorserProposal2OrPanic(chainID string, cs *peer.ChaincodeSpec, signer msp.SigningIdentity) (*peer.SignedProposal, *peer.Proposal)
func GetBytesProposalPayloadForTx(payload *peer.ChaincodeProposalPayload, visibility []byte) ([]byte, error)
func GetProposalHash2(header *common.Header, ccPropPayl []byte) ([]byte, error)
func GetProposalHash1(header *common.Header, ccPropPayl []byte, visibility []byte) ([]byte, error)
//代码在protos/utils/txutils.go
```
## 3、proputils
```go
func GetChaincodeInvocationSpec(prop *peer.Proposal) (*peer.ChaincodeInvocationSpec, error)
func GetChaincodeProposalContext(prop *peer.Proposal) ([]byte, map[string][]byte, error)
//反序列化为common.Header
func GetHeader(bytes []byte) (*common.Header, error)
func GetNonce(prop *peer.Proposal) ([]byte, error)
//Header.ChannelHeader反序列化为peer.ChaincodeHeaderExtension
func GetChaincodeHeaderExtension(hdr *common.Header) (*peer.ChaincodeHeaderExtension, error)
func GetProposalResponse(prBytes []byte) (*peer.ProposalResponse, error)
func GetChaincodeDeploymentSpec(code []byte) (*peer.ChaincodeDeploymentSpec, error)
func GetChaincodeAction(caBytes []byte) (*peer.ChaincodeAction, error)
func GetResponse(resBytes []byte) (*peer.Response, error)
func GetChaincodeEvents(eBytes []byte) (*peer.ChaincodeEvent, error)
func GetProposalResponsePayload(prpBytes []byte) (*peer.ProposalResponsePayload, error)
func GetProposal(propBytes []byte) (*peer.Proposal, error)
//e.Payload反序列化为Payload
func GetPayload(e *common.Envelope) (*common.Payload, error)
//[]byte反序列化为Transaction
func GetTransaction(txBytes []byte) (*peer.Transaction, error)
func GetChaincodeActionPayload(capBytes []byte) (*peer.ChaincodeActionPayload, error)
//反序列化为peer.ChaincodeProposalPayload
func GetChaincodeProposalPayload(bytes []byte) (*peer.ChaincodeProposalPayload, error)
//反序列化为common.SignatureHeader
func GetSignatureHeader(bytes []byte) (*common.SignatureHeader, error)
func CreateChaincodeProposal(typ common.HeaderType, chainID string, cis *peer.ChaincodeInvocationSpec, creator []byte) (*peer.Proposal, string, error)
func CreateChaincodeProposalWithTransient(typ common.HeaderType, chainID string, cis *peer.ChaincodeInvocationSpec, creator []byte, transientMap map[string][]byte) (*peer.Proposal, string, error)
func CreateChaincodeProposalWithTxIDNonceAndTransient(txid string, typ common.HeaderType, chainID string, cis *peer.ChaincodeInvocationSpec, nonce, creator []byte, transientMap map[string][]byte) (*peer.Proposal, string, error)
func GetBytesProposalResponsePayload(hash []byte, response *peer.Response, result []byte, event []byte, ccid *peer.ChaincodeID) ([]byte, error)
func GetBytesChaincodeProposalPayload(cpp *peer.ChaincodeProposalPayload) ([]byte, error)
func GetBytesResponse(res *peer.Response) ([]byte, error)
func GetBytesChaincodeEvent(event *peer.ChaincodeEvent) ([]byte, error)
func GetBytesChaincodeActionPayload(cap *peer.ChaincodeActionPayload) ([]byte, error)
func GetBytesProposalResponse(pr *peer.ProposalResponse) ([]byte, error)
func GetBytesProposal(prop *peer.Proposal) ([]byte, error)
func GetBytesHeader(hdr *common.Header) ([]byte, error)
func GetBytesSignatureHeader(hdr *common.SignatureHeader) ([]byte, error)
func GetBytesTransaction(tx *peer.Transaction) ([]byte, error)
func GetBytesPayload(payl *common.Payload) ([]byte, error)
func GetBytesEnvelope(env *common.Envelope) ([]byte, error)
//从envBytes []byte中获取ChaincodeAction
func GetActionFromEnvelope(envBytes []byte) (*peer.ChaincodeAction, error)
func CreateProposalFromCIS(typ common.HeaderType, chainID string, cis *peer.ChaincodeInvocationSpec, creator []byte) (*peer.Proposal, string, error)
func CreateInstallProposalFromCDS(ccpack proto.Message, creator []byte) (*peer.Proposal, string, error)
//按ChaincodeDeploymentSpec创建DeployProposal
func CreateDeployProposalFromCDS(chainID string, cds *peer.ChaincodeDeploymentSpec, creator []byte, policy []byte, escc []byte, vscc []byte) (*peer.Proposal, string, error)
func CreateUpgradeProposalFromCDS(chainID string, cds *peer.ChaincodeDeploymentSpec, creator []byte, policy []byte, escc []byte, vscc []byte) (*peer.Proposal, string, error)
func createProposalFromCDS(chainID string, msg proto.Message, creator []byte, policy []byte, escc []byte, vscc []byte, propType string) (*peer.Proposal, string, error)
func ComputeProposalTxID(nonce, creator []byte) (string, error)
func CheckProposalTxID(txid string, nonce, creator []byte) error
func ComputeProposalBinding(proposal *peer.Proposal) ([]byte, error)
func computeProposalBindingInternal(nonce, creator []byte, epoch uint64) ([]byte, error)
//代码在protos/utils/proputils.go
```
## 4、commonutils
```go
func MarshalOrPanic(pb proto.Message) []byte
func Marshal(pb proto.Message) ([]byte, error)
func CreateNonceOrPanic() []byte
func CreateNonce() ([]byte, error)
func UnmarshalPayloadOrPanic(encoded []byte) *cb.Payload
func UnmarshalPayload(encoded []byte) (*cb.Payload, error)
func UnmarshalEnvelopeOrPanic(encoded []byte) *cb.Envelope
func UnmarshalEnvelope(encoded []byte) (*cb.Envelope, error)
func UnmarshalEnvelopeOfType(envelope *cb.Envelope, headerType cb.HeaderType, message proto.Message) (*cb.ChannelHeader, error)
func ExtractEnvelopeOrPanic(block *cb.Block, index int) *cb.Envelope
func ExtractEnvelope(block *cb.Block, index int) (*cb.Envelope, error)
func ExtractPayloadOrPanic(envelope *cb.Envelope) *cb.Payload
func ExtractPayload(envelope *cb.Envelope) (*cb.Payload, error)
func MakeChannelHeader(headerType cb.HeaderType, version int32, chainID string, epoch uint64) *cb.ChannelHeader
func MakeSignatureHeader(serializedCreatorCertChain []byte, nonce []byte) *cb.SignatureHeader
func SetTxID(channelHeader *cb.ChannelHeader, signatureHeader *cb.SignatureHeader) error
func MakePayloadHeader(ch *cb.ChannelHeader, sh *cb.SignatureHeader) *cb.Header
func NewSignatureHeaderOrPanic(signer crypto.LocalSigner) *cb.SignatureHeader
func SignOrPanic(signer crypto.LocalSigner, msg []byte) []byte
//[]byte反序列化为ChannelHeader
func UnmarshalChannelHeader(bytes []byte) (*cb.ChannelHeader, error)
func UnmarshalChaincodeID(bytes []byte) (*pb.ChaincodeID, error)
func IsConfigBlock(block *cb.Block) bool
//代码在protos/utils/commonutils.go
```
## 5、blockutils
```go
//[]byte转换为Block,从Block中获取ChainID(即ChannelId)
func GetChainIDFromBlockBytes(bytes []byte) (string, error)
//从Block中获取ChainID(即ChannelId)
func GetChainIDFromBlock(block *cb.Block) (string, error)
//从Block中按index获取Metadata
func GetMetadataFromBlock(block *cb.Block, index cb.BlockMetadataIndex) (*cb.Metadata, error)
//从Block中按index获取Metadata,如果失败则Panic
func GetMetadataFromBlockOrPanic(block *cb.Block, index cb.BlockMetadataIndex) *cb.Metadata
//从Block.Metadata.Metadata中获取LastConfig
func GetLastConfigIndexFromBlock(block *cb.Block) (uint64, error)
//从Block.Metadata.Metadata中获取LastConfig,如果失败则Panic
func GetLastConfigIndexFromBlockOrPanic(block *cb.Block) uint64
//[]byte转换为Block
func GetBlockFromBlockBytes(blockBytes []byte) (*cb.Block, error)
//拷贝Block.Metadata
func CopyBlockMetadata(src *cb.Block, dst *cb.Block)
//初始化Block.Metadata.Metadata
func InitBlockMetadata(block *cb.Block)
//代码在protos/utils/blockutils.go
```

网址:http://www.qukuailianxueyuan.io/

欲领取造币技术与全套虚拟机资料

区块链技术交流QQ群:756146052  备注:CSDN

尹成学院微信:备注:CSDN

Fabric 1.0源代码分析(41)putils(protos/utils工具包)相关推荐

  1. Fabric 1.0源代码分析(43) Tx(Transaction 交易)

    # Fabric 1.0源代码笔记 之 Tx(Transaction 交易) ## 1.Tx概述 Tx,即Transaction,交易或事务. Tx代码分布目录结构如下: * protos/commo ...

  2. Fabric 1.0源代码分析(34) Peer #peer chaincode命令及子命令实现

    # Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现 ## 1.peer chaincode install子命令实现(安装链码) ### 1.0.peer ...

  3. Fabric 1.0源代码分析(33) Peer #peer channel命令及子命令实现

    # Fabric 1.0源代码笔记 之 Peer #peer channel命令及子命令实现 ## 1.peer channel create子命令实现(创建通道) ### 1.1.初始化Ordere ...

  4. Fabric 1.0源代码分析(31) Peer

    # Fabric 1.0源代码笔记 之 Peer ## 1.Peer概述 在Fabric中,Peer(节点)是指在网络中负责接收交易请求.维护一致账本的各个fabric-peer实例.节点之间彼此通过 ...

  5. Fabric 1.0源代码分析(25) Orderer

    # Fabric 1.0源代码笔记 之 Orderer ## 1.Orderer概述 Orderer,为排序节点,对所有发往网络中的交易进行排序,将排序后的交易安排配置中的约定整理为块,之后提交给Co ...

  6. Fabric 1.0源代码分析(40) Proposal(提案)

    # Fabric 1.0源代码笔记 之 Proposal(提案) ## 1.Proposal概述 Proposal,即向Endorser发起的提案. Proposal代码分布在protos/utils ...

  7. Fabric 1.0源代码分析(2) blockfile(区块文件存储)

    # Fabric 1.0源代码笔记 之 blockfile(区块文件存储) ## 1.blockfile概述 blockfile,即Fabric区块链区块文件存储,默认目录/var/hyperledg ...

  8. Fabric 1.0源代码分析(37) Peer #DeliverClient(Deliver客户端)

    # Fabric 1.0源代码笔记 之 Peer #DeliverClient(Deliver客户端) ## 1.DeliverClient概述 DeliverClient代码分布如下: * peer ...

  9. Fabric 1.0源代码分析(15)gossip(流言算法)

    # Fabric 1.0源代码笔记 之 gossip(流言算法) ## 1.gossip概述 gossip,翻译为流言蜚语,即为一种可最终达到一致的算法.最终一致的另外的含义就是,不保证同时达到一致. ...

最新文章

  1. 动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会
  2. 最先进数据中心都建在哪?
  3. JavaScript系列----面向对象的JavaScript(2)
  4. mysql的慢查询日志
  5. Jackson反序列化提示:Can not deserialize instance of Task out of START_ARRAY token
  6. Python: 复数的数学运算
  7. 详解k8s deployment的滚动更新
  8. Scala抽象属性的继承
  9. ITK:将具有RGB像素的vtkImageData转换为itk :: Image
  10. Redis在Windows+linux平台下的安装配置(转)
  11. WriteableBitmap 巧学巧用
  12. Facebook正在追踪你,哪怕你不是用户丨扎克伯格国会听证第二日
  13. redhat6.3下安装ORACLE11.2.3RAC
  14. 真人拳皇项目第七次Scrum总结——史经浩
  15. 求解偏微分方程开源有限元软件deal.II学习--Step 48
  16. python调用excel的宏_配置Office Excel运行Python宏脚本
  17. C++:vector的初始化(5种)
  18. 《网络流量分类》部分插图
  19. win10计算机文件夹隐藏,Win10怎么隐藏文件夹_Win10怎么隐藏此电脑的文件夹-192路由网...
  20. 中国剩余定理及其代码实现

热门文章

  1. 关于自动白平衡的算法问题
  2. 第三章总体均数的估计与假设检验(1)
  3. 肺栓塞病人护理查房PPT模板
  4. 手机html轮播图,jquery支持移动手机的响应式轮播图插件
  5. 车机开发问题: igo导航无audio focus机制导致声音焦点被抢走
  6. 5+App下Mui框架开发仿拼多多App
  7. 霍尼韦尔携手天地互联为中国航司提供机上高速互联解决方案;思享无限正式开启数字艺术品试点计划 | 全球TMT...
  8. 电赛 | 单相用电器分析监测装置(省电赛一等奖作品)
  9. Oracle之执行计划index fullscan和index fast full scan区别
  10. 小说朗读器又增加新功能