Erik Zhang, Neo co-founder and core developer, has finalized NEP-21, a standard that defines a common interface for Neo N3 decentralized applications to communicate with wallet providers. The standard has reached “Accepted” status in the Neo Enhancement Proposals repository after an extended review period that began in November 2021 and concluded with renewed activity in March.

NEP-21 is aimed at solving a persistent problem in the Neo ecosystem: without a shared interface, dApp developers must write separate integration logic for each wallet, as wallets define their own methods and data formats, causing users to encounter inconsistent behavior depending on which wallet they connect. The new standard gives both sides a common language.

What NEP-21 enables

With NEP-21 in place, dApp developers can build a single wallet integration that works with any compliant wallet rather than maintaining separate code for each provider. Wallet developers gain a clear target to implement, lowering the barrier for new wallets to enter the ecosystem. For users, the result is a more consistent experience when connecting wallets, signing transactions, and interacting with dApps, regardless of which wallet they choose.

The standard forms a chain with two related proposals. NEP-20, the wallet-based authentication standard NNT covered earlier this month, defines how applications verify a user’s control of a NEONeo address. NEP-21 provides the unified interface through which dApps call wallets to complete that authentication and other operations. A related proposal, NEP-33, is aimed at further standardizing the login entry point into a “Sign in with Neo” flow.

How the standard works

NEP-21 defines an interface called IDapiProvider that wallet providers implement. The interface covers several categories of capability.

For identity and connection, dApps can call authentication() to verify a user’s address (following the NEP-20 scheme), retrieve connected accounts, or prompt the user to select a different address.

For reading on-chain data, the standard provides methods to invoke contracts off-chain, query blocks, transactions, application logs, contract storage, and token information without requiring a user’s signature.

For contract invocation and transaction handling, dApps can invoke one or more contracts on-chain, construct transactions without broadcasting them (useful for multi-signature workflows), and relay signed transactions to the network. An abortOnFail parameter allows dApps to specify that an entire transaction should revert if a single invocation returns false, a feature designed for transactional operations where partial execution would be harmful.

For message signing, the standard includes methods for signing arbitrary messages using ECDSA with SHA256, supporting use cases such as off-chain authorization and protocol declarations.

For event notifications, wallets emit standardized events when a user switches accounts or changes networks, allowing dApps to keep their frontend state in sync.

Provider discovery

The standard defines a discovery mechanism for dApps and wallets to find each other. When a wallet is ready, it dispatches a Neo.DapiProvider.ready event on the browser’s window object. A dApp can also proactively request a provider by dispatching a Neo.DapiProvider.request event. If multiple wallets respond, the dApp chooses which provider to use.

This design is transport-layer agnostic. NEP-21 does not prescribe whether the wallet is a browser extension, desktop application, or mobile client. It standardizes what capabilities a wallet exposes, not how the connection is established.

Scope and next steps

The accepted standard covers Neo N3 MainNet and TestNet networks. Support for adding custom networks (similar to how MetaMask allows switching between Ethereum, Polygon, and other chains) was discussed during the review cycle but deferred to a future version 2.0.

Zhang noted that implementing this requires changes to the core Neo library to read network-specific configuration from ProtocolSettings, which he described as non-trivial.

The full announcement can be found at the link below:
https://x.com/erikzhang/status/2042271274215567432