Appearance
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.