@@ -22,16 +22,18 @@ const (
22
22
)
23
23
24
24
var cmds = map [string ]bool {
25
- "data" : true ,
26
- "shape" : true ,
27
- "versions" : true ,
25
+ "data" : true ,
26
+ "data-full" : true ,
27
+ "hash" : true ,
28
+ "shape" : true ,
29
+ "versions" : true ,
28
30
}
29
31
30
32
func main () {
31
33
args := os .Args [1 :]
32
34
if len (args ) < 3 || len (args ) > 4 || ! cmds [args [0 ]] {
33
35
fmt .Fprintln (os .Stderr , strings .TrimSpace (`
34
- Usage: iaviewer <data|shape|versions> <leveldb dir> <prefix> [version number]
36
+ Usage: iaviewer <data|data-full|hash| shape|versions> <leveldb dir> <prefix> [version number]
35
37
<prefix> is the prefix of db, and the iavl tree of different modules in cosmos-sdk uses
36
38
different <prefix> to identify, just like "s/k:gov/" represents the prefix of gov module
37
39
` ))
@@ -60,9 +62,15 @@ different <prefix> to identify, just like "s/k:gov/" represents the prefix of go
60
62
assertNoError (err , "Error reading target version" )
61
63
fmt .Printf ("Got version: %d\n " , tree .Version ())
62
64
65
+ fullValues := false
63
66
switch args [0 ] {
67
+ case "data-full" :
68
+ fullValues = true
69
+ fallthrough
64
70
case "data" :
65
- PrintKeys (tree )
71
+ PrintKeys (tree , fullValues )
72
+ fallthrough
73
+ case "hash" :
66
74
hash := tree .Hash ()
67
75
fmt .Printf ("Hash: %X\n " , hash )
68
76
fmt .Printf ("Size: %X\n " , tree .Size ())
@@ -150,12 +158,20 @@ func ReadTree(dir string, prefix []byte) (tree *iavl.MutableTree, latestVersion
150
158
return tree , latestVersion , err
151
159
}
152
160
153
- func PrintKeys (tree * iavl.ImmutableTree ) {
154
- fmt .Println ("Printing all keys with hashed values (to detect diff)" )
161
+ func PrintKeys (tree * iavl.ImmutableTree , fullValues bool ) {
162
+ valuesLabel := "hashed values"
163
+ valueToString := func (value []byte ) string {
164
+ return fmt .Sprintf ("%X" , sha256 .Sum256 (value ))
165
+ }
166
+ if fullValues {
167
+ valuesLabel = "values"
168
+ valueToString = encodeData
169
+ }
170
+ fmt .Printf ("Printing all keys with %s (to detect diff)\n " , valuesLabel )
155
171
tree .Iterate (func (key []byte , value []byte ) bool {
156
- printKey := parseWeaveKey (key )
157
- digest := sha256 . Sum256 (value )
158
- fmt .Printf (" %s\n %X \n " , printKey , digest )
172
+ keyStr := parseWeaveKey (key )
173
+ valueStr := valueToString (value )
174
+ fmt .Printf (" %s\n %s \n " , keyStr , valueStr )
159
175
return false
160
176
})
161
177
}
0 commit comments