mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 07:25:10 +00:00
Enhance Go off_chain_data for consistency
Add some methods to the parsing API within the Go off_chain_data sample for consistency with the Node and Java implementations: - ToProto() on Block, Transaction and NamespaceReadWriteSet. - ValidationCode() on Transaction. - Creator() on Transaction Signed-off-by: Mark S. Lewis <Mark.S.Lewis@outlook.com>
This commit is contained in:
parent
cc85f96d9e
commit
2e6de80c14
4 changed files with 62 additions and 1 deletions
|
|
@ -26,6 +26,10 @@ func (b *Block) Transactions() ([]*Transaction, error) {
|
|||
return b.transactions()
|
||||
}
|
||||
|
||||
func (b *Block) ToProto() *common.Block {
|
||||
return b.block
|
||||
}
|
||||
|
||||
func (b *Block) unmarshalTransactions() ([]*Transaction, error) {
|
||||
envelopes, err := b.unmarshalEnvelopes()
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -27,6 +27,10 @@ func (p *NamespaceReadWriteSet) ReadWriteSet() (*kvrwset.KVRWSet, error) {
|
|||
return p.readWriteSet()
|
||||
}
|
||||
|
||||
func (p *NamespaceReadWriteSet) ToProto() *rwset.NsReadWriteSet {
|
||||
return p.nsReadWriteSet
|
||||
}
|
||||
|
||||
func (p *NamespaceReadWriteSet) unmarshalReadWriteSet() (*kvrwset.KVRWSet, error) {
|
||||
result := &kvrwset.KVRWSet{}
|
||||
if err := proto.Unmarshal(p.nsReadWriteSet.GetRwset(), result); err != nil {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import (
|
|||
"fmt"
|
||||
|
||||
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
||||
"github.com/hyperledger/fabric-protos-go-apiv2/msp"
|
||||
"github.com/hyperledger/fabric-protos-go-apiv2/peer"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
|
@ -12,6 +13,7 @@ type payload struct {
|
|||
commonPayload *common.Payload
|
||||
statusCode int32
|
||||
channelHeader *common.ChannelHeader
|
||||
creator *creatorIdentity
|
||||
}
|
||||
|
||||
func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, error) {
|
||||
|
|
@ -19,7 +21,19 @@ func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, er
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &payload{commonPayload, statusCode, channelHeader}, nil
|
||||
|
||||
creator, err := unmarshalCreator(commonPayload)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := &payload{
|
||||
commonPayload: commonPayload,
|
||||
statusCode: statusCode,
|
||||
channelHeader: channelHeader,
|
||||
creator: &creatorIdentity{creator},
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelHeader, error) {
|
||||
|
|
@ -30,6 +44,20 @@ func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelH
|
|||
return result, nil
|
||||
}
|
||||
|
||||
func unmarshalCreator(commonPayload *common.Payload) (*msp.SerializedIdentity, error) {
|
||||
signatureHeader := &common.SignatureHeader{}
|
||||
if err := proto.Unmarshal(commonPayload.GetHeader().GetSignatureHeader(), signatureHeader); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
result := &msp.SerializedIdentity{}
|
||||
if err := proto.Unmarshal(signatureHeader.GetCreator(), result); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (p *payload) endorserTransaction() (*endorserTransaction, error) {
|
||||
if !p.isEndorserTransaction() {
|
||||
return nil, fmt.Errorf("unexpected payload type: %d", p.channelHeader.GetType())
|
||||
|
|
@ -50,3 +78,15 @@ func (p *payload) isEndorserTransaction() bool {
|
|||
func (p *payload) isValid() bool {
|
||||
return p.statusCode == int32(peer.TxValidationCode_VALID)
|
||||
}
|
||||
|
||||
type creatorIdentity struct {
|
||||
creator *msp.SerializedIdentity
|
||||
}
|
||||
|
||||
func (i *creatorIdentity) MspID() string {
|
||||
return i.creator.GetMspid()
|
||||
}
|
||||
|
||||
func (i *creatorIdentity) Credentials() []byte {
|
||||
return i.creator.GetIdBytes()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"github.com/hyperledger/fabric-gateway/pkg/identity"
|
||||
"github.com/hyperledger/fabric-protos-go-apiv2/common"
|
||||
)
|
||||
|
||||
|
|
@ -16,6 +17,10 @@ func (t *Transaction) ChannelHeader() *common.ChannelHeader {
|
|||
return t.payload.channelHeader
|
||||
}
|
||||
|
||||
func (t *Transaction) Creator() identity.Identity {
|
||||
return t.payload.creator
|
||||
}
|
||||
|
||||
func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error) {
|
||||
endorserTransaction, err := t.payload.endorserTransaction()
|
||||
if err != nil {
|
||||
|
|
@ -37,3 +42,11 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error)
|
|||
func (t *Transaction) IsValid() bool {
|
||||
return t.payload.isValid()
|
||||
}
|
||||
|
||||
func (t *Transaction) ToProto() *common.Payload {
|
||||
return t.payload.commonPayload
|
||||
}
|
||||
|
||||
func (t *Transaction) ValidationCode() int32 {
|
||||
return t.payload.statusCode
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue