diff --git a/services/wallet/transfer/commands_sequential.go b/services/wallet/transfer/commands_sequential.go index 7ccb2e1bb..0f4f56d75 100644 --- a/services/wallet/transfer/commands_sequential.go +++ b/services/wallet/transfer/commands_sequential.go @@ -230,6 +230,11 @@ func (c *findBlocksCommand) Run(parent context.Context) (err error) { } for { + if from.Cmp(to) == 0 { + log.Debug("findBlocksCommand empty range", "from", from, "to", to) + break + } + var headers []*DBHeader if c.reachedETHHistoryStart { if c.fromBlockNumber.Cmp(zero) == 0 && c.startBlockNumber != nil && c.startBlockNumber.Cmp(zero) == 1 { @@ -264,6 +269,7 @@ func (c *findBlocksCommand) Run(parent context.Context) (err error) { } if c.reachedETHHistoryStart { + log.Debug("findBlocksCommand reached first ETH transfer and checked erc20 tail", "chain", c.chainClient.NetworkID(), "account", c.account) break } @@ -272,24 +278,26 @@ func (c *findBlocksCommand) Run(parent context.Context) (err error) { break } - if from.Cmp(to) == 0 { + if c.startBlockNumber != nil && c.fromBlockNumber.Cmp(from) == -1 { + log.Debug("ERC20 tail should be checked", "initial from", c.fromBlockNumber, "actual from", from, "first ETH block", c.startBlockNumber) + c.reachedETHHistoryStart = true + continue + } + + if c.startBlockNumber != nil && c.startBlockNumber.Cmp(from) >= 0 { + log.Debug("Checked all ranges, stop execution", "startBlock", c.startBlockNumber, "from", from, "to", to) break } nextFrom, nextTo := nextRange(c.defaultNodeBlockChunkSize, c.resFromBlock.Number, c.fromBlockNumber) if nextFrom.Cmp(from) == 0 && nextTo.Cmp(to) == 0 { + log.Debug("findBlocksCommand empty next range", "from", from, "to", to) break } from = nextFrom to = nextTo - - if to.Cmp(c.fromBlockNumber) <= 0 || (c.startBlockNumber != nil && - c.startBlockNumber.Cmp(big.NewInt(0)) > 0 && to.Cmp(c.startBlockNumber) <= 0) { - log.Debug("Checked all ranges, stop execution", "startBlock", c.startBlockNumber, "from", from, "to", to) - c.reachedETHHistoryStart = true - } } log.Debug("end findBlocksCommand", "account", c.account, "chain", c.chainClient.NetworkID(), "noLimit", c.noLimit) diff --git a/services/wallet/transfer/commands_sequential_test.go b/services/wallet/transfer/commands_sequential_test.go index 45f3ed719..39646e628 100644 --- a/services/wallet/transfer/commands_sequential_test.go +++ b/services/wallet/transfer/commands_sequential_test.go @@ -673,6 +673,20 @@ func getCases() []findBlockCase { }, } + case10 := findBlockCase{ + balanceChanges: [][]int{}, + toBlock: 100, + fromBlock: 99, + expectedBlocksFound: 0, + label: "single block range, no transactions", + expectedCalls: map[string]int{ + // only two requests to check the range for incoming ERC20 + "FilterLogs": 2, + // no contract calls as ERC20 is not checked + "CallContract": 0, + }, + } + cases = append(cases, case1) cases = append(cases, case100transfers) cases = append(cases, case3) @@ -683,8 +697,9 @@ func getCases() []findBlockCase { cases = append(cases, case7emptyHistoryWithOneERC20Transfer) cases = append(cases, case8emptyHistoryWithERC20Transfers) cases = append(cases, case9emptyHistoryWithERC20Transfers) + cases = append(cases, case10) - //cases = append([]findBlockCase{}, case9emptyHistoryWithERC20Transfers) + //cases = append([]findBlockCase{}, case10) return cases }