Esempio n. 1
0
    /// <summary>
    /// Changes sync mode expectations.
    /// </summary>
    /// <param name="onMode">Only change on this mode.</param>
    /// <param name="expectations">Expectations to change.</param>
    /// <param name="add">Mode to add.</param>
    /// <param name="remove">Should remove <see cref="when"/> modes.</param>
    /// <param name="when">When <see cref="add"/> mode should be added, can be removed based on <see cref="remove"/>.</param>
    /// <returns>Changed expectations.</returns>
    private SyncMode ChangeSyncMode(BeaconSync onMode, SyncMode expectations, SyncMode add, bool remove, params SyncMode[] when)
    {
        if (_mode == onMode)
        {
            if (expectations == SyncMode.None)
            {
                expectations |= add;
            }
            else
            {
                foreach (SyncMode removeMode in when)
                {
                    if ((expectations & removeMode) != 0)
                    {
                        if (remove)
                        {
                            expectations &= ~removeMode;
                        }

                        expectations |= add;
                    }
                }
            }
        }

        return(expectations);
    }
Esempio n. 2
0
        public Context(
            IBlockTree?blockTree     = null,
            ISyncConfig?syncConfig   = null,
            IBeaconPivot?beaconPivot = null,
            IDb?metadataDb           = null,
            IMergeConfig?mergeConfig = null)
        {
            if (blockTree == null)
            {
                IDb   blockInfoDb = new MemDb();
                Block genesis     = Build.A.Block.Genesis.TestObject;
                BlockTree = new BlockTree(new MemDb(), new MemDb(), blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), MainnetSpecProvider.Instance, NullBloomStorage.Instance, LimboLogs.Instance);
                BlockTree.SuggestBlock(genesis);
            }
            else
            {
                BlockTree = blockTree;
            }

            ISyncPeerPool    peerPool         = Substitute.For <ISyncPeerPool>();
            ISyncReport      report           = Substitute.For <ISyncReport>();
            MeasuredProgress measuredProgress = new MeasuredProgress();

            report.BeaconHeaders.Returns(measuredProgress);
            report.HeadersInQueue.Returns(measuredProgress);

            MemDb stateDb = new();

            _syncConfig  = syncConfig ?? new SyncConfig();
            _mergeConfig = mergeConfig ?? new MergeConfig();
            _metadataDb  = metadataDb ?? new MemDb();
            PoSSwitcher poSSwitcher = new(_mergeConfig, _syncConfig, _metadataDb, blockTree !,
                                          MainnetSpecProvider.Instance, LimboLogs.Instance);

            ProgressTracker progressTracker = new(BlockTree, stateDb, LimboLogs.Instance);

            SyncProgressResolver syncProgressResolver = new(
                BlockTree,
                NullReceiptStorage.Instance,
                stateDb,
                new TrieStore(stateDb, LimboLogs.Instance),
                progressTracker,
                _syncConfig,
                LimboLogs.Instance);
            TotalDifficultyBetterPeerStrategy bestPeerStrategy = new (LimboLogs.Instance);

            BeaconPivot = beaconPivot ?? new BeaconPivot(_syncConfig, _metadataDb, BlockTree, LimboLogs.Instance);
            BeaconSync  = new(BeaconPivot, BlockTree, _syncConfig, new BlockCacheService(), LimboLogs.Instance);
            ISyncModeSelector selector = new MultiSyncModeSelector(syncProgressResolver, peerPool, _syncConfig, BeaconSync, bestPeerStrategy, LimboLogs.Instance);

            Feed = new BeaconHeadersSyncFeed(poSSwitcher, selector, blockTree, peerPool, _syncConfig, report, BeaconPivot, _mergeConfig,
                                             new NoopInvalidChainTracker(), LimboLogs.Instance);
        }
Esempio n. 3
0
 /// <summary>
 /// Test suite for beacon sync.
 /// </summary>
 /// <param name="needToWaitForHeaders">Do we need to wait for headers before other sync.</param>
 /// <param name="mode">Beacon mode we will be in.</param>
 public MultiSyncModeSelectorBeaconTests(bool needToWaitForHeaders, BeaconSync mode) : base(needToWaitForHeaders)
 {
     _mode = mode;
 }