Nad Wallet

πŸ” 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).

MIT-0 Β· Free to use, modify, and redistribute. No attribution required.
⭐ 0 · 695 · 0 current installs · 0 all-time installs
byJu Chun Ko@dAAAb
MIT-0
Security Scan
VirusTotalVirusTotal
Benign
View report β†’
OpenClawOpenClaw
Benign
high confidence
βœ“
Purpose & Capability
Name/description (create wallets, sign SIWE, check balances, register for NadMail) align with the included scripts and SKILL.md. The network endpoints and APIs used (rpc.monad.xyz, api.nadmail.ai, explorer) are consistent with the stated Nad/Monad ecosystem purpose.
βœ“
Instruction Scope
SKILL.md instructions and the scripts are narrowly scoped to wallet creation, signing, balance checks, and NadMail registration. The instructions do not request unrelated system data or attempt broad enumeration. The scripts explicitly instruct use of NAD_PRIVATE_KEY or managed wallet files and document saving tokens/audit logs locally.
βœ“
Install Mechanism
There is no install spec (instruction-only with bundled scripts). The only dependency is ethers in package.json, which is a reasonable dependency for wallet operations. No remote arbitrary downloads or obscure install URLs are present.
!
Credentials
The registry metadata lists no required env vars, yet SKILL.md and the scripts rely on NAD_PRIVATE_KEY and optionally NAD_WALLET_DIR (and use HOME). Requesting or using NAD_PRIVATE_KEY is appropriate for a wallet skill, but the metadata omission is an inconsistency that users should be aware of. No unrelated credentials are requested.
β„Ή
Persistence & Privilege
The skill writes managed wallet files, a mnemonic backup, an audit.log and a nadmail-token.json under ~/.nad-wallet. This disk persistence is consistent with the skill's purpose but is persistent and sensitive (contains private keys and tokens) β€” it does not modify other skills or global agent config.
Assessment
This skill appears to do what it says: create Monad (Nad) wallets, sign SIWE messages and register with NadMail. Before installing or running it: 1) Be aware the scripts expect NAD_PRIVATE_KEY (recommended) or will create managed wallet files under ~/.nad-wallet β€” the published metadata did not declare this env var, so treat that omission as an administrative mismatch. 2) Inspect/verify the endpoints (https://rpc.monad.xyz, https://api.nadmail.ai) yourself if you rely on them. 3) Do not run these scripts with a high-value real private key until you review the code and test in an isolated environment; prefer using a throwaway/test key first. 4) If you use managed mode, confirm file permissions (600/400 as the scripts set) and keep backups offline. 5) Install npm dependencies (ethers) from the official registry and confirm package integrity. If any of these points are unacceptable, don't install or run the skill; otherwise it is coherent with its stated purpose.

Like a lobster shell, security has layers β€” review code before you run it.

Current versionv1.0.0
Download zip
latestvk97a9ja43r9apqprjteq86xj9n80vj2j

License

MIT-0
Free to use, modify, and redistribute. No attribution required.

SKILL.md

πŸ” 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?

  • Monad Native β€” Built specifically for Monad blockchain (Chain ID 143)
  • True Autonomy β€” Your agent creates and controls its own wallet
  • No Browser Needed β€” Pure CLI, no extensions or popups
  • Nad Ecosystem Ready β€” NadMail, NadName, nad.fun integration
  • SIWE Ready β€” Sign-In with Ethereum for Web3 services
  • Secure by Default β€” Environment variables, no plaintext keys

Create and manage Monad chain wallets programmatically for the Nad ecosystem.


⚠️ Security First

βœ… DO❌ DON'T
Use NAD_PRIVATE_KEY environment variableStore private keys in plain text files
Set wallet files to chmod 600Commit wallet files to git
Use --env mode (recommended)Use console.log(privateKey)
Back up mnemonics offlineShare private keys or mnemonics
Store files in ~/.nad-wallet/ onlyAuto-detect wallets outside ~/.nad-wallet/

πŸ”’ Security Standards: Identical to Base Wallet security practices but adapted for Monad/Nad ecosystem.


Network Information

PropertyValue
BlockchainMonad
Chain ID143
RPC URLhttps://rpc.monad.xyz
Explorerhttps://explorer.monad.xyz
Native TokenMON
Ecosystemnad.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

ScriptDescription
create-wallet.js --envCreate wallet, output as env vars (recommended)
create-wallet.js --managed [name]Create wallet, save to file (opt-in)
create-wallet.js --jsonCreate 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 littlelobster

Managed 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 littlelobster

What 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...5678

Example 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

  • Meme token creation platform
  • Community-driven token launches
  • Built on Monad for fast transactions

πŸ“§ NadMail (nadmail.ai)

  • Web3 email service for Nad ecosystem
  • SIWE authentication with your wallet
  • Integrated with this skill via nadmail-register.js

🌐 NadName (app.nad.domains)

  • Domain name service for Nad ecosystem
  • Link human-readable names to wallet addresses
  • Built on Monad infrastructure

πŸ“ Audit Logging

All operations are logged to ~/.nad-wallet/audit.log with:

  • Timestamp
  • Action type (wallet_created, nadmail_registered, etc.)
  • Masked address (first 6 + last 4 chars)
  • Success/failure status
  • No sensitive data (private keys never logged)

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 myname

File 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

AspectBase WalletNad Wallet
BlockchainBase (8453)Monad (143)
RPChttps://mainnet.base.orghttps://rpc.monad.xyz
Explorerbasescan.orgexplorer.monad.xyz
Native TokenETHMON
Email ServiceBaseMailNadMail
Config Directory~/.base-wallet/~/.nad-wallet/
Wallet Directory~/.openclaw/wallets/~/.nad-wallet/wallets/
Environment VariablePRIVATE_KEYNAD_PRIVATE_KEY
EcosystemBase ecosystemnad.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)

  • πŸŽ‰ Initial release for Monad blockchain
  • πŸ” Security: Environment variable approach (--env mode default)
  • πŸ“§ NadMail SIWE integration
  • πŸ’° MON balance checking
  • πŸ“ Comprehensive audit logging
  • 🌐 Nad ecosystem integration (nad.fun, NadMail, NadName)
  • πŸ“š Complete documentation with security best practices
  • πŸ”’ File permissions enforcement (600/700)

License

MIT License - Build awesome things with Nad Wallet! πŸš€

Files

5 total
Select a file
Select a file to preview.

Comments

Loading comments…