如何在block-listener.go示例中正确解码数据?

时间:2018-01-19 18:28:07

标签: hyperledger-fabric

我正在使用块监听器来监听一个通道中的事务以在另一个通道中发送通知。但我还不知道如何解码打印block-listener.go示例的数据。

1 个答案:

答案 0 :(得分:0)

不是100%肯定解码数据的意思是import java.util.*; 的以下块负责为您打印交易:

[block-lister.go][1]

如果您愿意,还可以使用以下函数来获取以JSON格式打印的块:

for {
    select {
    case b := <-a.notfy:
        fmt.Println("")
        fmt.Println("")
        fmt.Println("Received block")
        fmt.Println("--------------")
        txsFltr := util.TxValidationFlags(b.Block.Metadata.Metadata[common.BlockMetadataIndex_TRANSACTIONS_FILTER])
        for i, r := range b.Block.Data.Data {
            tx, _ := getTxPayload(r)
            if tx != nil {
                chdr, err := utils.UnmarshalChannelHeader(tx.Header.ChannelHeader)
                if err != nil {
                    fmt.Print("Error extracting channel header\n")
                    return
                }
                if txsFltr.IsInvalid(i) {
                    fmt.Println("")
                    fmt.Println("")
                    fmt.Printf("Received invalid transaction from channel '%s'\n", chdr.ChannelId)
                    fmt.Println("--------------")
                    fmt.Printf("Transaction invalid: TxID: %s\n", chdr.TxId)
                } else {
                    fmt.Printf("Received transaction from channel '%s': \n\t[%v]\n", chdr.ChannelId, tx)
                    if event, err := getChainCodeEvents(r); err == nil {
                        if len(chaincodeID) != 0 && event.ChaincodeId == chaincodeID {
                            fmt.Println("")
                            fmt.Println("")
                            fmt.Printf("Received chaincode event from channel '%s'\n", chdr.ChannelId)
                            fmt.Println("------------------------")
                            fmt.Printf("Chaincode Event:%+v\n", event)
                        }
                    }
                }
            }
        }
    }
}