Example #1
0
        private void ResetMigrationIndexIfNeeded()
        {
            ReceiptsRecovery recovery = new ReceiptsRecovery(_api.EthereumEcdsa, _api.SpecProvider);

            if (_receiptStorage.MigratedBlockNumber != long.MaxValue)
            {
                long blockNumber = _blockTree.Head?.Number ?? 0;
                while (blockNumber > 0)
                {
                    var level          = _chainLevelInfoRepository.LoadLevel(blockNumber);
                    var firstBlockInfo = level?.BlockInfos.FirstOrDefault();
                    if (firstBlockInfo != null)
                    {
                        var receipts = _receiptStorage.Get(firstBlockInfo.BlockHash);
                        if (receipts?.Length > 0)
                        {
                            if (recovery.NeedRecover(receipts))
                            {
                                _receiptStorage.MigratedBlockNumber = long.MaxValue;
                            }

                            break;
                        }
                    }

                    blockNumber--;
                }
            }
        }