From 667fb455a930615f45f2331862b0464b6f9e7efa Mon Sep 17 00:00:00 2001 From: mexskican Date: Mon, 13 Nov 2017 14:37:58 -0800 Subject: [PATCH] eth: fix storageRangeAt return value StorageRangeAt use the Split function to decode the values. --- eth/api.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/eth/api.go b/eth/api.go index e91f51bb99..97bb126d71 100644 --- a/eth/api.go +++ b/eth/api.go @@ -615,14 +615,18 @@ func (api *PrivateDebugAPI) StorageRangeAt(ctx context.Context, blockHash common if st == nil { 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)) result := StorageRangeResult{Storage: storageMap{}} 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 { preimage := common.BytesToHash(preimage) e.Key = &preimage @@ -634,5 +638,5 @@ func storageRangeAt(st state.Trie, start []byte, maxResult int) StorageRangeResu next := common.BytesToHash(it.Key) result.NextKey = &next } - return result + return result, nil }