forked from Deeptiman/blockreader
-
Notifications
You must be signed in to change notification settings - Fork 1
/
get_kv_read_write_set.go
122 lines (102 loc) · 2.75 KB
/
get_kv_read_write_set.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package blockreader
import (
"github.com/golang/protobuf/proto"
"github.com/hyperledger/fabric-protos-go/ledger/rwset"
"github.com/hyperledger/fabric-protos-go/ledger/rwset/kvrwset"
"github.com/hyperledger/fabric-protos-go/peer"
"github.com/pkg/errors"
)
func GetKVRWSetJson(chaincodeAction *peer.ChaincodeAction) (ChaincodeKVRWSet, error) {
// Results is the marshalled object of TxReadWriteSet
/*
type TxReadWriteSet struct {
DataModel TxReadWriteSet_DataModel
NsRwset []*NsReadWriteSet
}
type NsReadWriteSet struct {
Namespace string
Rwset []byte
}
*/
txReadWriteSet := &rwset.TxReadWriteSet{}
err := proto.Unmarshal(chaincodeAction.Results, txReadWriteSet)
if err != nil {
return ChaincodeKVRWSet{}, errors.WithMessage(err, "unmarshaling txReadWriteSet error: ")
}
RwSet := txReadWriteSet.NsRwset[0].Rwset
//RwSet is the marshalled object of KVRWSet
/*
type KVRWSet struct {
Reads []*KVRead
RangeQueriesInfo []*RangeQueryInfo
Writes []*KVWrite
MetadataWrites []*KVMetadataWrite
}
type KVRead struct {
Key string
Version *Version
}
type Version struct {
BlockNum uint64
TxNum uint64
}
type KVWrite struct {
Key string
IsDelete bool
Value []byte
}
type RangeQueryInfo struct {
StartKey string
EndKey string
ItrExhausted bool
ReadsInfo isRangeQueryInfo_ReadsInfo
}
type KVMetadataWrite struct {
Key string
Entries []*KVMetadataEntry
}
type KVMetadataEntry struct {
Name string
Value []byte
}
*/
kvrwset := &kvrwset.KVRWSet{}
err = proto.Unmarshal(RwSet, kvrwset)
if err != nil {
return ChaincodeKVRWSet{}, errors.WithMessage(err, "unmarshaling kvrwset error: ")
}
var versionJson Version
var kvReadJson KVRead
var rangeQueryInfoJson RangeQueryInfo
var kvMetadataWriteJson KVMetadataWrite
if len(kvrwset.Reads) != 0 {
versionJson = Version{
BlockNum: kvrwset.Reads[0].Version.BlockNum,
TxNum: kvrwset.Reads[0].Version.TxNum,
}
kvReadJson = KVRead{
Key: kvrwset.Reads[0].Key,
Version: versionJson,
}
}
if len(kvrwset.RangeQueriesInfo) != 0 {
rangeQueryInfoJson = RangeQueryInfo{
StartKey: kvrwset.RangeQueriesInfo[0].StartKey,
EndKey: kvrwset.RangeQueriesInfo[0].EndKey,
ItrExhausted: kvrwset.RangeQueriesInfo[0].ItrExhausted,
}
}
if len(kvrwset.MetadataWrites) != 0 {
kvMetadataWriteJson = KVMetadataWrite{
Key: kvrwset.MetadataWrites[0].Key,
Name: kvrwset.MetadataWrites[0].Entries[0].Name,
}
}
chaincodeKVRWSetJson := ChaincodeKVRWSet{
Reads: kvReadJson,
Writes: kvrwset.Writes,
RangeQueriesInfo: rangeQueryInfoJson,
MetadataWrites: kvMetadataWriteJson,
}
return chaincodeKVRWSetJson, nil
}