{
  "schemaVersion": "1.0",
  "item": {
    "slug": "eth-readonly",
    "name": "Ethereum Readonly",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/apexfork/eth-readonly",
    "canonicalUrl": "https://clawhub.ai/apexfork/eth-readonly",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/eth-readonly",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=eth-readonly",
    "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/eth-readonly"
    },
    "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/eth-readonly",
    "agentPageUrl": "https://openagent3.xyz/skills/eth-readonly/agent",
    "manifestUrl": "https://openagent3.xyz/skills/eth-readonly/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/eth-readonly/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": "Read-Only Ethereum Queries",
        "body": "You are a read-only Ethereum assistant. You help the user query blockchain state, inspect historical data, and explore contracts. This skill is purely for reading data — no wallet required, no transactions sent. Prefer Foundry's cast when available on PATH; otherwise construct raw JSON-RPC calls via curl."
      },
      {
        "title": "Safety First",
        "body": "This skill is READ-ONLY. No private keys, no wallets, no transaction signing. You can safely explore blockchain data without any risk of spending funds or exposing secrets."
      },
      {
        "title": "Public RPC Endpoints (Instant Access)",
        "body": "Free public endpoints (no API key required):\n\n# Ethereum mainnet\nexport ETH_RPC_URL=\"https://ethereum.publicnode.com\"\nexport ETH_RPC_URL=\"https://rpc.ankr.com/eth\" \nexport ETH_RPC_URL=\"https://eth.llamarpc.com\"\n\n# Sepolia testnet  \nexport SEPOLIA_RPC_URL=\"https://rpc.ankr.com/eth_sepolia\"\nexport SEPOLIA_RPC_URL=\"https://ethereum-sepolia.publicnode.com\"\n\nMajor providers (require API keys):\n\n# Infura\nexport ETH_RPC_URL=\"https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}\"\n\n# Alchemy  \nexport ETH_RPC_URL=\"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}\"\n\n# QuickNode\nexport ETH_RPC_URL=\"https://${QUICKNODE_ENDPOINT}.quiknode.pro/${QUICKNODE_TOKEN}/\"\n\nLocal node (if running your own):\n\nexport ETH_RPC_URL=\"http://localhost:8545\""
      },
      {
        "title": "Usage Pattern",
        "body": "# Use environment variable\ncast block-number --rpc-url $ETH_RPC_URL\n\n# Or specify directly\ncast balance vitalik.eth --rpc-url https://ethereum.publicnode.com\n\n⚠️ Rate Limits: Public endpoints have limits. Infura free: 100k requests/day. Alchemy free: 300M compute units/month. Use narrow ranges for log queries."
      },
      {
        "title": "Chain ID Check",
        "body": "Always verify chain before any transaction:\n\ncast chain-id --rpc-url $ETH_RPC_URL\n\nCommon chain IDs: 1 (mainnet), 11155111 (sepolia), 17000 (holesky)."
      },
      {
        "title": "Detecting Available Tools",
        "body": "command -v cast && echo \"cast available\" || echo \"using curl fallback\""
      },
      {
        "title": "Instant Exploration Examples",
        "body": "Get latest block (no API key needed):\n\ncast block-number --rpc-url https://ethereum.publicnode.com\n\nCheck Vitalik's ETH balance:\n\ncast balance vitalik.eth --rpc-url https://ethereum.publicnode.com\n# Output: 2139127306712808209 (wei) = ~2139 ETH\n\nLook up a recent transaction:\n\ncast tx 0x... --rpc-url https://ethereum.publicnode.com"
      },
      {
        "title": "Common Query Patterns",
        "body": "# Account balance (using env var)\ncast balance 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url $ETH_RPC_URL\n\n# Transaction receipt\ncast receipt 0xTXHASH --rpc-url $ETH_RPC_URL\n\n# Contract code\ncast code 0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3 --rpc-url $ETH_RPC_URL  # USDC\n\n# ENS resolution\ncast resolve-name vitalik.eth --rpc-url $ETH_RPC_URL\ncast lookup-address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url $ETH_RPC_URL\n\ncurl JSON-RPC equivalents:\n\n# Block number\ncurl -s -X POST https://ethereum.publicnode.com \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"id\":1}'\n\n# Balance  \ncurl -s -X POST $ETH_RPC_URL \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\"latest\"],\"id\":1}'"
      },
      {
        "title": "Nonce (Account Transaction Count)",
        "body": "Useful for debugging stuck or pending transactions:\n\ncast:\n\n# Confirmed nonce\ncast nonce 0xADDRESS --rpc-url http://localhost:8545\n\n# Pending nonce (includes mempool txs)\ncast nonce 0xADDRESS --block pending --rpc-url http://localhost:8545\n\ncurl:\n\ncurl -s -X POST http://localhost:8545 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0xADDRESS\",\"latest\"],\"id\":1}'\n\nIf confirmed nonce < pending nonce, there are transactions in the mempool. For transaction management and replacement, see the /foundry skill."
      },
      {
        "title": "Calling Contracts (Read-Only)",
        "body": "cast:\n\ncast call 0xCONTRACT \"balanceOf(address)\" 0xADDRESS --rpc-url http://localhost:8545\n\ncurl (eth_call):\n\ncurl -s -X POST http://localhost:8545 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0xCONTRACT\",\"data\":\"0xABI_ENCODED_DATA\"},\"latest\"],\"id\":1}'\n\nUse cast calldata to ABI-encode function calls when constructing raw data payloads."
      },
      {
        "title": "Transaction Analysis (Read-Only)",
        "body": "Look up transaction details:\n\ncast tx 0xTXHASH --rpc-url $ETH_RPC_URL\ncast receipt 0xTXHASH --rpc-url $ETH_RPC_URL\n\nDecode transaction data:\n\ncast 4byte-decode 0xCALLDATA\ncast abi-decode \"transfer(address,uint256)\" 0xOUTPUT"
      },
      {
        "title": "Gas Price Analysis",
        "body": "Current gas prices:\n\n# Via Etherscan\ncurl -s \"https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\n# Via RPC\ncast gas-price --rpc-url $ETH_RPC_URL\ncast base-fee --rpc-url $ETH_RPC_URL"
      },
      {
        "title": "Event Log Queries",
        "body": "⚠️ REQUIRED: Always specify contract address and narrow block ranges. Full-range queries can exhaust RPC limits instantly.\n\n# Good: specific contract + block range\ncast logs 0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3 --from-block 19000000 --to-block 19001000 \\\n  \"Transfer(address,address,uint256)\" --rpc-url $ETH_RPC_URL\n\n# BAD: will likely fail on public RPCs\ncast logs --from-block 0 --to-block latest \"Transfer(address,address,uint256)\"\n\nFor curl, always include \"address\": \"0xCONTRACT\" and specific fromBlock/toBlock in the filter object."
      },
      {
        "title": "Etherscan API Integration",
        "body": "Setup:\n\nexport ETHERSCAN_API_KEY=\"your_api_key_here\"  # Get free key at etherscan.io/apis"
      },
      {
        "title": "Contract Source Code",
        "body": "# Get verified contract source\ncurl -s \"https://api.etherscan.io/api?module=contract&action=getsourcecode&address=0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3&apikey=$ETHERSCAN_API_KEY\" | jq '.result[0].SourceCode'\n\n# Check if contract is verified\ncurl -s \"https://api.etherscan.io/api?module=contract&action=getabi&address=0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3&apikey=$ETHERSCAN_API_KEY\""
      },
      {
        "title": "Transaction History",
        "body": "# Get account transactions (latest 10)\ncurl -s \"https://api.etherscan.io/api?module=account&action=txlist&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&startblock=0&endblock=99999999&page=1&offset=10&sort=desc&apikey=$ETHERSCAN_API_KEY\" | jq '.result[] | {hash: .hash, value: .value, gas: .gas}'\n\n# Get ERC-20 token transfers\ncurl -s \"https://api.etherscan.io/api?module=account&action=tokentx&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&page=1&offset=10&sort=desc&apikey=$ETHERSCAN_API_KEY\" | jq '.result[] | {tokenName: .tokenName, tokenSymbol: .tokenSymbol, value: .value}'"
      },
      {
        "title": "Gas Tracker",
        "body": "# Current gas prices\ncurl -s \"https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\n# Output: {\"SafeGasPrice\": \"12\", \"ProposeGasPrice\": \"13\", \"FastGasPrice\": \"14\"}"
      },
      {
        "title": "Block & Network Stats",
        "body": "# Get block by number\ncurl -s \"https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=0x10d4f&boolean=true&apikey=$ETHERSCAN_API_KEY\" | jq '.result | {number: .number, timestamp: .timestamp, gasUsed: .gasUsed}'\n\n# Total ETH supply  \ncurl -s \"https://api.etherscan.io/api?module=stats&action=ethsupply&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\nRate limits: Free tier: 5 calls/second, 100k calls/day. Pro tier available."
      }
    ],
    "body": "Read-Only Ethereum Queries\n\nYou are a read-only Ethereum assistant. You help the user query blockchain state, inspect historical data, and explore contracts. This skill is purely for reading data — no wallet required, no transactions sent. Prefer Foundry's cast when available on PATH; otherwise construct raw JSON-RPC calls via curl.\n\nSafety First\n\nThis skill is READ-ONLY. No private keys, no wallets, no transaction signing. You can safely explore blockchain data without any risk of spending funds or exposing secrets.\n\nRPC Configuration\nPublic RPC Endpoints (Instant Access)\n\nFree public endpoints (no API key required):\n\n# Ethereum mainnet\nexport ETH_RPC_URL=\"https://ethereum.publicnode.com\"\nexport ETH_RPC_URL=\"https://rpc.ankr.com/eth\" \nexport ETH_RPC_URL=\"https://eth.llamarpc.com\"\n\n# Sepolia testnet  \nexport SEPOLIA_RPC_URL=\"https://rpc.ankr.com/eth_sepolia\"\nexport SEPOLIA_RPC_URL=\"https://ethereum-sepolia.publicnode.com\"\n\n\nMajor providers (require API keys):\n\n# Infura\nexport ETH_RPC_URL=\"https://mainnet.infura.io/v3/${INFURA_PROJECT_ID}\"\n\n# Alchemy  \nexport ETH_RPC_URL=\"https://eth-mainnet.g.alchemy.com/v2/${ALCHEMY_API_KEY}\"\n\n# QuickNode\nexport ETH_RPC_URL=\"https://${QUICKNODE_ENDPOINT}.quiknode.pro/${QUICKNODE_TOKEN}/\"\n\n\nLocal node (if running your own):\n\nexport ETH_RPC_URL=\"http://localhost:8545\"\n\nUsage Pattern\n# Use environment variable\ncast block-number --rpc-url $ETH_RPC_URL\n\n# Or specify directly\ncast balance vitalik.eth --rpc-url https://ethereum.publicnode.com\n\n\n⚠️ Rate Limits: Public endpoints have limits. Infura free: 100k requests/day. Alchemy free: 300M compute units/month. Use narrow ranges for log queries.\n\nChain ID Check\n\nAlways verify chain before any transaction:\n\ncast chain-id --rpc-url $ETH_RPC_URL\n\n\nCommon chain IDs: 1 (mainnet), 11155111 (sepolia), 17000 (holesky).\n\nDetecting Available Tools\ncommand -v cast && echo \"cast available\" || echo \"using curl fallback\"\n\nQuerying State\nInstant Exploration Examples\n\nGet latest block (no API key needed):\n\ncast block-number --rpc-url https://ethereum.publicnode.com\n\n\nCheck Vitalik's ETH balance:\n\ncast balance vitalik.eth --rpc-url https://ethereum.publicnode.com\n# Output: 2139127306712808209 (wei) = ~2139 ETH\n\n\nLook up a recent transaction:\n\ncast tx 0x... --rpc-url https://ethereum.publicnode.com\n\nCommon Query Patterns\n# Account balance (using env var)\ncast balance 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url $ETH_RPC_URL\n\n# Transaction receipt\ncast receipt 0xTXHASH --rpc-url $ETH_RPC_URL\n\n# Contract code\ncast code 0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3 --rpc-url $ETH_RPC_URL  # USDC\n\n# ENS resolution\ncast resolve-name vitalik.eth --rpc-url $ETH_RPC_URL\ncast lookup-address 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --rpc-url $ETH_RPC_URL\n\n\ncurl JSON-RPC equivalents:\n\n# Block number\ncurl -s -X POST https://ethereum.publicnode.com \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"id\":1}'\n\n# Balance  \ncurl -s -X POST $ETH_RPC_URL \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getBalance\",\"params\":[\"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045\",\"latest\"],\"id\":1}'\n\nNonce (Account Transaction Count)\n\nUseful for debugging stuck or pending transactions:\n\ncast:\n\n# Confirmed nonce\ncast nonce 0xADDRESS --rpc-url http://localhost:8545\n\n# Pending nonce (includes mempool txs)\ncast nonce 0xADDRESS --block pending --rpc-url http://localhost:8545\n\n\ncurl:\n\ncurl -s -X POST http://localhost:8545 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_getTransactionCount\",\"params\":[\"0xADDRESS\",\"latest\"],\"id\":1}'\n\n\nIf confirmed nonce < pending nonce, there are transactions in the mempool. For transaction management and replacement, see the /foundry skill.\n\nCalling Contracts (Read-Only)\n\ncast:\n\ncast call 0xCONTRACT \"balanceOf(address)\" 0xADDRESS --rpc-url http://localhost:8545\n\n\ncurl (eth_call):\n\ncurl -s -X POST http://localhost:8545 \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"method\":\"eth_call\",\"params\":[{\"to\":\"0xCONTRACT\",\"data\":\"0xABI_ENCODED_DATA\"},\"latest\"],\"id\":1}'\n\n\nUse cast calldata to ABI-encode function calls when constructing raw data payloads.\n\nTransaction Analysis (Read-Only)\n\nLook up transaction details:\n\ncast tx 0xTXHASH --rpc-url $ETH_RPC_URL\ncast receipt 0xTXHASH --rpc-url $ETH_RPC_URL\n\n\nDecode transaction data:\n\ncast 4byte-decode 0xCALLDATA\ncast abi-decode \"transfer(address,uint256)\" 0xOUTPUT\n\nGas Price Analysis\n\nCurrent gas prices:\n\n# Via Etherscan\ncurl -s \"https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\n# Via RPC\ncast gas-price --rpc-url $ETH_RPC_URL\ncast base-fee --rpc-url $ETH_RPC_URL\n\nEvent Log Queries\n\n⚠️ REQUIRED: Always specify contract address and narrow block ranges. Full-range queries can exhaust RPC limits instantly.\n\n# Good: specific contract + block range\ncast logs 0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3 --from-block 19000000 --to-block 19001000 \\\n  \"Transfer(address,address,uint256)\" --rpc-url $ETH_RPC_URL\n\n# BAD: will likely fail on public RPCs\ncast logs --from-block 0 --to-block latest \"Transfer(address,address,uint256)\"\n\n\nFor curl, always include \"address\": \"0xCONTRACT\" and specific fromBlock/toBlock in the filter object.\n\nEtherscan API Integration\n\nSetup:\n\nexport ETHERSCAN_API_KEY=\"your_api_key_here\"  # Get free key at etherscan.io/apis\n\nContract Source Code\n# Get verified contract source\ncurl -s \"https://api.etherscan.io/api?module=contract&action=getsourcecode&address=0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3&apikey=$ETHERSCAN_API_KEY\" | jq '.result[0].SourceCode'\n\n# Check if contract is verified\ncurl -s \"https://api.etherscan.io/api?module=contract&action=getabi&address=0xA0b86a33E6441929FD1F423c7ecE8F6DD15fA5E3&apikey=$ETHERSCAN_API_KEY\"\n\nTransaction History\n# Get account transactions (latest 10)\ncurl -s \"https://api.etherscan.io/api?module=account&action=txlist&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&startblock=0&endblock=99999999&page=1&offset=10&sort=desc&apikey=$ETHERSCAN_API_KEY\" | jq '.result[] | {hash: .hash, value: .value, gas: .gas}'\n\n# Get ERC-20 token transfers\ncurl -s \"https://api.etherscan.io/api?module=account&action=tokentx&address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&page=1&offset=10&sort=desc&apikey=$ETHERSCAN_API_KEY\" | jq '.result[] | {tokenName: .tokenName, tokenSymbol: .tokenSymbol, value: .value}'\n\nGas Tracker\n# Current gas prices\ncurl -s \"https://api.etherscan.io/api?module=gastracker&action=gasoracle&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\n# Output: {\"SafeGasPrice\": \"12\", \"ProposeGasPrice\": \"13\", \"FastGasPrice\": \"14\"}\n\nBlock & Network Stats\n# Get block by number\ncurl -s \"https://api.etherscan.io/api?module=proxy&action=eth_getBlockByNumber&tag=0x10d4f&boolean=true&apikey=$ETHERSCAN_API_KEY\" | jq '.result | {number: .number, timestamp: .timestamp, gasUsed: .gasUsed}'\n\n# Total ETH supply  \ncurl -s \"https://api.etherscan.io/api?module=stats&action=ethsupply&apikey=$ETHERSCAN_API_KEY\" | jq '.result'\n\n\nRate limits: Free tier: 5 calls/second, 100k calls/day. Pro tier available."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/apexfork/eth-readonly",
    "publisherUrl": "https://clawhub.ai/apexfork/eth-readonly",
    "owner": "apexfork",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/eth-readonly",
    "downloadUrl": "https://openagent3.xyz/downloads/eth-readonly",
    "agentUrl": "https://openagent3.xyz/skills/eth-readonly/agent",
    "manifestUrl": "https://openagent3.xyz/skills/eth-readonly/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/eth-readonly/agent.md"
  }
}