bounded-onchain について
bounded-onchainは、Boundedアプリのウォレット、トークン、トランザクション、決済を扱うオンチェーン開発スキルです。参照先の案内とルールにより、プラグインの詳細確認や実装上の問題解決を支援します。
主な機能
- 01オンチェーン開発資料の案内
- 02プラグイン署名と呼び出し条件の確認
- 03ウォレットと資金管理方式の説明
- 04オンチェーントランザクションの診断
- 05決済とウォレットログインの案内
活用シーン
- 01プラグイン関数の引数と戻り値の確認
- 02エスクローやトークンアプリの口座設計
- 03書き込み失敗やトランザクション制限の調査
- 04埋め込みウォレットやウォレットログインの設定
MCP 対応
Boundedのオンチェーン開発向けエージェントスキルです。入力にはMCPとの具体的な関係は記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ bounded-sh/ skill --skill bounded-onchainインストール後、Claude Code で/bounded-onchainを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
data/plugin-catalog.jsondocs/accept-crypto.mdchain-data.mdcustody-and-pdas.mdembedded-wallets.mdexamples.mdmeteora-token-launch.mdoapps-tokenomics-fee-split.mdonchain-trading.mdonchain-troubleshooting.mdonchain.mdonramp.mdplugin-signatures.mdplugins.mddocs/examples/cp-amm-liquidity-positions.mdescrow.mdisolated-vault.mdnft-collection.mdprediction-market-amm.mdrandomness-coin-flip.mdstaking-lock-vault.mdtoken-launch.mdtoken2022-extensions.mdtreasury.mddocs/plugins/_fragments/AccountPlugin.mdCPI.mdDeFiPlugin.mdDocumentPlugin.mdNFTPlugin.mdOraclePlugin.md詳細
Bounded オンチェーン
ウォレット、トークン、オンチェーントランザクション、決済に対応します。Bounded の標準的なメール/ソーシャルログインには、デフォルトでウォレットが含まれます。デフォルトの Turnkey 認証とサポート対象のメール/ソーシャルログインを使うと、実際の @user.address が付与されます。詳しくはdocs/embedded-wallets.mdをご覧ください。@user.id(アカウント ID)は引き続き本人確認/所有権のキーであり、@user.address はウォレットです。オンチェーンへの書き込みは、まずポリシールールと不変条件を満たす必要があるため、適用されるルールについてはbounded-backendスキルと併用してください。ファミリー全体へのルーティングについては、ルートのboundedスキルをご覧ください。
リファレンスルーター
現在のタスクまたは用語に一致する行だけを参照してください。
| タスクまたは用語 | 参照先 |
|---|---|
| プラグインの名前空間または関数をすばやく見つける | プラグインカタログ - 名前空間/関数の簡易ルーター |
| すべてのシグネチャと呼び出し可能なコンテキストを確認する | シグネチャ完全版インデックス |
| あるプラグイン関数の正確なシグネチャ、マニフェストの引数説明と署名者マーカー、戻り値の型、呼び出し可能なコンテキスト | プラグインカタログ、次に docs/plugins/ 内の該当する名前空間のページ |
| Token-2022 の送金税、ウォレット/ボールトに留保された手数料、ミントの回収、専用の引き出し権限、手数料受取先としてのトレジャリー、未請求の報酬 | 送金手数料の回収 |
誰が資金を保有するか、誰が署名するか、エスクローと名前付き PDA とユーザーウォレットの違い、@AccountPlugin.createAccount、アカウント ID の衛生管理、作成・資金投入・利用の慣用パターン | カストディと PDA |
| エスクロー、ボールト、トレジャリー、ステーキング、マーケット、ローンチ、NFT、Token-2022、ランダムネス、流動性アプリの完全なポリシー | 例のインデックス |
| 失敗するオンチェーン書き込み:エラーの検索、レント、ATA の支払者、トランザクション制限、確認、環境の違い | オンチェーンのトラブルシューティング |
Poofnet でシミュレートされた SOL、USDC、またはその他のトークンを任意のウォレットに入金する方法、bounded wallet fund、realtime_offchain | Poofnet オンチェーンシミュレーション |
SOLANA_DEVNET_RPC_URL is required、SOLANA_MAINNET_RPC_URL、validate pre-built transaction、署名前に送信が失敗する、--rpc-url フラグがない、公開 RPC へのフォールバック | CLI の送信には明示的な RPC エンドポイントが必要です |
ブラウザーのオンチェーン set() で送信できない、init() の chain、デフォルトの Helius RPC、任意のトップレベル rpcUrl オーバーライド | ブラウザー/SDK の RPC のデフォルトとオーバーライド |
onchain account resolution failed (422)、onchain account not found: <pubkey>、オンチェーンに存在しないアカウントを指定する書き込み、誤ったミント/プールの導出、getTokenMintAddress の引数 1 個と 3 個の不一致 | オンチェーンアカウントの不足とプラットフォームの 502 エラー |
onchain account resolution failed (502)、onchain query failed (502)、403 も 422 も伴わない Transaction building failed、名前付きクエリと通常の getBalance が同時に失敗する、プラットフォームリゾルバーの障害 | プラットフォームリゾルバーとオンチェーンクエリの 502 エラー |
署名後に Pump.fun のローンチが insufficient lamports(need 1461600、Create Metadata Accounts v3)で失敗する、アプリカストディによる作成者への資金提供 | エラー一覧とトークンローンチの例 |
オンチェーンコレクション、onchain:true、--protocol、Solana、メインネットの許可、パッチ、読み取り専用 !、FieldReadOnly | オンチェーン |
| コンパイラーとデプロイ済み環境でのサポートの違い、devnet のステータス、ブロック中または未検証の統合(Jupiter、Phoenix、DFlow、Kamino、Pump.fun、PumpSwap、Tensor、SPL ステークプール、リキッドステーキング、Raydium CPMM、Meteora DLMM)、runtime-v4 による制限 | 機能のステータス |
| Helius、ミラー/インデクサー、取りこぼされたトランザクション、結果整合性、ミラーされていない書き込み、Webhook、取り込みキュー/DLQ、復旧と照合の担当者 | ミラーの完全性 |
| ボンディングカーブ、AMM、共有価格またはカウンター、高負荷時に書き込みが失敗する、競合、スリッページ、支払い上限/受け取り最小値 | 高負荷時の共有価格とカウンター |
| トランザクションが大きすぎる、413、1182/1232 バイトのパケット制限、大きすぎるフック、ルックアップテーブル | トランザクションサイズの制限 |
governance.upgrade、不変/コントローラーポリシー、マニフェストルート、ガバナンス対象のセッション、復旧、延長、キャンセル | runtime-v3 のガバナンス |
@CPI、@Solana、@Bytes、@App、@DocumentPlugin.updateField、@PredictionMarketPlugin、PDA、get/getAfter、ProgramData、shouldSubmitTx、skipPreflight、@contract.address、@AccountPlugin.getAccountAddress、汎用 CPI、アプリ間連携、予測市場の算術、ランタイムの同等性、@Solana.verifyEd25519、@Solana.secp256k1Recover、@Bytes.sha256、@Bytes.keccak256、署名検証、EVM 署名者の復元 | ポリシーのプリミティブ |
オークション、注文板、複数トランザクションの金融ステートマシン、集約バケット、パーミッションレスなクランク、遅延請求/決済、固定小数点単位、独立した算術オラクル、操作レシートの再試行、_hook_completed、_error_message | ポリシーを基盤とする金融ステートマシン |
| Anchor/カスタムエラー、または古い数値デコード | カスタムエラーの診断 |
| 取引、Phoenix のパーペチュアル、DEX スワップ、サーバー署名による実行 | オンチェーン取引 |
エスクローのカストディ、source 引数、エンティティごとの資金、名前付き PDA アカウント、@AccountPlugin.createAccount | 名前付きエスクローアカウント |
| ルール算術のオーバーフロー、int64、除算を先に行う制約、桁の大きな値の比較 | ルール算術 |
Pyth の USD 価格、小数表記の価格文字列、getPriceFeedScaled、マイクロ USD、整数による価格算術 | 価格フィードの単位とランタイムでの利用可否 |
ランダムネス、VRF、抽選/ガチャ/シャッフル、@OraclePlugin、requestRandomness、getRandomNumber、isRevealPath | ランダムネス |
Meteora のトークンローンチ、DBC、アンチスナイプ手数料の減衰、DAMM v2、createMeteoraConfig、createMeteoraVirtualPool、claimDammV2PoolFees、withdrawLeftover | Meteora のローンチ |
Pump.fun、PumpSwap、@PumpFunPlugin、createToken/createTokenV2、buyExactSolIn、作成者手数料、手数料の分配、updateShareholders、distributeCreatorFees、pumpswapDeposit/pumpswapWithdraw、引数名/単位 | Pump.fun リファレンス |
複数当事者への手数料分配、feepool、mulDivFloor、キーパー/スケジュールによるオンチェーン書き込み、actAs、手数料で賄う rollingSum のビルド許容量 | oApps のトークノミクス |
メール/ソーシャルユーザー向けの埋め込みウォレット、@user.address、Turnkey、auth.wallets | 埋め込みウォレット |
403 anonymous_onchain_blocked、ゲスト/signInAnonymously セッションからのオンチェーンコレクションへの書き込み、poofnet では動作するがメインネットでは動作しない | ゲストはオンチェーンコレクションに書き込めません |
Solana ウォレットを持ち込むログイン、walletLogin、Phantom/Wallet-Standard、SIWS | ウォレットログイン |
onramp()、カードで SOL/USDC を購入、Coinbase Onramp、ウォレットへの入金 | オンランプ |
暗号資産/USDC の受け入れ、payments.acceptCrypto、販売者への精算、直接送金レール | 暗号資産の受け入れ |
Rules Of Thumb
- オンチェーンログインのデフォルトは、Turnkey のデフォルトのメール/ソーシャル認証に、任意のウォレットログインを加えたものです。 通常のフローでは
authModeやauth.walletsを追加しないでください。対応するメール/ソーシャルユーザーはすでに@user.addressを持っています。"auth": { "wallets": true }をデプロイするのは、EXTERNAL キーペアのセッション(ウォレットログイン、server-SDK のキーペアクライアント、CLI のキーペアデータレーン)に限ります。完全なルールとオプトアウトについては、docs/embedded-wallets.md -> recommended login を参照してください。 - ウォレット/オンチェーンの意味でのみ
@user.addressを使用し、通常の所有権には@user.idを使用してください。bounded-backend スキルを参照してください。 - ゲスト(
signInAnonymously)セッションでは、どのネットワークでもonchain: trueのコレクションに書き込めません。 Poofnet、devnet、mainnet のすべてで、トランザクションの構築前に403 anonymous_onchain_blockedが返されるため、テストネットワークで動作するゲストフローが本番移行後に失敗することはありません。ゲストがアクセスできる範囲はオフチェーンに保ち、最初のオンチェーン書き込みの前にアップグレードを促してください。ゲストは onchain コレクションに書き込めません を参照してください。 - 関数の既存のマニフェストの説明がアカウント ID を受け付ける場合、パブリックキーではない文字列は、それ自体のプログラム署名付き PDA に解決されます。
@contract.addressはアプリ全体で共有される ONE つの資金プールです。名前付き ID は名前ごとに別の資金プールになります。すべてのソース、所有者、作成者、宛先が 3 種類すべてのカストディ形式を受け付けると想定せず、関数ページで該当する引数のマニフェストの説明を確認してください。ユーザー資金を別々のプールに分けて扱う場合(エスクロー、オークション、賞金プール、テナントごとの残高など)、受け付けられる場合は名前付きアカウントを使用してください。最初の入金前に決定してください。後から変更する場合は、稼働中の残高を移行する必要があります。 - オンチェーン書き込みでは、ネットワーク/RPC を明示的に設定し、デフォルトでは devnet を使用してください。書き込み直後の読み取りを確認と見なさないでください。
CLI はトランザクションを直接送信し、エンドポイントは
SOLANA_DEVNET_RPC_URL/SOLANA_MAINNET_RPC_URLからのみ読み取ります。フラグ、設定ファイルの設定、公衆 RPC へのフォールバックはありません。 環境変数が設定されていない場合、署名前にvalidate pre-built transaction: SOLANA_DEVNET_RPC_URL is required ...で書き込みが失敗します。そのため、アプリがrealtime_devnetまたはrealtime_mainnetの場合は、boundedを実行するシェルで設定してください。 CLI の送信には明示的な RPC エンドポイントが必要です を参照してください。 - Mainnet はプレースホルダーではなく、実際の接続先です。プログラムは mainnet-beta で稼働しています。mainnet アプリの作成には有料アカウントプランが必要です(API キーや共有シークレットは不要です)。また、あなたが作成するアプリは、作成者のウォレット(サインイン済みの本人が管理を証明できるウォレット。ローカル CLI キーペア、またはウェブログインの場合は Bounded アカウント自身のウォレットで、権限確認の署名はデプロイごとのブラウザー承認を通じて行われます)によってオンチェーンで所有されます。その所有権を別の人のウォレットに移すことはできません。唯一の引き渡し先は OpenApps エージェントです。OpenApps アプリは、誰もそのキーを保持せずにプラットフォームがポリシーを更新できるよう、OpenApps のカストディキーによってオンチェーンで所有された状態で mainnet 上で動作します。エージェントに渡す mainnet アプリは、あなた自身のウォレットで署名するトランザクションにより、そのキーへ一度だけ移されます(openapps スキルを参照)。docs/onchain.md を参照してください。
@contract.addressは Solana のプログラム ID を示すセンチネルであり、直接クエリで返されるアプリのエスクローアドレスではありません。 対応する組み込みプラグインは、センチネルをアプリのエスクロー PDA に解決します。 現在デプロイされている Devnet ランタイムでは、センチネルを@AccountPlugin.getAccountAddress(@contract.address)として組み合わせないでください。この関数は現在、文字列のアカウント ID を受け付ける一方、センチネルはアドレス型であるため、この呼び出しは失敗します。 実際のエスクローアドレスが必要な Devnet のポリシークエリでは、現在の Devnet プログラム ID を文字列リテラルとして指定してください:@AccountPlugin.getAccountAddress("openTv7fbpYSseNHYmCZFZ1CZgj4r8D9fKNgEz1qo6F")。 このリテラルは Devnet 固有であり、デプロイ済みプログラムが変更された場合は更新が必要です。 policy-primitives.md を参照してください。- ディスカバリー、デプロイ済みランタイムのサポート、ライブネットワークでの検証は、互いに独立した 3 つの状態として扱ってください。
- フックを作成する前に、オフラインで呼び出し可能なシグネチャの情報源として
bounded plugins list --jsonとbounded plugins describe <plugin.function> --jsonを使用してください。 - プラグインやプリミティブを提案する前に、Solana devnet capability catalog を確認してください。
- コンパイラーのタグ、マニフェスト、証明コントラクト、Poofnet モデル、ルックアップテーブルの項目、ローカルバリデーターのテストから、devnet のサポートを推測しないでください。
- ライブ環境での証拠にホスト型リリースマーカーを使う場合は、
bounded domains list --app-id <id> --env <environment> --jsonのslugUrl、または成功したサイトデプロイの正確なレシートにあるurlから、環境が明示されたサイト URL を取得してください。 staging の証拠には、人が表示したホスト名をコピーするのではなく、JSON フィールドそのものがあることを必須にしてください。bounded apps inspectで確認できるのは、アクティブなポリシー/ランタイムの公開情報であり、ホストされた URL は含まれません。 - runtime-v1 のデプロイでは runtime-v2 のプリミティブを出力しないでください。docs/policy-primitives.md に従ってください。
- 名前付きクエリは、プラグインが許可するコレクションに配置してください。オンチェーンデータを読み取る場合は
onchain: true、オフチェーン専用プラグイン(@DeFiPlugin.getSwapQuoteなど)を呼び出す場合やオフチェーンドキュメントを読み取る場合はonchain: falseにします。どちらも Solana アプリで動作します。匿名実行が許可されるのは、パスの読み取りルールが呼び出し元を許可する、ID に依存しないクエリです。@user.address/@user.evmAddressを読み取るクエリには、その ID が必要です。匿名で利用できるのはブラウザー SDK であり、CLI ではありません。Solana mainnet では現在、サインアウト状態でのチェーンクエリは失敗するため、プラットフォームのクエリ支払者の修正がリリースされるまでは、そこでサインイン済みのウォレットを必須にしてください。 - runtime-v3 のガバナンスも同様に扱ってください。デプロイ済みの機能レジストリが v3 を報告してからのみ登録し、ポリシーの意図ではなく、観測されたチェーン状態に基づいてガバナンスを公開してください。
- Poofnet と Solana の動作を一致させてください。
bounded wallet fundはrealtime_offchainでの明示的な開発用資金提供に限って使用してください。 呼び出し元はアプリの所有者、管理者、または開発者である必要があり、残高は選択したアプリのシミュレートされた台帳内にのみ存在します。- 純粋な/読み取り専用のプリミティブは、実際に実行可能なランタイム間で同じ形状を返す必要があります。変更を伴うプリミティブは、モデル化された効果を適用するか、安全側に倒して失敗する必要があります。
- 検証のみの成功は、パリティのバグです。
- Poofnet のオンチェーンフックでは、アプリケーション側での成功とは
_hook_completed == _transaction_hashのことです。行の存在と_error_message == nullは保留中の状態にすぎません。ただし、これらのスタンプはシミュレーター専用です。実際のチェーンプロトコルで、これらを必須とするポリシーの RULE は永久に成立しません。そのような条件で出金を制御すると、一方向の弁となってユーザー資金がロックされ、シミュレーション側の証明とテストはすべて成功したままになります。ルールでは、フック自身が書き込む宣言済みフィールド(paidAtのようなもの)またはフックから導出されたヘッド状態を条件にしてください。予約済みの_スタンプは Poofnet クライアント専用です。意味上の操作 ID ごとに、ポリシー上許可された再試行経路を用意してください。予約済みレシートスタンプは Poofnet 専用 を参照してください。 - Helius のミラーリングは環境レベルの Bounded インフラです。環境/ネットワークごとに生のプログラム用 Webhook を 1 つだけ使用し、アプリごとには作成しないでください。アプリの構築者が Webhook URL を作成したり、プロバイダーのシークレットを指定したりすることはありません。オペレーター向けの運用手順(Webhook、シークレット、キュー/DLQ、復旧)は、このスキルではなくモノレポにあります。アプリ側での注意事項については、ミラーリングの完全性 を参照してください。
- 暗号資産は非カストディアル方式で受け付けられます。販売者は自身のウォレットで決済します。
コメント
Markdown 対応