EIP-6963 defines a window event-based discovery mechanism that allows multiple browser extension wallets to coexist in a single web application without overwriting each other's injected window.ethereum object. Before this standard, the last wallet extension to inject its provider would win, breaking dapp compatibility for users who run more than one wallet and forcing developers to rely on fragile, non-standard detection workarounds. The proposal replaces the single, mutable window.ethereum pattern with a window.dispatchEvent announcement and a window.addEventListener subscription model, enabling dapps to build a registry of available providers and present users with an explicit wallet selection interface.

EIP-6963 Multi-Injected Provider Discovery
What is EIP-6963?
A standard for resolving conflicts when multiple browser extension wallets inject an Ethereum provider into the same web page.
Operationally, EIP-6963 introduces two key interfaces: EIP6963AnnounceProviderEvent, which a wallet dispatches with its name, icon, and an EIP1193Provider object, and EIP6963RequestProviderEvent, which a dapp dispatches to solicit announcements from already-injected wallets. This inversion of control eliminates the race condition inherent in the legacy injection model. For dapp developers, the standard requires replacing direct calls to window.ethereum with a provider store that listens for eip6963:announceProvider events and manages multiple provider instances. Wallet teams must implement the announcement dispatch and respond to request events, ensuring their provider metadata is accurate and their RDNS identifier is unique to prevent impersonation.
The standard affects every Ethereum dapp that interacts with browser wallets and every wallet extension that injects a provider. Integration risks include dapps failing to handle multiple connected providers simultaneously, incorrect chain ID or account state tracking when users switch between wallets, and UI inconsistencies in provider selection menus. Teams should audit their provider store logic for race conditions during page load and wallet reconnection, and verify that session management correctly isolates state per selected provider. Chainscore Labs can review multi-provider conflict resolution logic, assess provider store implementations for edge cases, and help wallet and dapp teams validate their EIP-6963 integration against the full discovery lifecycle.
EIP-6963 at a Glance
Operational impact and integration requirements for wallets and dapps adopting the multi-injected provider discovery standard.
| Area | What changes | Who is affected | Action |
|---|---|---|---|
Provider Discovery | Replaces single | Wallet extension developers, dapp front-end teams | Implement |
Multi-Wallet UX | Users with multiple extensions can select a provider without disabling other extensions. | Wallet UX designers, dapp developers | Design a provider selection UI; dapps must handle multiple |
Provider Identity | Wallets announce with a unique | Wallet teams, dapp developers | Register a globally unique |
Conflict Resolution | Eliminates namespace collisions and race conditions between extensions fighting over | Browser extension wallets, dapp developers | Remove any logic that overwrites or mutates |
Backward Compatibility | Legacy dapps expecting | Dapp developers, wallet teams | Wallets may inject a legacy shim; dapps should prioritize EIP-6963 providers and fall back to |
Security Model | Provider announcements are unauthenticated; any script can dispatch a fake announcement. | Dapp developers, security auditors | Treat announced providers as untrusted; do not auto-connect based on announcement alone. Verify provider behavior matches expected interface. |
Chainscore Review | Multi-provider conflict logic, provider selection UX, and fallback handling introduce integration risk. | Wallets, dapps, and browser extension teams | Chainscore can review provider discovery implementation, shim logic, and multi-wallet conflict resolution for correctness and security. |
How the Discovery Mechanism Works
EIP-6963 replaces imperative window.ethereum injection with an event-driven discovery protocol that lets multiple browser extension wallets coexist and be discovered by decentralized applications without namespace collisions.
EIP-6963 defines a window event-based discovery mechanism that eliminates the single-provider conflict inherent in the legacy window.ethereum injection model. Instead of each wallet extension overwriting window.ethereum and racing for control, every compliant wallet announces itself by dispatching an EIP6963AnnounceProviderEvent on the window object. This event carries an RDNS identifier for the wallet, a user-friendly name, an icon, and—critically—a provider object that the dapp can use directly. The dapp listens for these announcements, collects available providers, and presents the user with a choice, storing the selection for future sessions.
The flow is intentionally decoupled from any single global variable. When a dapp initializes, it registers a listener for the eip6963:announceProvider event and then dispatches an eip6963:requestProvider event to prompt already-loaded wallets to re-announce. This request-reply pattern handles both wallets that load before the dapp and those injected afterward. Each provider object is scoped to the announcing wallet, so the dapp never needs to guess which wallet is behind window.ethereum. The standard also defines TypeScript interfaces for EIP6963ProviderDetail, EIP6963AnnounceProviderEvent, and EIP6963RequestProviderEvent, giving dapp developers a typed contract for building multi-wallet UIs.
For operators and builders, the operational impact is a fundamental shift in how dapps detect and connect to wallets. Integration teams must replace any hardcoded window.ethereum access with an event-driven provider registry, and wallet teams must implement the announce/request event contract correctly to avoid silent failures in dapps that have adopted EIP-6963. Chainscore can review a dapp's provider discovery logic for race conditions, missing re-announcement handling, and UI state management across multiple provider lifecycles, as well as audit wallet extensions for spec compliance and secure provider object construction.
Who Is Affected?
Wallet Extension Providers
Wallet extension teams must implement the EIP6963AnnounceProviderEvent dispatch and listen for EIP6963RequestProviderEvent to participate in the discovery flow. Each provider must supply a unique rdns identifier, a human-readable name, and an icon URI.
Key actions:
- Replace
window.ethereuminjection with event-driven announcement. - Ensure the
rdnsstring matches the extension's verified domain to prevent spoofing. - Handle multiple simultaneous dapp connections without provider state collisions.
- Test coexistence with other injected wallets to verify no DOM namespace conflicts.
Chainscore can review your announcement payload, rdns uniqueness strategy, and multi-provider conflict resolution logic to prevent silent failures in multi-wallet environments.
Implementation Impact by Role
EIP-6963 shifts multi-wallet conflict resolution from a single injected provider to an event-driven discovery mechanism. Each role in the ecosystem must update its integration logic, threat model, and user experience to align with the new standard.
Wallet Developers
Must implement the eip6963:announceProvider and eip6963:requestProvider event interfaces. This replaces the legacy window.ethereum injection race. Wallets need to define a unique rdns identifier, manage the lifecycle of their EIP6963ProviderInfo object, and ensure they only respond to discovery events after a user gesture to prevent fingerprinting. Failure to adopt this standard will result in a degraded user experience as dapps deprecate legacy provider handling.
Dapp and Frontend Developers
Must replace the anti-pattern of blindly consuming window.ethereum with an event listener for eip6963:announceProvider. The UI must be updated to present a provider selection menu to the user when multiple wallets respond. This requires managing a dynamic list of connected providers and handling the case where a user's preferred wallet is not yet announced. Legacy fallback logic should be maintained temporarily but clearly deprecated.
Security Auditors
The threat model shifts from a single, trusted provider to a multi-provider environment. Auditors must verify that dapps do not introduce new vulnerabilities by connecting to multiple providers simultaneously. Key risks include UI spoofing where a malicious extension announces a deceptive name or icon to mimic a trusted wallet, and the potential for a confused deputy attack if a dapp routes a sensitive transaction to the wrong provider. Review rdns validation logic carefully.
Wallet Integrators and Aggregators
Systems like WalletConnect or multi-wallet SDKs must act as a proxy between dapps and EIP-6963 providers. They should listen for all announced providers, aggregate them into a unified list, and expose a single, curated selection interface to the dapp. This introduces a new trust assumption: the aggregator's UI must faithfully represent each provider's EIP6963ProviderInfo without allowing a compromised provider to inject malicious metadata that could mislead the user or the aggregator's own UI.
End Users
Users will gain explicit control over which wallet interface handles a dapp connection, resolving the silent conflict where the last extension loaded would win. The user experience changes from a single, invisible connection to an active choice. Education is required to help users understand why they are being prompted to select a wallet and how to identify their preferred wallet by its icon and name, which is critical for preventing phishing attacks that rely on look-alike provider announcements.
Compatibility and Security Risks
Evaluates the failure modes, affected actors, and required actions introduced by the shift from a single injected provider to a multi-provider event-driven discovery model.
| Risk Area | Failure Mode | Affected Actors | Mitigation / Action |
|---|---|---|---|
Race Condition in Dapp Initialization | A dapp that listens for | Dapp Developers, Wallet Developers | Dapps must implement a provider selection UI that awaits multiple announcements or a user-defined timeout before auto-connecting. Wallets should ensure their announcement is not delayed by async internal initialization. |
User Experience Fragmentation | Users with multiple wallets see a disjointed experience where each dapp independently asks them to choose a wallet, or a dapp's custom selection UI conflicts with the browser's existing injected provider logic. | End Users, Dapp Developers | Dapps should build a consistent, recognizable wallet selection UI. Wallet developers should coordinate on UX patterns to avoid user confusion and decision fatigue across different dapps. |
Legacy | A dapp that does not adopt EIP-6963 will continue to rely on | Dapp Developers, Wallet Developers, End Users | Dapps should prioritize the EIP-6963 interface and treat |
Spoofed Provider Announcements | A malicious script or extension could dispatch a fake | Dapp Developers, End Users | Dapps must not trust the |
Inconsistent Provider Interface Compliance | A wallet announces itself via EIP-6963 but its | Dapp Developers, Wallet Developers | Dapps must perform runtime capability checks on the |
Icon and Metadata Trust | A dapp renders the | Dapp Developers, End Users | Dapps should sanitize and validate the |
Event Listener Cleanup and Memory Leaks | A dapp that attaches an | Dapp Developers | Dapps must implement proper lifecycle management for event listeners, using |
Integration Checklist
A practical checklist for wallet and dapp teams to verify correct implementation of EIP-6963, ensuring reliable multi-wallet detection and conflict-free provider injection.
What to check: Confirm that the wallet dispatches the eip6963:announceProvider CustomEvent on window exactly once, and only after the page load event has fired. The event must contain a unique rdns identifier and a reference to the wallet's provider object in its detail.
Why it matters: Dispatching too early (e.g., during script evaluation) can cause dapps to miss the announcement. Dispatching multiple times or without a valid rdns identifier breaks the discovery mechanism and can lead to provider conflicts or a broken wallet selector UI.
Readiness signal: A dapp's discovery listener logs a single, unique announcement per installed wallet with a valid, reverse-DNS formatted rdns string on page load.
Canonical Resources
Primary references for implementing and reviewing EIP-6963 multi-injected provider discovery. Use these sources to validate event handling, provider metadata, and compatibility with the Ethereum provider API.
Implementation Review Checklist
Before shipping EIP-6963 support, teams should test simultaneous wallet extensions, duplicate announcements, malicious or malformed provider metadata, icon rendering safety, rdns display logic, user-selected wallet persistence, and fallback behavior for wallets that still only expose window.ethereum. Security review should focus on provider impersonation, UI spoofing, stale cached selections, and unsafe assumptions that the first announced provider is the user's intended wallet.
Looking to build on a specific blockchain?
We build smart contracts, DeFi applications, wallets, tokenization platforms, and blockchain infrastructure across the major ecosystems teams choose today. That includes Ethereum, Arbitrum, Optimism, Polygon, Avalanche, Solana, Sui, Aptos, Hedera, Stellar, and NEAR, with support for additional EVM and non-EVM networks based on your product requirements.
EVM ecosystems
- Ethereum
- Arbitrum
- Optimism
- Polygon
- Avalanche
- Cronos

