Wallet Adapters
The SDK uses a WalletAdapter interface to abstract wallet interactions across platforms.
Interface
interface WalletAdapter {
platform: 'web' | 'native';
isConnected(): boolean;
getAddress(): Promise<Address | null>;
connect(): Promise<Address>;
disconnect(): Promise<void>;
sendTransaction(tx: TransactionRequest): Promise<string>;
}
Built-in adapters
WebWalletAdapter
For browser-based apps using injected providers (MetaMask, etc).
import { WebWalletAdapter } from '@arkonix.xyz/arkonix-vault-sdk';
RNWalletAdapter
For React Native apps. Bridges to your mobile wallet library (WalletConnect, Privy, etc).
import { RNWalletAdapter } from '@arkonix.xyz/arkonix-vault-sdk';
Custom adapter
Implement WalletAdapter to integrate with any wallet provider:
import { WalletAdapter, TransactionRequest } from '@arkonix.xyz/arkonix-vault-sdk';
class MyWalletAdapter implements WalletAdapter {
platform = 'web' as const;
isConnected() {
return myWallet.connected;
}
async getAddress() {
return myWallet.address;
}
async connect() {
return myWallet.connect();
}
async disconnect() {
return myWallet.disconnect();
}
async sendTransaction(tx: TransactionRequest) {
return myWallet.sendTransaction({
to: tx.to,
data: tx.data,
value: tx.value,
});
}
}
Usage with wagmi
If you're already using wagmi or RainbowKit, create an adapter that delegates to your existing wallet connection:
import { useWalletClient } from 'wagmi';
function useWagmiAdapter(): WalletAdapter {
const { data: walletClient } = useWalletClient();
return {
platform: 'web',
isConnected: () => !!walletClient,
getAddress: async () => walletClient?.account.address ?? null,
connect: async () => { /* handled by RainbowKit */ },
disconnect: async () => { /* handled by RainbowKit */ },
sendTransaction: async (tx) => {
const hash = await walletClient!.sendTransaction({
to: tx.to,
data: tx.data,
value: tx.value,
});
return hash;
},
};
}