mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-22 17:45:10 +00:00
Decompose writes method
Remove unused struct member and to-do comments. Signed-off-by: Stanislav Jakuschevskij <stas@two-giants.com>
This commit is contained in:
parent
2086e37c1b
commit
b03b8cc495
3 changed files with 40 additions and 39 deletions
|
|
@ -67,7 +67,7 @@ func (atb *AssetTransferBasic) GetAllAssets() ([]Asset, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var assets []Asset
|
assets := []Asset{}
|
||||||
if err := json.Unmarshal(assetsRaw, &assets); err != nil {
|
if err := json.Unmarshal(assetsRaw, &assets); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import (
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/hyperledger/fabric-gateway/pkg/client"
|
"github.com/hyperledger/fabric-gateway/pkg/client"
|
||||||
|
"github.com/hyperledger/fabric-protos-go-apiv2/ledger/rwset/kvrwset"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -65,7 +66,6 @@ func listen(clientConnection grpc.ClientConnInterface) error {
|
||||||
parser.ParseBlock(blockProto),
|
parser.ParseBlock(blockProto),
|
||||||
checkpointer,
|
checkpointer,
|
||||||
applyWritesToOffChainStore,
|
applyWritesToOffChainStore,
|
||||||
channelName,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := aBlockProcessor.process(); err != nil {
|
if err := aBlockProcessor.process(); err != nil {
|
||||||
|
|
@ -81,7 +81,6 @@ type blockProcessor struct {
|
||||||
parsedBlock *parser.Block
|
parsedBlock *parser.Block
|
||||||
checkpointer *client.FileCheckpointer
|
checkpointer *client.FileCheckpointer
|
||||||
writeToStore writer
|
writeToStore writer
|
||||||
channelName string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *blockProcessor) process() error {
|
func (b *blockProcessor) process() error {
|
||||||
|
|
@ -96,9 +95,7 @@ func (b *blockProcessor) process() error {
|
||||||
txProcessor := transactionProcessor{
|
txProcessor := transactionProcessor{
|
||||||
b.parsedBlock.Number(),
|
b.parsedBlock.Number(),
|
||||||
validTransaction,
|
validTransaction,
|
||||||
// TODO use reference to parent and get blockNumber, store and channelName from parent
|
|
||||||
b.writeToStore,
|
b.writeToStore,
|
||||||
b.channelName,
|
|
||||||
}
|
}
|
||||||
if err := txProcessor.process(); err != nil {
|
if err := txProcessor.process(); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -118,12 +115,12 @@ func (b *blockProcessor) process() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *blockProcessor) validTransactions() ([]*parser.Transaction, error) {
|
func (b *blockProcessor) validTransactions() ([]*parser.Transaction, error) {
|
||||||
result := []*parser.Transaction{}
|
|
||||||
newTransactions, err := b.getNewTransactions()
|
newTransactions, err := b.getNewTransactions()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result := []*parser.Transaction{}
|
||||||
for _, transaction := range newTransactions {
|
for _, transaction := range newTransactions {
|
||||||
if transaction.IsValid() {
|
if transaction.IsValid() {
|
||||||
result = append(result, transaction)
|
result = append(result, transaction)
|
||||||
|
|
@ -188,7 +185,6 @@ type transactionProcessor struct {
|
||||||
blockNumber uint64
|
blockNumber uint64
|
||||||
transaction *parser.Transaction
|
transaction *parser.Transaction
|
||||||
writeToStore writer
|
writeToStore writer
|
||||||
channelName string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *transactionProcessor) process() error {
|
func (t *transactionProcessor) process() error {
|
||||||
|
|
@ -218,43 +214,33 @@ func (t *transactionProcessor) process() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *transactionProcessor) writes() ([]write, error) {
|
func (t *transactionProcessor) writes() ([]write, error) {
|
||||||
// TODO this entire code should live in the parser and just return the kvWrite which
|
nsReadWriteSets, err := t.nonSystemCCReadWriteSets()
|
||||||
// we then map to write and return
|
if err != nil {
|
||||||
t.channelName = t.transaction.ChannelHeader().GetChannelId()
|
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()
|
nsReadWriteSets, err := t.transaction.NamespaceReadWriteSets()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
nonSystemCCReadWriteSets := []*parser.NamespaceReadWriteSet{}
|
return slices.DeleteFunc(nsReadWriteSets, func(nsReadWriteSet *parser.NamespaceReadWriteSet) bool {
|
||||||
for _, nsReadWriteSet := range nsReadWriteSets {
|
return t.isSystemChaincode(nsReadWriteSet.Namespace())
|
||||||
if !t.isSystemChaincode(nsReadWriteSet.Namespace()) {
|
}), nil
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *transactionProcessor) isSystemChaincode(chaincodeName string) bool {
|
func (t *transactionProcessor) isSystemChaincode(chaincodeName string) bool {
|
||||||
|
|
@ -268,3 +254,18 @@ func (t *transactionProcessor) isSystemChaincode(chaincodeName string) bool {
|
||||||
}
|
}
|
||||||
return slices.Contains(systemChaincodeNames, chaincodeName)
|
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
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@ func randomElement(values []string) string {
|
||||||
|
|
||||||
// Pick a random element from an array, excluding the current value.
|
// Pick a random element from an array, excluding the current value.
|
||||||
func differentElement(values []string, currentValue string) string {
|
func differentElement(values []string, currentValue string) string {
|
||||||
var candidateValues []string
|
candidateValues := []string{}
|
||||||
for _, v := range values {
|
for _, v := range values {
|
||||||
if v != currentValue {
|
if v != currentValue {
|
||||||
candidateValues = append(candidateValues, v)
|
candidateValues = append(candidateValues, v)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue