public async Task <ConcurrentChain> UpdateChain(ConcurrentChain source) { var chainChanges = _indexerClient.GetChainChangesUntilFork(source.Tip, false); chainChanges.UpdateChain(source); return(source); }
private async Task LoadChain(QBitNinjaConfiguration configuration, IndexerClient client, ConcurrentChain chain, ChainSynchronizeStatus status) { await Task.Delay(1).ConfigureAwait(false); LoadCache(chain, configuration.LocalChain, configuration.Indexer.Network); status.FileCachedHeight = chain.Height; var changes = client.GetChainChangesUntilFork(chain.Tip, false); try { await changes.UpdateChain(chain, _Cts.Token); } catch (ArgumentException) //Happen when chain in table is corrupted { client.Configuration.GetChainTable().DeleteIfExists(); for (int i = 0; i < 20; i++) { try { if (client.Configuration.GetChainTable().CreateIfNotExists()) { break; } } catch { } await Task.Delay(10000); } status.ReindexHeaders = true; await client.Configuration.CreateIndexer().IndexChain(chain, _Cts.Token); } status.TableFetchedHeight = chain.Height; SaveChainCache(chain, configuration.LocalChain); status.Synchronizing = false; Interlocked.Decrement(ref _UpdateChain); }