From b03b8cc4952ffb365f34d071d0d572cb3f657e9a Mon Sep 17 00:00:00 2001 From: Stanislav Jakuschevskij Date: Wed, 19 Feb 2025 19:43:16 +0100 Subject: [PATCH] Decompose writes method Remove unused struct member and to-do comments. Signed-off-by: Stanislav Jakuschevskij --- .../application-go/contract/contract.go | 2 +- off_chain_data/application-go/listen.go | 75 ++++++++++--------- off_chain_data/application-go/transact.go | 2 +- 3 files changed, 40 insertions(+), 39 deletions(-) diff --git a/off_chain_data/application-go/contract/contract.go b/off_chain_data/application-go/contract/contract.go index 7f7404de..5409cdee 100644 --- a/off_chain_data/application-go/contract/contract.go +++ b/off_chain_data/application-go/contract/contract.go @@ -67,7 +67,7 @@ func (atb *AssetTransferBasic) GetAllAssets() ([]Asset, error) { return nil, nil } - var assets []Asset + assets := []Asset{} if err := json.Unmarshal(assetsRaw, &assets); err != nil { return nil, err } diff --git a/off_chain_data/application-go/listen.go b/off_chain_data/application-go/listen.go index 5ea87b59..93491d5a 100644 --- a/off_chain_data/application-go/listen.go +++ b/off_chain_data/application-go/listen.go @@ -11,6 +11,7 @@ import ( "syscall" "github.com/hyperledger/fabric-gateway/pkg/client" + "github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset/kvrwset" "google.golang.org/grpc" ) @@ -65,7 +66,6 @@ func listen(clientConnection grpc.ClientConnInterface) error { parser.ParseBlock(blockProto), checkpointer, applyWritesToOffChainStore, - channelName, } if err := aBlockProcessor.process(); err != nil { @@ -81,7 +81,6 @@ type blockProcessor struct { parsedBlock *parser.Block checkpointer *client.FileCheckpointer writeToStore writer - channelName string } func (b *blockProcessor) process() error { @@ -96,9 +95,7 @@ func (b *blockProcessor) process() error { txProcessor := transactionProcessor{ b.parsedBlock.Number(), validTransaction, - // TODO use reference to parent and get blockNumber, store and channelName from parent b.writeToStore, - b.channelName, } if err := txProcessor.process(); err != nil { return err @@ -118,12 +115,12 @@ func (b *blockProcessor) process() error { } func (b *blockProcessor) validTransactions() ([]*parser.Transaction, error) { - result := []*parser.Transaction{} newTransactions, err := b.getNewTransactions() if err != nil { return nil, err } + result := []*parser.Transaction{} for _, transaction := range newTransactions { if transaction.IsValid() { result = append(result, transaction) @@ -188,7 +185,6 @@ type transactionProcessor struct { blockNumber uint64 transaction *parser.Transaction writeToStore writer - channelName string } func (t *transactionProcessor) process() error { @@ -218,43 +214,33 @@ func (t *transactionProcessor) process() error { } func (t *transactionProcessor) writes() ([]write, error) { - // TODO this entire code should live in the parser and just return the kvWrite which - // we then map to write and return - t.channelName = t.transaction.ChannelHeader().GetChannelId() + nsReadWriteSets, err := t.nonSystemCCReadWriteSets() + if err != nil { + return nil, err + } + result := []write{} + for _, nsReadWriteSet := range nsReadWriteSets { + kvReadWriteSet, err := nsReadWriteSet.ReadWriteSet() + if err != nil { + return nil, err + } + + result = t.newWrites(kvReadWriteSet, nsReadWriteSet.Namespace()) + } + + return result, nil +} + +func (t *transactionProcessor) nonSystemCCReadWriteSets() ([]*parser.NamespaceReadWriteSet, error) { nsReadWriteSets, err := t.transaction.NamespaceReadWriteSets() if err != nil { return nil, err } - nonSystemCCReadWriteSets := []*parser.NamespaceReadWriteSet{} - for _, nsReadWriteSet := range nsReadWriteSets { - if !t.isSystemChaincode(nsReadWriteSet.Namespace()) { - nonSystemCCReadWriteSets = append(nonSystemCCReadWriteSets, nsReadWriteSet) - } - } - - writes := []write{} - for _, readWriteSet := range nonSystemCCReadWriteSets { - namespace := readWriteSet.Namespace() - - kvReadWriteSet, err := readWriteSet.ReadWriteSet() - if err != nil { - return nil, err - } - - for _, kvWrite := range kvReadWriteSet.GetWrites() { - writes = append(writes, write{ - ChannelName: t.channelName, - Namespace: namespace, - Key: kvWrite.GetKey(), - IsDelete: kvWrite.GetIsDelete(), - Value: string(kvWrite.GetValue()), // Convert bytes to text, purely for readability in output - }) - } - } - - return writes, nil + return slices.DeleteFunc(nsReadWriteSets, func(nsReadWriteSet *parser.NamespaceReadWriteSet) bool { + return t.isSystemChaincode(nsReadWriteSet.Namespace()) + }), nil } func (t *transactionProcessor) isSystemChaincode(chaincodeName string) bool { @@ -268,3 +254,18 @@ func (t *transactionProcessor) isSystemChaincode(chaincodeName string) bool { } return slices.Contains(systemChaincodeNames, chaincodeName) } + +func (t *transactionProcessor) newWrites(kvReadWriteSet *kvrwset.KVRWSet, namespace string) []write { + result := []write{} + for _, kvWrite := range kvReadWriteSet.GetWrites() { + result = append(result, write{ + ChannelName: t.transaction.ChannelHeader().GetChannelId(), + Namespace: namespace, + Key: kvWrite.GetKey(), + IsDelete: kvWrite.GetIsDelete(), + Value: string(kvWrite.GetValue()), // Convert bytes to text, purely for readability in output + }) + } + + return result +} diff --git a/off_chain_data/application-go/transact.go b/off_chain_data/application-go/transact.go index 578f3b2d..1cbfc4b3 100644 --- a/off_chain_data/application-go/transact.go +++ b/off_chain_data/application-go/transact.go @@ -132,7 +132,7 @@ func randomElement(values []string) string { // Pick a random element from an array, excluding the current value. func differentElement(values []string, currentValue string) string { - var candidateValues []string + candidateValues := []string{} for _, v := range values { if v != currentValue { candidateValues = append(candidateValues, v)