mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-21 17:15:10 +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) {
|
func (b *Block) unmarshalEnvelopes() ([]*common.Envelope, error) {
|
||||||
result := []*common.Envelope{}
|
var result []*common.Envelope
|
||||||
for _, blockData := range b.block.GetData().GetData() {
|
for _, blockData := range b.block.GetData().GetData() {
|
||||||
envelope := &common.Envelope{}
|
envelope := &common.Envelope{}
|
||||||
if err := proto.Unmarshal(blockData, envelope); err != nil {
|
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) {
|
func (*Block) unmarshalPayloadsFrom(envelopes []*common.Envelope) ([]*common.Payload, error) {
|
||||||
result := []*common.Payload{}
|
var result []*common.Payload
|
||||||
for _, envelope := range envelopes {
|
for _, envelope := range envelopes {
|
||||||
commonPayload := &common.Payload{}
|
commonPayload := &common.Payload{}
|
||||||
if err := proto.Unmarshal(envelope.GetPayload(), commonPayload); err != nil {
|
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) {
|
func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) {
|
||||||
validationCodes := b.block.GetMetadata().GetMetadata()[common.BlockMetadataIndex_TRANSACTIONS_FILTER]
|
validationCodes := b.block.GetMetadata().GetMetadata()[common.BlockMetadataIndex_TRANSACTIONS_FILTER]
|
||||||
|
|
||||||
result := []*payload{}
|
var result []*payload
|
||||||
for i, commonPayload := range commonPayloads {
|
for i, commonPayload := range commonPayloads {
|
||||||
statusCode := validationCodes[i]
|
statusCode := validationCodes[i]
|
||||||
|
|
||||||
|
|
@ -90,7 +90,7 @@ func (b *Block) parse(commonPayloads []*common.Payload) ([]*payload, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*Block) createTransactionsFrom(payloads []*payload) []*Transaction {
|
func (*Block) createTransactionsFrom(payloads []*payload) []*Transaction {
|
||||||
result := []*Transaction{}
|
var result []*Transaction
|
||||||
for _, payload := range payloads {
|
for _, payload := range payloads {
|
||||||
result = append(result, newTransaction(payload))
|
result = append(result, newTransaction(payload))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,7 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
chaincodeEndorsedActions, err := p.extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads)
|
proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
proposalResponsePayloads, err := p.unmarshalProposalResponsePayloadsFrom(chaincodeEndorsedActions)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
@ -49,31 +44,22 @@ func (p *endorserTransaction) unmarshalReadWriteSets() ([]*readWriteSet, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *endorserTransaction) unmarshalChaincodeActionPayloads() ([]*peer.ChaincodeActionPayload, error) {
|
func (p *endorserTransaction) unmarshalChaincodeActionPayloads() ([]*peer.ChaincodeActionPayload, error) {
|
||||||
result := []*peer.ChaincodeActionPayload{}
|
var result []*peer.ChaincodeActionPayload
|
||||||
for _, transactionAction := range p.transaction.GetActions() {
|
for _, transactionAction := range p.transaction.GetActions() {
|
||||||
chaincodeActionPayload := &peer.ChaincodeActionPayload{}
|
chaincodeActionPayload := &peer.ChaincodeActionPayload{}
|
||||||
if err := proto.Unmarshal(transactionAction.GetPayload(), chaincodeActionPayload); err != nil {
|
if err := proto.Unmarshal(transactionAction.GetPayload(), chaincodeActionPayload); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result = append(result, chaincodeActionPayload)
|
result = append(result, chaincodeActionPayload)
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*endorserTransaction) extractChaincodeEndorsedActionsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ChaincodeEndorsedAction, error) {
|
func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeActionPayloads []*peer.ChaincodeActionPayload) ([]*peer.ProposalResponsePayload, error) {
|
||||||
result := []*peer.ChaincodeEndorsedAction{}
|
var result []*peer.ProposalResponsePayload
|
||||||
for _, payload := range chaincodeActionPayloads {
|
for _, chaincodeActionPayload := 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 {
|
|
||||||
proposalResponsePayload := &peer.ProposalResponsePayload{}
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
result = append(result, proposalResponsePayload)
|
result = append(result, proposalResponsePayload)
|
||||||
|
|
@ -82,7 +68,7 @@ func (*endorserTransaction) unmarshalProposalResponsePayloadsFrom(chaincodeEndor
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloads []*peer.ProposalResponsePayload) ([]*peer.ChaincodeAction, error) {
|
func (*endorserTransaction) unmarshalChaincodeActionsFrom(proposalResponsePayloads []*peer.ProposalResponsePayload) ([]*peer.ChaincodeAction, error) {
|
||||||
result := []*peer.ChaincodeAction{}
|
var result []*peer.ChaincodeAction
|
||||||
for _, proposalResponsePayload := range proposalResponsePayloads {
|
for _, proposalResponsePayload := range proposalResponsePayloads {
|
||||||
chaincodeAction := &peer.ChaincodeAction{}
|
chaincodeAction := &peer.ChaincodeAction{}
|
||||||
if err := proto.Unmarshal(proposalResponsePayload.GetExtension(), chaincodeAction); err != nil {
|
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) {
|
func (*endorserTransaction) unmarshalTxReadWriteSetsFrom(chaincodeActions []*peer.ChaincodeAction) ([]*rwset.TxReadWriteSet, error) {
|
||||||
result := []*rwset.TxReadWriteSet{}
|
var result []*rwset.TxReadWriteSet
|
||||||
for _, chaincodeAction := range chaincodeActions {
|
for _, chaincodeAction := range chaincodeActions {
|
||||||
txReadWriteSet := &rwset.TxReadWriteSet{}
|
txReadWriteSet := &rwset.TxReadWriteSet{}
|
||||||
if err := proto.Unmarshal(chaincodeAction.GetResults(), txReadWriteSet); err != nil {
|
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 {
|
func (*endorserTransaction) parseReadWriteSets(txReadWriteSets []*rwset.TxReadWriteSet) []*readWriteSet {
|
||||||
result := []*readWriteSet{}
|
var result []*readWriteSet
|
||||||
for _, txReadWriteSet := range txReadWriteSets {
|
for _, txReadWriteSet := range txReadWriteSets {
|
||||||
parsedReadWriteSet := parseReadWriteSet(txReadWriteSet)
|
parsedReadWriteSet := parseReadWriteSet(txReadWriteSet)
|
||||||
result = append(result, parsedReadWriteSet)
|
result = append(result, parsedReadWriteSet)
|
||||||
|
|
|
||||||
|
|
@ -27,11 +27,10 @@ func (t *Transaction) NamespaceReadWriteSets() ([]*NamespaceReadWriteSet, error)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
result := []*NamespaceReadWriteSet{}
|
var result []*NamespaceReadWriteSet
|
||||||
for _, readWriteSet := range txReadWriteSets {
|
for _, readWriteSet := range txReadWriteSets {
|
||||||
result = append(result, readWriteSet.namespaceReadWriteSets()...)
|
result = append(result, readWriteSet.namespaceReadWriteSets()...)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,12 @@ import (
|
||||||
var errExpected = errors.New("expected error: simulated write failure")
|
var errExpected = errors.New("expected error: simulated write failure")
|
||||||
|
|
||||||
type offChainStore struct {
|
type offChainStore struct {
|
||||||
writes, path string
|
path string
|
||||||
simulatedFailureCount, transactionCount uint
|
simulatedFailureCount, transactionCount uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func newOffChainStore(path string, simulatedFailureCount uint) *offChainStore {
|
func newOffChainStore(path string, simulatedFailureCount uint) *offChainStore {
|
||||||
return &offChainStore{
|
return &offChainStore{
|
||||||
"",
|
|
||||||
path,
|
path,
|
||||||
uint(simulatedFailureCount),
|
uint(simulatedFailureCount),
|
||||||
0,
|
0,
|
||||||
|
|
@ -30,17 +29,12 @@ func (ocs *offChainStore) write(data ledgerUpdate) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
ocs.clearLastWrites()
|
writes, err := ocs.marshal(data.Writes)
|
||||||
|
if err != nil {
|
||||||
if err := ocs.marshal(data.Writes); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ocs.persist(); err != nil {
|
return ocs.persist(writes)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ocs *offChainStore) simulateFailureIfRequired() error {
|
func (ocs *offChainStore) simulateFailureIfRequired() error {
|
||||||
|
|
@ -54,30 +48,27 @@ func (ocs *offChainStore) simulateFailureIfRequired() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ocs *offChainStore) clearLastWrites() {
|
func (ocs *offChainStore) marshal(writes []write) (string, error) {
|
||||||
ocs.writes = ""
|
var marshaledWrites string
|
||||||
}
|
|
||||||
|
|
||||||
func (ocs *offChainStore) marshal(writes []write) error {
|
|
||||||
for _, write := range writes {
|
for _, write := range writes {
|
||||||
marshaled, err := json.Marshal(write)
|
marshaled, err := json.Marshal(write)
|
||||||
if err != nil {
|
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)
|
f, err := os.OpenFile(ocs.path, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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 {
|
if closeErr := f.Close(); closeErr != nil {
|
||||||
return fmt.Errorf("write error: %v, close error: %v", writeErr, closeErr)
|
return fmt.Errorf("write error: %v, close error: %v", writeErr, closeErr)
|
||||||
}
|
}
|
||||||
|
|
@ -85,9 +76,5 @@ func (ocs *offChainStore) persist() error {
|
||||||
return writeErr
|
return writeErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := f.Close(); err != nil {
|
return f.Close()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,14 +27,9 @@ func transact(clientConnection grpc.ClientConnInterface) error {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
contract := gateway.GetNetwork(channelName).GetContract(chaincodeName)
|
contract := gateway.GetNetwork(channelName).GetContract(chaincodeName)
|
||||||
|
|
||||||
smartContract := atb.NewAssetTransferBasic(contract)
|
smartContract := atb.NewAssetTransferBasic(contract)
|
||||||
app := newTransactApp(smartContract)
|
app := newTransactApp(smartContract)
|
||||||
if err := app.run(); err != nil {
|
return app.run()
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type transactApp struct {
|
type transactApp struct {
|
||||||
|
|
@ -71,11 +66,7 @@ func (t *transactApp) run() error {
|
||||||
|
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
if err := context.Cause(ctx); err != nil {
|
return context.Cause(ctx)
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *transactApp) transact() error {
|
func (t *transactApp) transact() error {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue