Skip to main content

Different private keys/wallet address across integrations

Developers and users frequently face confusion when they get different wallet addresses for multitudes of reasons. This page details possible reasons for different wallet addresses and what to keep in mind while designing your solutions.

Custom connections

A custom connection configures the OAuth/OpenID provider that issues the JWT your app uses for login. The Embedded Wallets (Web3Auth) network validates this provider configuration onchain and then verifies the issued JWT.

→ Learn more about creating custom connections, see authentication.

Using the same custom connection configuration across SDKs results in the same wallet address, because wallet derivation depends on the connection and user identity—not the SDK.

tip

You might face errors where users login with different methods (like Google login and email passwordless)—resulting in different wallet addresses/keys. This is because, when you use different login providers, connection details change, even though the ID, sub, email, and other properties remain the same. To control for such cases, use a group connection.

Group connections

A group connection combines multiple login methods to create a single connection so the same wallet address is derived for the same email ID regardless of the login provider, for example, combining Google and email passwordless or Google and GitHub via Auth0 to access the same key for your user.

→ Learn more about creating a group connection.

With a group connection, multiple sub-connections are combined and one wallet address is generated. This allows connections with different login providers to be added as sub-connections under one group connection, which allows users to get a single wallet address provided one of the fields (like email) stays the same across all sub-connections.

Client ID

To get your client ID, set up a project on the Embedded Wallets Dashboard. A "project" describes the pre-packaged user interface and experience that Embedded Wallets supports you with. The dashboard enables easy and efficient integration with your project, saving you the hassle of building everything from scratch.

→ Learn how to create a project and claim your client ID.

important

Wallet addresses change if the client ID changes. Please use the same client ID across all your SDK integrations to standardize the wallet addresses retrieved.

Environment

While creating a connection you need to select between sapphire_devnet, and sapphire_mainnet.

sapphire_devnet is a sandbox environment for developers to experiment with. People usually test and finalize their integration here. sapphire_mainnet is the production environment for scalable applications.

tip

Every network has different nodes that issue different keys, this means the wallet addresses changes if you move from one network to another.

Product

Different SDKs can derive keys using different inputs and derivation paths. To keep addresses consistent across implementations:

  • Use the same custom connection configuration across platforms
  • Use the same client ID across integrations
  • Keep the environment consistent: dev (devnet) vs. prod (mainnet)

Migrating between SDKs

Whether you're optimizing user flows or trying new features, plan migrations with care to ensure a seamless experience.

warning

Migrations might involve changing wallets, which can lead to loss of access if not handled with care. Ensure all prerequisites are met before migrating and communicate changes clearly to users.