mcpField
S
stacks-market

stacks-market

github.com/aibtcdevその他11138 回インストール1 日前に更新
リポジトリ

stacks-market について

Stacks Market Skillは、オンチェーンコントラクトを通じてstacksmarket.appの予測市場を取引します。メインネット専用です。市場の検索、YES/NOシェアの売買、ポジション確認や償還を行うStacksユーザー向けです。

主な機能

  1. 01状態やカテゴリで市場を絞り込み・検索
  2. 02YES/NOシェアのリアルタイム価格取得
  3. 03スリッページ保護付きのシェア売買
  4. 04解決後の勝ちシェア償還
  5. 05市場ポジション残高の確認

活用シーン

  1. 01テーマ別の予測市場探し
  2. 02取引前の購入費用や売却額の確認
  3. 03解決後に勝ちシェアを償還
  4. 04アドレスの市場ポジション確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/aibtcdev/skills --skill stacks-market

インストール後、Claude Code で/stacks-marketを入力して読み込まれたか確認します。

同梱ファイルAGENT.mdstacks-market.ts

詳細

Stacks Market スキル

オンチェーンコントラクト SP3N5CN0PE7YRRP29X7K9XG22BT861BRS5BN8HFFA.market-factory-v18-bias を介して、stacksmarket.app で予測市場を取引します。

  • 市場の検索 — REST API で予測市場を一覧表示、検索します。ステータス、カテゴリ、注目フラグで絞り込めます。
  • 価格の見積もり — 資金を投入する前に、オンチェーンの読み取り専用呼び出しで YES/NO 株式のリアルタイム LMSR 価格を取得します。
  • 取引 — スリッページ保護付きで YES または NO 株式を購入します(buy-yes-auto、buy-no-auto)。最低受取額のガード付きで売却します(sell-yes-auto、sell-no-auto)。
  • 償還 — 市場の解決後に勝ち株式を償還します(勝ち株式は 1 株 = 1 STX)。
  • ポジションの追跡 — 任意の市場における YES および NO 株式の残高を確認します。

すべての操作はメインネットのみです。書き込み操作(buy-yes、buy-no、sell-yes、sell-no、redeem)には、ウォレットのロック解除が必要です(最初に bun run wallet/wallet.ts unlock を実行してください)。

使用方法

bun run stacks-market/stacks-market.ts <subcommand> [options]

サブコマンド

list-markets

stacksmarket.app の予測市場を一覧表示します。市場は最新のアクティビティ順に返されます。

bun run stacks-market/stacks-market.ts list-markets [--limit <n>] [--status <status>] [--category <cat>] [--featured]

オプション:

  • --limit(任意) — 返す市場数(デフォルト:20)
  • --status(任意) — ステータスで絞り込み:active | ended | resolved
  • --category(任意) — カテゴリで絞り込み(例:Crypto、Politics)
  • --featured(任意) — 注目市場のみを表示

出力:

{
  "network": "mainnet",
  "marketCount": 5,
  "markets": [
    {
      "_id": "699c573ea7bb5ad25fee68a0",
      "marketId": "1771853629839",
      "title": "Will BTC close above $100k by end of Q1?",
      "category": "Crypto",
      "isActive": true,
      "isResolved": false,
      "endDate": "2026-03-31T23:59:00.000Z",
      "totalVolume": 5000000000,
      "totalTrades": 42
    }
  ]
}
search-markets

キーワードで予測市場を検索します。タイトルと説明を検索します。

bun run stacks-market/stacks-market.ts search-markets --query <keyword> [--limit <n>]

オプション:

  • --query(必須) — 検索キーワード
  • --limit(任意) — 結果の最大数(デフォルト:10)

出力:

{
  "network": "mainnet",
  "query": "bitcoin",
  "resultCount": 3,
  "markets": [
    {
      "_id": "699c573ea7bb5ad25fee68a0",
      "marketId": "1771853629839",
      "title": "Will BTC close above $100k by end of Q1?",
      "isActive": true,
      "isResolved": false
    }
  ]
}
get-market

取引履歴とオーダーブックを含む、単一の予測市場の詳細を取得します。

bun run stacks-market/stacks-market.ts get-market --market-id <mongoId>

