public TestContext(bool forSealing, ReportingContractBasedValidator.Cache cache = null, Address[] initialValidators = null) { BlockHeader parentHeader = Build.A.BlockHeader.TestObject; IValidatorContract validatorContract = Substitute.For <IValidatorContract>(); Address[] validators = initialValidators ?? new[] { MaliciousMinerAddress, NodeAddress }; validatorContract.GetValidators(parentHeader).Returns(validators); ContractBasedValidator = new ContractBasedValidator( validatorContract, Substitute.For <IBlockTree>(), Substitute.For <IReceiptFinder>(), Substitute.For <IValidatorStore>(), Substitute.For <IValidSealerStrategy>(), Substitute.For <IAuRaBlockFinalizationManager>(), parentHeader, LimboLogs.Instance, 0, PosdaoTransition, forSealing); ContractBasedValidator.Validators ??= validators; ReportingValidatorContract = Substitute.For <IReportingValidatorContract>(); ReportingValidatorContract.NodeAddress.Returns(NodeAddress); TxSender = Substitute.For <ITxSender>(); ITxPool txPool = Substitute.For <ITxPool>(); IStateProvider stateProvider = Substitute.For <IStateProvider>(); ISpecProvider specProvider = Substitute.For <ISpecProvider>(); stateProvider.GetNonce(ReportingValidatorContract.NodeAddress).Returns(UInt256.One); Validator = new ReportingContractBasedValidator( ContractBasedValidator, ReportingValidatorContract, PosdaoTransition, TxSender, txPool, new MiningConfig(), stateProvider, cache ?? new ReportingContractBasedValidator.Cache(), specProvider, Substitute.For <IGasPriceOracle>(), LimboLogs.Instance); }