{
  "schemaVersion": "1.0",
  "item": {
    "slug": "base-wallet",
    "name": "Base Wallet",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/dAAAb/base-wallet",
    "canonicalUrl": "https://clawhub.ai/dAAAb/base-wallet",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/base-wallet",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=base-wallet",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "package.json",
      "references/basemail-api.md",
      "scripts/basemail-register.js",
      "scripts/check-balance.js",
      "scripts/create-wallet.js"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/base-wallet"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/base-wallet",
    "agentPageUrl": "https://openagent3.xyz/skills/base-wallet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/base-wallet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/base-wallet/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "🔐 Base Wallet - Crypto Identity for AI Agents",
        "body": "Every autonomous agent needs a wallet. Create one without human help.\n\nTL;DR: Programmatic wallet creation on Base/Ethereum. SIWE auth, balance checks, transactions."
      },
      {
        "title": "Why Base Wallet?",
        "body": "True autonomy — Your agent creates and controls its own wallet\nNo browser needed — Pure CLI, no extensions or popups\nSIWE ready — Sign-In with Ethereum for Web3 services\nSecure by default — Environment variables, no plaintext keys\n\nCreate and manage Base chain (Ethereum-compatible) wallets programmatically."
      },
      {
        "title": "⚠️ Security First",
        "body": "✅ DO❌ DON'TUse environment variables for private keysStore private keys in plain text filesSet wallet files to chmod 600Commit wallet files to gitUse --env mode (recommended)Use console.log(privateKey)Back up mnemonics offlineShare private keys or mnemonics"
      },
      {
        "title": "Create a New Wallet (Recommended)",
        "body": "# Output as environment variable format (safest)\nnode scripts/create-wallet.js --env\n\n# Output example:\n# export WALLET_ADDRESS=\"0x...\"\n# export PRIVATE_KEY=\"0x...\"\n\nThen copy to your shell or .env file."
      },
      {
        "title": "Create with File Storage (Opt-in)",
        "body": "# Only if you need file-based storage\nnode scripts/create-wallet.js --managed my-agent\n\n⚠️ This stores private key in ~/.openclaw/wallets/my-agent.json"
      },
      {
        "title": "Load Wallet from Environment",
        "body": "const { ethers } = require('ethers');\n\n// ✅ SECURE: Load from environment variable\nconst wallet = new ethers.Wallet(process.env.PRIVATE_KEY);\nconsole.log('Address:', wallet.address);\n// ❌ NEVER: console.log('Private Key:', wallet.privateKey);"
      },
      {
        "title": "Load from Mnemonic",
        "body": "const wallet = ethers.Wallet.fromPhrase(process.env.MNEMONIC);"
      },
      {
        "title": "Check Balance",
        "body": "const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');\nconst balance = await provider.getBalance(wallet.address);\nconsole.log('Balance:', ethers.formatEther(balance), 'ETH');"
      },
      {
        "title": "Sign Message (SIWE)",
        "body": "const message = `example.com wants you to sign in with your Ethereum account:\n${wallet.address}\n\nSign in message\n\nURI: https://example.com\nVersion: 1\nChain ID: 8453\nNonce: ${nonce}\nIssued At: ${new Date().toISOString()}`;\n\nconst signature = await wallet.signMessage(message);"
      },
      {
        "title": "Send Transaction",
        "body": "const provider = new ethers.JsonRpcProvider('https://mainnet.base.org');\nconst connectedWallet = wallet.connect(provider);\n\nconst tx = await connectedWallet.sendTransaction({\n  to: recipientAddress,\n  value: ethers.parseEther('0.001')\n});\n\nconst receipt = await tx.wait();\nconsole.log('TX Hash:', tx.hash);"
      },
      {
        "title": "Scripts",
        "body": "ScriptDescriptioncreate-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 JSONbasemail-register.js [name]Register for BaseMail emailcheck-balance.js [address]Check wallet balance"
      },
      {
        "title": "BaseMail Integration",
        "body": "Register for a @basemail.ai email using your wallet signature.\n\n# If using environment variable:\nPRIVATE_KEY=\"0x...\" node scripts/basemail-register.js\n\n# If using managed wallet:\nnode scripts/basemail-register.js my-agent"
      },
      {
        "title": "Network Configuration",
        "body": "NetworkChain IDRPC URLBase Mainnet8453https://mainnet.base.orgBase Sepolia84532https://sepolia.base.org"
      },
      {
        "title": "📝 Audit Logging",
        "body": "Operations are logged to ~/.base-wallet/audit.log."
      },
      {
        "title": "Secure Storage Pattern",
        "body": "// ✅ Recommended: Use environment variables\nconst privateKey = process.env.PRIVATE_KEY;\nif (!privateKey) {\n  throw new Error('PRIVATE_KEY environment variable not set');\n}\nconst wallet = new ethers.Wallet(privateKey);\n\n// ❌ Avoid: Storing private keys in code or files\n\nIf you must store to file (not recommended):\n\nconst fs = require('fs');\nconst path = require('path');\n\n// Store with restricted permissions\nconst filepath = path.join(process.env.HOME, '.openclaw', 'wallets', 'wallet.json');\nfs.writeFileSync(filepath, JSON.stringify({ \n  address: wallet.address,\n  // Only store if absolutely necessary\n  privateKey: wallet.privateKey\n}), { mode: 0o600 }); // Owner read/write only"
      },
      {
        "title": ".gitignore",
        "body": "Add to your project's .gitignore:\n\n# Wallet files - NEVER commit!\n.openclaw/\n*.wallet.json\n*.mnemonic\nprivate-key*"
      },
      {
        "title": "Dependencies",
        "body": "npm install ethers"
      },
      {
        "title": "v1.1.0 (2026-02-08)",
        "body": "🔐 Security: Changed create-wallet.js to opt-in file storage\n✨ Added --env mode (recommended)\n📝 Added audit logging\n⚠️ Removed console.log(privateKey) from examples\n📄 Enhanced security documentation"
      },
      {
        "title": "v1.0.0",
        "body": "🎉 Initial release"
      }
    ],
    "body": "🔐 Base Wallet - Crypto Identity for AI Agents\n\nEvery autonomous agent needs a wallet. Create one without human help.\n\nTL;DR: Programmatic wallet creation on Base/Ethereum. SIWE auth, balance checks, transactions.\n\nWhy Base Wallet?\nTrue autonomy — Your agent creates and controls its own wallet\nNo browser needed — Pure CLI, no extensions or popups\nSIWE ready — Sign-In with Ethereum for Web3 services\nSecure by default — Environment variables, no plaintext keys\n\nCreate and manage Base chain (Ethereum-compatible) wallets programmatically.\n\n⚠️ Security First\n✅ DO\t❌ DON'T\nUse environment variables for private keys\tStore private keys in plain text files\nSet wallet files to chmod 600\tCommit wallet files to git\nUse --env mode (recommended)\tUse console.log(privateKey)\nBack up mnemonics offline\tShare private keys or mnemonics\nQuick Start\nCreate a New Wallet (Recommended)\n# Output as environment variable format (safest)\nnode scripts/create-wallet.js --env\n\n# Output example:\n# export WALLET_ADDRESS=\"0x...\"\n# export PRIVATE_KEY=\"0x...\"\n\n\nThen copy to your shell or .env file.\n\nCreate with File Storage (Opt-in)\n# Only if you need file-based storage\nnode scripts/create-wallet.js --managed my-agent\n\n\n⚠️ This stores private key in ~/.openclaw/wallets/my-agent.json\n\nUsage Examples\nLoad Wallet from Environment\nconst { ethers } = require('ethers');\n\n// ✅ SECURE: Load from environment variable\nconst wallet = new ethers.Wallet(process.env.PRIVATE_KEY);\nconsole.log('Address:', wallet.address);\n// ❌ NEVER: console.log('Private Key:', wallet.privateKey);\n\nLoad from Mnemonic\nconst wallet = ethers.Wallet.fromPhrase(process.env.MNEMONIC);\n\nCheck Balance\nconst provider = new ethers.JsonRpcProvider('https://mainnet.base.org');\nconst balance = await provider.getBalance(wallet.address);\nconsole.log('Balance:', ethers.formatEther(balance), 'ETH');\n\nSign Message (SIWE)\nconst message = `example.com wants you to sign in with your Ethereum account:\n${wallet.address}\n\nSign in message\n\nURI: https://example.com\nVersion: 1\nChain ID: 8453\nNonce: ${nonce}\nIssued At: ${new Date().toISOString()}`;\n\nconst signature = await wallet.signMessage(message);\n\nSend Transaction\nconst provider = new ethers.JsonRpcProvider('https://mainnet.base.org');\nconst connectedWallet = wallet.connect(provider);\n\nconst tx = await connectedWallet.sendTransaction({\n  to: recipientAddress,\n  value: ethers.parseEther('0.001')\n});\n\nconst receipt = await tx.wait();\nconsole.log('TX Hash:', tx.hash);\n\nScripts\nScript\tDescription\ncreate-wallet.js --env\tCreate wallet, output as env vars (recommended)\ncreate-wallet.js --managed [name]\tCreate wallet, save to file (opt-in)\ncreate-wallet.js --json\tCreate wallet, output as JSON\nbasemail-register.js [name]\tRegister for BaseMail email\ncheck-balance.js [address]\tCheck wallet balance\nBaseMail Integration\n\nRegister for a @basemail.ai email using your wallet signature.\n\n# If using environment variable:\nPRIVATE_KEY=\"0x...\" node scripts/basemail-register.js\n\n# If using managed wallet:\nnode scripts/basemail-register.js my-agent\n\nNetwork Configuration\nNetwork\tChain ID\tRPC URL\nBase Mainnet\t8453\thttps://mainnet.base.org\nBase Sepolia\t84532\thttps://sepolia.base.org\n📝 Audit Logging\n\nOperations are logged to ~/.base-wallet/audit.log.\n\nSecure Storage Pattern\n// ✅ Recommended: Use environment variables\nconst privateKey = process.env.PRIVATE_KEY;\nif (!privateKey) {\n  throw new Error('PRIVATE_KEY environment variable not set');\n}\nconst wallet = new ethers.Wallet(privateKey);\n\n// ❌ Avoid: Storing private keys in code or files\n\n\nIf you must store to file (not recommended):\n\nconst fs = require('fs');\nconst path = require('path');\n\n// Store with restricted permissions\nconst filepath = path.join(process.env.HOME, '.openclaw', 'wallets', 'wallet.json');\nfs.writeFileSync(filepath, JSON.stringify({ \n  address: wallet.address,\n  // Only store if absolutely necessary\n  privateKey: wallet.privateKey\n}), { mode: 0o600 }); // Owner read/write only\n\n.gitignore\n\nAdd to your project's .gitignore:\n\n# Wallet files - NEVER commit!\n.openclaw/\n*.wallet.json\n*.mnemonic\nprivate-key*\n\nDependencies\nnpm install ethers\n\nChangelog\nv1.1.0 (2026-02-08)\n🔐 Security: Changed create-wallet.js to opt-in file storage\n✨ Added --env mode (recommended)\n📝 Added audit logging\n⚠️ Removed console.log(privateKey) from examples\n📄 Enhanced security documentation\nv1.0.0\n🎉 Initial release"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/dAAAb/base-wallet",
    "publisherUrl": "https://clawhub.ai/dAAAb/base-wallet",
    "owner": "dAAAb",
    "version": "1.5.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/base-wallet",
    "downloadUrl": "https://openagent3.xyz/downloads/base-wallet",
    "agentUrl": "https://openagent3.xyz/skills/base-wallet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/base-wallet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/base-wallet/agent.md"
  }
}