// TODO: block processor pipeline protected virtual TxReceipt[] ProcessBlock( Block block, IBlockTracer blockTracer, ProcessingOptions options) { IReleaseSpec spec = _specProvider.GetSpec(block.Number); _receiptsTracer.SetOtherTracer(blockTracer); _receiptsTracer.StartNewBlockTrace(block); TxReceipt[] receipts = _blockTransactionsExecutor.ProcessTransactions(block, options, _receiptsTracer, spec); _receiptsTracer.EndBlockTrace(); block.Header.ReceiptsRoot = receipts.GetReceiptsRoot(spec, block.ReceiptsRoot); ApplyMinerRewards(block, blockTracer, spec); _stateProvider.Commit(spec); _stateProvider.RecalculateStateRoot(); block.Header.StateRoot = _stateProvider.StateRoot; block.Header.Hash = block.Header.CalculateHash(); return(receipts); }