-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathget_kv_read_write_set.go
130 lines (109 loc) · 2.9 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
123
124
125
126
127
128
129
130
package main
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 kvWriteJson KVWrite
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.Writes) != 0 {
kvWriteJson = KVWrite{
Key: kvrwset.Writes[0].Key,
IsDelete: kvrwset.Writes[0].IsDelete,
}
}
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: kvWriteJson,
RangeQueriesInfo: rangeQueryInfoJson,
MetadataWrites: kvMetadataWriteJson,
}
return chaincodeKVRWSetJson, nil
}