Use this file to discover all available pages before exploring further.
Build a cross-chain USDC bridge using Squid Router API with Para SDK for seamless wallet management across Ethereum, Base, and Solana networks.The key integration pattern: Squid Router provides the cross-chain route and signable transaction data, while Para SDK handles the wallet management and transaction signing across multiple networks.
Each enabled network will create wallets for your users on that chain
Important: Your Para API key must have all three networks (Ethereum, Base, Solana) enabled in your Developer Portal for the multi-network signers to work properly.
Para creates separate signers for each network, allowing you to sign transactions on Ethereum, Base, and Solana:
// src/hooks/useSigners.tsximport { useQuery } from "@tanstack/react-query";import { useAccount, useClient } from "@getpara/react-sdk";import { createParaEthersSigner } from "@getpara/ethers-v6-integration";import { ParaSolanaWeb3Signer } from "@getpara/solana-web3.js-v1-integration";import { ethers } from "ethers";import { Connection } from "@solana/web3.js";import { NETWORK_CONFIG } from "@/constants";async function initializeSigners(para, account) { // Initialize Ethereum signer const ethereumProvider = new ethers.JsonRpcProvider(NETWORK_CONFIG.ethereum.rpcUrl); const ethereumSigner = createParaEthersSigner({ para: para, provider: ethereumProvider }); // Initialize Base signer const baseProvider = new ethers.JsonRpcProvider(NETWORK_CONFIG.base.rpcUrl); const baseSigner = createParaEthersSigner({ para: para, provider: baseProvider }); // Initialize Solana signer const solanaConnection = new Connection(NETWORK_CONFIG.solana.rpcUrl); const solanaSigner = new ParaSolanaWeb3Signer(para, solanaConnection); return { ethereumEthers: { provider: ethereumProvider, signer: ethereumSigner, address: "...", isInitialized: true }, baseEthers: { provider: baseProvider, signer: baseSigner, address: "...", isInitialized: true }, solanaSvm: { signer: solanaSigner, connection: solanaConnection, address: "...", isInitialized: true }, };}export function useSigners() { const para = useClient(); const { data: account } = useAccount(); const { data: signers } = useQuery({ queryKey: ["globalSigners", account?.isConnected], queryFn: () => initializeSigners(para, account), enabled: !!para && !!account?.isConnected, staleTime: Infinity, }); // Returns initialized signers for all three networks return signers || defaultSignerState;}
Key Point: Para automatically creates wallets for each enabled network in your API key configuration. Each signer can then sign transactions for its respective blockchain.See the full implementation for complete error handling and initialization logic.