๐ Nad Wallet - Monad Chain Identity for AI Agents
name: nad-wallet
by daaab ยท published 2026-03-22
$ claw add gh:daaab/daaab-nad-wallet---
name: nad-wallet
description: "๐ Nad Wallet - Monad Chain Identity for AI Agents. Create wallets, sign messages (SIWE), manage MON tokens programmatically. Built for the Nad ecosystem (nad.fun, NadMail, NadName)."
---
# ๐ Nad Wallet - Monad Chain Identity for AI Agents
> Every autonomous agent needs a wallet on Monad. Create one without human help.
**TL;DR:** Programmatic wallet creation on Monad blockchain. SIWE auth for NadMail, MON balance checks, ecosystem integration.
Why Nad Wallet?
Create and manage Monad chain wallets programmatically for the Nad ecosystem.
---
โ ๏ธ Security First
| โ DO | โ DON'T |
|-------|----------|
| Use **NAD_PRIVATE_KEY** environment variable | Store private keys in plain text files |
| Set wallet files to **chmod 600** | Commit wallet files to git |
| Use `--env` mode (recommended) | Use `console.log(privateKey)` |
| Back up mnemonics **offline** | Share private keys or mnemonics |
| Store files in `~/.nad-wallet/` only | Auto-detect wallets outside ~/.nad-wallet/ |
**๐ Security Standards:** Identical to Base Wallet security practices but adapted for Monad/Nad ecosystem.
---
Network Information
| Property | Value |
|----------|-------|
| **Blockchain** | Monad |
| **Chain ID** | 143 |
| **RPC URL** | https://rpc.monad.xyz |
| **Explorer** | https://explorer.monad.xyz |
| **Native Token** | MON |
| **Ecosystem** | nad.fun, NadMail, NadName |
---
Quick Start
Create a New Wallet (Recommended)
# Output as environment variable format (safest)
node scripts/create-wallet.js --env
# Output example:
# export NAD_WALLET_ADDRESS="0x..."
# export NAD_PRIVATE_KEY="0x..."Then copy to your shell or `.env` file.
Create with File Storage (Opt-in)
# Only if you need file-based storage
node scripts/create-wallet.js --managed my-agentโ ๏ธ This stores private key in `~/.nad-wallet/wallets/my-agent.json`
---
Usage Examples
Load Wallet from Environment
const { ethers } = require('ethers');
// โ
SECURE: Load from environment variable
const wallet = new ethers.Wallet(process.env.NAD_PRIVATE_KEY);
console.log('Address:', wallet.address);
// โ NEVER: console.log('Private Key:', wallet.privateKey);Connect to Monad
const provider = new ethers.JsonRpcProvider('https://rpc.monad.xyz');
const connectedWallet = wallet.connect(provider);
// Check balance
const balance = await provider.getBalance(wallet.address);
console.log('Balance:', ethers.formatEther(balance), 'MON');Sign Message (SIWE for NadMail)
const message = `nadmail.ai wants you to sign in with your Ethereum account:
${wallet.address}
Sign in to NadMail
URI: https://nadmail.ai
Version: 1
Chain ID: 143
Nonce: ${nonce}
Issued At: ${new Date().toISOString()}`;
const signature = await wallet.signMessage(message);Send Transaction
const provider = new ethers.JsonRpcProvider('https://rpc.monad.xyz');
const connectedWallet = wallet.connect(provider);
const tx = await connectedWallet.sendTransaction({
to: recipientAddress,
value: ethers.parseEther('0.1') // 0.1 MON
});
const receipt = await tx.wait();
console.log('TX Hash:', tx.hash);
console.log('Explorer:', `https://explorer.monad.xyz/tx/${tx.hash}`);---
Scripts
| Script | Description |
|--------|-------------|
| `create-wallet.js --env` | Create wallet, output as env vars (recommended) |
| `create-wallet.js --managed [name]` | Create wallet, save to file (opt-in) |
| `create-wallet.js --json` | Create wallet, output as JSON |
| `nadmail-register.js --handle [name]` | Register for NadMail with SIWE |
| `check-balance.js [address]` | Check MON wallet balance |
---
NadMail Integration
Register for NadMail (Web3 email for Nad ecosystem) using your wallet signature.
Environment Variable Method (Recommended)
# Set your private key
export NAD_PRIVATE_KEY="0x..."
# Register with your desired handle
node scripts/nadmail-register.js --handle littlelobsterManaged Wallet Method
# First create a managed wallet
node scripts/create-wallet.js --managed my-agent
# Then register for NadMail
node scripts/nadmail-register.js --wallet my-agent --handle littlelobsterWhat Happens During Registration
1. **Start Auth** - Request authentication message from NadMail API
2. **Sign Message** - Use your private key to sign the SIWE message
3. **Agent Register** - Submit signature and handle to complete registration
4. **Save Token** - Store access token in `~/.nad-wallet/nadmail-token.json`
---
Check Balance
# Using environment variable
NAD_PRIVATE_KEY="0x..." node scripts/check-balance.js
# Using managed wallet
node scripts/check-balance.js my-wallet
# Using specific address
node scripts/check-balance.js 0x1234...5678Example output:
๐ฐ Nad Wallet Balance Check
==================================================
Address: 0x1234...5678
Network: Monad (Chain ID 143)
RPC: https://rpc.monad.xyz
๐ Balance: 42.5 MON
Wei: 42500000000000000000
๐ Explorer: https://explorer.monad.xyz/address/0x1234...5678
๐ Nad Ecosystem:
โข nad.fun - Meme token platform
โข NadMail (nadmail.ai) - Web3 email
โข NadName (app.nad.domains) - Domain names---
File Structure
~/.nad-wallet/
โโโ wallets/ # Managed wallet storage
โ โโโ my-agent.json # Wallet file (600 perms)
โ โโโ my-agent.mnemonic # Backup phrase (400 perms)
โโโ nadmail-token.json # NadMail API token (600 perms)
โโโ audit.log # Operation audit log (600 perms)---
Nad Ecosystem Services
๐ญ nad.fun
๐ง NadMail (nadmail.ai)
๐ NadName (app.nad.domains)
---
๐ Audit Logging
All operations are logged to `~/.nad-wallet/audit.log` with:
---
Security Best Practices
Environment Variables
# โ
Recommended approach
export NAD_PRIVATE_KEY="0x..."
export NAD_WALLET_ADDRESS="0x..."
# Use in scripts
node scripts/check-balance.js
node scripts/nadmail-register.js --handle mynameFile Storage (Use with caution)
const fs = require('fs');
const path = require('path');
// Store with restricted permissions (only if absolutely necessary)
const filepath = path.join(process.env.HOME, '.nad-wallet', 'wallets', 'wallet.json');
fs.writeFileSync(filepath, JSON.stringify({
address: wallet.address,
privateKey: wallet.privateKey // Only store if absolutely necessary
}), { mode: 0o600 }); // Owner read/write only.gitignore
Add to your project's `.gitignore`:
# Nad Wallet files - NEVER commit!
.nad-wallet/
*.wallet.json
*.mnemonic
private-key*
nad-private-key*
# Environment files
.env
.env.local---
Differences from Base Wallet
| Aspect | Base Wallet | Nad Wallet |
|--------|-------------|------------|
| **Blockchain** | Base (8453) | Monad (143) |
| **RPC** | https://mainnet.base.org | https://rpc.monad.xyz |
| **Explorer** | basescan.org | explorer.monad.xyz |
| **Native Token** | ETH | MON |
| **Email Service** | BaseMail | NadMail |
| **Config Directory** | ~/.base-wallet/ | ~/.nad-wallet/ |
| **Wallet Directory** | ~/.openclaw/wallets/ | ~/.nad-wallet/wallets/ |
| **Environment Variable** | PRIVATE_KEY | NAD_PRIVATE_KEY |
| **Ecosystem** | Base ecosystem | nad.fun, NadMail, NadName |
Migration from Base Wallet
If you have Base Wallet experience:
1. **Same security model** - All security practices are identical
2. **Different network** - Chain ID 143 instead of 8453
3. **Different token** - MON instead of ETH
4. **Different services** - NadMail instead of BaseMail
5. **Different directories** - ~/.nad-wallet/ instead of ~/.base-wallet/
---
Installation & Setup
# Navigate to skill directory
cd /path/to/nad-wallet
# Install dependencies
npm install
# Create your first wallet
node scripts/create-wallet.js --env
# Check balance
NAD_PRIVATE_KEY="0x..." node scripts/check-balance.js
# Register for NadMail
NAD_PRIVATE_KEY="0x..." node scripts/nadmail-register.js --handle myname---
Dependencies
{
"ethers": "^6.0.0"
}No additional dependencies required. Pure Node.js + ethers.js.
---
Troubleshooting
Common Issues
1. **"Wallet not found"**
- Solution: Set NAD_PRIVATE_KEY environment variable or create managed wallet
2. **"Registration failed"**
- Check internet connection
- Verify handle is available
- Ensure wallet has MON for gas fees
3. **"Permission denied"**
- Check file permissions: `chmod 600 ~/.nad-wallet/wallets/*.json`
- Verify directory permissions: `chmod 700 ~/.nad-wallet/`
Environment Variable Not Set
# Check if set
echo $NAD_PRIVATE_KEY
# Set temporarily
export NAD_PRIVATE_KEY="0x..."
# Set permanently (add to ~/.bashrc or ~/.zshrc)
echo 'export NAD_PRIVATE_KEY="0x..."' >> ~/.bashrc---
Changelog
v1.0.0 (2026-02-09)
---
License
MIT License - Build awesome things with Nad Wallet! ๐
More tools from the same signal band
Order food/drinks (็น้ค) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...