LazorkitProvider
The LazorkitProvider
component wraps your application to provide wallet context and handle SDK initialization.
Import
import { LazorkitProvider } from '@lazorkit/wallet';
Usage
function App() {
return (
<LazorkitProvider
rpcUrl="https://api.devnet.solana.com"
paymasterUrl="https://lazorkit-paymaster.onrender.com"
ipfsUrl="https://portal.lazor.sh"
>
<YourApplication />
</LazorkitProvider>
);
}
Props
rpcUrl
(required)
- Type:
string
- Description: Solana RPC endpoint URL
- Examples:
- Devnet:
"https://api.devnet.solana.com"
- Custom:
"https://your-rpc-endpoint.com"
- Devnet:
paymasterUrl
(required)
- Type:
string
- Description: Paymaster service URL for gasless transactions
- Example:
"https://lazorkit-paymaster.onrender.com"
ipfsUrl
(optional)
- Type:
string
- Default:
"https://portal.lazor.sh"
- Description: LazorKit portal URL for wallet dialogs
children
- Type:
ReactNode
- Description: Your application components
Configuration Examples
Development Setup (Devnet)
<LazorkitProvider
rpcUrl="https://api.devnet.solana.com"
paymasterUrl="https://lazorkit-paymaster.onrender.com"
>
<App />
</LazorkitProvider>
Custom RPC Configuration
<LazorkitProvider
rpcUrl={process.env.REACT_APP_RPC_URL}
paymasterUrl={process.env.REACT_APP_PAYMASTER_URL}
ipfsUrl={process.env.REACT_APP_PORTAL_URL}
>
<App />
</LazorkitProvider>
Environment Variables
Create a .env
file with your configuration:
REACT_APP_RPC_URL=https://api.devnet.solana.com
REACT_APP_PAYMASTER_URL=https://lazorkit-paymaster.onrender.com
REACT_APP_PORTAL_URL=https://portal.lazor.sh
Event Handling
The provider automatically handles all SDK events and updates the wallet state. The following events are managed internally:
Connection Events
connect:start
→ SetsisConnecting: true
connect:success
→ Updates account and clears loading stateconnect:error
→ Sets error and clears loading state
Disconnect Events
disconnect:start
→ Sets loading statedisconnect:success
→ Clears account and loading statedisconnect:error
→ Sets error and clears loading state
Reconnection Events
reconnect:start
→ SetsisConnecting: true
reconnect:success
→ Updates account and clears loading statereconnect:error
→ Sets error and clears loading state
Transaction Events
transaction:start
→ SetsisSigning: true
transaction:success
→ Clears signing statetransaction:sent
→ Clears signing statetransaction:error
→ Sets error and clears signing state
Internal State Management
The provider uses Zustand for state management with the following structure:
interface LazorkitState {
sdk: Lazorkit | null;
account: WalletAccount | null;
isConnecting: boolean;
isSigning: boolean;
error: Error | null;
}
Context Access
All child components can access the wallet state through the useWallet
hook:
function MyComponent() {
const { isConnected, connect, smartWalletPubkey } = useWallet();
return (
<div>
{isConnected ? (
<p>Connected: {smartWalletPubkey?.toString()}</p>
) : (
<button onClick={connect}>Connect</button>
)}
</div>
);
}
Provider Placement
The provider should wrap your entire application or the portion that needs wallet functionality:
// ✅ Correct - App level
function App() {
return (
<LazorkitProvider {...config}>
<Router>
<Routes>
<Route path="/" element={<HomePage />} />
<Route path="/wallet" element={<WalletPage />} />
</Routes>
</Router>
</LazorkitProvider>
);
}
// ❌ Incorrect - Too deep in component tree
function WalletPage() {
return (
<LazorkitProvider {...config}>
<WalletComponent />
</LazorkitProvider>
);
}
Network Configuration
Devnet (Default)
<LazorkitProvider
rpcUrl="https://api.devnet.solana.com"
paymasterUrl="https://lazorkit-paymaster.onrender.com"
>
Mainnet (When Available)
<LazorkitProvider
rpcUrl="https://api.mainnet-beta.solana.com"
paymasterUrl="https://your-mainnet-paymaster.com"
>
Local Development
<LazorkitProvider
rpcUrl="http://localhost:8899"
paymasterUrl="http://localhost:3001"
>
Cleanup
The provider automatically handles cleanup when the component unmounts:
- Removes all event listeners
- Cleans up SDK instance
- Clears state
You don't need to manually manage SDK lifecycle when using the provider.
TypeScript
The provider is fully typed and will provide IntelliSense for all props:
interface LazorkitProviderProps {
children: ReactNode;
rpcUrl: string;
ipfsUrl?: string;
paymasterUrl: string;
}