ローンチタイプ

Locked LP Tokens

Last updated April 22, 2026

ボンディングカーブのグラデュエーション中に作成された LP トークンは、Genesis が所有するバケットにプログラムロックされます。どのウォレットも引き出すことはできません。

概要

Genesis のボンディングカーブが完売して Raydium CPMM プールにグラデュエーションすると、得られた LP トークンは Genesis プログラムが所有する PDA に転送されます。このバケットのベスティングスケジュールは Never に設定されており、トークンへのアクセスができなくなります。

  • LP トークンはバーンされません — ベスティングが never に設定された Genesis バケット署名者 PDA に転送されます
  • プログラムロックlpLockSchedule.startConditioncliffCondition は両方とも Never であり、どの命令や権限もリリースできません
  • オンチェーンで検証可能RaydiumCpmmBucketV2 アカウントを取得してロックスケジュールとトークン残高を確認できます
  • 自動的に発生 — ロックはグラデュエーションプロセスの一部として実行され、手動操作は不要です

LP トークンロックの仕組み

グラデュエーション中、LP トークンはバケット署名者 PDA(秘密鍵を持たないプログラム派生アドレス)が所有する ATA にデポジットされます。RaydiumCpmmBucketV2 アカウントは、lpLockSchedule.startConditioncliffCondition の両方を { __kind: 'Never' } に設定することでロックし、引き出しを防止します。

一部のプラットフォームではこれを LP トークンの「バーン」と呼びます。Genesis では LP トークンはバーンアドレスに送信されません。検証可能なオンチェーンアカウントに残ります。プログラムロックという用語の方が正確です。トークンは存在し監査可能ですが、どのウォレットもアクセスできないからです。

グラデュエーションフロー

  1. ボンディングカーブが完売する(baseTokenBalance がゼロに達する)
  2. グラデュエーションが自動的に発火する — 蓄積された SOL とトークンが Raydium CPMM プールに移行する
  3. Raydium が LP トークンを Genesis プログラムに返す
  4. LP トークンはバケット署名者の ATA にデポジットされる
  5. lpLockSchedule.startConditioncliffConditionNever に設定される — LP トークンがプログラムロックされる

LP トークンロックの検証

RaydiumCpmmBucketV2 アカウントを取得し、lpLockSchedule 拡張を検査して LP トークンがロックされていることを確認します。

アカウントの導出

LP トークンロックを構成する 3 つのアカウント:

アカウント説明導出方法
Raydium Bucket PDAグラデュエーション状態とロック設定を保存する RaydiumCpmmBucketV2 アカウントfindRaydiumCpmmBucketV2Pda(umi, { genesisAccount, bucketIndex })
Bucket Signer PDALP トークン ATA を所有する PDA — 秘密鍵を持たないfindRaydiumBucketSignerPda(umi, { bucket })
Bucket Signer ATAロックされた LP トークンを保持する関連トークンアカウントバケット署名者 + LP ミントを使用した標準的な ATA 導出

ロックの取得と確認

verify-lp-lock.ts
1import {
2 genesis,
3 findRaydiumCpmmBucketV2Pda,
4 fetchRaydiumCpmmBucketV2,
5 findRaydiumBucketSignerPda,
6 findLpMintPda,
7 RAYDIUM_CP_SWAP_PROGRAM_ID_MAINNET,
8} from '@metaplex-foundation/genesis';
9import { publicKey } from '@metaplex-foundation/umi';
10import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
11import { findAssociatedTokenPda } from '@metaplex-foundation/mpl-toolbox';
12
13const umi = createUmi('https://api.mainnet-beta.solana.com').use(genesis());
14
15const genesisAccount = publicKey('YOUR_GENESIS_ACCOUNT_PUBKEY');
16
17// 1. Derive the Raydium bucket PDA
18const [raydiumBucketPda] = findRaydiumCpmmBucketV2Pda(umi, {
19 genesisAccount,
20 bucketIndex: 0,
21});
22
23// 2. Fetch the bucket account
24const raydiumBucket = await fetchRaydiumCpmmBucketV2(umi, raydiumBucketPda);
25
26// 3. Check the LP lock schedule
27const lpLockSchedule = raydiumBucket.extensions.lpLockSchedule;
28
29if (lpLockSchedule.__option === 'Some') {
30 const schedule = lpLockSchedule.value;
31 console.log('LP lock start condition:', schedule.startCondition.__kind);
32 console.log('LP lock cliff condition:', schedule.cliffCondition.__kind);
33 // Expected output: both "Never"
34}
35
36console.log('LP token balance:', raydiumBucket.lpTokenBalance);
37
38// 4. Derive the bucket signer PDA
39const [bucketSignerPda] = findRaydiumBucketSignerPda(umi, {
40 bucket: raydiumBucketPda,
41});
42
43console.log('Bucket signer (LP token owner):', bucketSignerPda);
44
45// 5. Derive the LP mint from the pool state
46const [lpMint] = findLpMintPda(umi, RAYDIUM_CP_SWAP_PROGRAM_ID_MAINNET, raydiumBucket.poolState);
47
48// 6. Derive the bucket signer's ATA for the LP mint
49const [bucketSignerAta] = findAssociatedTokenPda(umi, {
50 mint: lpMint,
51 owner: bucketSignerPda,
52});
53
54console.log('LP mint:', lpMint);
55console.log('Bucket signer ATA (holds LP tokens):', bucketSignerAta);

