Skip to content

Standards Mirror — Coverage Audit & Gap Report

This page answers the two recurring questions about the mirror:

  1. Audit — does every standard mentioned in devpack/standards/STANDARDS_MAPPING.md have a corresponding mirror page?
  2. Gap report — which Ethereum-side standards are notable enough to be worth mirroring but have not been added yet?

For the live deploy state of every mirrored standard, see the Coverage Matrix.

Code samples are illustrative

Each mirror page's Neo C# tab shows a representative implementation sketch, not a copy-paste-ready production contract. The samples target the shapes exposed by Neo.SmartContract.Framework (Nep17Token, Nep11Token<TokenState>, etc.) and follow these conventions:

  • Mint / Burn: the canonical NEP-17 base exposes protected static void Mint(UInt160 account, BigInteger amount) and protected static void Burn(UInt160 account, BigInteger amount) — two-arg only. NEP-11 base exposes protected static void Mint(ByteString tokenId, TokenState token). The samples wrap these from public methods that perform per-extension setup.
  • Custom hooks: the base classes do not expose OnMint / OnBurn / OnBeforeTransfer virtual hooks. Samples that show such overrides are illustrative — in production, perform the custom logic in your own public mint / burn / transfer wrappers and then call the base helpers, or reimplement Transfer with public new static.
  • Storage casts: (UInt160)Storage.Get(...) and (string)Storage.Get(...) rely on the implicit ByteString ↔ scalar conversions provided by the framework — these compile and run correctly when the stored value matches the expected length / shape.
  • Account derivation from a public key: use Contract.CreateStandardAccount(pubKey) — never cast pubKey.EncodePoint(true) to UInt160 (33-byte compressed encoding ≠ 20-byte script hash).
  • NEP-11 "divisible" base: several mirror pages (ERC-1155, ERC-5006, ERC-5216, ERC-5615, ERC-6909) describe the Neo mapping as "NEP-11 (divisible)". The framework only ships Nep11Token<TokenState> (non-divisible — every tokenId has a single owner). Divisible-style multi-balance NEP-11 (per NEP-11 spec) must be implemented manually with a (owner, tokenId) → balance storage map and custom transfer(from, to, amount, tokenId, data) / balanceOf(owner, tokenId) methods. The samples that inherit Nep11Token<T> for divisible semantics are showing the storage layout and method shape, not a turnkey base class.
  • CallFlags: prefer CallFlags.ReadOnly for view-only cross-contract calls (ownerOf, balanceOf, properties, isAuthorised, etc.); use CallFlags.All only when the callee may mutate state or fire notifications you depend on.
  • [Safe] on view methods: every read-only public method should carry [Safe] so the manifest advertises it as state-non-mutating (wallets and explorers rely on this for "read vs write" UI gating). The catalog applies it consistently to expression-bodied view methods (=> Storage.Get(...)); multi-line view bodies follow the same rule but are easy to miss when adapting samples — add [Safe] on the declaration line above any method that doesn't write storage or fire notifications.
  • Event names: every public static event Action<...> declaration is paired with a [DisplayName("CanonicalName")] so the manifest emits the spec-canonical name (Transfer, Approval, etc.) even when the C# field uses an OnXxx alias to avoid clashing with the base class's notification field. Pages inheriting Nep17Token / Nep11Token<T> never redeclare Transfer — they reuse the base class's event field.
  • Storage key building: samples build prefixed keys manually with new byte[] { Prefix_X }.Concat(suffix) rather than using the StorageMap helper. Both produce identical on-chain layouts, but the manual form makes the prefix byte explicit in every method (helpful for porters who want to predict storage keys before reading the helper's source). Production code may prefer new StorageMap(Storage.CurrentContext, Prefix_X) for ergonomics — the migration is mechanical and doesn't change semantics.

Verify against the canonical sources before deploying: Nep17Token.cs, Nep11Token.cs.

1. STANDARDS_MAPPING.md Audit

The devpack mapping doc references the following ERCs / EIPs in its quick reference table. Each row below shows whether a dedicated mirror page exists.

Mapping Doc RowMirror Page
ERC-20 ↔ NEP-17tokens/erc-20
ERC-721 ↔ NEP-11tokens/erc-721
ERC-2981 ↔ NEP-24tokens/erc-2981
ERC-1155 — Multi-Tokentokens/erc-1155
EIP-165 ↔ Manifestinfrastructure/erc-165
EIP-712 ↔ Witness modelaccount-and-auth/eip-712
EIP-2612 (Permit)account-and-auth/erc-2612
EIP-1967 (Proxy)infrastructure/erc-1967
ERC-721 Receiver ↔ NEP-26✅ Documented inline on tokens/erc-721; no dedicated page (it's a callback contract, not an ERC)
ERC-677 / ERC-1363 hooks ↔ NEP-27tokens/erc-1363

Audit result: every ERC/EIP row in the quick-reference table now has a mirror page. The Neo-side callback NEPs (NEP-22, NEP-26, NEP-27, NEP-29, NEP-30, NEP-31) are described inline in the relevant ERC pages and in additional-material/neo-standards/, which is the right place for the Neo-native side of the mirror.

Suggested follow-ups

  • Standalone NEP pages. additional-material/neo-standards/ ships NEP-11, NEP-17, and NEP-24 but no dedicated docs for NEP-22 (update), NEP-26 / NEP-27 (payment callbacks), NEP-29 (deploy lifecycle), NEP-30 (verify), or NEP-31 (destroy). These are referenced by many ERC mirror pages and warrant first-class explainers.
  • Mapping doc consolidation. STANDARDS_MAPPING.md lives under devpack/standards/ and predates the mirror's category split. Most of its prose is now duplicated in the per-ERC mirror pages. Either (a) convert it to a one-page index that links into the mirror, or (b) keep it as the canonical machine-readable mapping table and remove the long-form prose.

2. Gap Report — Notable Final ERCs Not Mirrored

The Ethereum EIPs index lists ~140 ERCs at status Final. The mirror covers the standards with the highest application-level relevance for Neo migration — token primitives, accounts, and infrastructure. The list below is the curated set of meaningful gaps, grouped by priority.

Recently closed (now mirrored)

Successive priority passes have closed the application-relevant gaps from the Ethereum EIPs index — 129 mirror pages across the five categories above. The table below is the audit trail of the highest-impact additions, grouped by reason:

StandardMirror PageWhy it mattered
ERC-1167infrastructure/erc-1167Single most-used proxy pattern; underpins every Ethereum factory
ERC-3448infrastructure/erc-3448Init-supporting MetaProxy variant of ERC-1167
ERC-3643tokens/erc-3643Compliance framework for tokenised securities (T-REX)
ERC-3668infrastructure/erc-3668Off-chain data via CCIP Read; mirrors to native Oracle
ERC-4361account-and-auth/erc-4361De-facto web3 sign-in (SIWE)
ERC-4907tokens/erc-4907Rental NFT user-role extension; gaming + scholarship use cases
ERC-5202infrastructure/erc-5202Blueprint contract format; completes the "deploy from data" family
ERC-5313account-and-auth/erc-5313Light Contract Ownership; view-only convention
ERC-5564account-and-auth/erc-5564Stealth Addresses; privacy primitive on secp256r1
ERC-6066account-and-auth/erc-6066NFT-aware signature validation (ERC-1271 per tokenId)
ERC-6093tokens/erc-6093Standardised error vocabulary for NEP-17 / NEP-11 ports
ERC-7528tokens/erc-7528Native asset address convention; relevant for any DEX or vault
ERC-7535defi/erc-7535Native asset version of ERC-4626 vaults
ERC-7656account-and-auth/erc-7656Generalisation of ERC-6551 to any contract
ERC-7786infrastructure/erc-7786Cross-chain messaging gateway interface
ERC-7944defi/erc-7944Async cancellation for ERC-7540 vaults
ERC-8042infrastructure/erc-8042Diamond storage convention for ERC-2535
ERC-5679tokens/erc-5679Standardised mint/burn surface across token types
ERC-2135tokens/erc-2135Consumable interface (tickets, permits, vouchers)
ERC-7160tokens/erc-7160ERC-721 multi-metadata extension
ERC-3475defi/erc-3475Abstract storage bonds (multi-class, multi-nonce)
ERC-7092defi/erc-7092Financial bonds (issuer-facing surface)
ERC-6982tokens/erc-6982Default lockable tokens (lighter than 5192/6147)
ERC-7677account-and-auth/erc-7677Paymaster web service capability (AA handshake)
ERC-7144tokens/erc-7144ERC-20 with transaction validation step (lightweight T-REX)
ERC-7943tokens/erc-7943Universal Real World Asset Interface (uRWA)
ERC-5006tokens/erc-5006Rental NFT user extension for ERC-1155 multi-tokens
ERC-2767account-and-auth/erc-2767Contract Ownership Governance
ERC-7758account-and-auth/erc-7758Modern Transfer-With-Authorization
ERC-5169tokens/erc-5169Client Script URI for token contracts
ERC-5375tokens/erc-5375NFT Author Information and Consent
ERC-5023tokens/erc-5023Shareable Non-Fungible Token (multi-holder)
ERC-7066tokens/erc-7066Approval-based NFT Lock Extension
ERC-7432tokens/erc-7432NFT Roles (time-bounded grants)
ERC-6105tokens/erc-6105No-Intermediary NFT Trading Protocol
ERC-5615tokens/erc-5615ERC-1155 Supply Extension
ERC-5773tokens/erc-5773Context-Dependent Multi-Asset Tokens
ERC-6059tokens/erc-6059Parent-Governed Nestable NFTs
ERC-4519tokens/erc-4519NFTs Tied to Physical Assets
ERC-5570tokens/erc-5570Digital Receipt NFT
ERC-6150tokens/erc-6150Hierarchical NFTs
ERC-6220tokens/erc-6220Composable NFTs Equippable Parts
ERC-5380tokens/erc-5380ERC-721 Entitlement Extension
ERC-5489tokens/erc-5489NFT Hyperlink Extension
ERC-6672tokens/erc-6672Multi-Redeemable NFTs
ERC-7634tokens/erc-7634Limited Transfer Count NFT
ERC-7007tokens/erc-7007Verifiable AI-Generated Content Token
ERC-5725tokens/erc-5725Transferable Vesting NFT
ERC-6454tokens/erc-6454Minimal Transferable NFT detection
ERC-7715account-and-auth/erc-7715Permission Grants for Smart Accounts (AA)
ERC-5507tokens/erc-5507Refundable Tokens
ERC-5528tokens/erc-5528Refundable Fungible Token
ERC-5521tokens/erc-5521Referable NFT
ERC-5646tokens/erc-5646Token State Fingerprint
ERC-5585tokens/erc-5585ERC-721 NFT Authorization

High priority (next-up)

Eleven batches closed. Remaining high-priority covers physical-asset binding, semantic soulbound, NFT discoverability, modular wallet, and SIWE generalisation:

StandardTitleStatusWhy it matters
ERC-6239Semantic Soulbound TokensFinalRDF-tagged soulbound credentials; pairs with ERC-5192/5484 for richer credential metadata.
ERC-7053Interoperable Digital Media IndexingFinalCross-platform media discovery; closes the indexer-side story for ERC-5169 / ERC-5489.
ERC-7405Modular Wallet InterfaceDraftPairs with ERC-7579 / ERC-7677 / ERC-7715 to complete the AA stack.
ERC-7585Permitted Authentication SchemeDraftGeneralised ERC-4361 (SIWE) for any chain; formalises the cross-chain auth story.
ERC-6381Public NFT Emote RepositoryFinalReaction system for NFTs; thin but commonly-requested social primitive.

Medium priority

StandardTitleStatusNotes
ERC-7857AI Agents NFT with Private MetadataFinalPairs with ERC-7007 for AI-agent NFTs.
ERC-7231Identity-aggregated NFTFinalIdentity-bound NFTs aggregating multiple credentials.
ERC-7531Staked ERC-721 Ownership RecognitionReviewAcknowledge staked NFTs as ownership equivalents for snapshots.
ERC-6982Already mirrored ✓
ERC-6093Already mirrored ✓
ERC-7160Already mirrored ✓

Watch list (Review / Last Call)

These are not yet Final but are widely deployed or actively shipped:

StandardTitleStatusNotes
ERC-7758Transfer With Authorization (modern)ReviewSuccessor to ERC-3009 (which we mirror). Add when promoted to Final or when adoption shifts.
ERC-7715Permission grants for accountsDraftAccount-abstraction permission model. Track for ERC-4337 / ERC-7579 integration.
ERC-7943Universal Real World Asset InterfaceLast CallRWA standardisation. Track and add when Final.
ERC-7786Cross-Chain Messaging GatewayFinalCross-chain interop. Worth mirroring once the bridge story for Neo is more concrete.

Intentionally out of scope

Some ERCs are not worth mirroring because they describe Ethereum-specific infrastructure with no meaningful Neo equivalent:

  • EIP-2333 / 2334 / 2335 (BLS12-381 key derivation) — Beacon-chain specific.
  • EIP-4844 (Blob transactions) — Already explained in protocol-eips.
  • ERC-820 / ERC-1820 — We mirror 1820 (the live one); 820 is the superseded predecessor.
  • Most NFT-extension drafts under 4400-7900 that are single-use community proposals without traction — track in the watch list, add only on demand.

How to Add a New Mirror Page

  1. Pick the right category directory under docs/standards-mirror/{tokens,defi,infrastructure,protocol-eips,account-and-auth}/.
  2. Copy an existing mirror page as a template (recommended: tokens/erc-20.md for a deployed example, tokens/erc-6909.md for a catalog-only example).
  3. Fill in <StandardEntry> props (id, title, eip, status, neoMapping, category, parityLabel, parityClass).
  4. Add the row to the category index page (e.g. tokens.md) and bump the "X standards" count in the prose.
  5. Update the main Standards Mirror Overview — bump category counts and the live-on-TestNet headline if you also deploy a pair.
  6. Add to the Coverage Matrix and (if catalog-only) to the explanatory list in deployments/DEFERRED.md.
  7. Run npm run docs:check to validate links.

MIT Licensed