code: func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) {
  	// Accumulate any block and uncle rewards and commit the final state root
  	accumulateRewards(chain.Config(), state, header, uncles)
  	header.Root = state.IntermediateRoot(chain.Config().IsEIP158(header.Number))
  
  	// Header seems complete, assemble into a block and return
  	return types.NewBlock(header, txs, uncles, receipts), nil
  }
docs: // FinalizeAndAssemble implements consensus.Engine, accumulating the block and
  // uncle rewards, setting the final state and assembling the block.