期待される出力

LP トークンがプログラムロックされている場合、出力は以下を確認します:

LP lock start condition: Never
LP lock cliff condition: Never
LP token balance: 123456789
Bucket signer (LP token owner): <PDA address>
LP mint: <LP mint address>
Bucket signer ATA (holds LP tokens): <ATA address>

startCondition.__kind の値が Never であることはベスティングが開始されないことを確認し、cliffConditionNever はクリフリリースがないことを確認します。これらを合わせて、LP トークンが引き出せないことを証明します。

RaydiumCpmmBucketV2 アカウントフィールド

LP トークンロックに関連する RaydiumCpmmBucketV2 アカウントの主要フィールド:

フィールド説明
lpTokenBalancebigintバケット署名者の ATA に保持されている LP トークンの数
lpClaimAuthorityOption<PublicKey>LP トークンを請求できる権限 — 権限が設定されていない場合は None
lpTokensClaimedbigint累計請求済み LP トークン(完全にロックされている場合はゼロ)
bucketSignerPublicKeyLP トークンを保持する ATA を所有する PDA
extensions.lpLockScheduleOption<ClaimSchedule>LP トークンのベスティングスケジュール — startConditionNever に設定
poolStatePublicKeyRaydium CPMM プール状態アカウントのアドレス(LP ミントではない — LP ミントを取得するにはプール状態を読み取ります)

ClaimSchedule フィールド

lpLockSchedule 拡張は以下のフィールドを持つ ClaimSchedule です:

フィールド説明
startConditionCondition請求が開始できるタイミング — プログラムロックの場合は { __kind: 'Never' }
durationbigintベスティング期間(秒)(開始が Never の場合は無関係)
periodbigintベスティング期間の間隔(開始が Never の場合は無関係)
cliffConditionConditionベスティングのクリフ条件 — LP ロックの場合も { __kind: 'Never' }
cliffAmountBpsnumberクリフアンロックパーセンテージ(ベーシスポイント)(開始が Never の場合は無関係)

durationperiodcliffAmountBps フィールドは ClaimSchedule 構造体に存在しますが、startConditioncliffCondition の両方が Never の場合、機能的には無関係です。ベスティングもクリフリリースも開始できません。

FAQ

グラデュエーション時に LP トークンはバーンされますか、それともロックされますか?

LP トークンはバーンされず、プログラムロックされます。Genesis バケット署名者 PDA が所有する関連トークンアカウントに転送されます。バケットの lpLockSchedulestartConditioncliffCondition の両方が Never に設定されており、どのウォレットも請求できません。

ロックされた LP トークンを引き出すことは誰かにできますか?

いいえ。RaydiumCpmmBucketV2 アカウントの lpLockSchedulestartConditioncliffCondition の両方が Never に設定されています。これらをリリースできる命令や権限は存在しません。

LP トークンがオンチェーンでロックされていることをどのように検証できますか?

Genesis SDK を使用して RaydiumCpmmBucketV2 アカウントを取得し、extensions.lpLockSchedulestartCondition.__kindcliffCondition.__kind の両方が Never に設定されていることを確認してください。lpTokenBalance フィールドには保有されている LP トークンの正確な数が表示されます。完全なコード例については LP トークンロックの検証 を参照してください。

LP トークンをバーンすることとプログラムロックすることの違いは何ですか?

バーンは SPL token burn 命令を介してトークンを破棄し、流通から永続的に削除します。プログラムロックはベスティングを Never に設定した PDA にトークンを転送します — トークンはオンチェーンに残り検証可能ですが、どのウォレットも引き出すことはできません。どちらのアプローチでも流動性は永続的になります。

用語集

用語定義
Graduationボンディングカーブが完売したときにトリガーされる自動プロセス — 蓄積された SOL とトークンを Raydium CPMM プールに移行
LP TokenRaydium CPMM プールのシェアを表す流動性プロバイダートークン
Program-Locked引き出し経路のない PDA 所有アカウントに保持されたトークン — アクセス不可だがオンチェーンで検証可能
Bucket Signer PDALP トークンを保持する ATA を所有するプログラム派生アドレス;秘密鍵を持たない
ClaimSchedule開始条件、期間、間隔、クリフを持つベスティング設定 — Raydium バケットで LP トークンのリリースルールを定義するために使用
Condition: Never決して満たされない条件バリアント — lpLockSchedulestartConditioncliffCondition の両方として使用され、LP トークンの請求を防止
RaydiumCpmmBucketV2Raydium プール参照、LP トークン残高、ロックスケジュールを含むグラデュエーション後の状態を保存する Genesis アカウント