Skip to content

Commit 2e6de80

Browse files
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>
1 parent cc85f96 commit 2e6de80

4 files changed

Lines changed: 62 additions & 1 deletion

File tree

off_chain_data/application-go/parser/block.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ func (b *Block) Transactions() ([]*Transaction, error) {
2626
return b.transactions()
2727
}
2828

29+
func (b *Block) ToProto() *common.Block {
30+
return b.block
31+
}
32+
2933
func (b *Block) unmarshalTransactions() ([]*Transaction, error) {
3034
envelopes, err := b.unmarshalEnvelopes()
3135
if err != nil {

off_chain_data/application-go/parser/namespaceReadWriteSet.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ func (p *NamespaceReadWriteSet) ReadWriteSet() (*kvrwset.KVRWSet, error) {
2727
return p.readWriteSet()
2828
}
2929

30+
func (p *NamespaceReadWriteSet) ToProto() *rwset.NsReadWriteSet {
31+
return p.nsReadWriteSet
32+
}
33+
3034
func (p *NamespaceReadWriteSet) unmarshalReadWriteSet() (*kvrwset.KVRWSet, error) {
3135
result := &kvrwset.KVRWSet{}
3236
if err := proto.Unmarshal(p.nsReadWriteSet.GetRwset(), result); err != nil {

off_chain_data/application-go/parser/payload.go

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55

66
"github.com/hyperledger/fabric-protos-go-apiv2/common"
7+
"github.com/hyperledger/fabric-protos-go-apiv2/msp"
78
"github.com/hyperledger/fabric-protos-go-apiv2/peer"
89
"google.golang.org/protobuf/proto"
910
)
@@ -12,14 +13,27 @@ type payload struct {
1213
commonPayload *common.Payload
1314
statusCode int32
1415
channelHeader *common.ChannelHeader
16+
creator *creatorIdentity
1517
}
1618

1719
func parsePayload(commonPayload *common.Payload, statusCode int32) (*payload, error) {
1820
channelHeader, err := unmarshalChannelHeaderFrom(commonPayload)
1921
if err != nil {
2022
return nil, err
2123
}
22-
return &payload{commonPayload, statusCode, channelHeader}, nil
24+
25+
creator, err := unmarshalCreator(commonPayload)
26+
if err != nil {
27+
return nil, err
28+
}
29+
30+
result := &payload{
31+
commonPayload: commonPayload,
32+
statusCode: statusCode,
33+
channelHeader: channelHeader,
34+
creator: &creatorIdentity{creator},
35+
}
36+
return result, nil
2337
}
2438

2539
func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelHeader, error) {
@@ -30,6 +44,20 @@ func unmarshalChannelHeaderFrom(commonPayload *common.Payload) (*common.ChannelH
3044
return result, nil
3145
}
3246

47+
func unmarshalCreator(commonPayload *common.Payload) (*msp.SerializedIdentity, error) {
48+
signatureHeader := &common.SignatureHeader{}
49+
if err := proto.Unmarshal(commonPayload.GetHeader().GetSignatureHeader(), signatureHeader); err != nil {
50+
return nil, err
51+
}
52+
53+
result := &msp.SerializedIdentity{}
54+
if err := proto.Unmarshal(signatureHeader.GetCreator(), result); err != nil {
55+
return nil, err
56+
}
57+
58+
return result, nil
59+
}
60+
3361
func (p *payload) endorserTransaction() (*endorserTransaction, error) {
3462
if !p.isEndorserTransaction() {
3563
return nil, fmt.Errorf("unexpected payload type: %d", p.channelHeader.GetType())
@@ -50,3 +78,15 @@ func (p *payload) isEndorserTransaction() bool {
5078
func (p *payload) isValid() bool {
5179
return p.statusCode == int32(peer.TxValidationCode_VALID)
5280
}
81+
82+
type creatorIdentity struct {
83+
creator *msp.SerializedIdentity
84+
}
85+
86+
func (i *creatorIdentity) MspID() string {
87+
return i.creator.GetMspid()
88+
}
89+
90+
func (i *creatorIdentity) Credentials() []byte {
91+
return i.creator.GetIdBytes()
92+
}

off_chain_data/application-go/parser/transaction.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package parser
22

33
import (
4+
"github.com/hyperledger/fabric-gateway/pkg/identity"
45
"github.com/hyperledger/fabric-protos-go-apiv2/common"
56
)
67

@@ -16,6 +17,10 @@ func (t *Transaction) ChannelHeader() *common.ChannelHeader {
1617
return t.payload.channelHeader
1718
}
1819

20+
func (t *Transaction) Creator() identity.Identity {
21+
return t.payload.creator
22+
}
23+
1924
func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error) {
2025
endorserTransaction, err := t.payload.endorserTransaction()
2126
if err != nil {
@@ -37,3 +42,11 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error)
3742
func (t *Transaction) IsValid() bool {
3843
return t.payload.isValid()
3944
}
45+
46+
func (t *Transaction) ToProto() *common.Payload {
47+
return t.payload.commonPayload
48+
}
49+
50+
func (t *Transaction) ValidationCode() int32 {
51+
return t.payload.statusCode
52+
}

0 commit comments

Comments
 (0)