Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
バージョン情報package.json で SDK バージョンをピン留めしてください。ボンディング カーブ インターフェースはマイナー リリース間で進化しています。

セットアップ

ここのデモは raydium-sdk-V2-demo/src/launchpad のファイルを反映しています。ブートストラップはデモ リポジトリの config.ts.template に従います:

ローンチを作成する

ソース: src/launchpad/createMint.ts(および Bonk バリアント用の createBonkMintApi.ts) ローンチの経済学のほとんどは引数ではなく、configId を通じてバインドする GlobalConfig から取得され、SDK は残りを API のデフォルト パラメータから入力します。ミントの ID、バインドするコンフィグ、および(オプション)最初の購入を渡します:
注:
  • curveType、graduationFractionBps、initialK、quoteMint、openTime、fees、または postGraduationLpPolicy 引数はありません。カーブ形状とクォート ミントはバインドする GlobalConfig のプロパティです;フィー レートは GlobalConfig と PlatformConfig に存在します;卒業時の LP 処分は PlatformConfig 設定です。InitializeV2 が受け入れるものについては、products/launchlab/instructions を参照してください。
  • 10 文字を超える symbol と空の uri は、RPC の前にクライアント側で拒否されます。
  • transferFeeExtensionParams を渡すと、ビルダーが InitializeWithToken2022 に切り替わり、migrateType が "cpmm" に強制されます。
  • ビルダーは transactions 配列を返します;createOnly: false は最初の購入トランザクションを追加します。常に execute({ sequentially: true }) を実行してください — ミントは購入が実行される前に存在する必要があります。

ローンチ状態を取得する

ソース: src/launchpad/poolInfo.ts getLaunchById はありません。プール ID は (programId, mintA, mintB) の PDA であり、getRpcPoolInfo はバインドされた configInfo が付加された デコード済みの PoolState を返します:
getRpcPoolsInfo({ poolIdList }) はバッチ形式で、プール ID でキーされた poolInfoMap を返します — ループの代わりにポートフォリオ ビューに使用してください。生のアカウントを自分でデコードしたい場合、LaunchpadPool.decode と LaunchpadConfig.decode がエクスポートされています。

購入 — 正確なクォート入力

ソース: src/launchpad/buy.ts オフチェーン クォート ヘルパーは Curve.buyExactIn です。これはエクスポートされた Curve クラスの静的メソッドであり、raydium.launchpad のメソッドではありません。トランザクション ビルダーは buyToken です。どちらもプラットフォームのフィー レートが必要です。これは別の PlatformConfig アカウントに存在します:
minMintAAmount を明示的に渡すか、slippage の代わりに渡すことができます;両方を省略すると、SDK はライブ RPC データから境界を計算します。shareFeeRate は poolInfo.configInfo.maxShareFeeRate を超えてはいけません。また、shareFeeReceiver も渡す場合にのみ適用されます。

購入 — 正確なベース出力

ビルダーは buyTokenExactOut で、金額引数は outAmount(希望するベース)と maxBuyAmount(最大で使用するクォート)です。Curve.buyExactOut({ poolInfo, amountA, ... }) は対応するオフチェーン プレビューです。
「正確に X トークンを購入」UI に便利です。ビルダーはゼロの outAmount をクライアント側で拒否し、カーブが十分に移動してクォート要件が maxBuyAmount を超える場合、プログラムは戻ります。

売却

ソース: src/launchpad/sell.ts ビルダーは sellToken(正確なクォート出力バリアント用の sellTokenExactOut)で、sellAmount とオプションの minAmountB があります。Curve.sellExactIn({ poolInfo, amountA, ... }) はそれをプレビューします。
カーブの売却パスは購入パスに対称です:real_a を sellAmount だけ減らすと、real_a − sellAmount と real_a の間のカーブの下の統合領域に等しい quote_out が返されます。売却フィーを差し引きます。sellAmount はゼロより大きい必要があります — ビルダーはゼロを RPC の前に拒否します。

卒業

卒業は統合者がトリガーできるものではありません。 raydium.launchpad.graduate はなく、購入ビルダーに autoGraduate フラグはなく、戻り値に willGraduate フィールドもありません。オンチェーンでは、卒業は MigrateToCpswap(またはレガシー MigrateToAmm)であり、両方の命令は署名者をバインディング GlobalConfig に記録されたウォレットに制限します — migrate_to_cpswap_wallet と migrate_to_amm_wallet それぞれ。他の署名者からの呼び出しは InvalidOwner で失敗します。これはパーミッションレスではなく、MEV ボットがそれをレースすることはできません。
これらのウォレットは Raydium の卒業クランクによって操作されるため、実際には移行は最終購入がしきい値を超えた後、誰がそれを行ったかに関わらず数秒以内に実行されます。統合者の側からできることは唯一、ステータス遷移を高速イベントとして扱うことです:getRpcPoolInfo をポーリング(または以下の gRPC でサブスクライブ)し、status が変わったときに UI をカーブから結果の CPMM プールに切り替えます。 アカウント リスト、移行フィー、および卒業時の LP 分割については、products/launchlab/instructions を参照してください。

クリエイター フィーを回収する

