Returns the ERC721 portfolio for a given address

Parameters

  1. owner (address as hex string, default: 0x00005fab4df6b1c4a3eb5cf7db357cd766c65991)
    1. The owner for which we want to check their portfolio.
  2. chain_id (uint64, default: 0)
    1. Optional. Can be used to view balances from a certain chain. If unset, defaults to 0 and returns results from all chains.
  3. block_number (uint64, default: 0)
    1. Optional. Can be used to view allowances at a particular block. If unset, defaults to 0 and returns latest.
  4. limit (uint32, default: 100)
    1. Number of records you want returned.
  5. offset (uint32, default: 0)
    1. For pagination. If you're showing ten records per page, choose offset = 9 for the second page.

Returns

Array with the following fields:

  1. owner (address as hex string)
    1. The owner for which we checked the portfolio.
  2. chain_id (int64)
    1. The chain for the token
  3. token_address (address as hex string)
    1. The token's address.
  4. token_name (string)
    1. The token's name.
  5. token_symbol (string)
    1. The token's symbol.
  6. token_id (int256 as decimal string)
    1. The token's id.
  7. txn_last_changed (address as hex string)
    1. The most recent transaction that impacted the token_id.
  8. block_last_changed (int64)
    1. The most recent block that impacted token_id.

The array is sorted in descending order of block_last_changed.

Query

WITH latest_block_number AS (
  SELECT token_address_id_hash,
    chain_id,
    MAX(block_number) AS latest_block_number
  FROM @sim.erc721_owner_changes_block
  WHERE token_address_id_hash IN (
      SELECT DISTINCT token_address_id_hash
      FROM @sim.erc721_owner_changes_block
      WHERE owner = lower($owner)
        AND (
          chain_id = $chain_id
          OR $chain_id = 0
        )
        AND (
          block_number <= $block_number
          OR $block_number = 0
        )
    )
    AND chain_id IN (
      SELECT DISTINCT chain_id
      FROM @sim.erc721_owner_changes_block
      WHERE owner = lower($owner)
        AND (
          chain_id = $chain_id
          OR $chain_id = 0
        )
        AND (
          block_number <= $block_number
          OR $block_number = 0
        )
    )
    AND (
      block_number <= $block_number
      OR $block_number = 0
    )
  GROUP BY token_address_id_hash,
    chain_id
)
SELECT b.owner,
  b.chain_id,
  b.token_address,
  b.token_name,
  b.token_symbol,
  b.token_id,
  b.txn_hash AS txn_last_changed,
  b.block_number as block_last_changed
FROM @sim.erc721_owner_changes_block b
  INNER JOIN latest_block_number lbn ON b.token_address_id_hash = lbn.token_address_id_hash
  AND b.block_number = lbn.latest_block_number
  AND b.chain_id = lbn.chain_id
WHERE owner = lower($owner)
ORDER BY block_last_changed DESC
LIMIT $limit OFFSET $offset