Skip to content

useEmbeddedSolanaWallet

Manage embedded Solana wallets with creation, activation, and signing capabilities.

Usage

import { useEmbeddedSolanaWallet } from '@openfort/react-native';
 
function SolanaWalletManager() {
  const solana = useEmbeddedSolanaWallet();
 
  if (solana.status === 'connecting' || solana.status === 'creating') {
    return <ActivityIndicator />;
  }
 
  if (solana.status === 'connected') {
    return (
      <View>
        <Text>{solana.activeWallet.address}</Text>
        <Button
          title="Sign Message"
          onPress={async () => {
            const signature = await solana.provider.signMessage('Hello Solana!');
          }}
        />
      </View>
    );
  }
 
  if (solana.wallets.length === 0) {
    return <Button title="Create Wallet" onPress={() => solana.create()} />;
  }
 
  return <Button title="Connect" onPress={() => solana.setActive({ address: solana.wallets[0].address })} />;
}

Return type

Returns a discriminated union based on the status field:

type EmbeddedSolanaWalletState = {
  status: 'disconnected' | 'connecting' | 'reconnecting' | 'creating' | 'needs-recovery' | 'connected' | 'error'
  wallets: ConnectedEmbeddedSolanaWallet[]
  activeWallet: ConnectedEmbeddedSolanaWallet | null
  provider?: OpenfortEmbeddedSolanaWalletProvider  // Available when connected
  error?: string  // Available when error
  create: (options?: CreateOptions) => Promise<EmbeddedAccount>
  setActive: (options: SetActiveOptions) => Promise<void>
}
 
type ConnectedEmbeddedSolanaWallet = {
  address: string
  chainType: 'SVM'
  walletIndex: number
  getProvider: () => Promise<OpenfortEmbeddedSolanaWalletProvider>
}
 
type OpenfortEmbeddedSolanaWalletProvider = {
  publicKey: string
  signTransaction: (transaction: any) => Promise<{ signature: string; publicKey: string }>
  signAllTransactions: (transactions: any[]) => Promise<any[]>
  signMessage: (message: string) => Promise<string>
}

The provider is compatible with @solana/web3.js and @solana/kit transaction formats.

Parameters

Hook options

type UseEmbeddedSolanaWalletOptions = {
  onCreateSuccess?: (account: EmbeddedAccount, provider: OpenfortEmbeddedSolanaWalletProvider) => void
  onCreateError?: (error: OpenfortError) => void
  onSetActiveSuccess?: (wallet: ConnectedEmbeddedSolanaWallet, provider: OpenfortEmbeddedSolanaWalletProvider) => void
  onSetActiveError?: (error: OpenfortError) => void
}

create

type CreateOptions = {
  recoveryPassword?: string
  onSuccess?: (data: CreateResult) => void
  onError?: (error: OpenfortError) => void
}

setActive

type SetActiveOptions = {
  address: string
  recoveryPassword?: string
  onSuccess?: (data: SetActiveResult) => void
  onError?: (error: OpenfortError) => void
}