From 97b89dce26fc09058eb2c5142468bc0feb2030a3 Mon Sep 17 00:00:00 2001 From: Stanislav Jakuschevskij Date: Thu, 27 Feb 2025 16:26:57 +0100 Subject: [PATCH] Remove write state from store and minor changes Use simplified return pattern. Change to var for slice declarations and simplified read-write-set unmarshal. Signed-off-by: Stanislav Jakuschevskij --- off_chain_data/application-go/parser/block.go | 8 ++-- .../parser/endorserTransaction.go | 32 +++++----------- .../application-go/parser/transaction.go | 3 +- off_chain_data/application-go/store.go | 37 ++++++------------- off_chain_data/application-go/transact.go | 13 +------ 5 files changed, 28 insertions(+), 65 deletions(-) diff --git a/off_chain_data/application-go/parser/block.go b/off_chain_data/application-go/parser/block.go index 7a51a7d3..2200284b 100644 --- a/off_chain_data/application-go/parser/block.go +++ b/off_chain_data/application-go/parser/block.go @@ -46,7 +46,7 @@ func (b *Block) unmarshalTransactions() ([]*Transaction, error) { } func (b *Block) unmarshalEnvelopes() ([]*common.Envelope, error) { - result := []*common.Envelope{} + var result []*common.Envelope for _, blockData := range b.block.GetData().GetData() { envelope := &common.Envelope{} if err := proto.Unmarshal(blockData, envelope); err != nil { @@ -58,7 +58,7 @@ func (b *Block) unmarshalEnvelopes() ([]*common.Envelope, error) { } func (*Block) unmarshalPayloadsFrom(envelopes []*common.Envelope) ([]*common.Payload, error) { - result := []*common.Payload{} + var result []*common.Payload for _, envelope := range envelopes { commonPayload := &common.Payload{} if err := proto.Unmarshal(envelope.GetPayload(), commonPayload); err != nil { @@ -72,7 +72,7 @@ func (*Block) unmarshalPayloadsFrom(envelopes []*common.Envelope) ([]*common.Pay func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) { validationCodes := b.block.GetMetadata().GetMetadata()[common.BlockMetadataIndex_TRANSACTIONS_FILTER] - result := []*payload{} + var result []*payload for i, commonPayload := range commonPayloads { statusCode := validationCodes[i] @@ -90,7 +90,7 @@ func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) { } func (*Block) createTransactionsFrom(payloads []*payload) []*Transaction { - result := []*Transaction{} + var result []*Transaction for _, payload := range payloads { result = append(result, newTransaction(payload)) } diff --git a/off_chain_data/application-go/parser/endorserTransaction.go b/off_chain_data/application-go/parser/endorserTransaction.go index cdedef80..cd73802a 100644 --- a/off_chain_data/application-go/parser/endorserTransaction.go +++ b/off_chain_data/application-go/parser/endorserTransaction.go @@ -25,12 +25,7 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error) return nil, err } - chaincodeEndorsedActions, err := p.extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads) - if err != nil { - return nil, err - } - - proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeEndorsedActions) + proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads) if err != nil { return nil, err } @@ -49,31 +44,22 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error) } func (p *endorserTransaction) unmarshalChaincodeActionPayloads() ([]*peer.ChaincodeActionPayload, error) { - result := []*peer.ChaincodeActionPayload{} + var result []*peer.ChaincodeActionPayload for _, transactionAction := range p.transaction.GetActions() { chaincodeActionPayload := &peer.ChaincodeActionPayload{} if err := proto.Unmarshal(transactionAction.GetPayload(), chaincodeActionPayload); err != nil { return nil, err } - result = append(result, chaincodeActionPayload) } return result, nil } -func (*endorserTransaction) extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ChaincodeEndorsedAction, error) { - result := []*peer.ChaincodeEndorsedAction{} - for _, payload := range chaincodeActionPayloads { - result = append(result, payload.GetAction()) - } - return result, nil -} - -func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeEndorsedActions []*peer.ChaincodeEndorsedAction) ([]*peer.ProposalResponsePayload, error) { - result := []*peer.ProposalResponsePayload{} - for _, endorsedAction := range chaincodeEndorsedActions { +func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ProposalResponsePayload, error) { + var result []*peer.ProposalResponsePayload + for _, chaincodeActionPayload := range chaincodeActionPayloads { proposalResponsePayload := &peer.ProposalResponsePayload{} - if err := proto.Unmarshal(endorsedAction.GetProposalResponsePayload(), proposalResponsePayload); err != nil { + if err := proto.Unmarshal(chaincodeActionPayload.GetAction().GetProposalResponsePayload(), proposalResponsePayload); err != nil { return nil, err } result = append(result, proposalResponsePayload) @@ -82,7 +68,7 @@ func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeEndor } func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloads []*peer.ProposalResponsePayload) ([]*peer.ChaincodeAction, error) { - result := []*peer.ChaincodeAction{} + var result []*peer.ChaincodeAction for _, proposalResponsePayload := range proposalResponsePayloads { chaincodeAction := &peer.ChaincodeAction{} if err := proto.Unmarshal(proposalResponsePayload.GetExtension(), chaincodeAction); err != nil { @@ -94,7 +80,7 @@ func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloa } func (*endorserTransaction) unmarshalTxReadWriteSetsFrom(chaincodeActions []*peer.ChaincodeAction) ([]*rwset.TxReadWriteSet, error) { - result := []*rwset.TxReadWriteSet{} + var result []*rwset.TxReadWriteSet for _, chaincodeAction := range chaincodeActions { txReadWriteSet := &rwset.TxReadWriteSet{} if err := proto.Unmarshal(chaincodeAction.GetResults(), txReadWriteSet); err != nil { @@ -106,7 +92,7 @@ func (*endorserTransaction) unmarshalTxReadWriteSetsFrom(chaincodeActions []*pee } func (*endorserTransaction) parseReadWriteSets(txReadWriteSets []*rwset.TxReadWriteSet) []*readWriteSet { - result := []*readWriteSet{} + var result []*readWriteSet for _, txReadWriteSet := range txReadWriteSets { parsedReadWriteSet := parseReadWriteSet(txReadWriteSet) result = append(result, parsedReadWriteSet) diff --git a/off_chain_data/application-go/parser/transaction.go b/off_chain_data/application-go/parser/transaction.go index ef59b160..56ddbf31 100644 --- a/off_chain_data/application-go/parser/transaction.go +++ b/off_chain_data/application-go/parser/transaction.go @@ -27,11 +27,10 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error) return nil, err } - result := []*NamespaceReadWriteSet{} + var result []*NamespaceReadWriteSet for _, readWriteSet := range txReadWriteSets { result = append(result, readWriteSet.namespaceReadWriteSets()...) } - return result, nil } diff --git a/off_chain_data/application-go/store.go b/off_chain_data/application-go/store.go index 6af565a4..2764e898 100644 --- a/off_chain_data/application-go/store.go +++ b/off_chain_data/application-go/store.go @@ -10,13 +10,12 @@ import ( var errExpected = errors.New("expected error: simulated write failure") type offChainStore struct { - writes, path string + path string simulatedFailureCount, transactionCount uint } func newOffChainStore(path string, simulatedFailureCount uint) *offChainStore { return &offChainStore{ - "", path, uint(simulatedFailureCount), 0, @@ -30,17 +29,12 @@ func (ocs *offChainStore) write(data ledgerUpdate) error { return err } - ocs.clearLastWrites() - - if err := ocs.marshal(data.Writes); err != nil { + writes, err := ocs.marshal(data.Writes) + if err != nil { return err } - if err := ocs.persist(); err != nil { - return err - } - - return nil + return ocs.persist(writes) } func (ocs *offChainStore) simulateFailureIfRequired() error { @@ -54,30 +48,27 @@ func (ocs *offChainStore) simulateFailureIfRequired() error { return nil } -func (ocs *offChainStore) clearLastWrites() { - ocs.writes = "" -} - -func (ocs *offChainStore) marshal(writes []write) error { +func (ocs *offChainStore) marshal(writes []write) (string, error) { + var marshaledWrites string for _, write := range writes { marshaled, err := json.Marshal(write) if err != nil { - return err + return "", err } - ocs.writes += string(marshaled) + "\n" + marshaledWrites += string(marshaled) + "\n" } - return nil + return marshaledWrites, nil } -func (ocs *offChainStore) persist() error { +func (ocs *offChainStore) persist(marshaledWrites string) error { f, err := os.OpenFile(ocs.path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { return err } - if _, writeErr := f.Write([]byte(ocs.writes)); writeErr != nil { + if _, writeErr := f.Write([]byte(marshaledWrites)); writeErr != nil { if closeErr := f.Close(); closeErr != nil { return fmt.Errorf("write error: %v, close error: %v", writeErr, closeErr) } @@ -85,9 +76,5 @@ func (ocs *offChainStore) persist() error { return writeErr } - if err := f.Close(); err != nil { - return err - } - - return nil + return f.Close() } diff --git a/off_chain_data/application-go/transact.go b/off_chain_data/application-go/transact.go index 1cbfc4b3..daaea5b4 100644 --- a/off_chain_data/application-go/transact.go +++ b/off_chain_data/application-go/transact.go @@ -27,14 +27,9 @@ func transact(clientConnection grpc.ClientConnInterface) error { }() contract := gateway.GetNetwork(channelName).GetContract(chaincodeName) - smartContract := atb.NewAssetTransferBasic(contract) app := newTransactApp(smartContract) - if err := app.run(); err != nil { - return err - } - - return nil + return app.run() } type transactApp struct { @@ -71,11 +66,7 @@ func (t *transactApp) run() error { wg.Wait() - if err := context.Cause(ctx); err != nil { - return err - } - - return nil + return context.Cause(ctx) } func (t *transactApp) transact() error {