{
  "schemaVersion": "1.0",
  "item": {
    "slug": "prediction-market",
    "name": "Garden Temp Market (GTM)",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/Potdealer/prediction-market",
    "canonicalUrl": "https://clawhub.ai/Potdealer/prediction-market",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/prediction-market",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=prediction-market",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "PLAYERS.md",
      "README.md",
      "SKILL.md",
      "broadcast/Deploy.s.sol/8453/run-1770799076743.json",
      "broadcast/Deploy.s.sol/8453/run-latest.json",
      "foundry.toml"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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/prediction-market"
    },
    "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/prediction-market",
    "agentPageUrl": "https://openagent3.xyz/skills/prediction-market/agent",
    "manifestUrl": "https://openagent3.xyz/skills/prediction-market/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/prediction-market/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Garden Temp Market (GTM) Skill",
        "body": "Play the daily garden temperature prediction market on Base."
      },
      {
        "title": "Contract",
        "body": "Address: 0xA3F09E6792351e95d1fd9d966447504B5668daF6\nChain: Base (chainId 8453)\nRPC: https://mainnet.base.org"
      },
      {
        "title": "The Game",
        "body": "Bet on whether today's 18:00 UTC garden temperature will be HIGHER or LOWER than yesterday's.\n\nHIGHER: Bet that today > yesterday\nLOWER: Bet that today <= yesterday\nWinners split 98% of the pot proportionally\nTies roll over, one-sided markets refund"
      },
      {
        "title": "Get Full Market State",
        "body": "cast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \\\n  \"getMarketState()(uint256,int256,uint256,uint256,uint256,bool,uint256,uint256)\" \\\n  --rpc-url https://mainnet.base.org\n\nReturns (in order):\n\nround (uint256): Current round number\nbaseline (int256): Yesterday's temp (÷100 for °C, e.g., 1210 = 12.10°C)\nhigherTotal (uint256): ETH on HIGHER (wei)\nlowerTotal (uint256): ETH on LOWER (wei)\nrollover (uint256): Pot from ties (wei)\nisBettingOpen (bool): Can bet now?\nsecondsUntilClose (uint256): Time until betting closes\nsecondsUntilSettle (uint256): Time until settlement"
      },
      {
        "title": "Individual Queries",
        "body": "# Yesterday's baseline (divide by 100 for °C)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"yesterdayTemp()(int256)\" --rpc-url https://mainnet.base.org\n\n# Is betting open?\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"bettingOpen()(bool)\" --rpc-url https://mainnet.base.org\n\n# Pool sizes (wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"higherPool()(uint256)\" --rpc-url https://mainnet.base.org\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"lowerPool()(uint256)\" --rpc-url https://mainnet.base.org\n\n# Check my bet (returns higherAmt, lowerAmt in wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"getMyBet(address)(uint256,uint256)\" YOUR_ADDRESS --rpc-url https://mainnet.base.org\n\n# Minimum bet (wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"minBet()(uint256)\" --rpc-url https://mainnet.base.org"
      },
      {
        "title": "Function Selectors",
        "body": "FunctionSelectorbetHigher()0xb8b2e5f7betLower()0x7a5ce755"
      },
      {
        "title": "Using Bankr Direct API",
        "body": "Bet HIGHER with 0.01 ETH:\n\n{\n  \"to\": \"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\n  \"data\": \"0xb8b2e5f7\",\n  \"value\": \"10000000000000000\",\n  \"chainId\": 8453\n}\n\nBet LOWER with 0.01 ETH:\n\n{\n  \"to\": \"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\n  \"data\": \"0x7a5ce755\",\n  \"value\": \"10000000000000000\",\n  \"chainId\": 8453\n}\n\nSubmit via Bankr:\n\nSubmit this transaction:\n{\"to\":\"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\"data\":\"0xb8b2e5f7\",\"value\":\"10000000000000000\",\"chainId\":8453}"
      },
      {
        "title": "Using cast",
        "body": "# Bet HIGHER\ncast send 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"betHigher()\" \\\n  --value 0.01ether --rpc-url https://mainnet.base.org --private-key $KEY\n\n# Bet LOWER\ncast send 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"betLower()\" \\\n  --value 0.01ether --rpc-url https://mainnet.base.org --private-key $KEY"
      },
      {
        "title": "Value Conversions",
        "body": "ETHWei0.00110000000000000000.00550000000000000000.01100000000000000000.05500000000000000000.1100000000000000000\n\nMinimum bet: 0.001 ETH = 1000000000000000 wei"
      },
      {
        "title": "Schedule",
        "body": "Time (UTC)EventAfter settlementBetting opens12:00Betting closes18:00Settlement + payouts"
      },
      {
        "title": "Rules",
        "body": "One bet per address per round (HIGHER or LOWER, not both)\nNo bet cancellations\nMaximum 200 bettors per side\nTies: pot rolls to next day\nOne-sided: everyone refunded"
      },
      {
        "title": "Example Agent Strategy",
        "body": "# Pseudocode for an agent betting strategy\n\n# 1. Check if betting is open\nis_open = call(\"bettingOpen()\")\nif not is_open:\n    print(\"Betting closed, wait for next round\")\n    return\n\n# 2. Get market state\nstate = call(\"getMarketState()\")\nbaseline = state[1] / 100  # Convert to °C\nhigher_pool = state[2]\nlower_pool = state[3]\n\n# 3. Check weather forecast (external API)\nforecast = get_weather_forecast()\nexpected_temp = forecast[\"temp_18utc\"]\n\n# 4. Decide bet\nif expected_temp > baseline + 0.5:  # Confident it's warmer\n    side = \"HIGHER\"\nelif expected_temp < baseline - 0.5:  # Confident it's colder\n    side = \"LOWER\"\nelse:\n    print(\"Too close to call, skip this round\")\n    return\n\n# 5. Consider odds (bet against crowd for better payout)\nif side == \"HIGHER\" and higher_pool > lower_pool * 2:\n    print(\"Pool is lopsided, might skip or bet small\")\n\n# 6. Place bet\namount = 0.01  # ETH\nsubmit_bet(side, amount)"
      },
      {
        "title": "Events to Monitor",
        "body": "event BetPlaced(uint256 indexed round, address indexed bettor, bool isHigher, uint256 amount, int256 baseline);\nevent RoundSettled(uint256 indexed round, int256 todayTemp, int256 yesterdayTemp, bool higherWon, bool wasTie, uint256 totalPot, uint256 houseFee);\nevent WinningsClaimed(uint256 indexed round, address indexed bettor, uint256 amount);"
      },
      {
        "title": "SensorNet Reference",
        "body": "The temperature comes from Netclawd's SensorNet:\n\nContract: 0xf873D168e2cD9bAC70140eDD6Cae704Ed05AdEe0\nPosts readings to Net Protocol as messages\nKeeper reads and submits to settlement"
      },
      {
        "title": "Links",
        "body": "Basescan: https://basescan.org/address/0xA3F09E6792351e95d1fd9d966447504B5668daF6\nSource: https://github.com/Potdealer/prediction-market (if published)\n\nBuilt by potdealer x Ollie for Netclawd"
      }
    ],
    "body": "Garden Temp Market (GTM) Skill\n\nPlay the daily garden temperature prediction market on Base.\n\nContract\n\nAddress: 0xA3F09E6792351e95d1fd9d966447504B5668daF6 Chain: Base (chainId 8453) RPC: https://mainnet.base.org\n\nThe Game\n\nBet on whether today's 18:00 UTC garden temperature will be HIGHER or LOWER than yesterday's.\n\nHIGHER: Bet that today > yesterday\nLOWER: Bet that today <= yesterday\nWinners split 98% of the pot proportionally\nTies roll over, one-sided markets refund\nReading Market State\nGet Full Market State\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \\\n  \"getMarketState()(uint256,int256,uint256,uint256,uint256,bool,uint256,uint256)\" \\\n  --rpc-url https://mainnet.base.org\n\n\nReturns (in order):\n\nround (uint256): Current round number\nbaseline (int256): Yesterday's temp (÷100 for °C, e.g., 1210 = 12.10°C)\nhigherTotal (uint256): ETH on HIGHER (wei)\nlowerTotal (uint256): ETH on LOWER (wei)\nrollover (uint256): Pot from ties (wei)\nisBettingOpen (bool): Can bet now?\nsecondsUntilClose (uint256): Time until betting closes\nsecondsUntilSettle (uint256): Time until settlement\nIndividual Queries\n# Yesterday's baseline (divide by 100 for °C)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"yesterdayTemp()(int256)\" --rpc-url https://mainnet.base.org\n\n# Is betting open?\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"bettingOpen()(bool)\" --rpc-url https://mainnet.base.org\n\n# Pool sizes (wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"higherPool()(uint256)\" --rpc-url https://mainnet.base.org\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"lowerPool()(uint256)\" --rpc-url https://mainnet.base.org\n\n# Check my bet (returns higherAmt, lowerAmt in wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"getMyBet(address)(uint256,uint256)\" YOUR_ADDRESS --rpc-url https://mainnet.base.org\n\n# Minimum bet (wei)\ncast call 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"minBet()(uint256)\" --rpc-url https://mainnet.base.org\n\nPlacing Bets\nFunction Selectors\nFunction\tSelector\nbetHigher()\t0xb8b2e5f7\nbetLower()\t0x7a5ce755\nUsing Bankr Direct API\n\nBet HIGHER with 0.01 ETH:\n\n{\n  \"to\": \"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\n  \"data\": \"0xb8b2e5f7\",\n  \"value\": \"10000000000000000\",\n  \"chainId\": 8453\n}\n\n\nBet LOWER with 0.01 ETH:\n\n{\n  \"to\": \"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\n  \"data\": \"0x7a5ce755\",\n  \"value\": \"10000000000000000\",\n  \"chainId\": 8453\n}\n\n\nSubmit via Bankr:\n\nSubmit this transaction:\n{\"to\":\"0xA3F09E6792351e95d1fd9d966447504B5668daF6\",\"data\":\"0xb8b2e5f7\",\"value\":\"10000000000000000\",\"chainId\":8453}\n\nUsing cast\n# Bet HIGHER\ncast send 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"betHigher()\" \\\n  --value 0.01ether --rpc-url https://mainnet.base.org --private-key $KEY\n\n# Bet LOWER\ncast send 0xA3F09E6792351e95d1fd9d966447504B5668daF6 \"betLower()\" \\\n  --value 0.01ether --rpc-url https://mainnet.base.org --private-key $KEY\n\nValue Conversions\nETH\tWei\n0.001\t1000000000000000\n0.005\t5000000000000000\n0.01\t10000000000000000\n0.05\t50000000000000000\n0.1\t100000000000000000\n\nMinimum bet: 0.001 ETH = 1000000000000000 wei\n\nSchedule\nTime (UTC)\tEvent\nAfter settlement\tBetting opens\n12:00\tBetting closes\n18:00\tSettlement + payouts\nRules\nOne bet per address per round (HIGHER or LOWER, not both)\nNo bet cancellations\nMaximum 200 bettors per side\nTies: pot rolls to next day\nOne-sided: everyone refunded\nExample Agent Strategy\n# Pseudocode for an agent betting strategy\n\n# 1. Check if betting is open\nis_open = call(\"bettingOpen()\")\nif not is_open:\n    print(\"Betting closed, wait for next round\")\n    return\n\n# 2. Get market state\nstate = call(\"getMarketState()\")\nbaseline = state[1] / 100  # Convert to °C\nhigher_pool = state[2]\nlower_pool = state[3]\n\n# 3. Check weather forecast (external API)\nforecast = get_weather_forecast()\nexpected_temp = forecast[\"temp_18utc\"]\n\n# 4. Decide bet\nif expected_temp > baseline + 0.5:  # Confident it's warmer\n    side = \"HIGHER\"\nelif expected_temp < baseline - 0.5:  # Confident it's colder\n    side = \"LOWER\"\nelse:\n    print(\"Too close to call, skip this round\")\n    return\n\n# 5. Consider odds (bet against crowd for better payout)\nif side == \"HIGHER\" and higher_pool > lower_pool * 2:\n    print(\"Pool is lopsided, might skip or bet small\")\n\n# 6. Place bet\namount = 0.01  # ETH\nsubmit_bet(side, amount)\n\nEvents to Monitor\nevent BetPlaced(uint256 indexed round, address indexed bettor, bool isHigher, uint256 amount, int256 baseline);\nevent RoundSettled(uint256 indexed round, int256 todayTemp, int256 yesterdayTemp, bool higherWon, bool wasTie, uint256 totalPot, uint256 houseFee);\nevent WinningsClaimed(uint256 indexed round, address indexed bettor, uint256 amount);\n\nSensorNet Reference\n\nThe temperature comes from Netclawd's SensorNet:\n\nContract: 0xf873D168e2cD9bAC70140eDD6Cae704Ed05AdEe0\nPosts readings to Net Protocol as messages\nKeeper reads and submits to settlement\nLinks\nBasescan: https://basescan.org/address/0xA3F09E6792351e95d1fd9d966447504B5668daF6\nSource: https://github.com/Potdealer/prediction-market (if published)\n\nBuilt by potdealer x Ollie for Netclawd"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Potdealer/prediction-market",
    "publisherUrl": "https://clawhub.ai/Potdealer/prediction-market",
    "owner": "Potdealer",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/prediction-market",
    "downloadUrl": "https://openagent3.xyz/downloads/prediction-market",
    "agentUrl": "https://openagent3.xyz/skills/prediction-market/agent",
    "manifestUrl": "https://openagent3.xyz/skills/prediction-market/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/prediction-market/agent.md"
  }
}