Migrate Your Solana App to StarkNet
Step-by-step guide to migrate a Solana app to StarkNet using Chipi. Maps Anchor, @solana/web3.js, wallet-adapter, PDAs, and SPL tokens to Chipi equivalents.
Overview
Migrate your Solana app to StarkNet using Chipi. This guide maps Anchor, @solana/web3.js, wallet-adapter, PDAs, SPL tokens, and the Solana account model to Chipi equivalents. Chipi handles wallets, gas fees, and key management. You focus on porting your business logic.
Key Mental Shifts from Solana
Moving from Solana to StarkNet with Chipi involves several conceptual changes:
- No PDAs. StarkNet contracts store data internally. No
findProgramAddressSync, no seeds, no bumps. PDA-derived data becomes contract storage maps. - No ATAs. ERC-20
balanceOf(address)replaces Associated Token Accounts. NogetOrCreateAssociatedTokenAccount. - No Rent. Deploy once, stays forever. Remove all rent-exemption checks.
- No Wallet Adapter. Chipi uses passkeys. Remove ConnectionProvider, WalletProvider, WalletModalProvider.
- Gasless. Users never need SOL for gas. Chipi sponsors all transactions.
- Base58 to Hex. Solana addresses are Base58. StarkNet addresses are 0x + 64 hex chars.
- Custom programs must be rewritten in Cairo. Anchor/Rust programs cannot be deployed on StarkNet. Standard operations (transfers, tokens) are handled by Chipi hooks.
Remove Wallet Adapter
Remove the entire Solana wallet adapter stack:
- -
@solana/wallet-adapter-react,@solana/wallet-adapter-react-ui,@solana/wallet-adapter-wallets - - ConnectionProvider, WalletProvider, WalletModalProvider
- -
useWallet,useConnectionhooks - - WalletMultiButton, WalletDisconnectButton
Replace with Chipi:
tsximport { useChipiWallet, useCreateWallet } from "@chipi-stack/nextjs";
const { wallet, hasWallet } = useChipiWallet();
// No extension. No connection. No modal. Just passkeys.Replace Token Operations
Remove @solana/spl-token and all ATA management. Replace with Chipi hooks:
tsximport { useTransfer, useGetTokenBalance } from "@chipi-stack/nextjs";
// Transfer (replaces SPL Token transfer + ATA management):
const { mutateAsync: transfer } = useTransfer();
await transfer({
encryptKey: passkeyCredential,
wallet: userWallet,
recipientAddress: recipient,
amount: 10,
tokenAddress: "USDC",
bearerToken: process.env.NEXT_PUBLIC_CHIPI_API_KEY!,
});
// Balance (replaces getAccount + ATA lookup):
const { data: balance } = useGetTokenBalance({
walletAddress: wallet?.publicKey,
tokenAddress: "USDC",
});Map Anchor Programs to Cairo Contracts
If your app uses Anchor programs, map IDL instructions to Cairo ABI functions:
tsx// BEFORE (Anchor):
const provider = new AnchorProvider(connection, wallet, {});
const program = new Program(IDL, programId, provider);
const tx = await program.methods.myFunction(arg1, arg2)
.accounts({ user: wallet.publicKey, dataAccount: pda })
.rpc();
// AFTER (Chipi):
const { mutateAsync: callContract } = useCallAnyContract();
await callContract({
encryptKey: passkeyCredential,
wallet: userWallet,
calls: [{
contractAddress: "0x_CAIRO_CONTRACT",
entrypoint: "my_function",
calldata: [arg1, arg2],
}],
bearerToken: process.env.NEXT_PUBLIC_CHIPI_API_KEY!,
});Remove account constraints, IDL imports, and Program/AnchorProvider setup.
Bridge Assets
Move assets from Solana to StarkNet:
- - LayerSwap: layerswap.io. The primary direct Solana to StarkNet bridge. Supports USDC, USDT, SOL. Takes 2-10 minutes.
Other bridges (StarkGate, rhino.fi, Orbiter) may also support this route. Check current availability.
Migration Checklist
Verify your migration is complete:
- - All
@solana/imports removed - - No PDA derivation remaining
- - No ATA logic remaining
- - Wallet creation works with passkey
- - Token transfers work gaslessly
- - No Base58 addresses in StarkNet calls
- - u256 calldata encoding uses
[low_128, high_128]format