Wallets
Connect to browser wallets and create server-side wallets for Cardano dApp development.
Overview
Mesh provides wallet classes for different use cases:
| Wallet Class | Use Case | Environment |
|---|---|---|
| CardanoBrowserWallet | Connect to user's wallet extension (CIP-30) | Frontend (browser) |
| MeshCardanoBrowserWallet | Browser wallet with Mesh convenience methods | Frontend (browser) |
| CardanoHeadlessWallet | Programmatic wallet control (low-level) | Backend (Node.js) |
| MeshCardanoHeadlessWallet | Headless wallet with Mesh convenience methods | Backend (Node.js) |
Quick Start
Browser Wallet (Frontend)
Connect to CIP-30 compatible wallets like Eternl, Nami, and Lace:
import { MeshCardanoBrowserWallet } from "@meshsdk/wallet";
// Get installed wallets
const wallets = MeshCardanoBrowserWallet.getInstalledWallets();
// Connect to a wallet
const wallet = await MeshCardanoBrowserWallet.enable("eternl");
// Get balance (Mesh format)
const balance = await wallet.getBalanceMesh();
console.log(`Balance: ${balance.find(a => a.unit === 'lovelace')?.quantity}`);
// Get address (Bech32 format)
const address = await wallet.getChangeAddressBech32();Headless Wallet (Backend)
Create wallets programmatically for server-side applications:
import { MeshCardanoHeadlessWallet } from "@meshsdk/wallet";
import { BlockfrostProvider } from "@meshsdk/core";
import { AddressType } from "@meshsdk/wallet";
const provider = new BlockfrostProvider("<YOUR_API_KEY>");
// Create from mnemonic
const wallet = await MeshCardanoHeadlessWallet.fromMnemonic({
networkId: 0, // 0 = testnet, 1 = mainnet
walletAddressType: AddressType.Base,
fetcher: provider,
submitter: provider,
mnemonic: ["your", "24", "word", "mnemonic", "phrase", "..."],
});
// Or create from Bip32 root key
const wallet = await MeshCardanoHeadlessWallet.fromBip32Root({
networkId: 0,
walletAddressType: AddressType.Base,
fetcher: provider,
submitter: provider,
bech32: "xprv1...",
});Choosing a Wallet Class
Use Browser Wallet classes when:
- Building frontend dApps
- Users need to connect their own wallets
- Transactions require user approval
- Working with CIP-30 features
Use Headless Wallet classes when:
- Running backend services
- Automating transactions
- Managing treasury wallets
- Building bots or scripts
Use Mesh variants (MeshCardanoBrowserWallet, MeshCardanoHeadlessWallet) when:
- You want UTxOs, balances, and addresses in Mesh-compatible formats
- You prefer Bech32 addresses directly
- You need convenience methods like
signTxReturnFullTx()
Use base variants (CardanoBrowserWallet, CardanoHeadlessWallet) when:
- You want raw CIP-30 compliant CBOR hex responses
- You need maximum compatibility with the CIP-30 standard
Common Operations
Both wallet types share similar APIs implementing the ICardanoWallet interface:
// Get UTXOs (CBOR hex format)
const utxos = await wallet.getUtxos();
// Get change address (hex format)
const address = await wallet.getChangeAddress();
// Sign transaction
const signedTx = await wallet.signTx(unsignedTx, partialSign);
// Submit transaction
const txHash = await wallet.submitTx(signedTx);
// Get balance (CBOR hex format)
const balance = await wallet.getBalance();Mesh wallet variants add convenience methods:
// Get UTXOs in Mesh format
const utxos = await wallet.getUtxosMesh();
// Get change address in Bech32
const address = await wallet.getChangeAddressBech32();
// Get balance as Asset array
const balance = await wallet.getBalanceMesh();
// Sign and return full transaction (with witnesses merged)
const signedTx = await wallet.signTxReturnFullTx(unsignedTx);React Integration
For React applications, use @meshsdk/react for built-in components and hooks:
import { CardanoWallet, useWallet } from "@meshsdk/react";
function App() {
const { connected, wallet } = useWallet();
return (
<div>
<CardanoWallet />
{connected && <p>Balance: {wallet.getLovelace()}</p>}
</div>
);
}See React Getting Started for full integration details.
Available Wallet APIs
Browser Wallet
For connecting, queries and performs wallet functions in accordance to CIP-30.
Mesh Wallet
Mesh Wallet provides a set of APIs to interact with the blockchain. This wallet is compatible with Mesh transaction builders.
Related
- React Integration — Wallet components and hooks
- Transaction Builder — Build transactions to sign
- Prove Wallet Ownership — Authenticate users with signatures