eth: return rlp-decoded values from debug_storageRangeAt (#15476)
Fixes #15196
This commit is contained in:
parent
e85b68ef53
commit
eab2201f80
12
eth/api.go
12
eth/api.go
@ -615,14 +615,18 @@ func (api *PrivateDebugAPI) StorageRangeAt(ctx context.Context, blockHash common
|
|||||||
if st == nil {
|
if st == nil {
|
||||||
return StorageRangeResult{}, fmt.Errorf("account %x doesn't exist", contractAddress)
|
return StorageRangeResult{}, fmt.Errorf("account %x doesn't exist", contractAddress)
|
||||||
}
|
}
|
||||||
return storageRangeAt(st, keyStart, maxResult), nil
|
return storageRangeAt(st, keyStart, maxResult)
|
||||||
}
|
}
|
||||||
|
|
||||||
func storageRangeAt(st state.Trie, start []byte, maxResult int) StorageRangeResult {
|
func storageRangeAt(st state.Trie, start []byte, maxResult int) (StorageRangeResult, error) {
|
||||||
it := trie.NewIterator(st.NodeIterator(start))
|
it := trie.NewIterator(st.NodeIterator(start))
|
||||||
result := StorageRangeResult{Storage: storageMap{}}
|
result := StorageRangeResult{Storage: storageMap{}}
|
||||||
for i := 0; i < maxResult && it.Next(); i++ {
|
for i := 0; i < maxResult && it.Next(); i++ {
|
||||||
e := storageEntry{Value: common.BytesToHash(it.Value)}
|
_, content, _, err := rlp.Split(it.Value)
|
||||||
|
if err != nil {
|
||||||
|
return StorageRangeResult{}, err
|
||||||
|
}
|
||||||
|
e := storageEntry{Value: common.BytesToHash(content)}
|
||||||
if preimage := st.GetKey(it.Key); preimage != nil {
|
if preimage := st.GetKey(it.Key); preimage != nil {
|
||||||
preimage := common.BytesToHash(preimage)
|
preimage := common.BytesToHash(preimage)
|
||||||
e.Key = &preimage
|
e.Key = &preimage
|
||||||
@ -634,7 +638,7 @@ func storageRangeAt(st state.Trie, start []byte, maxResult int) StorageRangeResu
|
|||||||
next := common.BytesToHash(it.Key)
|
next := common.BytesToHash(it.Key)
|
||||||
result.NextKey = &next
|
result.NextKey = &next
|
||||||
}
|
}
|
||||||
return result
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetModifiedAccountsByumber returns all accounts that have changed between the
|
// GetModifiedAccountsByumber returns all accounts that have changed between the
|
||||||
|
@ -79,7 +79,10 @@ func TestStorageRangeAt(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
result := storageRangeAt(state.StorageTrie(addr), test.start, test.limit)
|
result, err := storageRangeAt(state.StorageTrie(addr), test.start, test.limit)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
if !reflect.DeepEqual(result, test.want) {
|
if !reflect.DeepEqual(result, test.want) {
|
||||||
t.Fatalf("wrong result for range 0x%x.., limit %d:\ngot %s\nwant %s",
|
t.Fatalf("wrong result for range 0x%x.., limit %d:\ngot %s\nwant %s",
|
||||||
test.start, test.limit, dumper.Sdump(result), dumper.Sdump(&test.want))
|
test.start, test.limit, dumper.Sdump(result), dumper.Sdump(&test.want))
|
||||||
|
Loading…
Reference in New Issue
Block a user