Skip to main content

Wallet Connect Integration

Connect Solana Wallets to Your dApp

Integrate Wallet Connect to allow users to connect their Solana wallets (Phantom, Solflare, Backpack, etc.) to your dApp on Pyra Chain. Users sign transactions through their existing wallet - no custom key management required.

  • Method: Solana Wallet Adapter
  • Wallets: Phantom, Solflare, Backpack, and more
  • Signing: All transactions signed via connected wallet
  • Network: Works on Pyra Chain (Solana-compatible)

Installation

Install the Solana Wallet Adapter packages:

npm install @solana/wallet-adapter-base @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-wallets @solana/web3.js

Basic Setup (React)

1. Configure Wallet Providers

Set up the wallet context with supported wallets.

import { FC, ReactNode, useMemo } from 'react';
import { ConnectionProvider, WalletProvider } from '@solana/wallet-adapter-react';
import { WalletModalProvider } from '@solana/wallet-adapter-react-ui';
import {
PhantomWalletAdapter,
SolflareWalletAdapter,
BackpackWalletAdapter,
} from '@solana/wallet-adapter-wallets';

// Pyra Chain RPC endpoint
const PYRA_RPC = 'https://rpc.pyrachain.io';

export const WalletContextProvider: FC<{ children: ReactNode }> = ({ children }) => {
const wallets = useMemo(
() => [
new PhantomWalletAdapter(),
new SolflareWalletAdapter(),
new BackpackWalletAdapter(),
],
[]
);

return (
<ConnectionProvider endpoint={PYRA_RPC}>
<WalletProvider wallets={wallets} autoConnect>
<WalletModalProvider>
{children}
</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
);
};

2. Add Connect Button

Use the built-in wallet button or create a custom one.

import { WalletMultiButton } from '@solana/wallet-adapter-react-ui';

// Import default styles
import '@solana/wallet-adapter-react-ui/styles.css';

export const Navbar: FC = () => {
return (
<nav>
<WalletMultiButton />
</nav>
);
};

3. Access Wallet in Components

Use hooks to access the connected wallet.

import { useWallet, useConnection } from '@solana/wallet-adapter-react';

export const WalletInfo: FC = () => {
const { publicKey, connected, disconnect } = useWallet();
const { connection } = useConnection();

if (!connected) {
return <p>Please connect your wallet</p>;
}

return (
<div>
<p>Connected: {publicKey?.toBase58()}</p>
<button onClick={disconnect}>Disconnect</button>
</div>
);
};

Signing Transactions

Send Transaction

import { useWallet, useConnection } from '@solana/wallet-adapter-react';
import { Transaction, SystemProgram, PublicKey, LAMPORTS_PER_SOL } from '@solana/web3.js';

export const SendTransaction: FC = () => {
const { publicKey, sendTransaction } = useWallet();
const { connection } = useConnection();

const handleSend = async (recipient: string, amount: number) => {
if (!publicKey) return;

const transaction = new Transaction().add(
SystemProgram.transfer({
fromPubkey: publicKey,
toPubkey: new PublicKey(recipient),
lamports: amount * LAMPORTS_PER_SOL,
})
);

const { blockhash } = await connection.getLatestBlockhash();
transaction.recentBlockhash = blockhash;
transaction.feePayer = publicKey;

// Wallet prompts user to sign
const signature = await sendTransaction(transaction, connection);

// Wait for confirmation
await connection.confirmTransaction(signature, 'confirmed');

console.log('Transaction confirmed:', signature);
};

return (
<button onClick={() => handleSend('RecipientAddressHere', 0.1)}>
Send 0.1 $PYRA
</button>
);
};

Sign Message

import { useWallet } from '@solana/wallet-adapter-react';

export const SignMessage: FC = () => {
const { publicKey, signMessage } = useWallet();

const handleSign = async () => {
if (!publicKey || !signMessage) return;

const message = new TextEncoder().encode('Sign this message for Pyra Chain');
const signature = await signMessage(message);

console.log('Signature:', Buffer.from(signature).toString('base64'));
};

return <button onClick={handleSign}>Sign Message</button>;
};

Svelte Integration

For SvelteKit projects, use the wallet adapter stores.

npm install @solana/wallet-adapter-base @solana/web3.js
<script lang="ts">
import { onMount } from 'svelte';
import { Connection, PublicKey } from '@solana/web3.js';

let wallet: any = null;
let publicKey: string | null = null;

const PYRA_RPC = 'https://rpc.pyrachain.io';
const connection = new Connection(PYRA_RPC, 'confirmed');

const connectWallet = async () => {
// Check for Phantom
if ('phantom' in window) {
const provider = (window as any).phantom?.solana;
if (provider?.isPhantom) {
const response = await provider.connect();
wallet = provider;
publicKey = response.publicKey.toString();
}
}
};

const disconnectWallet = async () => {
if (wallet) {
await wallet.disconnect();
wallet = null;
publicKey = null;
}
};
</script>

{#if publicKey}
<p>Connected: {publicKey}</p>
<button on:click={disconnectWallet}>Disconnect</button>
{:else}
<button on:click={connectWallet}>Connect Wallet</button>
{/if}

Check Connection Status

import { useWallet } from '@solana/wallet-adapter-react';

const { connected, publicKey, wallet } = useWallet();

// Check if connected
const isConnected = connected && publicKey;

// Get wallet name
const walletName = wallet?.adapter.name; // "Phantom", "Solflare", etc.

// Get public key as string
const address = publicKey?.toBase58();

Supported Wallets

WalletAdapterInstall
PhantomPhantomWalletAdapter@solana/wallet-adapter-wallets
SolflareSolflareWalletAdapter@solana/wallet-adapter-wallets
BackpackBackpackWalletAdapter@solana/wallet-adapter-wallets
LedgerLedgerWalletAdapter@solana/wallet-adapter-wallets

Best Practices

RuleWhy
Use autoConnectReconnect returning users automatically
Handle errorsCatch wallet rejection and network errors
Show wallet stateDisplay connected address in UI
Confirm transactionsWait for on-chain confirmation
Use Pyra RPCConnect to rpc.pyrachain.io for Pyra Chain

Resources


Connect. Sign. Build.