private void SetPendingValidators(PendingValidators validators, bool canSave = false) { _currentPendingValidators = validators; // We don't want to save to db when: // * We are producing block // * We will save later on processing same block (stateDb ignores consecutive calls with same key!) // * We are loading validators from db. if (canSave) { ValidatorStore.PendingValidators = validators; } }
private PendingValidators TryGetInitChangeFromPastBlocks(Keccak blockHash) { PendingValidators pendingValidators = null; var lastFinalized = _blockFinalizationManager.GetLastLevelFinalizedBy(blockHash); var toBlock = Math.Max(lastFinalized, InitBlockNumber); var block = _blockTree.FindBlock(blockHash, BlockTreeLookupOptions.None); while (block?.Number >= toBlock) { var receipts = _receiptFinder.Get(block) ?? Array.Empty <TxReceipt>(); if (ValidatorContract.CheckInitiateChangeEvent(block.Header, receipts, out var potentialValidators)) { if (Validators.SequenceEqual(potentialValidators)) { break; } pendingValidators = new PendingValidators(block.Number, block.Hash, potentialValidators); } block = _blockTree.FindBlock(block.ParentHash, BlockTreeLookupOptions.None); } return(pendingValidators); }