From a823ef26df09aca426a46af67d338141e7a556af Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Fri, 7 Dec 2018 08:20:36 +0000 Subject: [PATCH] eth: accountRangeAt, return preimages if they can't be resolved to addresses --- eth/api.go | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/eth/api.go b/eth/api.go index 052e5b7979..f68bb03e65 100644 --- a/eth/api.go +++ b/eth/api.go @@ -338,19 +338,28 @@ func (api *PrivateDebugAPI) GetBadBlocks(ctx context.Context) ([]*BadBlockArgs, type AccountRangeResult struct { Addresses []common.Address `json:"addresses"` Next common.Address `json:"next"` + Preimages []common.Hash `json:"preimages"` + NextPreimage common.Hash `json:"nextPreimage"` } func accountRange(st state.Trie, start *common.Address, maxResult int) (AccountRangeResult, error) { it := trie.NewIterator(st.NodeIterator(crypto.Keccak256(start[:]))) - result := AccountRangeResult{Addresses: []common.Address{}, Next: common.Address{}} + result := AccountRangeResult{Addresses: []common.Address{}, Next: common.Address{}, Preimages: []common.Hash{}, NextPreimage: common.Hash{}} for i := 0; i < maxResult && it.Next(); i++ { if preimage := st.GetKey(it.Key); preimage != nil { result.Addresses = append(result.Addresses, common.BytesToAddress(preimage)) + } else { + result.Preimages = append(result.Preimages, common.BytesToHash(preimage)) } } if it.Next() { - result.Next = common.BytesToAddress(st.GetKey(it.Key)) + if preimage := st.GetKey(it.Key); preimage != nil { + result.Next = common.BytesToAddress(st.GetKey(preimage)) + } else { + result.NextPreimage = common.BytesToHash(preimage) + } + } return result, nil