{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openfunderse-strategy",
    "name": "OpenFunderse Strategy",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/wiimdy/openfunderse-strategy",
    "canonicalUrl": "https://clawhub.ai/wiimdy/openfunderse-strategy",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openfunderse-strategy",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openfunderse-strategy",
    "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/openfunderse-strategy"
    },
    "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/openfunderse-strategy",
    "agentPageUrl": "https://openagent3.xyz/skills/openfunderse-strategy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openfunderse-strategy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openfunderse-strategy/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": "Participant MoltBot Skill",
        "body": "Participant role proposes and validates AllocationClaimV1 only."
      },
      {
        "title": "Security / Consent Notes (Read First)",
        "body": "Installing via npx @wiimdy/openfunderse@2.0.0 ... executes code fetched from npm. Prefer pinning a known version (as shown) and reviewing the package source before running in production.\nPARTICIPANT_PRIVATE_KEY is highly sensitive. Use a dedicated wallet key for this bot; never reuse treasury/admin keys.\nbot-init is a destructive rotation tool: it generates a fresh wallet, updates .env.participant, and stores wallet backups under ~/.openclaw/workspace/openfunderse/wallets.\nBy default, install and bot-init also sync env vars into ~/.openclaw/openclaw.json and bot-init runs openclaw gateway restart. This mutates global OpenClaw runtime state and can affect other skills.\n\nUse --no-sync-openclaw-env for file-only behavior.\nUse --no-restart-openclaw-gateway to avoid restarting the gateway.\nBefore mutating global config, back up ~/.openclaw/openclaw.json."
      },
      {
        "title": "Quick Start",
        "body": "Install (pick one). You do not need to run both:\n\nManual (direct installer; run in a Node project dir, or npm init -y first):\n\nnpm init -y && npx @wiimdy/openfunderse@2.0.0 install openfunderse-participant --with-runtime\n\nClawHub:\n\nnpx clawhub@latest install openfunderse-participant\n\nOptional: create or rotate a dedicated participant signer key.\n\nIf you already have a key, set PARTICIPANT_PRIVATE_KEY and PARTICIPANT_ADDRESS directly in OpenClaw env (/home/ubuntu/.openclaw/openclaw.json -> env.vars) or in ~/.openclaw/workspace/.env.participant. You do not need to run bot-init.\n\nIf you want the installer to generate a new wallet and write it into the role env file:\n\nnpx @wiimdy/openfunderse@2.0.0 bot-init \\\n  --skill-name participant \\\n  --yes \\\n  --no-restart-openclaw-gateway\n\nbot-init updates an existing .env.participant.\nIf the env file is missing, run install first (without --no-init-env) or pass --env-path.\nIf PARTICIPANT_PRIVATE_KEY is already set (not a placeholder), re-run with --force to rotate."
      },
      {
        "title": "Environment Source of Truth (Hard Rule)",
        "body": "In OpenClaw runtime on Ubuntu, treat /home/ubuntu/.openclaw/openclaw.json (env.vars) as the canonical env source.\nDo not require manual .env sourcing for normal skill execution.\nIf .env* and openclaw.json disagree, use openclaw.json values.\nWhen user asks env setup, direct them to update openclaw.json first.\n\nOptional local shell export (debug only):\n\nset -a; source ~/.openclaw/workspace/.env.participant; set +a\n\nThis step is not required for normal OpenClaw skill execution.\n\nTelegram slash commands:\n\nNote: Telegram integration is handled by your OpenClaw gateway. This pack does not require a Telegram bot token; configure Telegram credentials at the gateway layer.\n\n/allocation --fund-id <id> --epoch-id <n> --target-weights <w1,w2,...> [--verify] [--submit]\n/allocation --claim-file <path> [--verify] [--submit]\n/join --room-id <id>\n/deposit --amount <wei> [--vault-address <0x...>] [--native] [--submit]\n/withdraw --amount <wei> [--vault-address <0x...>] [--native] [--submit]\n/redeem --shares <wei> [--vault-address <0x...>] [--submit]\n/vault_info [--vault-address <0x...>] [--account <0x...>]\n/participant_daemon --fund-id <id> --strategy <A|B|C> [--interval-sec <n>] [--epoch-source <relayer|fixed>] [--epoch-id <n>] [--submit]\n\nNotes:\n\nallocation will auto-validate on submit (--submit implies verify).\nsubmit_allocation (legacy) validates the claim hash first; without --submit it is validation-only dry-run.\n\nBotFather /setcommands (copy-paste ready):\n\nstart - Show quick start\nhelp - Show command help\nallocation - Mine (optional verify) and optionally submit allocation claim\njoin - Register this bot as a participant for the fund mapped to the room id\ndeposit - Deposit native MON or ERC-20 into vault\nwithdraw - Withdraw assets from vault (native or ERC-20)\nredeem - Burn vault shares and receive assets\nvault_info - Show vault status and user PnL\nparticipant_daemon - Run participant allocation daemon\n\nNotes:\n\nSlash parser accepts underscores, so /participant_daemon equals /participant-daemon.\nkey=value style is also accepted (fund_id=demo-fund).\nOn first install, register these commands in Telegram via @BotFather -> /setcommands.\n\nOpenClaw note:\n\ninstall / bot-init sync env keys into ~/.openclaw/openclaw.json (env.vars) by default.\nbot-init also runs openclaw gateway restart after a successful env sync, so the gateway picks up updates.\nUse --no-sync-openclaw-env for file-only behavior, or --no-restart-openclaw-gateway to skip the restart.\nIf env still looks stale: run openclaw gateway restart and verify values in /home/ubuntu/.openclaw/openclaw.json.\n\nNote:\n\nThe scaffold includes a temporary private key placeholder by default.\nAlways run bot-init before funding or running production actions.\nbot-init generates a new wallet (private key + address) and writes it into the role env file."
      },
      {
        "title": "Relayer Bot Authentication (Signature)",
        "body": "This skill authenticates relayer write APIs with an EIP-191 message signature (no BOT_API_KEY).\n\nMessage format:\n\nopenfunderse:auth:<botId>:<timestamp>:<nonce>\n\nRequired headers:\n\nx-bot-id: BOT_ID\nx-bot-signature: <0x...>\nx-bot-timestamp: <unix seconds>\nx-bot-nonce: <uuid/random>\n\nRelayer verifies this signature against Supabase fund_bots.bot_address.\n\nParticipant bot registration can be done by:\n\nParticipant: POST /api/v1/rooms/{roomId}/join (recommended for Telegram groups)\nStrategy: POST /api/v1/funds/{fundId}/bots/register (direct registration)\n\nIf the participant bot is not registered for the fund, relayer will reject participant write APIs with 401/403.\n\npropose_allocation outputs canonical allocation claim:\n\nclaimVersion: \"v1\"\nfundId, epochId, participant\ntargetWeights[] (integer, non-negative, sum > 0)\nhorizonSec, nonce, submittedAt\n\nNo crawl/evidence/sourceRef schema is used.\n\nVector mapping rule:\n\ntargetWeights[i] maps to strategy riskPolicy.allowlistTokens[i].\nParticipants must submit weights in the same token order used by the strategy allowlist."
      },
      {
        "title": "Daemon mode (auto-claim)",
        "body": "For MVP, the participant runtime supports an always-on daemon that:\n\nreads NadFun testnet signals (quote/progress/buy logs),\ncomputes targetWeights[] using a fixed allowlist order,\nsubmits AllocationClaimV1 to the relayer on a timer.\n\nUse the --strategy command flag:\n\nA: momentum (buy pressure)\nB: graduation proximity (progress)\nC: impact-aware (quote-based)"
      },
      {
        "title": "Submission safety gates",
        "body": "submit_allocation is guarded by default:\n\nPARTICIPANT_REQUIRE_EXPLICIT_SUBMIT=true requires explicit submit=true.\nPARTICIPANT_AUTO_SUBMIT=true must be enabled for network transmission.\nRELAYER_URL host is checked by PARTICIPANT_TRUSTED_RELAYER_HOSTS when set.\nRELAYER_URL must use https unless PARTICIPANT_ALLOW_HTTP_RELAYER=true (local development only).\n\nIf gate is closed, return decision=READY (no submit)."
      },
      {
        "title": "propose_allocation",
        "body": "{\n  \"taskType\": \"propose_allocation\",\n  \"fundId\": \"string\",\n  \"roomId\": \"string\",\n  \"epochId\": \"number\",\n  \"allocation\": {\n    \"participant\": \"0x... optional\",\n    \"targetWeights\": [\"7000\", \"3000\"],\n    \"horizonSec\": 3600,\n    \"nonce\": 1739500000\n  }\n}"
      },
      {
        "title": "submit_allocation",
        "body": "Validates the claim hash first, then submits to relayer if --submit is passed.\nWithout --submit, returns validation-only dry-run result.\n\n{\n  \"taskType\": \"submit_allocation\",\n  \"fundId\": \"string\",\n  \"epochId\": \"number\",\n  \"observation\": \"propose_allocation output observation\",\n  \"submit\": true\n}"
      },
      {
        "title": "Rules",
        "body": "Supported Tasks Only: Use only propose_allocation, submit_allocation (validates automatically before submission).\nSchema Rule: Claim schema is AllocationClaimV1 only (claimVersion, fundId, epochId, participant, targetWeights, horizonSec, nonce, submittedAt).\nWeights Rule: targetWeights must be integer, non-negative, non-empty, and sum > 0.\nIndex Mapping Rule: targetWeights[i] MUST map to strategy riskPolicy.allowlistTokens[i] in the same order.\nScope Validation: If subject fundId/epochId differs from task scope, return FAIL.\nHash Validation: For CLAIM, recompute canonical hash via SDK and compare with subjectHash; mismatch returns FAIL.\nSubmit Endpoint: submit_allocation sends claim to relayer POST /api/v1/funds/{fundId}/claims.\nNo Implicit Submit: Submit only when explicit submit gate is satisfied.\nTrusted Relayer: In production, set PARTICIPANT_TRUSTED_RELAYER_HOSTS and avoid arbitrary relayer URLs.\nKey Hygiene: Use dedicated participant keys only; never use custody/admin keys.\nEnv Source Priority: Resolve runtime env from /home/ubuntu/.openclaw/openclaw.json (env.vars) before local .env* files.\nLegacy Tasks Disabled: Do not use mine_claim, verify_claim_or_intent_validity, submit_mined_claim, attest_claim."
      }
    ],
    "body": "Participant MoltBot Skill\n\nParticipant role proposes and validates AllocationClaimV1 only.\n\nSecurity / Consent Notes (Read First)\nInstalling via npx @wiimdy/openfunderse@2.0.0 ... executes code fetched from npm. Prefer pinning a known version (as shown) and reviewing the package source before running in production.\nPARTICIPANT_PRIVATE_KEY is highly sensitive. Use a dedicated wallet key for this bot; never reuse treasury/admin keys.\nbot-init is a destructive rotation tool: it generates a fresh wallet, updates .env.participant, and stores wallet backups under ~/.openclaw/workspace/openfunderse/wallets.\nBy default, install and bot-init also sync env vars into ~/.openclaw/openclaw.json and bot-init runs openclaw gateway restart. This mutates global OpenClaw runtime state and can affect other skills.\nUse --no-sync-openclaw-env for file-only behavior.\nUse --no-restart-openclaw-gateway to avoid restarting the gateway.\nBefore mutating global config, back up ~/.openclaw/openclaw.json.\nQuick Start\nInstall (pick one). You do not need to run both:\n\nManual (direct installer; run in a Node project dir, or npm init -y first):\n\nnpm init -y && npx @wiimdy/openfunderse@2.0.0 install openfunderse-participant --with-runtime\n\n\nClawHub:\n\nnpx clawhub@latest install openfunderse-participant\n\nOptional: create or rotate a dedicated participant signer key.\n\nIf you already have a key, set PARTICIPANT_PRIVATE_KEY and PARTICIPANT_ADDRESS directly in OpenClaw env (/home/ubuntu/.openclaw/openclaw.json -> env.vars) or in ~/.openclaw/workspace/.env.participant. You do not need to run bot-init.\n\nIf you want the installer to generate a new wallet and write it into the role env file:\n\nnpx @wiimdy/openfunderse@2.0.0 bot-init \\\n  --skill-name participant \\\n  --yes \\\n  --no-restart-openclaw-gateway\n\n\nbot-init updates an existing .env.participant.\nIf the env file is missing, run install first (without --no-init-env) or pass --env-path. If PARTICIPANT_PRIVATE_KEY is already set (not a placeholder), re-run with --force to rotate.\n\nEnvironment Source of Truth (Hard Rule)\nIn OpenClaw runtime on Ubuntu, treat /home/ubuntu/.openclaw/openclaw.json (env.vars) as the canonical env source.\nDo not require manual .env sourcing for normal skill execution.\nIf .env* and openclaw.json disagree, use openclaw.json values.\nWhen user asks env setup, direct them to update openclaw.json first.\nOptional local shell export (debug only):\nset -a; source ~/.openclaw/workspace/.env.participant; set +a\n\n\nThis step is not required for normal OpenClaw skill execution.\n\nTelegram slash commands:\n\nNote: Telegram integration is handled by your OpenClaw gateway. This pack does not require a Telegram bot token; configure Telegram credentials at the gateway layer.\n\n/allocation --fund-id <id> --epoch-id <n> --target-weights <w1,w2,...> [--verify] [--submit]\n/allocation --claim-file <path> [--verify] [--submit]\n/join --room-id <id>\n/deposit --amount <wei> [--vault-address <0x...>] [--native] [--submit]\n/withdraw --amount <wei> [--vault-address <0x...>] [--native] [--submit]\n/redeem --shares <wei> [--vault-address <0x...>] [--submit]\n/vault_info [--vault-address <0x...>] [--account <0x...>]\n/participant_daemon --fund-id <id> --strategy <A|B|C> [--interval-sec <n>] [--epoch-source <relayer|fixed>] [--epoch-id <n>] [--submit]\n\n\nNotes:\n\nallocation will auto-validate on submit (--submit implies verify).\nsubmit_allocation (legacy) validates the claim hash first; without --submit it is validation-only dry-run.\n\nBotFather /setcommands (copy-paste ready):\n\nstart - Show quick start\nhelp - Show command help\nallocation - Mine (optional verify) and optionally submit allocation claim\njoin - Register this bot as a participant for the fund mapped to the room id\ndeposit - Deposit native MON or ERC-20 into vault\nwithdraw - Withdraw assets from vault (native or ERC-20)\nredeem - Burn vault shares and receive assets\nvault_info - Show vault status and user PnL\nparticipant_daemon - Run participant allocation daemon\n\n\nNotes:\n\nSlash parser accepts underscores, so /participant_daemon equals /participant-daemon.\nkey=value style is also accepted (fund_id=demo-fund).\nOn first install, register these commands in Telegram via @BotFather -> /setcommands.\n\nOpenClaw note:\n\ninstall / bot-init sync env keys into ~/.openclaw/openclaw.json (env.vars) by default.\nbot-init also runs openclaw gateway restart after a successful env sync, so the gateway picks up updates.\nUse --no-sync-openclaw-env for file-only behavior, or --no-restart-openclaw-gateway to skip the restart.\nIf env still looks stale: run openclaw gateway restart and verify values in /home/ubuntu/.openclaw/openclaw.json.\n\nNote:\n\nThe scaffold includes a temporary private key placeholder by default.\nAlways run bot-init before funding or running production actions.\nbot-init generates a new wallet (private key + address) and writes it into the role env file.\nRelayer Bot Authentication (Signature)\n\nThis skill authenticates relayer write APIs with an EIP-191 message signature (no BOT_API_KEY).\n\nMessage format:\n\nopenfunderse:auth:<botId>:<timestamp>:<nonce>\n\nRequired headers:\n\nx-bot-id: BOT_ID\nx-bot-signature: <0x...>\nx-bot-timestamp: <unix seconds>\nx-bot-nonce: <uuid/random>\n\nRelayer verifies this signature against Supabase fund_bots.bot_address.\n\nParticipant bot registration can be done by:\n\nParticipant: POST /api/v1/rooms/{roomId}/join (recommended for Telegram groups)\nStrategy: POST /api/v1/funds/{fundId}/bots/register (direct registration)\n\nIf the participant bot is not registered for the fund, relayer will reject participant write APIs with 401/403.\n\npropose_allocation outputs canonical allocation claim:\n\nclaimVersion: \"v1\"\nfundId, epochId, participant\ntargetWeights[] (integer, non-negative, sum > 0)\nhorizonSec, nonce, submittedAt\n\nNo crawl/evidence/sourceRef schema is used.\n\nVector mapping rule:\n\ntargetWeights[i] maps to strategy riskPolicy.allowlistTokens[i].\nParticipants must submit weights in the same token order used by the strategy allowlist.\nDaemon mode (auto-claim)\n\nFor MVP, the participant runtime supports an always-on daemon that:\n\nreads NadFun testnet signals (quote/progress/buy logs),\ncomputes targetWeights[] using a fixed allowlist order,\nsubmits AllocationClaimV1 to the relayer on a timer.\n\nUse the --strategy command flag:\n\nA: momentum (buy pressure)\nB: graduation proximity (progress)\nC: impact-aware (quote-based)\nSubmission safety gates\n\nsubmit_allocation is guarded by default:\n\nPARTICIPANT_REQUIRE_EXPLICIT_SUBMIT=true requires explicit submit=true.\nPARTICIPANT_AUTO_SUBMIT=true must be enabled for network transmission.\nRELAYER_URL host is checked by PARTICIPANT_TRUSTED_RELAYER_HOSTS when set.\nRELAYER_URL must use https unless PARTICIPANT_ALLOW_HTTP_RELAYER=true (local development only).\n\nIf gate is closed, return decision=READY (no submit).\n\nInput contracts\npropose_allocation\n{\n  \"taskType\": \"propose_allocation\",\n  \"fundId\": \"string\",\n  \"roomId\": \"string\",\n  \"epochId\": \"number\",\n  \"allocation\": {\n    \"participant\": \"0x... optional\",\n    \"targetWeights\": [\"7000\", \"3000\"],\n    \"horizonSec\": 3600,\n    \"nonce\": 1739500000\n  }\n}\n\nsubmit_allocation\n\nValidates the claim hash first, then submits to relayer if --submit is passed. Without --submit, returns validation-only dry-run result.\n\n{\n  \"taskType\": \"submit_allocation\",\n  \"fundId\": \"string\",\n  \"epochId\": \"number\",\n  \"observation\": \"propose_allocation output observation\",\n  \"submit\": true\n}\n\nRules\nSupported Tasks Only: Use only propose_allocation, submit_allocation (validates automatically before submission).\nSchema Rule: Claim schema is AllocationClaimV1 only (claimVersion, fundId, epochId, participant, targetWeights, horizonSec, nonce, submittedAt).\nWeights Rule: targetWeights must be integer, non-negative, non-empty, and sum > 0.\nIndex Mapping Rule: targetWeights[i] MUST map to strategy riskPolicy.allowlistTokens[i] in the same order.\nScope Validation: If subject fundId/epochId differs from task scope, return FAIL.\nHash Validation: For CLAIM, recompute canonical hash via SDK and compare with subjectHash; mismatch returns FAIL.\nSubmit Endpoint: submit_allocation sends claim to relayer POST /api/v1/funds/{fundId}/claims.\nNo Implicit Submit: Submit only when explicit submit gate is satisfied.\nTrusted Relayer: In production, set PARTICIPANT_TRUSTED_RELAYER_HOSTS and avoid arbitrary relayer URLs.\nKey Hygiene: Use dedicated participant keys only; never use custody/admin keys.\nEnv Source Priority: Resolve runtime env from /home/ubuntu/.openclaw/openclaw.json (env.vars) before local .env* files.\nLegacy Tasks Disabled: Do not use mine_claim, verify_claim_or_intent_validity, submit_mined_claim, attest_claim."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/wiimdy/openfunderse-strategy",
    "publisherUrl": "https://clawhub.ai/wiimdy/openfunderse-strategy",
    "owner": "wiimdy",
    "version": "2.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openfunderse-strategy",
    "downloadUrl": "https://openagent3.xyz/downloads/openfunderse-strategy",
    "agentUrl": "https://openagent3.xyz/skills/openfunderse-strategy/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openfunderse-strategy/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openfunderse-strategy/agent.md"
  }
}