ERCs
ERC-4494 — Permit for ERC-721
ERC-2612 permit ported to NFTs. The owner signs an off-chain authorization for a specific tokenId; any party submits the permit to authorize the spender.
import { parse } from "valibot";
import { AddressSchema, BytesSchema, Uint256Schema } from "@ethernauta/core";
import { permit } from "@ethernauta/erc/4494";
import type { Provider } from "@ethernauta/eip/1193";
import { create_provider, encode_chain_id } from "@ethernauta/transport";
import { eip155_1 } from "@ethernauta/chain/eip155-1";
const CHAIN_ID = encode_chain_id({ namespace: "eip155", reference: eip155_1.chainId });
declare const provider: Provider; // see /eips/6963 for discovery
const { signer } = create_provider(provider);
const collection = parse(AddressSchema, "0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D");
const spender = parse(AddressSchema, "0x70997970C51812dc3A010C7d01b50e0d17dc79C8");
const tokenId = parse(Uint256Schema, "0x1");
const deadline = parse(Uint256Schema, "0xffffffff");
const sig = parse(BytesSchema, "0x");
const signed = await permit({ spender, tokenId, deadline, sig })(
signer({ chain_id: CHAIN_ID, to: collection }),
);
void signed; Surface
| Method | Shape | Purpose |
|---|---|---|
permit({ spender, token_id, deadline, sig }) | Signable<Hash32> | Submit the permit. |
nonces({ token_id }) | Callable<Uint256> | Per-token nonce. |
DOMAIN_SEPARATOR() | Callable<Bytes32> | EIP-712 domain. |