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:

  1. No PDAs. StarkNet contracts store data internally. No findProgramAddressSync, no seeds, no bumps. PDA-derived data becomes contract storage maps.
  2. No ATAs. ERC-20 balanceOf(address) replaces Associated Token Accounts. No getOrCreateAssociatedTokenAccount.
  3. No Rent. Deploy once, stays forever. Remove all rent-exemption checks.
  4. No Wallet Adapter. Chipi uses passkeys. Remove ConnectionProvider, WalletProvider, WalletModalProvider.
  5. Gasless. Users never need SOL for gas. Chipi sponsors all transactions.
  6. Base58 to Hex. Solana addresses are Base58. StarkNet addresses are 0x + 64 hex chars.
  7. 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, useConnection hooks
  • - 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

Ready to build?

Connect the Chipi MCP server and start building in minutes.

Get Started