Non-EVM ecosystems
- Solana
- Sui
- Aptos
- Hedera
- Stellar
- NEAR
Additional ecosystems
- Polkadot
- Cosmos
- TON
- Cardano
- Algorand
- Tempo
Also available for Base, appchains, custom EVM networks, and cross-chain product architecture.
Frequently Asked Questions
Common questions from wallet and dapp developers integrating EIP-6963 to resolve multi-wallet conflicts and improve user experience.
EIP-6963 replaces the legacy window.ethereum singleton injection model with a publisher-subscriber pattern. Instead of multiple wallet extensions racing to overwrite a single global variable, each provider announces itself via a CustomEvent (eip6963:announceProvider) dispatched on the window object. The dapp listens for these events and builds a registry of available providers. This allows the dapp to present a user-controlled selection interface, eliminating the conflict where the last installed wallet extension silently takes over.
Delivering blockchain solutions for 5+ years.
We have partnered with 50+ leading DeFi protocols, NFT ecosystems, and fintech innovators to build secure, scalable, and capital-efficient blockchain products.
Selected Partners & Clients
“I've been working with Chainscore Labs for last 3+ years, they've consistently delivered with strong ownership across multiple projects. The team is reliable and detail-oriented.”
How to get started?
If you're looking for blockchain integration, ChainScore Labs has 5+ years of experience helping teams build and integrate exchanges, wallets, smart contracts, tokenization solutions, and protocol-connected products, we can help you choose the right path, integrate securely, and get to production faster. Our team consists of experienced blockchain developers and architects who can help you with your blockchain integration needs.
Exploration & Strategy
Define your product goals and choose the right blockchain architecture for your use case.
Architecture & Design
Design the smart contracts, tokenomics, and security parameters of your system.
Development & Integration
Build and integrate with wallets, oracles, and front-end dApps for a seamless experience.
Security & Launch
Comprehensive audits followed by a risk-managed mainnet deployment to protect your users.
Discover our
blockchain development services.
We build production-grade blockchain solutions for top-tier projects across DeFi and Web3.
Need a blockchain engineering team?
Send the project context and we will respond with next steps, scope questions, and a practical path to delivery.


