code: func (bc *BlockChain) reportBlock(block *types.Block, receipts types.Receipts, err error) {
  	bc.addBadBlock(block)
  
  	var receiptString string
  	for i, receipt := range receipts {
  		receiptString += fmt.Sprintf("\t %d: cumulative: %v gas: %v contract: %v status: %v tx: %v logs: %v bloom: %x state: %x\n",
  			i, receipt.CumulativeGasUsed, receipt.GasUsed, receipt.ContractAddress.Hex(),
  			receipt.Status, receipt.TxHash.Hex(), receipt.Logs, receipt.Bloom, receipt.PostState)
  	}
  	log.Error(fmt.Sprintf(`
  ########## BAD BLOCK #########
  Chain config: %v
  
  Number: %v
  Hash: 0x%x
  %v
  
  Error: %v
  ##############################
  `, bc.chainConfig, block.Number(), block.Hash(), receiptString, err))
  }
docs: // reportBlock logs a bad block error.