HomeBrowseUpload
โ† Back to registry
โšก
// Skill profile

๐Ÿ” Nad Wallet - Monad Chain Identity for AI Agents

name: nad-wallet

by daaab ยท published 2026-03-22

้‚ฎไปถๅค„็†ๆ•ฐๆฎๅค„็†ๅŠ ๅฏ†่ดงๅธ
Total installs
0
Stars
โ˜… 0
Last updated
2026-03
// Install command
$ claw add gh:daaab/daaab-nad-wallet
View on GitHub
// Full documentation

---

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?

  • **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 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 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

    | 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)

  • ๐ŸŽ‰ 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! ๐Ÿš€

    // Comments
    Sign in with GitHub to leave a comment.
    // Related skills

    More tools from the same signal band