オプション:

  • --market-id(必須) — 市場の MongoDB _id(例:699c573ea7bb5ad25fee68a0)

出力:

{
  "network": "mainnet",
  "market": {
    "_id": "699c573ea7bb5ad25fee68a0",
    "marketId": "1771853629839",
    "title": "Will BTC close above $100k by end of Q1?",
    "description": "Resolution source: CoinGecko closing price...",
    "category": "Crypto",
    "options": [
      { "text": "Yes", "impliedProbability": 52, "totalVolume": 3000000000 },
      { "text": "No", "impliedProbability": 48, "totalVolume": 2000000000 }
    ],
    "isActive": true,
    "isResolved": false,
    "winningOption": null,
    "endDate": "2026-03-31T23:59:00.000Z",
    "totalVolume": 5000000000,
    "totalTrades": 42,
    "tradeHistory": []
  }
}
quote-buy

YES または NO 株式を購入する際の価格見積もりを取得します。購入前に必ず見積もりを取得し、コストとスリッページを確認してください。

bun run stacks-market/stacks-market.ts quote-buy --market-id <id> --side <yes|no> --amount <shares>

オプション:

  • --market-id(必須) — 市場 ID(エポックミリ秒のタイムスタンプ。例:1771853629839)
  • --side(必須) — yes または no
  • --amount(必須) — 購入する株式数(整数。例:5 株の場合は 5)

出力:

{
  "network": "mainnet",
  "quote": {
    "marketId": "1771853629839",
    "side": "yes",
    "shares": 5,
    "totalCostUstx": 5250000,
    "totalCostStx": "5.25",
    "fees": {
      "protocolUstx": 125000,
      "lpUstx": 75000
    }
  }
}
quote-sell

YES または NO 株式を売却する際の価格見積もりを取得します。売却前に必ず見積もりを取得し、受取額を確認してください。

bun run stacks-market/stacks-market.ts quote-sell --market-id <id> --side <yes|no> --amount <shares>

オプション:

  • --market-id(必須) — 市場 ID(エポックミリ秒のタイムスタンプ)
  • --side(必須) — yes または no
  • --amount(必須) — 売却する株式数(整数)

出力:

{
  "network": "mainnet",
  "quote": {
    "marketId": "1771853629839",
    "side": "yes",
    "shares": 5,
    "totalProceedsUstx": 4750000,
    "totalProceedsStx": "4.75",
    "fees": {
      "protocolUstx": 125000,
      "lpUstx": 75000
    }
  }
}
buy-yes

予測市場で YES 株式を購入します。スリッページ保護には buy-yes-auto を使用します。ウォレットのロック解除が必要です。

bun run stacks-market/stacks-market.ts buy-yes --market-id <id> --amount <shares> --max-cost <ustx>

オプション:

  • --market-id(必須) — 市場 ID(エポックミリ秒のタイムスタンプ)
  • --amount(必須) — 購入する YES 株式数
  • --max-cost(必須) — uSTX での最大合計コスト(スリッページ保護)。最初に quote-buy で取得してください。

出力:

{
  "success": true,
  "txid": "abc123...",
  "network": "mainnet",
  "explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
  "trade": {
    "marketId": "1771853629839",
    "side": "yes",
    "shares": 5,
    "maxCostUstx": 5500000
  }
}
buy-no

予測市場で NO 株式を購入します。スリッページ保護には buy-no-auto を使用します。ウォレットのロック解除が必要です。

bun run stacks-market/stacks-market.ts buy-no --market-id <id> --amount <shares> --max-cost <ustx>

オプション:

  • --market-id(必須) — 市場 ID(エポックミリ秒のタイムスタンプ)
  • --amount(必須) — 購入する NO 株式数
  • --max-cost(必須) — uSTX での最大合計コスト(スリッページ保護)

出力:

{
  "success": true,
  "txid": "abc123...",
  "network": "mainnet",
  "explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
  "trade": {
    "marketId": "1771853629839",
    "side": "no",
    "shares": 5,
    "maxCostUstx": 5500000
  }
}
sell-yes

市場が解決される前に YES 株式を売却します。最低受取額のガード付きで sell-yes-auto を使用します。ウォレットのロック解除が必要です。

