ERC-4494: NFT Permit (Gasless NFT Approval)
ERC-4494 brings ERC-2612-style gasless approvals to NFTs. The owner signs an EIP-712 typed message authorising a single-use permit; a marketplace submits the permit on-chain to set the approval, then immediately calls transferFrom. One transaction, no separate approve.
Required Interface
function permit(
address spender, uint256 tokenId, uint256 deadline,
bytes memory sig
) external;
function nonces(uint256 tokenId) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);Neo Equivalent: Witness Scopes
Just like ERC-2612, the Ethereum signature-parsing mechanism is unnecessary on Neo. The user signs a single transaction with WitnessScope.CustomContracts allowing the marketplace contract to call Transfer on the NFT. No EIP-712 domain separator or signature recovery is needed. The mirror keeps a small permit/nonce method only to demonstrate replay protection side-by-side.
Live on Neo TestNet
Both implementations are deployed on Neo N3 TestNet (network magic 894710606).
| Implementation | Contract Hash | Deploy Tx |
|---|---|---|
Solidity (neo-solc) | 0xe683fa29d01521d99abfe15cb7e4b1f69ed47b66 | (reused — see 0xe683fa29d01521d99abfe15cb7e4b1f69ed47b66) |
Neo C# (nccs) | 0xc705641088ed11e564c946bf8a9a1569a9cc9257 | (reused — see 0xc705641088ed11e564c946bf8a9a1569a9cc9257) |
Checked-in snapshot matches on initial nextId; the manifest now also exercises mint plus per-token permit nonce. Source pairs under docs/standards-mirror/deployments/erc-4494/.
