The useAccount
hook provides access to the current user’s account state, including both embedded Para accounts and connected external wallets across EVM, Cosmos, and Solana chains.
Import
import { useAccount } from "@getpara/react-sdk@alpha";
Usage
function AccountInfo() {
const account = useAccount();
if (account.isLoading) return <div>Loading account...</div>;
if (!account.isConnected) {
return <div>Not connected</div>;
}
return (
<div>
<h3>Connection Type: {account.connectionType}</h3>
{account.embedded.isConnected && (
<div>
<h4>Embedded Account</h4>
<p>User ID: {account.embedded.userId}</p>
<p>Auth Type: {account.embedded.authType}</p>
<p>Email: {account.embedded.email}</p>
<p>Wallets: {account.embedded.wallets?.length || 0}</p>
</div>
)}
{account.external.connectedNetworks.length > 0 && (
<div>
<h4>External Wallets</h4>
<p>Connected Networks: {account.external.connectedNetworks.join(', ')}</p>
{account.external.evm.isConnected && (
<p>EVM Address: {account.external.evm.address}</p>
)}
{account.external.cosmos.isConnected && (
<p>Cosmos Connected</p>
)}
{account.external.solana.isConnected && (
<p>Solana Public Key: {account.external.solana.publicKey?.toString()}</p>
)}
</div>
)}
</div>
);
}
Return Value Structure
The hook returns a UseAccountReturn
object with the following properties:
Top-Level Properties
isConnected: boolean
- Whether there is a wallet connected (either embedded, external or both)
isLoading: boolean
- Whether the account is currently loading
connectionType: 'embedded' | 'external' | 'both' | 'none'
- The type of connection for the account
'embedded'
- Only the embedded account is connected
'external'
- Only an external wallet is connected
'both'
- Both embedded and external wallets are connected
'none'
- No wallets are connected
Embedded Account Properties
embedded
object contains:
isConnected: boolean
- Whether the embedded Para account is connected
isGuestMode?: boolean
- Whether the user is in guest mode
userId?: string
- Unique identifier for the user
authType?: 'email' | 'phone' | 'farcaster' | 'telegram' | 'externalWallet'
- Authentication method used
email?: string
- User’s email address (only if authType is ‘email’)
phone?: string
- User’s phone number (only if authType is ‘phone’)
farcasterUsername?: string
- Farcaster username (only if authType is ‘farcaster’)
telegramUserId?: string
- Telegram user ID (only if authType is ‘telegram’)
externalWalletAddress?: string
- External wallet address (only if authType is ‘externalWallet’)
wallets?: Array<Wallet>
- Array of available wallets for the user
External Wallet Properties
external
object contains:
connectedNetworks: Array<'evm' | 'cosmos' | 'solana'>
- List of connected external networks
evm
- EVM wallet connection data (if connected)
isConnected: boolean
address?: string
addresses?: string[]
chain?: Chain
chainId?: number
status: 'connected' | 'reconnecting' | 'connecting' | 'disconnected'
cosmos
- Cosmos wallet connection data (if connected)
isConnected: boolean
- Additional Cosmos-specific properties
solana
- Solana wallet adapter data (if connected)
isConnected: boolean
isConnecting?: boolean
publicKey?: PublicKey
name?: string
icon?: string
Examples
Basic Connection Check
function ConnectionStatus() {
const { isConnected, connectionType } = useAccount();
return (
<div>
<p>Connected: {isConnected ? 'Yes' : 'No'}</p>
<p>Connection Type: {connectionType}</p>
</div>
);
}
Accessing Embedded Wallet Address
function WalletAddress() {
const account = useAccount();
if (!account.isConnected || !account.embedded.wallets?.length) {
return <div>No wallet connected</div>;
}
return (
<div>
<p>Address: {account.embedded.wallets[0].address}</p>
</div>
);
}
Working with External Wallets
function ExternalWalletInfo() {
const { external } = useAccount();
return (
<div>
{external.evm.isConnected && (
<p>EVM Address: {external.evm.address}</p>
)}
{external.cosmos.isConnected && (
<p>Cosmos wallet connected</p>
)}
{external.solana.isConnected && (
<p>Solana: {external.solana.name}</p>
)}
</div>
);
}
Complete Connect Wallet Component
function ConnectWallet() {
const { openConnectModal, openWalletModal } = useModal();
const account = useAccount();
if (account.isConnected && account.embedded.wallets?.length) {
return (
<button
onClick={openWalletModal}
className="px-4 py-2 bg-blue-500 text-white rounded"
>
{account.embedded.wallets[0].address.slice(0, 6)}...{account.embedded.wallets[0].address.slice(-4)}
</button>
);
}
return (
<button
onClick={openConnectModal}
className="px-4 py-2 bg-green-500 text-white rounded"
>
Connect Wallet
</button>
);
}
Notes
- The hook automatically refetches when the user’s authentication state changes
- Use
isLoading
to show loading states while fetching account data
- The
embedded
account refers to Para’s native wallet system
- External wallets are third-party wallets connected via standard wallet connectors
- When both embedded and external wallets are connected,
connectionType
will be 'both'