Example #1
0
        // 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);
        }