What migrates — and what doesn’t
- Migrates (your integration): the provider, hook, sign-in config, and RPC. This is the code swap in the steps below — usually a few hours of work.
- Does not migrate (your users’ wallets): existing Privy wallets, keys, and balances. Turnkey can’t import them, so each user creates a fresh Helius embedded wallet on first sign-in.
Privy Mappings to Helius WaaS
Migrate your integration
These steps swap your code from Privy to Helius. None of them touch end-user wallets — that’s covered below.1
Swap the provider
Replace
PrivyProvider with HeliusWalletProvider and pass your Helius API key instead of your Privy appId. See Setup.2
Swap the hook
Replace
usePrivy() / useSolanaWallets() calls with useHeliusWallet(). login, logout, user, and exportWallet map directly; signing moves onto the same hook (signTransaction, signAndSendTransaction, signMessage).3
Move auth config to the dashboard
Configure your sign-in methods in the dashboard under WaaS → Configuration rather than in provider props — see Configure sign-in methods.
4
Point RPC at Helius
Sending already routes through Helius. Drop your standalone RPC provider config and use the
connection / rpcUrl from the hook, or add the route handler for Sender-optimized landing.Your users’ wallets and funds
On first sign-in after you ship the swap, each user gets a brand-new embedded Helius wallet — a different address from their Privy wallet, with a zero balance. Old Privy wallets and their funds are untouched. If you need users to keep their existing balances, plan a migration window:1
Surface the new address
Show each signed-in user their new Helius address (
address from useHeliusWallet()).2
Have users move their funds
Users transfer funds from their old Privy wallet to their new Helius address. This is a per-user, user-initiated action — neither Helius nor Turnkey can move funds on their behalf.
3
Retire the old integration
Once users are on their Helius wallets, remove the Privy SDK.
Can’t users just keep using their existing wallet instead? Not as a
replacement for the embedded wallet. External wallet is offered as a
sign-in method — it authenticates a user into a Helius embedded wallet, it
doesn’t operate the external wallet’s keys directly. Signing straight from an
external wallet would bypass Helius entirely (no Turnkey signing, no metering),
so it isn’t a substitute for the embedded wallet your app runs on.