From 1eaf6097113e0cd1bf10dd93ca216e3c19b1ffdf Mon Sep 17 00:00:00 2001 From: Stanislav Jakuschevskij Date: Wed, 4 Dec 2024 15:15:46 +0100 Subject: [PATCH] Implement Transaction interface For the GetCreator() method return the identity.Identity interface was also implemented. Signed-off-by: Stanislav Jakuschevskij --- off_chain_data/application-go/blockParser.go | 74 +++++++++++++++++--- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/off_chain_data/application-go/blockParser.go b/off_chain_data/application-go/blockParser.go index 1fdbabb7..55f895fa 100644 --- a/off_chain_data/application-go/blockParser.go +++ b/off_chain_data/application-go/blockParser.go @@ -7,6 +7,7 @@ import ( "github.com/hyperledger/fabric-protos-go-apiv2/common" "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset" "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset/kvrwset" + "github.com/hyperledger/fabric-protos-go-apiv2/msp" "github.com/hyperledger/fabric-protos-go-apiv2/peer" "google.golang.org/protobuf/proto" ) @@ -17,15 +18,6 @@ type Block interface { ToProto() *common.Block } -type Transaction interface { - GetChannelHeader() *common.ChannelHeader - GetCreator() identity.Identity - GetValidationCode() uint64 - IsValid() bool - GetNamespaceReadWriteSets() []NamespaceReadWriteSet - ToProto() *common.Payload -} - type ParsedBlock struct { block *common.Block validationCodes []byte @@ -52,6 +44,70 @@ func (pb *ParsedBlock) ToProto() *common.Block { return nil } +// Implements identity.Identity Interface +type IdentityImpl struct { + creator *msp.SerializedIdentity +} + +func (i *IdentityImpl) MspID() string { + return i.creator.GetMspid() +} + +func (i *IdentityImpl) Credentials() []byte { + return i.creator.GetIdBytes() +} + +type Transaction interface { + GetChannelHeader() *common.ChannelHeader + GetCreator() identity.Identity + GetValidationCode() int32 + IsValid() bool + GetNamespaceReadWriteSets() []NamespaceReadWriteSet + ToProto() *common.Payload +} + +type TransactionImpl struct { + payload Payload +} + +func NewTransaction(payload Payload) Transaction { + return &TransactionImpl{payload} +} + +func (t *TransactionImpl) GetChannelHeader() *common.ChannelHeader { + return t.payload.GetChannelHeader() +} + +func (t *TransactionImpl) GetCreator() identity.Identity { + creator := &msp.SerializedIdentity{} + if err := proto.Unmarshal(t.payload.GetSignatureHeader().GetCreator(), creator); err != nil { + panic(err) + } + + return &IdentityImpl{creator} +} + +func (t *TransactionImpl) GetNamespaceReadWriteSets() []NamespaceReadWriteSet { + result := []NamespaceReadWriteSet{} + for _, readWriteSet := range t.payload.GetEndorserTransaction().GetReadWriteSets() { + result = append(result, readWriteSet.GetNamespaceReadWriteSets()...) + } + + return result +} + +func (t *TransactionImpl) GetValidationCode() int32 { + return t.payload.GetTransactionValidationCode() +} + +func (t *TransactionImpl) IsValid() bool { + return t.payload.IsValid() +} + +func (t *TransactionImpl) ToProto() *common.Payload { + return t.payload.ToProto() +} + type EndorserTransaction interface { GetReadWriteSets() []ReadWriteSet ToProto() *peer.Transaction