Skip to main content
  1. Acquire your Project IDs from Coinbase Developer Platform and Reown (WalletConnect) Dashboard
  2. Ensure your development url is added to the domain allowlist for both Project IDs
  3. Install Aurum sdk and viem (or the web3 library of your choice)
    npm install @aurum-sdk/core viem
    
  4. Initialize Aurum
    import { Aurum } from '@aurum-sdk/core';
    
    const aurum = new Aurum({
      brand: {
        appName: 'My App',
      },
      wallets: {
        embedded: { projectId: 'your-cdp-project-id' },
        walletConnect: { projectId: 'your-reown-project-id' },
      },
    });
    
  5. Create Viem client (or use the web3 library of your choice)
    import { createWalletClient, custom } from 'viem';
    import { mainnet } from 'viem/chains';
    
    const walletClient = createWalletClient({
      chain: mainnet,
      transport: custom(aurum.rpcProvider),
    });
    
  6. Add basic state management (connect, disconnect, personal_sign, accountsChanged, etc)
    import { useEffect, useState } from "react";
    import { aurum } from "./aurum";
    import { walletClient } from './viem';
    
    export default function App() {
      const [address, setAddress] = useState<`0x${string}` | null>(null);
      const [isLoading, setIsLoading] = useState(true);
    
      // Check isConnected on page load
      useEffect(() => {
        aurum.whenReady().then(async () => {
          if (await aurum.isConnected()) {
            const user = await aurum.getUserInfo();
            setAddress(user?.publicAddress ?? null);
          }
          setIsLoading(false);
        });
      }, []);
    
      // Listen for account changes
      useEffect(() => {
        const handleAccountsChanged = (accounts: string[]) => {
          setAddress(accounts[0] ?? null);
        };
    
        aurum.rpcProvider.on?.("accountsChanged", handleAccountsChanged);
    
        return () => {
          aurum.rpcProvider.off?.("accountsChanged", handleAccountsChanged);
        };
      }, []);
    
      async function connect() {
        const publicAddress = await aurum.connect();
        setAddress(publicAddress);
      }
    
      async function disconnect() {
        await aurum.disconnect();
        setAddress(null);
      }
    
      async function signMessage() {
        const [account] = await walletClient.getAddresses();
        const signature = await walletClient.signMessage({
          account,
          message: "Hello from Aurum!",
        });
        console.log("signature", signature);
      }
    
      if (isLoading) return <div>Loading...</div>;
    
      return (
        <div>
          {!address ? (
            <button onClick={connect}>Connect Wallet</button>
          ) : (
            <div>
              <p>User: {address}</p>
              <button onClick={signMessage}>Sign Message</button>
              <button onClick={disconnect}>Disconnect</button>
            </div>
          )}
        </div>
      );
    }
    
And you’re done! It’s that easy to use Aurum. Explore the rest of the docs