
The
ParaEvmProvider
is built with wagmi
and @tanstack/react-query
to provide a seamless experience for
integrating EVM wallets into your application in tandem to the Para Embedded Wallets.You can use all of the wagmi
hooks and functionality in your application, including the useAccount
, useConnect
, and useDisconnect
hooks. For more details on using the wagmi hooks, refer to the latest wagmi documentation on their website.Prerequisites
Before integrating wallet connections, ensure you have an existing Para project with the Para Modal set up. If you
haven’t set up Para yet, follow one of our Framework Setup guides like this React + NextJS guide.
Setting up EVM Wallets
Setup is simple - just wrap your app in a provider and pass the appropriate props and configuration options to the provider. Once configured, the Para modal and wallet options will automatically appear in the modal when opened. Para provides seamless integration with popular EVM wallets including MetaMask, Rainbow, Coinbase Wallet, WalletConnect, Zerion, Safe, Rabby, and OKX.Safe App Registration: To use Safe as an external wallet, you’ll need to register your application as a Safe App in the Safe App Registry. This is required because Safe apps need to run within Safe’s context to ensure proper security and functionality. The registration process involves providing your app’s details and undergoing a review by the Safe team.
1
Install dependencies
Install the required packages alongside your existing Para dependencies:
2
Import components
Import the wallet connectors and supporting components you need. Adjust the imports based on which wallets you want to support:
main.tsx
3
Configure the providers
Configure the
ParaEvmProvider
component by wrapping your application content in the QueryClientProvider
and ParaEvmProvider
components. Pass in the required configuration props:Add the `ParaEvmProvider to your providers component from the Para setup guide.
main.tsx
Provider Configuration
WalletConnect (Reown) Setup: You’ll need a WalletConnect project ID if you’re using their connector. Get one from
theWalletConnect (Reown) Developer Portal. You can use an empty string for testing, but this isn’t recommended for production.
The
ParaEvmProvider
extends Wagmi’s provider functionality, giving you access to all Wagmi Hooksin your application. Place the provider near the root of your component tree for optimal performance.Advanced Provider Pattern
Setting up a dedicated provider component that encapsulates all the necessary providers and modal state management is considered a best practice. This pattern makes it easier to manage the modal state globally and handle session management throughout your application.Creating a Custom Provider
A custom provider component can be created to encapsulate the ParaEvmProvider and ParaModal, allowing for easier management of the modal state and wallet connections. An example implementation is shown below:Web3Provider.tsx
Server-Side Rendering Considerations
When using Next.js or other SSR frameworks, proper client-side initialization is crucial since web3 functionality relies on browser APIs. There are two main approaches:-
Using the
'use client'
directive in Next.js 13+:- Add the directive at the component level where browser APIs are needed. If using a custom provider, add the directive to the top of the provider file.
- Ensures the Web3Provider component and its dependencies only run on the client side
-
Using dynamic imports:
- In Next.js, use the
dynamic
function to import the provider component with{ ssr: false }
. - Lazily loads the provider component
- Automatically handles client-side only code
- Provides fallback options during loading
- In Next.js, use the
Configuring the Para Modal
After setting up your providers you need to configure the ParaModal component to display the external wallets and authentication options to your users. You need to pass in theexternalWallets
and authLayout
configuration options
to the ParaModal component to control which of the wallets show in the modal that were specified in the provider
configuration.
Optionally, you can pass the createLinkedEmbeddedForExternalWallets
prop to include full Para authentication for specific wallets.
This will add a signature verification step for these wallets and will setup a full Para account for the user, including creating Para wallets according to your APi key settings.
1
Set the modal props
Modal Props Config
Modal prop options for customizing the Para Modal are included below. For advanced customization options, refer toCustomization Guide.Connection Only Wallets
Connection only external wallets bypass all Para functionality (account creation, user tracking, etc.) when connecting an external wallet. To enable this, set the following option on your Para instance:Since connection only wallets bypass Para, most Para functionality will be unavailable. This includes full Para auth with external wallets, on & off ramping, etc.
Examples
For an example of what the Para External Wallets Modal might look like in your application, check out our live demo: For an example code implementation using EVM Wallets, check out our GitHub repository:Next Steps
Now that you have integrated EVM wallets into your Para Modal, you can explore more advanced features like signing using the Para SDK with popular libraries likeEthers.js
.