---
name: dojo-wallets
description: |
Use when managing wallets and accounts in dojo.js games.
Triggers: burner wallet, useBurner, create wallet, connect wallet, BurnerProvider,
account management, predeployed, session wallet
---
# Dojo.js Wallet & Account Management
## When to Use
Use this skill when:
- Setting up burner wallets for development
- Managing player accounts
- Connecting external wallets
- Implementing account switching
## BurnerProvider Setup
```tsx
import { BurnerProvider, useBurner } from "@dojoengine/create-burner";
const burnerConfig = {
masterAddress: "0x...", // Prefunded account
masterPrivateKey: "0x...", // Private key
accountClassHash: "0x...", // Account class hash
rpcUrl: "http://localhost:5050",
feeTokenAddress: "0x...", // ETH contract address
};
function App() {
return (
);
}
```
## useBurner Hook
```tsx
import { useBurner } from "@dojoengine/create-burner";
function AccountManager() {
const {
account, // Current active account
isDeploying, // True while creating new burner
count, // Number of burners
create, // Create new burner
list, // List all burners
select, // Select burner by address
get, // Get burner by address
clear, // Clear all burners
listConnectors, // Get starknet-react connectors
copyToClipboard,
applyFromClipboard,
generateAddressFromSeed,
} = useBurner();
return (
Current: {account?.address}
create()} disabled={isDeploying}>
{isDeploying ? "Creating..." : "New Burner"}
);
}
```
# Creating Burners
```tsx
const { create } = useBurner();
// Create random burner
const newAccount = await create();
// Create deterministic burner from seed
const deterministicAccount = await create({
secret: "my-secret-seed",
index: 0,
});
```
## Listing & Selecting Burners
```tsx
function BurnerSelector() {
const { list, select, account } = useBurner();
const burners = list();
return (
select(e.target.value)}>
{burners.map((burner) => (
{burner.address.slice(0, 10)}...
))}
);
}
```
## Starknet-React Integration
```tsx
import { StarknetConfig, InjectedConnector } from "@starknet-react/core";
function Providers({ children }) {
const { listConnectors } = useBurner();
const connectors = [
new InjectedConnector({ options: { id: "argentX" } }),
new InjectedConnector({ options: { id: "braavos" } }),
...listConnectors(), // Add burner connectors
];
return {children} ;
}
```
## PredeployedConnector (Dev Mode)
For Katana predeployed accounts:
```tsx
import {
PredeployedConnector,
usePredeployedAccounts,
} from "@dojoengine/predeployed-connector";
const predeployed = new PredeployedConnector({
rpcUrl: "http://localhost:5050",
accounts: [
{
address: "0x...",
privateKey: "0x...",
name: "Account 1",
},
],
});
```
## Account Export/Import
Share burners between devices:
```tsx
const { copyToClipboard, applyFromClipboard } = useBurner();
// Export all burners
await copyToClipboard();
// Import from clipboard
await applyFromClipboard();
```
## Deterministic Addresses
Generate addresses without deploying:
```tsx
const { generateAddressFromSeed } = useBurner();
const address = generateAddressFromSeed({
secret: "game-specific-seed",
index: playerIndex,
});
```
## WithAccount HOC
Require account connection:
```tsx
import { WithAccount } from "@dojoengine/sdk/react";
const ProtectedComponent = WithAccount(
({ account, address }) => Connected: {address}
,
() => Please connect wallet
,
);
```
## Full Provider Hierarchy
```tsx
function App() {
return (
);
}
```
## Common Pitfalls
1. **Master account funding**: Ensure master account has enough ETH to deploy burners
2. **Class hash mismatch**: Use correct account class hash for your Starknet version
3. **Provider order**: BurnerProvider should wrap DojoSdkProvider if using both
4. **Local storage**: Burners persist in localStorage - clear for fresh start
5. **RPC URL mismatch**: Ensure all configs point to same network