Wallet Management

Hologram includes a full DERO wallet implementation with all features you need to manage your funds.
Wallet Operations
| Operation | Description | API Method |
|---|---|---|
| Create Wallet | Generate new wallet with seed phrase | CreateWallet(path, password) |
| Open Wallet | Open existing wallet file | OpenWallet(path, password) |
| Close Wallet | Securely close and lock | CloseWallet() |
| Switch Wallet | Hot-swap between wallets | SwitchWallet(path, password) |
| Restore Wallet | Recover from 25-word seed | RestoreWallet(path, password, seed) |
Creating a New Wallet
- Navigate to Wallet tab
- Click Create New Wallet
- Choose a secure password (minimum 8 characters)
- IMPORTANT: Write down your 25-word seed phrase
Your seed phrase is the ONLY way to recover your wallet. Store it securely offline. Never share it with anyone. For maximum security, consider using Privacy Mode to block all non-DERO network connections.
Restoring from Seed
- Navigate to Wallet tab
- Click Restore Wallet
- Enter your 25-word seed phrase (space-separated)
- Choose a new password
- Wait for wallet to sync
Balance & Transactions
Viewing Balance
Your wallet displays:
- Available Balance: Immediately spendable
- Locked Balance: Pending confirmations
- Total Balance: Available + Locked
// Get balance (mature + locked)
mature, locked := wallet.Get_Balance()Wallet Sync
When you click Refresh in the Wallet tab, Hologram automatically syncs your wallet with the daemon to discover new transactions:
SyncWallet() -> {
success: bool,
synced: bool,
walletHeight: uint64,
daemonHeight: uint64,
blocksBehind: int64,
message: string,
}Sync Status Indicators:
- SYNCED — Wallet is up to date with the blockchain
- X BEHIND — Shows how many blocks behind the wallet is
- SYNCING — Wallet is catching up to the daemon
Transaction History
View all transactions with filters:
- Incoming/Outgoing: Direction filter
- Coinbase: Mining rewards only
- By SCID: Specific token transactions
- Height Range: Block range filter
- Port Filters: By source/destination port
entries := wallet.Show_Transfers(scid, coinbase, in, out, min, max, sender, receiver, dstport, srcport)Transaction Labels
Add semantic labels to transactions for better organization:
- Label transactions — Add custom descriptions to any transaction
- Automatic labels — Version history commits show descriptive labels (e.g., "Updated styles.css, app.js")
- Search by label — Find transactions by their labels
Labels are stored locally and help you track the purpose of transactions over time.
Sending DERO
- Click Send in the Wallet tab
- Enter recipient address (dero1...)
- Enter amount
- Optionally add a comment (payload)
- Enter wallet password
- Confirm transaction
Transactions require approximately 4-5 seconds to propagate and will show as "pending" until confirmed in a block.
Ringsize UI Control
Hologram allows you to explicitly select the Ringsize for both DERO and Token transfers.
- Available Options: 2, 16, 32, 64, 128
- Default: 16 (Standard anonymity)
Developer Note on Ringsize 2: Using ringsize 2 is critical when interacting with smart contracts that need to read the caller's address via ADDRESS_STRING(SIGNER()). If you use ringsize 16 or higher, the transaction is fully anonymous, and SIGNER() will return an empty string.
Receiving DERO
Your wallet address is always visible in the Wallet tab. You can:
- Click to copy the full address
- Generate a payment request with amount
- Create an integrated address with payment ID
Payment Requests
CreatePaymentRequest(amount uint64, comment string) -> {
integratedAddress: "deri1...",
paymentId: "abc123...",
qrCode: "base64..."
}Coinbase Transactions
View mining rewards received (from external miners or Developer Support (EPOCH)):
// Filter coinbase transactions only
GetTransactionHistory(limit int) // Filter for coinbase: trueCoinbase transactions are marked with a pickaxe icon in the transaction history and represent mining rewards received to this wallet address. Learn more about supporting TELA developers through Developer Support (EPOCH).
Villager Avatar Integration
Hologram integrates with the Villager avatar system to display unique visual identities for connected wallets.
How It Works
When a wallet connects, Hologram displays:
- Address-Derived Frame: A unique 24×24 pixel frame generated deterministically from your wallet address
- Custom Avatar Pixels: If you've stored custom pixels in the Villager smart contract, they're overlaid on the frame
- Fallback: If no custom avatar exists, the address-derived identicon frame is displayed
Sidebar Display
The wallet avatar appears in the sidebar:
- Collapsed Rail: 24px circular avatar
- Expanded Sidebar: 40px circular avatar with address suffix (last 8 characters)
- Pending State: Yellow pulsing border during approval
Technical Details
// Avatar fetching (avatarService.js)
getAvatarUrl(address, size) -> dataURL
// Identicon generation (villager-identicon.js)
VillagerIdenticon.render(address, size) -> canvasThe avatar system uses:
- 64-color palette with transparency support
- Deterministic frame generation from SHA-256 address hash
- Canvas-based rendering with frame + pixel overlay
- Local caching to avoid redundant blockchain calls
You don't need a Villager avatar to use Hologram. Without one, your unique address-derived identicon frame is displayed instead.
Avatar Editor
Hologram includes a built-in pixel art editor for creating and customizing your Villager avatar.
Pixel Art Editor
The editor provides a 24×24 pixel canvas with the official 52-color Villager palette:
- Paint tool — Click or drag to paint pixels
- Eraser tool — Click or drag to erase pixels (transparent)
- Color palette — 52 colors organized by groups (Reds, Oranges, Yellows, Greens, Blues, etc.)
- Live preview — See your avatar with the address-derived frame in real-time
- Grid display — Visual 24×24 grid for precise pixel placement
Color Palette
The 52-color palette includes:
- Reds (4 shades) — Light Red, Red, Pure Red, Dark Red
- Oranges (4 shades) — Light Orange, Orange, OrangeRed, Dark Orange
- Peach/Brown (4 shades) — Light Peach, Peach, DarkOrange, Brown
- Gold/Brown (4 shades) — Light Gold, Gold, Amber, Dark Brown
- Yellows (4 shades) — Light Yellow, Yellow, Pure Yellow, Golden
- Lime/Green (4 shades) — Light Lime, Lime, Chartreuse, Dark Green
- Greens (4 shades) — Light Green, Green, Pure Green, Dark Green
- Mint/Spring (4 shades) — Light Mint, Mint, Spring Green, Dark Mint
- Cyans (4 shades) — Light Cyan, Cyan, Pure Cyan, Dark Cyan
- Blues (4 shades) — Light Blue, Blue, Pure Blue, Dark Blue
- Indigo (4 shades) — Light Indigo, Indigo, Pure Indigo, Dark Indigo
- Violets (4 shades) — Light Violet, Violet, Pure Violet, Dark Violet
- Magentas (4 shades) — Light Magenta, Magenta, Pure Magenta, Dark Magenta
- Pinks (4 shades) — Light Pink, Pink, Pure Pink, Dark Pink
- Grays (6 shades) — Light Gray, Gray, Dark Gray, plus transparent
Live Preview
As you paint, the editor shows a live preview of your avatar:
- Address-derived frame — Your unique identicon frame is automatically applied
- Custom pixels overlay — Your painted pixels appear on top of the frame
- 256×256 preview — High-resolution preview for detail work
Blockchain Storage
When you save your avatar:
- Pixel data encoded — Your 24×24 pixel art is encoded as a 576-character string
- Stored on-chain — Saved to the Villager smart contract
- Associated with address — Linked to your wallet address
- Developer donation — Small fee (default: 0.0001 DERO) supports Villager development
Saving Your Avatar
- Paint your design — Use the paint and eraser tools to create your avatar
- Preview in real-time — See how it looks with your address frame
- Click "Save to Blockchain" — Stores your avatar on-chain
- Wait for confirmation — Transaction must be confirmed before avatar appears
Your avatar is stored permanently on the DERO blockchain. Once saved, it will appear whenever your address is displayed in Hologram or other Villager-compatible apps.
Click-to-Edit Navigation
Access the Avatar Editor quickly from multiple locations:
Sidebar Avatar Click
Click your avatar in the sidebar to open the editor:
- Collapsed rail — Click the 24px circular avatar
- Expanded sidebar — Click the 40px circular avatar
- Visual feedback — Hover effects indicate the avatar is clickable
- Tooltip — "Click to customize your avatar" appears on hover
Wallet Menu Button
From the wallet menu in the sidebar:
- Click wallet status — Opens the wallet menu
- Click "Edit Avatar" — Button at the bottom of the menu
- Editor opens — Navigates directly to the Avatar Editor
The "Edit Avatar" button includes a user icon and is always visible when a wallet is connected.
Recent Wallets
Hologram remembers your recently used wallets:
- Up to 10 recent wallets stored
- Shows address prefix for identification
- Tracks last used timestamp
- Quick-access from wallet selector
Data stored in datashards/settings/recent_wallets_info.json
Token Portfolio
View and manage all tokens in your wallet:
GetTokenPortfolio() -> {
tokens: [
{ scid: "...", name: "TokenName", balance: 1000 },
...
]
}Token Management
- View balances: See all tokens held by your wallet
- Add tokens: Track new token SCIDs
- Remove tokens: Hide tokens from your portfolio
- Send tokens: Transfer tokens to other addresses
Address Book
Save frequently used addresses for quick access:
Adding Contacts
- Go to Wallet > Address Book
- Click Add Contact
- Enter name and DERO address
- Optionally add notes
Using Contacts
- Quick Send: Click the send icon next to any contact
- Copy Address: Click to copy the full address
- Edit/Delete: Manage your contacts list
API Reference
// Get all contacts
GetAddressBook() -> {
contacts: [
{ name: "Alice", address: "dero1qy...", notes: "Friend" },
...
]
}
// Add a contact
AddContact(name, address, notes string) -> { success: true }
// Delete a contact
DeleteContact(address string) -> { success: true }Address Book is stored locally and never transmitted. Your contacts are private to your device.
Sign & Verify Messages
Cryptographically sign messages to prove wallet ownership, or verify signatures from others.
Signing Messages
- Go to Wallet > Sign Message
- Enter the message to sign
- Enter wallet password
- Click Sign
- Copy the PEM-formatted signature
SignMessage(message, password string) -> {
signature: "-----BEGIN DERO SIGNED MESSAGE-----\n...",
address: "dero1qy...",
message: "Hello, world!"
}Verifying Signatures
- Go to Wallet > Sign Message
- Switch to Verify tab
- Paste the PEM signature
- Click Verify
- See verification result with signer address
VerifySignature(signedMessage string) -> {
valid: true,
address: "dero1qy...",
message: "Hello, world!"
}Use Cases
- Prove ownership: Sign a message to prove you control an address
- Verify identity: Confirm a message came from a specific wallet
- Off-chain agreements: Create signed statements without blockchain transactions
- Authentication: Use signatures for login systems
Never sign messages you don't understand. Malicious actors may try to trick you into signing harmful content.
Export Transaction History
Export your transaction history to CSV for record-keeping or tax purposes.
How to Export
- Go to Wallet > History
- Apply any desired filters
- Click Export CSV
- Save the file to your computer
CSV Format
The exported file includes:
| Column | Description |
|---|---|
txid | Transaction hash |
type | IN, OUT, COINBASE, SC |
amount | Amount in DERO |
fee | Transaction fee |
height | Block height |
timestamp | Date and time |
destination | Recipient address (if OUT) |
payload | Comment/memo (if any) |
Backup & Security
Access wallet backup and security options:
View Seed Phrase
- Go to Wallet > Backup & Security
- Enter wallet password
- View your 25-word seed phrase
Only view your seed phrase in a private, secure location. Anyone with your seed can access your funds.
Change Wallet Password
Update your wallet's encryption password:
- Go to Wallet > Backup & Security
- Enter your current password
- Enter and confirm your new password
- Click Change Password
ChangeWalletPassword(currentPassword, newPassword string) -> {
success: bool,
message: string,
}Changing your password re-encrypts the wallet file. Your seed phrase remains the same—this only changes the local file encryption.
View Wallet Keys
For advanced users, view raw wallet keys:
GetWalletKeys(password string) -> {
spendKey: "...",
viewKey: "..."
}Security Features
Encryption
- All wallet files encrypted with user password
- Uses DERO's native encryption (not just wrapped)
- Password never stored, only used in memory
Network Isolation
- Mainnet and Testnet wallets are separate
- Simulator wallets are isolated
- No cross-network contamination possible
Seed Phrase Security
- Seed shown only at creation time
- Never logged or transmitted
- Not recoverable from wallet file without password
External Wallet Connection
Connect to external wallets via XSWD:
// Connect to Engram or other XSWD-compatible wallet
ConnectXSWD() -> { success: bool, address: string }
DisconnectXSWD()This enables using Hologram's browser with wallets that have additional features like hardware wallet support.
API Reference
Wallet Methods
OpenWallet(filePath, password string) map[string]interface{}
CloseWallet() map[string]interface{}
CreateWallet(filePath, password string) map[string]interface{}
RestoreWallet(filePath, password, seed string) map[string]interface{}
SwitchWallet(filePath, password string) map[string]interface{}
GetWalletStatus() map[string]interface{}
GetBalance() map[string]interface{}
GetAddress() map[string]interface{}
GetTransactionHistory(limit int) map[string]interface{}
GetWalletMiningEarnings(limit int) map[string]interface{}