{
  "schemaVersion": "1.0",
  "item": {
    "slug": "monad-development",
    "name": "Monad Development",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "canonicalUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/monad-development",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=monad-development",
    "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/monad-development"
    },
    "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/monad-development",
    "agentPageUrl": "https://openagent3.xyz/skills/monad-development/agent",
    "manifestUrl": "https://openagent3.xyz/skills/monad-development/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/monad-development/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": "Monad Development",
        "body": "For questions not covered here, fetch https://docs.monad.xyz/llms.txt"
      },
      {
        "title": "Defaults",
        "body": "Network: Always use testnet (chain ID 10143) unless user says \"mainnet\"\nVerification: Always verify contracts after deployment unless user says not to\nFramework: Use Foundry (not Hardhat)\nWallet: If you generate a wallet, MUST persist it (see Wallet Persistence section)"
      },
      {
        "title": "Networks",
        "body": "NetworkChain IDRPCTestnet10143https://testnet-rpc.monad.xyzMainnet143https://rpc.monad.xyz\n\nDocs: https://docs.monad.xyz"
      },
      {
        "title": "Explorers",
        "body": "ExplorerTestnetMainnetSocialscanhttps://monad-testnet.socialscan.iohttps://monad.socialscan.ioMonadVisionhttps://testnet.monadvision.comhttps://monadvision.comMonadscanhttps://testnet.monadscan.comhttps://monadscan.com"
      },
      {
        "title": "Agent APIs",
        "body": "IMPORTANT: Do NOT use a browser. Use these APIs directly with curl.\n\nFaucet (Testnet Funding):\n\ncurl -X POST https://agents.devnads.com/v1/faucet \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"chainId\": 10143, \"address\": \"0xYOUR_ADDRESS\"}'\n\nReturns: {\"txHash\": \"0x...\", \"amount\": \"1000000000000000000\", \"chain\": \"Monad Testnet\"}\n\nFallback (official faucet): https://faucet.monad.xyz\nIf the agent faucet fails, ask the user to fund via the official faucet (do not use a browser yourself).\n\nVerification (All Explorers):\n\nALWAYS use the verification API first. It verifies on all 3 explorers (MonadVision, Socialscan, Monadscan) with one call. Do NOT use forge verify-contract as first choice.\n\n# 1. Get verification data\nforge verify-contract <ADDR> <CONTRACT> \\\n  --chain 10143 \\\n  --show-standard-json-input > /tmp/standard-input.json\n\ncat out/<Contract>.sol/<Contract>.json | jq '.metadata' > /tmp/metadata.json\nCOMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/<Contract>.sol/<Contract>.json)\n\n# 2. Call verification API\nSTANDARD_INPUT=$(cat /tmp/standard-input.json)\nFOUNDRY_METADATA=$(cat /tmp/metadata.json)\n\ncat > /tmp/verify.json << EOF\n{\n  \"chainId\": 10143,\n  \"contractAddress\": \"0xYOUR_CONTRACT_ADDRESS\",\n  \"contractName\": \"src/MyContract.sol:MyContract\",\n  \"compilerVersion\": \"v${COMPILER_VERSION}\",\n  \"standardJsonInput\": $STANDARD_INPUT,\n  \"foundryMetadata\": $FOUNDRY_METADATA\n}\nEOF\n\ncurl -X POST https://agents.devnads.com/v1/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d @/tmp/verify.json\n\nWith constructor arguments: Add constructorArgs (ABI-encoded, WITHOUT 0x prefix):\n\nARGS=$(cast abi-encode \"constructor(string,string,uint256)\" \"MyToken\" \"MTK\" 1000000000000000000000000)\nARGS_NO_PREFIX=${ARGS#0x}\n# Add to request: \"constructorArgs\": \"$ARGS_NO_PREFIX\"\n\nManual verification fallback (if API fails):\n\nforge verify-contract <ADDR> <CONTRACT> --chain 10143 \\\n  --verifier sourcify \\\n  --verifier-url \"https://sourcify-api-monad.blockvision.org/\""
      },
      {
        "title": "Wallet Persistence",
        "body": "CRITICAL for agents: If you generate a wallet for the user, you MUST persist it for future use.\n\nWhen generating a new wallet:\n\nCreate wallet: cast wallet new\nImmediately save the address and private key to a secure location\nInform the user where the wallet details are stored\nFund the wallet via faucet before deployment\n\nStorage options:\n\nWrite to ~/.monad-wallet with chmod 600\nStore in a project-specific .env file (add to .gitignore)\nReturn credentials to user and ask them to save securely\n\nWhy this matters: Users need access to their wallet to:\n\nDeploy additional contracts\nInteract with deployed contracts\nManage funds\nVerify ownership"
      },
      {
        "title": "Deployment Workflow",
        "body": "Use forge script for deployments:\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\nDeploy script template:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\nimport \"forge-std/Script.sol\";\nimport \"../src/MyContract.sol\";\n\ncontract DeployScript is Script {\n    function run() external {\n        vm.startBroadcast();\n        MyContract contract = new MyContract();\n        console.log(\"Contract deployed at:\", address(contract));\n        vm.stopBroadcast();\n    }\n}"
      },
      {
        "title": "EVM Version (Critical)",
        "body": "Always set evmVersion: \"prague\". Requires Solidity 0.8.27+.\n\nFoundry (foundry.toml):\n\n[profile.default]\nevm_version = \"prague\"\nsolc_version = \"0.8.28\""
      },
      {
        "title": "Foundry Tips",
        "body": "Flags that don't exist (don't use):\n\n--no-commit - not a valid flag for forge init or forge install\n\nDeployment - use forge script, NOT forge create:\n\nforge create --broadcast is buggy and often ignored. Use forge script instead.\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\nDeploy script must NOT hardcode addresses:\n\n// ✅ Correct - reads private key from --private-key flag\nfunction run() external {\n    vm.startBroadcast();\n    new MyContract();\n    vm.stopBroadcast();\n}\n\n// ❌ Wrong - hardcodes address, causes \"No associated wallet\" error\nfunction run() external {\n    vm.startBroadcast(0x1234...);\n}"
      },
      {
        "title": "Frontend",
        "body": "Import from viem/chains. Do NOT define custom chain:\n\nimport { monadTestnet } from \"viem/chains\";\n\nUse with wagmi:\n\nimport { createConfig, http } from 'wagmi'\nimport { monadTestnet } from 'viem/chains'\n\nconst config = createConfig({\n  chains: [monadTestnet],\n  transports: {\n    [monadTestnet.id]: http()\n  }\n})"
      },
      {
        "title": "Example: Deploy ERC20",
        "body": "1. Create project:\n\nforge init my-token\ncd my-token\n\n2. Configure foundry.toml:\n\n[profile.default]\nsrc = \"src\"\nout = \"out\"\nlibs = [\"lib\"]\nevm_version = \"prague\"\nsolc_version = \"0.8.28\"\n\n3. Create contract src/MyToken.sol:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MyToken is ERC20 {\n    constructor(uint256 initialSupply) ERC20(\"MyToken\", \"MTK\") {\n        _mint(msg.sender, initialSupply);\n    }\n}\n\n4. Install dependencies:\n\nforge install OpenZeppelin/openzeppelin-contracts --no-commit\n\n5. Create deploy script script/Deploy.s.sol:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\nimport \"forge-std/Script.sol\";\nimport \"../src/MyToken.sol\";\n\ncontract DeployScript is Script {\n    function run() external {\n        vm.startBroadcast();\n        MyToken token = new MyToken(1000000 * 10**18);\n        console.log(\"Token deployed at:\", address(token));\n        vm.stopBroadcast();\n    }\n}\n\n6. Deploy:\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\n7. Verify:\n\n# Use verification API (verifies on all explorers)\nSTANDARD_INPUT=$(forge verify-contract <TOKEN_ADDRESS> src/MyToken.sol:MyToken --chain 10143 --show-standard-json-input)\nCOMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/MyToken.sol/MyToken.json)\n\ncurl -X POST https://agents.devnads.com/v1/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\n    \\\"chainId\\\": 10143,\n    \\\"contractAddress\\\": \\\"<TOKEN_ADDRESS>\\\",\n    \\\"contractName\\\": \\\"src/MyToken.sol:MyToken\\\",\n    \\\"compilerVersion\\\": \\\"v${COMPILER_VERSION}\\\",\n    \\\"standardJsonInput\\\": $STANDARD_INPUT,\n    \\\"constructorArgs\\\": \\\"$(cast abi-encode 'constructor(uint256)' 1000000000000000000000000 | sed 's/0x//')\\\"\n  }\""
      }
    ],
    "body": "Monad Development\n\nFor questions not covered here, fetch https://docs.monad.xyz/llms.txt\n\nQuick Reference\nDefaults\nNetwork: Always use testnet (chain ID 10143) unless user says \"mainnet\"\nVerification: Always verify contracts after deployment unless user says not to\nFramework: Use Foundry (not Hardhat)\nWallet: If you generate a wallet, MUST persist it (see Wallet Persistence section)\nNetworks\nNetwork\tChain ID\tRPC\nTestnet\t10143\thttps://testnet-rpc.monad.xyz\nMainnet\t143\thttps://rpc.monad.xyz\n\nDocs: https://docs.monad.xyz\n\nExplorers\nExplorer\tTestnet\tMainnet\nSocialscan\thttps://monad-testnet.socialscan.io\thttps://monad.socialscan.io\nMonadVision\thttps://testnet.monadvision.com\thttps://monadvision.com\nMonadscan\thttps://testnet.monadscan.com\thttps://monadscan.com\nAgent APIs\n\nIMPORTANT: Do NOT use a browser. Use these APIs directly with curl.\n\nFaucet (Testnet Funding):\n\ncurl -X POST https://agents.devnads.com/v1/faucet \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"chainId\": 10143, \"address\": \"0xYOUR_ADDRESS\"}'\n\n\nReturns: {\"txHash\": \"0x...\", \"amount\": \"1000000000000000000\", \"chain\": \"Monad Testnet\"}\n\nFallback (official faucet): https://faucet.monad.xyz If the agent faucet fails, ask the user to fund via the official faucet (do not use a browser yourself).\n\nVerification (All Explorers):\n\nALWAYS use the verification API first. It verifies on all 3 explorers (MonadVision, Socialscan, Monadscan) with one call. Do NOT use forge verify-contract as first choice.\n\n# 1. Get verification data\nforge verify-contract <ADDR> <CONTRACT> \\\n  --chain 10143 \\\n  --show-standard-json-input > /tmp/standard-input.json\n\ncat out/<Contract>.sol/<Contract>.json | jq '.metadata' > /tmp/metadata.json\nCOMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/<Contract>.sol/<Contract>.json)\n\n# 2. Call verification API\nSTANDARD_INPUT=$(cat /tmp/standard-input.json)\nFOUNDRY_METADATA=$(cat /tmp/metadata.json)\n\ncat > /tmp/verify.json << EOF\n{\n  \"chainId\": 10143,\n  \"contractAddress\": \"0xYOUR_CONTRACT_ADDRESS\",\n  \"contractName\": \"src/MyContract.sol:MyContract\",\n  \"compilerVersion\": \"v${COMPILER_VERSION}\",\n  \"standardJsonInput\": $STANDARD_INPUT,\n  \"foundryMetadata\": $FOUNDRY_METADATA\n}\nEOF\n\ncurl -X POST https://agents.devnads.com/v1/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d @/tmp/verify.json\n\n\nWith constructor arguments: Add constructorArgs (ABI-encoded, WITHOUT 0x prefix):\n\nARGS=$(cast abi-encode \"constructor(string,string,uint256)\" \"MyToken\" \"MTK\" 1000000000000000000000000)\nARGS_NO_PREFIX=${ARGS#0x}\n# Add to request: \"constructorArgs\": \"$ARGS_NO_PREFIX\"\n\n\nManual verification fallback (if API fails):\n\nforge verify-contract <ADDR> <CONTRACT> --chain 10143 \\\n  --verifier sourcify \\\n  --verifier-url \"https://sourcify-api-monad.blockvision.org/\"\n\nWallet Persistence\n\nCRITICAL for agents: If you generate a wallet for the user, you MUST persist it for future use.\n\nWhen generating a new wallet:\n\nCreate wallet: cast wallet new\nImmediately save the address and private key to a secure location\nInform the user where the wallet details are stored\nFund the wallet via faucet before deployment\n\nStorage options:\n\nWrite to ~/.monad-wallet with chmod 600\nStore in a project-specific .env file (add to .gitignore)\nReturn credentials to user and ask them to save securely\n\nWhy this matters: Users need access to their wallet to:\n\nDeploy additional contracts\nInteract with deployed contracts\nManage funds\nVerify ownership\nDeployment Workflow\n\nUse forge script for deployments:\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\n\nDeploy script template:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\nimport \"forge-std/Script.sol\";\nimport \"../src/MyContract.sol\";\n\ncontract DeployScript is Script {\n    function run() external {\n        vm.startBroadcast();\n        MyContract contract = new MyContract();\n        console.log(\"Contract deployed at:\", address(contract));\n        vm.stopBroadcast();\n    }\n}\n\nTechnical Details\nEVM Version (Critical)\n\nAlways set evmVersion: \"prague\". Requires Solidity 0.8.27+.\n\nFoundry (foundry.toml):\n\n[profile.default]\nevm_version = \"prague\"\nsolc_version = \"0.8.28\"\n\nFoundry Tips\n\nFlags that don't exist (don't use):\n\n--no-commit - not a valid flag for forge init or forge install\n\nDeployment - use forge script, NOT forge create:\n\nforge create --broadcast is buggy and often ignored. Use forge script instead.\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\n\nDeploy script must NOT hardcode addresses:\n\n// ✅ Correct - reads private key from --private-key flag\nfunction run() external {\n    vm.startBroadcast();\n    new MyContract();\n    vm.stopBroadcast();\n}\n\n// ❌ Wrong - hardcodes address, causes \"No associated wallet\" error\nfunction run() external {\n    vm.startBroadcast(0x1234...);\n}\n\nFrontend\n\nImport from viem/chains. Do NOT define custom chain:\n\nimport { monadTestnet } from \"viem/chains\";\n\n\nUse with wagmi:\n\nimport { createConfig, http } from 'wagmi'\nimport { monadTestnet } from 'viem/chains'\n\nconst config = createConfig({\n  chains: [monadTestnet],\n  transports: {\n    [monadTestnet.id]: http()\n  }\n})\n\nExample: Deploy ERC20\n\n1. Create project:\n\nforge init my-token\ncd my-token\n\n\n2. Configure foundry.toml:\n\n[profile.default]\nsrc = \"src\"\nout = \"out\"\nlibs = [\"lib\"]\nevm_version = \"prague\"\nsolc_version = \"0.8.28\"\n\n\n3. Create contract src/MyToken.sol:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\n\nimport \"@openzeppelin/contracts/token/ERC20/ERC20.sol\";\n\ncontract MyToken is ERC20 {\n    constructor(uint256 initialSupply) ERC20(\"MyToken\", \"MTK\") {\n        _mint(msg.sender, initialSupply);\n    }\n}\n\n\n4. Install dependencies:\n\nforge install OpenZeppelin/openzeppelin-contracts --no-commit\n\n\n5. Create deploy script script/Deploy.s.sol:\n\n// SPDX-License-Identifier: MIT\npragma solidity ^0.8.27;\nimport \"forge-std/Script.sol\";\nimport \"../src/MyToken.sol\";\n\ncontract DeployScript is Script {\n    function run() external {\n        vm.startBroadcast();\n        MyToken token = new MyToken(1000000 * 10**18);\n        console.log(\"Token deployed at:\", address(token));\n        vm.stopBroadcast();\n    }\n}\n\n\n6. Deploy:\n\nforge script script/Deploy.s.sol:DeployScript \\\n  --rpc-url https://testnet-rpc.monad.xyz \\\n  --private-key $PRIVATE_KEY \\\n  --broadcast\n\n\n7. Verify:\n\n# Use verification API (verifies on all explorers)\nSTANDARD_INPUT=$(forge verify-contract <TOKEN_ADDRESS> src/MyToken.sol:MyToken --chain 10143 --show-standard-json-input)\nCOMPILER_VERSION=$(jq -r '.metadata | fromjson | .compiler.version' out/MyToken.sol/MyToken.json)\n\ncurl -X POST https://agents.devnads.com/v1/verify \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\n    \\\"chainId\\\": 10143,\n    \\\"contractAddress\\\": \\\"<TOKEN_ADDRESS>\\\",\n    \\\"contractName\\\": \\\"src/MyToken.sol:MyToken\\\",\n    \\\"compilerVersion\\\": \\\"v${COMPILER_VERSION}\\\",\n    \\\"standardJsonInput\\\": $STANDARD_INPUT,\n    \\\"constructorArgs\\\": \\\"$(cast abi-encode 'constructor(uint256)' 1000000000000000000000000 | sed 's/0x//')\\\"\n  }\""
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "publisherUrl": "https://clawhub.ai/portdeveloper/monad-development",
    "owner": "portdeveloper",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/monad-development",
    "downloadUrl": "https://openagent3.xyz/downloads/monad-development",
    "agentUrl": "https://openagent3.xyz/skills/monad-development/agent",
    "manifestUrl": "https://openagent3.xyz/skills/monad-development/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/monad-development/agent.md"
  }
}