bun run stacks-market/stacks-market.ts sell-yes --market-id <id> --amount <shares> --min-proceeds <ustx>

オプション:

  • --market-id(必須) — 市場 ID(エポックミリ秒のタイムスタンプ)
  • --amount(必須) — 売却する YES 株式数
  • --min-proceeds(必須) — uSTX での最低受取許容額(スリッページ保護)。最初に quote-sell で取得してください。

出力:

{
  "success": true,
  "txid": "abc123...",
  "network": "mainnet",
  "explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
  "trade": {
    "marketId": "1771853629839",
    "side": "yes",
    "shares": 5,
    "minProceedsUstx": 4500000
  }
}
sell-no

マーケットの解決前にNOシェアを売却します。最低受取額ガード付きの sell-no-auto を使用します。ウォレットのロックを解除しておく必要があります。

bun run stacks-market/stacks-market.ts sell-no --market-id <id> --amount <shares> --min-proceeds <ustx>

オプション:

  • --market-id(必須)— マーケット ID(エポックミリ秒のタイムスタンプ)
  • --amount(必須)— 売却するNOシェア数
  • --min-proceeds(必須)— 受け取り可能な最低額(uSTX)

出力:

{
  "success": true,
  "txid": "abc123...",
  "network": "mainnet",
  "explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
  "trade": {
    "marketId": "1771853629839",
    "side": "no",
    "shares": 5,
    "minProceedsUstx": 4500000
  }
}
redeem

マーケットの解決後に、勝ちシェアを償還します。勝ちシェア1つにつき1 STX(1,000,000 uSTX)が支払われます。ウォレットのロックを解除しておく必要があります。

bun run stacks-market/stacks-market.ts redeem --market-id <id>

オプション:

  • --market-id(必須)— マーケット ID(エポックミリ秒のタイムスタンプ)

出力:

{
  "success": true,
  "txid": "abc123...",
  "network": "mainnet",
  "explorerUrl": "https://explorer.hiro.so/txid/abc123...?chain=mainnet",
  "marketId": "1771853629839"
}
get-position

マーケットにおけるYESシェアとNOシェアの残高を取得します。任意のアドレスを指定して確認することもできます。

bun run stacks-market/stacks-market.ts get-position --market-id <id> [--address <stacksAddress>]

オプション:

  • --market-id(必須)— マーケット ID(エポックミリ秒のタイムスタンプ)
  • --address(任意)— 確認するStacksアドレス(省略した場合はアクティブなウォレットを使用)

出力:

{
  "network": "mainnet",
  "address": "SP2...",
  "marketId": "1771853629839",
  "position": {
    "yesShares": 5,
    "noShares": 0
  }
}

注意事項

  • すべての操作はメインネットのみに対応しています。テストネットで呼び出すとエラーが返されます。
  • 書き込み操作には、ロックを解除したウォレットが必要です(先に bun run wallet/wallet.ts unlock を実行してください)。
  • 取引の前に必ず quote-buy または quote-sell を実行し、コストを確認してスリッページの上限を設定してください。
  • マーケット IDはエポックミリ秒のタイムスタンプ(例:1771853629839)であり、MongoDB の _id ではありません。
  • get-market サブコマンドには、marketId ではなくMongoDB の _id(例:699c573ea7bb5ad25fee68a0)を指定します。
  • 書き込み操作では、必ず PostConditionMode.Allow を使用してください。コントラクトは内部でSTXを移動するため(送信者 → プール → 手数料ウォレット)、デフォルトのポストコンディションではこれがブロックされます。
  • endDate を過ぎても isActive が true の場合があります。コントラクトの所有者が手動で解決する必要があります。必ず isResolved を確認し、時間と照合してください。
  • 償還時には勝ちシェア1つにつき1 STXが支払われ、負けシェアには何も支払われません。すべてのシェアがバーンされます。
  • ガス代はシェアの費用に加えて、トランザクションあたり約0.05~0.1 STXです。
  • LMSRの価格設定では、シェアのコストは対数曲線に従います。一方の方向に多くのシェアを購入するほど、価格が上がります。買い注文を送信する直前に、必ず最新の見積もりを取得してください。

コメント