Skip to main content
The SDK provider extends an event emitter. Subscribe with provider.on(event, handler) and unsubscribe with provider.removeListener (or its alias provider.off).

connect

provider.on('connect', ({ chainId }: { chainId: string }) => {
  // chainId is hex (e.g. "0x74c" for Soneium Mainnet)
})
Fired when the provider transitions to a connected state. With wagmi, useAccount() exposes the same signal through status.

disconnect

provider.on('disconnect', (error: ProviderRpcError) => {
  // Provider lost connection (network drop, popup closed, user disconnected)
})

accountsChanged

provider.on('accountsChanged', (accounts: string[]) => {
  if (accounts.length === 0) {
    // Disconnected
  } else {
    // Connected as accounts[0]
  }
})
Fired when the connected account changes, including when the user disconnects (empty array) or switches accounts in the popup.

chainChanged

provider.on('chainChanged', (chainId: string) => {
  // chainId is hex
})
Fired after a successful wallet_switchEthereumChain or after the user changes the active chain in the popup.

Cleanup

Always remove listeners when your component or scope unmounts:
const onAccountsChanged = (accounts: string[]) => { /* ... */ }
provider.on('accountsChanged', onAccountsChanged)

// Later: both forms work; removeListener is the primary SDK method
provider.removeListener('accountsChanged', onAccountsChanged)
// provider.off('accountsChanged', onAccountsChanged)  // alias for removeListener
If you use wagmi, the connector handles event subscription internally. Just consume useAccount(), useChainId(), and friends.