ソース: src/launchpad/claimCreatorFee.ts(単一ミント)および collectAllCreatorFees.ts(バッチ) メソッドは claimCreatorFee(バッチ形式用の claimMultipleCreatorFee)です。これはローンチではなく クォート ミント でキーされます — 1 回の呼び出しで、署名者が蓄積したクリエイター フィーをそのミント全体でスイープします:
蓄積されたクリエイター フィー カウンターをクリエイターの ATA にクォート ミント上に転送します。卒業前後で呼び出し可能です;巨大な残高が蓄積されるのを待つのではなく、定期的に使用してください。プラットフォーム オペレーターは並列の claimPlatformFee / claimAllPlatformFee / claimVaultPlatformFee ビルダーを持っています。

ローンチをそのライフサイクルを通じて追跡する

まとめると、監視スクリプトは次のようになります:
10 秒のタイマーで getRpcPoolInfo をポーリングすることは単一のローンチに対して問題ありません。インデクサーの場合、代わりに以下の gRPC サブスクリプションを使用してください — getRpcPoolsInfo({ poolIdList }) はバッチ処理されますが、数百のプールをポーリングすることは利益なしで RPC クレジットを消費します。

gRPC 経由でコンフィグとプールを監視する

ソース: src/grpc/launchpadPoolInfo.ts Yellowstone gRPC 経由で LaunchLab プログラムにサブスクライブし、各ミントのトークン プログラムを使用して、すべての GlobalConfig と PoolState 更新をログします。1 つの accounts サブスクリプション上の 2 つの datasize フィルターが 2 つのアカウント タイプを分離するため、単一のストリームが両方をカバーします。 デモは、Token-2022 クォート ミント リリースが必要にする、ローンチのミントを分類するための最短の正しいリファレンスです:
  • プール は PoolState.token_program_flag から直接分類され、ミント フェッチなしで bit0 をベース ミント用に、bit1 をクォート ミント用にデコードします。バイト全体を 0 に対してテストすることは、クォート ミントが Token-2022 である場合、レガシー ベース ミントを Token-2022 として誤読します。
  • コンフィグ はそのようにして分類することはできません:GlobalConfig はそのクォート ミントのアドレスを格納し、プログラム フラグはないため、デモはミント アカウントの所有者を一度読み込み、ミントごとにキャッシュします。
また、2 つを相互にクロスチェックします。これは独自のインデクサーに保つのに便利なアサーションです。create 対 update はデモ独自のキャッシュから推測されます。スタートアップ時に getProgramAccounts から シードされます;そのシードが無効化されている場合、「作成」を「このストリームで最初に見られた」と読んでください。 gRPC アクセスはパブリック RPC サーフェスの一部ではありません — デモ リポジトリの src/grpc/README.md を参照してください。

Rust CPI

独自の Anchor プログラムから LaunchLab を呼び出すことはまれです(ほとんどのローンチ統合は TS 側のみです)。実行する場合:
  • クレートは raydium-launchpad(lib 名 raydium_launchpad)、バージョン 0.2.0 で、cpi フィーチャーを公開しています。raydium_launchlab はありません。
  • crates.io に公開されていません — 他の Raydium プログラム クレートと同じ方法で git リビジョンで依存してください。
  • CPI エントリ ポイントは SDK の TypeScript メソッドではなく、オンチェーン命令にちなんで名付けられています:buy_exact_in、buy_exact_out、sell_exact_in、sell_exact_out、claim_creator_fee、create_vesting_account、claim_vested_token。migrate_to_amm / migrate_to_cpswap は署名者ゲートされて GlobalConfig 移行ウォレットに対して行われ、統合者プログラムから呼び出し可能ではありません。
クレート ピン留めルールについては sdk-api/rust-cpi を参照してください — 特に Anchor バージョン分割。これは 1 つのクレートが LaunchLab と CLMM の両方に CPI できるかどうかを決定します。

落とし穴

  • オンチェーン命令名と SDK メソッド名を混同する。 プログラムは buy_exact_in / sell_exact_in を持っています;SDK は buyToken / sellToken を持っています。buyExactIn と sellExactIn は Curve 上の静的メソッド としてのみ存在し、クォートを計算します — トランザクションをビルドしません。
  • extraSigners を忘れる。 createLaunchpad は生成するキーペアからベース ミントを作成するため、そのキーペアが署名する必要があります。extraSigners: [pair] を省略するとトランザクションは署名検証に失敗します。
  • クォート ミントを選択しない。 1 つを渡しません。クォート ミントは configId を通じてバインドする GlobalConfig のプロパティです — getPdaLaunchpadConfigId(programId, quoteMint, curveType, index)。異なるクォート ミントに対してローンチするには、異なるコンフィグをバインドしてください;raydium.api.fetchLaunchConfigs() はデフォルト パラメータを使用して利用可能なものをリストします。
  • メタデータ サイズ。 長い uri 文字列は Metaplex CPI を予算を超えてプッシュします。uri を約 200 文字未満に保ってください — ほとんどの CDN ホスト JSON メタデータは簡単に適合します。symbol は 10 文字にハード キャップされています。
  • 卒業をあなたが入ることができるレースとして扱う。 そうではありません — 上記の警告を参照してください。UI はまだ status 遷移を高速イベントとして扱うべきです。Raydium のクランクはしきい値が超えられた後数秒以内に移行を実行するためです。

次に進む場所

ソース: