ERCs

ERC-721 — Non-Fungible Token Standard

eips.ethereum.org/EIPS/eip-721

import {
  balance_of,
  owner_of,
  transfer_from,
  safe_transfer_from,
  approve,
  get_approved,
  set_approval_for_all,
  is_approved_for_all,
} from "@ethernauta/erc/721";

Core methods

MethodShapePurpose
balance_of({ owner })Callable<Uint256>NFT count owned.
owner_of({ token_id })Callable<Address>Current owner.
transfer_from({ from, to, token_id })Signable<Hash32>Unsafe transfer.
safe_transfer_from({ from, to, token_id, data? })Signable<Hash32>Safe transfer (checks receiver).
approve({ to, token_id })Signable<Hash32>Per-token approval.
get_approved({ token_id })Callable<Address>Read approval.
set_approval_for_all({ operator, approved })Signable<Hash32>All-token approval.
is_approved_for_all({ owner, operator })Callable<boolean>Read operator approval.

Extensions

SubpathMethods
@ethernauta/erc/721/burnableburn
@ethernauta/erc/721/enumerabletotal_supply, token_of_owner_by_index, token_by_index
@ethernauta/erc/721/metadataname, symbol, token_uri
@ethernauta/erc/721/pausablepause, unpause, paused

Reading owner + metadata

import { owner_of } from "@ethernauta/erc/721";
import { token_uri } from "@ethernauta/erc/721/metadata";

const ctx = contract({ chain_id: eip155_1.chain_id, contract: collection });

const owner = await owner_of({ token_id: 1n })(ctx);
const uri = await token_uri({ token_id: 1n })(ctx);

See also

  • ERC-1155 — multi-token alternative.
  • ERC-2981 — royalties for NFTs.
  • ERC-4494 — permit for ERC-721.
  • ERC-165 — interface detection (most NFTs implement 165).