A quick guide to adding wallets like Phantom and Solflare to your Solana DApp.

posted 3 min read

Integrating Wallets into Your Solana DApp

Why Wallet Integration Is Essential in Solana DApps

In the Solana ecosystem, wallets serve as a user’s digital identity. Unlike traditional apps that rely on usernames and passwords, decentralized applications use wallets for:

  • Authentication
  • Signing and submitting transactions
  • Viewing balances and token ownership
  • Interacting with smart contracts

Without wallet integration, your DApp will be read-only — users won’t be able to do anything meaningful like stake, mint, or transfer tokens.


Prerequisites and Tools Needed

Before integrating wallets, ensure your environment includes the following:

Development Setup

  • React (or any JavaScript frontend framework)
  • Node.js and npm
  • Basic knowledge of Solana’s architecture

Required Libraries

```bash
npm install @solana/web3.js
npm install @solana/wallet-adapter-react \
            @solana/wallet-adapter-wallets \
            @solana/wallet-adapter-react-ui
```

These libraries allow you to connect to Solana nodes and interact with user wallets.

Understanding Wallet Adapter and Why It Matters

Solana’s Wallet Adapter provides a standardized, plug-and-play interface to support **multiple

wallets** like:
- **Phantom**
- **Solflare**
- **Backpack**
- **Glow**
- **Ledger (hardware)**

It handles the complexities of detecting installed wallets, establishing connections, signing transactions, and disconnecting sessions.


Step-by-Step Guide to Integrate Phantom Wallet

⚙️ Step 1: Bootstrap Your React Project

```bash
npx create-react-app solana-wallet-dapp
cd solana-wallet-dapp
```

Install necessary packages:
```bash
npm install @solana/web3.js \
            @solana/wallet-adapter-react \
            @solana/wallet-adapter-wallets \
            @solana/wallet-adapter-react-ui
```

⚙️ Step 2: Create a Wallet Context Provider

```jsx
// WalletContextProvider.js
import {
  ConnectionProvider,
  WalletProvider
} from '@solana/wallet-adapter-react';

import {
  PhantomWalletAdapter,
  SolflareWalletAdapter,
} from '@solana/wallet-adapter-wallets';

import { WalletModalProvider } from '@solana/wallet-adapter-react-ui';
import { clusterApiUrl } from '@solana/web3.js';
import React, { useMemo } from 'react';

require('@solana/wallet-adapter-react-ui/styles.css');

export const WalletContextProvider = ({ children }) => {
  const network = 'devnet'; // Change to 'mainnet-beta' for production
  const endpoint = useMemo(() => clusterApiUrl(network), [network]);

  const wallets = useMemo(() => [
    new PhantomWalletAdapter(),
    new SolflareWalletAdapter(),
  ], []);

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

⚙️ Step 3: Wrap Your App with Wallet Provider

In `index.js`, wrap your `<App />` component:

```jsx
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { WalletContextProvider } from './WalletContextProvider';

ReactDOM.render(
  <React.StrictMode>
    <WalletContextProvider>
      <App />
    </WalletContextProvider>
  </React.StrictMode>,
  document.getElementById('root')
);
```

⚙️ Step 4: Display Connect Wallet Button

Use the built-in WalletMultiButton:

```jsx
// App.js
import { WalletMultiButton } from '@solana/wallet-adapter-react-ui';

function App() {
  return (
    <div style={{ padding: '2rem' }}>
      <h1> Solana Wallet DApp</h1>
      <WalletMultiButton />
    </div>
  );
}

export default App;
```

This button dynamically shows installed wallets like Phantom and handles connection/disconnection automatically.


Bonus: Send SOL From Connected Wallet

Add a component to send SOL from the connected wallet to another address:

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

const SendSol = () => {
  const { connection } = useConnection();
  const { publicKey, sendTransaction } = useWallet();

  const handleSend = async () => {
    if (!publicKey) return alert("Connect your wallet first!");

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

    const signature = await sendTransaction(transaction, connection);
    await connection.confirmTransaction(signature, 'processed');

    alert("Transaction successful: " + signature);
  };

  return <button onClick={handleSend}>Send 0.01 SOL</button>;
};
```

Other Wallets You Can Integrate

Solana supports a wide ecosystem of wallets. With Wallet Adapter, you can plug in:

  • Glow
  • Solong
  • Torus
  • Ledger hardware wallets
  • Backpack (XNFTs)

Each wallet has different capabilities — such as hardware security or mobile support.

Official Resources

✅ Best Practices

  • Detect wallet availability before rendering connect buttons.
  • Show user feedback on network connection (e.g., devnet vs mainnet).
  • Use tooltips or modals to explain wallet permissions.
  • Always check for publicKey before sending transactions.

Conclusion

Integrating wallets into your Solana DApp is a must-have feature for real blockchain interactions. With libraries like wallet-adapter and web3.js, you can easily implement secure, scalable wallet connectivity.

By empowering users to authenticate and transact through their wallets, you create a truly decentralized, user-driven experience — the essence of Web3.

The more seamless the wallet connection, the higher the user trust and engagement in your DApp.

0 votes

More Posts

A Beginner's Guide to Authentication: Best Practices and Key Concepts

Anadudev - Mar 1, 2025

Choosing the Right Solana Wallet: Phantom vs. Solflare vs. Sollet

adewumi israel - Jan 20, 2025

3.5 best practices on how to prevent debugging

Codeac.io - Dec 18, 2025

How to save time while debugging

Codeac.io - Dec 11, 2025

PostgreSQL Client Certificate Authentication: Complete Setup Guide

Ozkan Pakdil - Aug 1, 2025
chevron_left