stacks-market について
Stacks Market Skillは、オンチェーンコントラクトを通じてstacksmarket.appの予測市場を取引します。メインネット専用です。市場の検索、YES/NOシェアの売買、ポジション確認や償還を行うStacksユーザー向けです。
主な機能
- 01状態やカテゴリで市場を絞り込み・検索
- 02YES/NOシェアのリアルタイム価格取得
- 03スリッページ保護付きのシェア売買
- 04解決後の勝ちシェア償還
- 05市場ポジション残高の確認
活用シーン
- 01テーマ別の予測市場探し
- 02取引前の購入費用や売却額の確認
- 03解決後に勝ちシェアを償還
- 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の価格設定では、シェアのコストは対数曲線に従います。一方の方向に多くのシェアを購入するほど、価格が上がります。買い注文を送信する直前に、必ず最新の見積もりを取得してください。