mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
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 <stas@two-giants.com>
This commit is contained in:
parent
fde0cd58cc
commit
97b89dce26
5 changed files with 28 additions and 65 deletions
|
|
@ -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))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Reference in a new issue