Skip to content

Integrating with web3 libraries

Privy's ConnectedWallet object is fully compatible with popular web3 libraries for interfacing wallets, including ethers, viem, wagmi, and web3js.

Read below to learn how to best integrate Privy alongside these libraries.

Viem

Viem represents connected wallets as a wallet client object, which you can use to get information about the current wallet or the request signatures and transactions.

To get a viem wallet client for a user's connected wallet, first import your desired network from the viem/chains package and import the createWalletClient method and custom transport from viem:

tsx
import {createWalletClient, custom} from 'viem';
// Replace `sepolia` with your desired network
import {sepolia} from 'viem/chains';

Then, find your desired wallet from the wallets array and switch its network to the chain you imported, using the wallet's switchChain method:

tsx
const {wallets} = useWallets();
const wallet = wallets[0]; // Replace this with your desired wallet
await wallet.switchChain(sepolia.id);

Lastly, get the wallet's EIP1193 provider using the wallet's getEthereumProvider method and pass it to viem's createWalletClient method like so:

tsx
const provider = await wallet.getEthereumProvider();
const walletClient = createWalletClient({
  chain: sepolia,
  transport: custom(provider),
});

You can then use the wallet client to get information about the wallet or request signatures and transactions.

Ethers

Ethers represents connected wallets as a provider, which can be used to take read-only actions with the wallet, and a signer, which can be used to take write actions (signatures and transactions).

To get an ethers provider and signer for a user's wallet, first find your desired wallet from the wallets array and switch it to your desired network, using the wallet's switchChain method:

tsx
const {wallets} = useWallets();
const wallet = wallets[0]; // Replace this with your desired wallet
await wallet.switchChain(11155111); // Replace this with your desired chain ID

Then, call the wallet's getEthersProvider method to get a provider:

tsx
const provider = await wallet.getEthersProvider();

Then, call the provider's getSigner method to get the corresponding signer:

tsx
const signer = provider.getSigner();

You can then use the provider and signer to get information about the wallet or request signatures and transactions.

Wagmi

Privy is fully compatible with wagmi. Please see our wagmi guide for setting up the integration.

Web3.js

Web3.js represents connected wallets as a Web3 object, which you can use to get information about the current wallet or the request signatures and transactions.

To get a Web3js provider for a user's connected wallet, first find your desired wallet from the wallets array and switch it to your desired network, using the wallet's switchChain method:

tsx
const {wallets} = useWallets();
const wallet = wallets[0]; // Replace this with your desired wallet
await wallet.switchChain(sepolia.id);

Then, get the wallet's EIP1193 provider using the wallet's getEthereumProvider method and pass it to Web3js's Web3 constructor like so:

tsx
const provider = await wallet.getEthereumProvider();
const web3 = new Web3(provider);

You can then use the Web3 provider to get information about the wallet or request signatures and transactions.