code: func GetBlockReceipts(ctx context.Context, odr OdrBackend, hash common.Hash, number uint64) (types.Receipts, error) {
  	// Assume receipts are already stored locally and attempt to retrieve.
  	receipts := rawdb.ReadRawReceipts(odr.Database(), hash, number)
  	if receipts == nil {
  		r := &ReceiptsRequest{Hash: hash, Number: number}
  		if err := odr.Retrieve(ctx, r); err != nil {
  			return nil, err
  		}
  		receipts = r.Receipts
  	}
  	// If the receipts are incomplete, fill the derived fields
  	if len(receipts) > 0 && receipts[0].TxHash == (common.Hash{}) {
  		block, err := GetBlock(ctx, odr, hash, number)
  		if err != nil {
  			return nil, err
  		}
  		genesis := rawdb.ReadCanonicalHash(odr.Database(), 0)
  		config := rawdb.ReadChainConfig(odr.Database(), genesis)
  
  		if err := receipts.DeriveFields(config, block.Hash(), block.NumberU64(), block.Transactions()); err != nil {
  			return nil, err
  		}
  		rawdb.WriteReceipts(odr.Database(), hash, number, receipts)
  	}
  	return receipts, nil
  }
docs: // GetBlockReceipts retrieves the receipts generated by the transactions included
  // in a block given by its hash.