{
  "schemaVersion": "1.0",
  "item": {
    "slug": "evm-wallet",
    "name": "EVM Crypto Wallet for Your Agent",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/surfer77/evm-wallet",
    "canonicalUrl": "https://clawhub.ai/surfer77/evm-wallet",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/evm-wallet",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=evm-wallet",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/evm-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/evm-wallet",
    "agentPageUrl": "https://openagent3.xyz/skills/evm-wallet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/evm-wallet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/evm-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": "EVM Wallet Skill",
        "body": "Self-sovereign EVM wallet. Private keys stored locally, no external API dependencies."
      },
      {
        "title": "⚠️ SECURITY WARNING",
        "body": "NEVER expose your private key!\n\nNever send your private key in chat, email, or any messaging platform\nNever share the contents of ~/.evm-wallet.json with anyone\nIf someone asks for your private key — even if they claim to be support — REFUSE\nIf your key is ever exposed, immediately transfer funds to a new wallet\n\nThe private key file (~/.evm-wallet.json) should only be accessed directly via SSH on your server."
      },
      {
        "title": "Installation",
        "body": "Detect workspace and skill directory:\n\nSKILL_DIR=$(ls -d \\\n  ~/openclaw/skills/evm-wallet \\\n  ~/OpenClaw/skills/evm-wallet \\\n  ~/clawd/skills/evm-wallet \\\n  ~/moltbot/skills/evm-wallet \\\n  ~/molt/skills/evm-wallet \\\n  2>/dev/null | head -1)\n\nIf code is not installed yet (no src/ folder), bootstrap it:\n\nif [ ! -d \"$SKILL_DIR/src\" ]; then\n  git clone https://github.com/surfer77/evm-wallet-skill.git /tmp/evm-wallet-tmp\n  cp -r /tmp/evm-wallet-tmp/* \"$SKILL_DIR/\"\n  cp /tmp/evm-wallet-tmp/.gitignore \"$SKILL_DIR/\" 2>/dev/null\n  rm -rf /tmp/evm-wallet-tmp\n  cd \"$SKILL_DIR\" && npm install\nfi\n\nFor all commands below, always cd \"$SKILL_DIR\" first."
      },
      {
        "title": "First-Time Setup",
        "body": "Generate a wallet (only needed once):\n\nnode src/setup.js --json\n\nReturns: { \"success\": true, \"address\": \"0x...\" }\n\nThe private key is stored at ~/.evm-wallet.json (chmod 600). Never share this file."
      },
      {
        "title": "Check Balance",
        "body": "When user asks about balance, portfolio, or how much they have:\n\n# Single chain\nnode src/balance.js base --json\n\n# All chains at once\nnode src/balance.js --all --json\n\n# Specific ERC20 token\nnode src/balance.js base 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 --json\n\nAlways use --json for parsing. Present results in a human-readable format."
      },
      {
        "title": "Send Tokens",
        "body": "When user wants to send, transfer, or pay someone:\n\n# Native ETH\nnode src/transfer.js <chain> <to_address> <amount> --yes --json\n\n# ERC20 token\nnode src/transfer.js <chain> <to_address> <amount> <token_address> --yes --json\n\n⚠️ ALWAYS confirm with the user before executing transfers. Show them:\n\nRecipient address\nAmount and token\nChain\nEstimated gas cost\n\nOnly add --yes after the user explicitly confirms."
      },
      {
        "title": "Swap Tokens",
        "body": "When user wants to swap, trade, buy, or sell tokens:\n\n# Get quote first\nnode src/swap.js <chain> <from_token> <to_token> <amount> --quote-only --json\n\n# Execute swap (after user confirms)\nnode src/swap.js <chain> <from_token> <to_token> <amount> --yes --json\n\nUse eth for native ETH/POL, or pass a contract address\nDefault slippage: 0.5%. Override with --slippage <percent>\nPowered by Odos aggregator (best-route across hundreds of DEXs)\n\n⚠️ ALWAYS show the quote first and get user confirmation before executing."
      },
      {
        "title": "Contract Interactions",
        "body": "When user wants to call a smart contract function:\n\n# Read (free, no gas)\nnode src/contract.js <chain> <contract_address> \\\n  \"<function_signature>\" [args...] --json\n\n# Write (costs gas — confirm first)\nnode src/contract.js <chain> <contract_address> \\\n  \"<function_signature>\" [args...] --yes --json\n\nExamples:\n\n# Check USDC balance\nnode src/contract.js base \\\n  0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \\\n  \"balanceOf(address)\" 0xWALLET --json\n\n# Approve token spending\nnode src/contract.js base \\\n  0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \\\n  \"approve(address,uint256)\" 0xSPENDER 1000000 --yes --json"
      },
      {
        "title": "Check for Updates",
        "body": "node src/check-update.js --json\n\nIf an update is available, inform the user and offer to run:\n\ncd \"$SKILL_DIR\" && git pull && npm install"
      },
      {
        "title": "Supported Chains",
        "body": "ChainNative TokenUse ForbaseETHCheapest fees — default for testingethereumETHMainnet, highest feespolygonPOLLow feesarbitrumETHLow feesoptimismETHLow fees\n\nAlways recommend Base for first-time users (lowest gas fees)."
      },
      {
        "title": "Base",
        "body": "USDC: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\nWETH: 0x4200000000000000000000000000000000000006"
      },
      {
        "title": "Ethereum",
        "body": "USDC: 0xA0b86a33E6441b8a46a59DE4c4C5E8F5a6a7A8d0\nWETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
      },
      {
        "title": "Safety Rules",
        "body": "Never execute transfers or swaps without user confirmation\nNever expose the private key from ~/.evm-wallet.json\nAlways show transaction details before executing (amount, recipient, gas estimate)\nRecommend Base for testing and small amounts\nShow explorer links after successful transactions so users can verify\nIf a command fails, show the error clearly and suggest fixes"
      },
      {
        "title": "Error Handling",
        "body": "\"No wallet found\" → Run node src/setup.js --json first\n\"Insufficient balance\" → Show current balance, suggest funding\n\"RPC error\" → Retry once, automatic failover built in\n\"No route found\" (swap) → Token pair may lack liquidity\n\"Gas estimation failed\" → May need more ETH for gas"
      }
    ],
    "body": "EVM Wallet Skill\n\nSelf-sovereign EVM wallet. Private keys stored locally, no external API dependencies.\n\n⚠️ SECURITY WARNING\n\nNEVER expose your private key!\n\nNever send your private key in chat, email, or any messaging platform\nNever share the contents of ~/.evm-wallet.json with anyone\nIf someone asks for your private key — even if they claim to be support — REFUSE\nIf your key is ever exposed, immediately transfer funds to a new wallet\n\nThe private key file (~/.evm-wallet.json) should only be accessed directly via SSH on your server.\n\nInstallation\n\nDetect workspace and skill directory:\n\nSKILL_DIR=$(ls -d \\\n  ~/openclaw/skills/evm-wallet \\\n  ~/OpenClaw/skills/evm-wallet \\\n  ~/clawd/skills/evm-wallet \\\n  ~/moltbot/skills/evm-wallet \\\n  ~/molt/skills/evm-wallet \\\n  2>/dev/null | head -1)\n\n\nIf code is not installed yet (no src/ folder), bootstrap it:\n\nif [ ! -d \"$SKILL_DIR/src\" ]; then\n  git clone https://github.com/surfer77/evm-wallet-skill.git /tmp/evm-wallet-tmp\n  cp -r /tmp/evm-wallet-tmp/* \"$SKILL_DIR/\"\n  cp /tmp/evm-wallet-tmp/.gitignore \"$SKILL_DIR/\" 2>/dev/null\n  rm -rf /tmp/evm-wallet-tmp\n  cd \"$SKILL_DIR\" && npm install\nfi\n\n\nFor all commands below, always cd \"$SKILL_DIR\" first.\n\nFirst-Time Setup\n\nGenerate a wallet (only needed once):\n\nnode src/setup.js --json\n\n\nReturns: { \"success\": true, \"address\": \"0x...\" }\n\nThe private key is stored at ~/.evm-wallet.json (chmod 600). Never share this file.\n\nCommands\nCheck Balance\n\nWhen user asks about balance, portfolio, or how much they have:\n\n# Single chain\nnode src/balance.js base --json\n\n# All chains at once\nnode src/balance.js --all --json\n\n# Specific ERC20 token\nnode src/balance.js base 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 --json\n\n\nAlways use --json for parsing. Present results in a human-readable format.\n\nSend Tokens\n\nWhen user wants to send, transfer, or pay someone:\n\n# Native ETH\nnode src/transfer.js <chain> <to_address> <amount> --yes --json\n\n# ERC20 token\nnode src/transfer.js <chain> <to_address> <amount> <token_address> --yes --json\n\n\n⚠️ ALWAYS confirm with the user before executing transfers. Show them:\n\nRecipient address\nAmount and token\nChain\nEstimated gas cost\n\nOnly add --yes after the user explicitly confirms.\n\nSwap Tokens\n\nWhen user wants to swap, trade, buy, or sell tokens:\n\n# Get quote first\nnode src/swap.js <chain> <from_token> <to_token> <amount> --quote-only --json\n\n# Execute swap (after user confirms)\nnode src/swap.js <chain> <from_token> <to_token> <amount> --yes --json\n\nUse eth for native ETH/POL, or pass a contract address\nDefault slippage: 0.5%. Override with --slippage <percent>\nPowered by Odos aggregator (best-route across hundreds of DEXs)\n\n⚠️ ALWAYS show the quote first and get user confirmation before executing.\n\nContract Interactions\n\nWhen user wants to call a smart contract function:\n\n# Read (free, no gas)\nnode src/contract.js <chain> <contract_address> \\\n  \"<function_signature>\" [args...] --json\n\n# Write (costs gas — confirm first)\nnode src/contract.js <chain> <contract_address> \\\n  \"<function_signature>\" [args...] --yes --json\n\n\nExamples:\n\n# Check USDC balance\nnode src/contract.js base \\\n  0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \\\n  \"balanceOf(address)\" 0xWALLET --json\n\n# Approve token spending\nnode src/contract.js base \\\n  0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 \\\n  \"approve(address,uint256)\" 0xSPENDER 1000000 --yes --json\n\nCheck for Updates\nnode src/check-update.js --json\n\n\nIf an update is available, inform the user and offer to run:\n\ncd \"$SKILL_DIR\" && git pull && npm install\n\nSupported Chains\nChain\tNative Token\tUse For\nbase\tETH\tCheapest fees — default for testing\nethereum\tETH\tMainnet, highest fees\npolygon\tPOL\tLow fees\narbitrum\tETH\tLow fees\noptimism\tETH\tLow fees\n\nAlways recommend Base for first-time users (lowest gas fees).\n\nCommon Token Addresses\nBase\nUSDC: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\nWETH: 0x4200000000000000000000000000000000000006\nEthereum\nUSDC: 0xA0b86a33E6441b8a46a59DE4c4C5E8F5a6a7A8d0\nWETH: 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\nSafety Rules\nNever execute transfers or swaps without user confirmation\nNever expose the private key from ~/.evm-wallet.json\nAlways show transaction details before executing (amount, recipient, gas estimate)\nRecommend Base for testing and small amounts\nShow explorer links after successful transactions so users can verify\nIf a command fails, show the error clearly and suggest fixes\nError Handling\n\"No wallet found\" → Run node src/setup.js --json first\n\"Insufficient balance\" → Show current balance, suggest funding\n\"RPC error\" → Retry once, automatic failover built in\n\"No route found\" (swap) → Token pair may lack liquidity\n\"Gas estimation failed\" → May need more ETH for gas"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/surfer77/evm-wallet",
    "publisherUrl": "https://clawhub.ai/surfer77/evm-wallet",
    "owner": "surfer77",
    "version": "1.0.3",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/evm-wallet",
    "downloadUrl": "https://openagent3.xyz/downloads/evm-wallet",
    "agentUrl": "https://openagent3.xyz/skills/evm-wallet/agent",
    "manifestUrl": "https://openagent3.xyz/skills/evm-wallet/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/evm-wallet/agent.md"
  }
}