code: func GetBlock(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (*types.Block, error) {
  	// Retrieve the block header and body contents
  	header := rawdb.ReadHeader(odr.Database(), hash, number)
  	if header == nil {
  		return nil, ErrNoHeader
  	}
  	body, err := GetBody(ctx, odr, hash, number)
  	if err != nil {
  		return nil, err
  	}
  	// Reassemble the block and return
  	return types.NewBlockWithHeader(header).WithBody(body.Transactions, body.Uncles), nil
  }
docs: // GetBlock retrieves an entire block corresponding to the hash, assembling it
  // back from the stored header and body.