SDK
JavaScript SDK
Last updated January 31, 2026
Genesis JavaScript SDKのAPIリファレンスです。完全なチュートリアルについては、Launch PoolまたはPresaleを参照してください。
インストール
npm install @metaplex-foundation/genesis @metaplex-foundation/umi \
@metaplex-foundation/umi-bundle-defaults @metaplex-foundation/mpl-toolbox \
@metaplex-foundation/mpl-token-metadata
セットアップ
import { createUmi } from '@metaplex-foundation/umi-bundle-defaults';
import { genesis } from '@metaplex-foundation/genesis';
import { mplTokenMetadata } from '@metaplex-foundation/mpl-token-metadata';
const umi = createUmi('https://api.mainnet-beta.solana.com')
.use(genesis())
.use(mplTokenMetadata());
完全な実装例については、Launch PoolまたはPresaleを参照してください。
インストラクションリファレンス
コア
| 関数 | 説明 |
|---|---|
| initializeV2() | Genesis Accountの作成とトークンの発行 |
| finalizeV2() | 設定のロックとローンチの有効化 |
バケット
| 関数 | 説明 |
|---|---|
| addLaunchPoolBucketV2() | 比例配分バケットの追加 |
| addPresaleBucketV2() | 固定価格販売バケットの追加 |
| addUnlockedBucketV2() | トレジャリー/受取人バケットの追加 |
Launch Pool操作
| 関数 | 説明 |
|---|---|
| depositLaunchPoolV2() | Launch PoolにSOLを入金 |
| withdrawLaunchPoolV2() | SOLの出金(入金期間中) |
| claimLaunchPoolV2() | トークンの請求(入金期間終了後) |
Presale操作
| 関数 | 説明 |
|---|---|
| depositPresaleV2() | PresaleにSOLを入金 |
| claimPresaleV2() | トークンの請求(入金期間終了後) |
管理者
| 関数 | 説明 |
|---|---|
| transitionV2() | 終了動作の実行 |
| revokeMintAuthorityV2() | ミント権限の永久取り消し |
| revokeFreezeAuthorityV2() | フリーズ権限の永久取り消し |
関数シグネチャ
initializeV2
await initializeV2(umi, {
baseMint, // Signer - new token keypair
quoteMint, // PublicKey - deposit token (wSOL)
fundingMode, // number - use 0
totalSupplyBaseToken, // bigint - supply with decimals
name, // string - token name
symbol, // string - token symbol
uri, // string - metadata URI
}).sendAndConfirm(umi);
finalizeV2
await finalizeV2(umi, {
baseMint, // PublicKey
genesisAccount, // PublicKey
}).sendAndConfirm(umi);
addLaunchPoolBucketV2
await addLaunchPoolBucketV2(umi, {
genesisAccount, // PublicKey
baseMint, // PublicKey
baseTokenAllocation, // bigint - tokens for this bucket
depositStartCondition, // TimeCondition
depositEndCondition, // TimeCondition
claimStartCondition, // TimeCondition
claimEndCondition, // TimeCondition
minimumDepositAmount, // bigint | null
endBehaviors, // EndBehavior[]
}).sendAndConfirm(umi);
addPresaleBucketV2
await addPresaleBucketV2(umi, {
genesisAccount, // PublicKey
baseMint, // PublicKey
baseTokenAllocation, // bigint
allocationQuoteTokenCap, // bigint - SOL cap (sets price)
depositStartCondition, // TimeCondition
depositEndCondition, // TimeCondition
claimStartCondition, // TimeCondition
claimEndCondition, // TimeCondition
minimumDepositAmount, // bigint | null
depositLimit, // bigint | null - max per user
endBehaviors, // EndBehavior[]
}).sendAndConfirm(umi);
addUnlockedBucketV2
await addUnlockedBucketV2(umi, {
genesisAccount, // PublicKey
baseMint, // PublicKey
baseTokenAllocation, // bigint - usually 0n
recipient, // PublicKey - who can claim
claimStartCondition, // TimeCondition
claimEndCondition, // TimeCondition
}).sendAndConfirm(umi);
depositLaunchPoolV2
await depositLaunchPoolV2(umi, {
genesisAccount, // PublicKey
bucket, // PublicKey
baseMint, // PublicKey
amountQuoteToken, // bigint - lamports
}).sendAndConfirm(umi);
depositPresaleV2
await depositPresaleV2(umi, {
genesisAccount, // PublicKey
bucket, // PublicKey
baseMint, // PublicKey
amountQuoteToken, // bigint - lamports
}).sendAndConfirm(umi);
withdrawLaunchPoolV2
await withdrawLaunchPoolV2(umi, {
genesisAccount, // PublicKey
bucket, // PublicKey
baseMint, // PublicKey
amountQuoteToken, // bigint - lamports
}).sendAndConfirm(umi);
claimLaunchPoolV2
await claimLaunchPoolV2(umi, {
genesisAccount, // PublicKey
bucket, // PublicKey
baseMint, // PublicKey
recipient, // PublicKey
}).sendAndConfirm(umi);
claimPresaleV2
await claimPresaleV2(umi, {
genesisAccount, // PublicKey
bucket, // PublicKey
baseMint, // PublicKey
recipient, // PublicKey
}).sendAndConfirm(umi);
transitionV2
await transitionV2(umi, {
genesisAccount, // PublicKey
primaryBucket, // PublicKey
baseMint, // PublicKey
})
.addRemainingAccounts([/* destination accounts */])
.sendAndConfirm(umi);
revokeMintAuthorityV2
await revokeMintAuthorityV2(umi, {
baseMint, // PublicKey
}).sendAndConfirm(umi);
revokeFreezeAuthorityV2
await revokeFreezeAuthorityV2(umi, {
baseMint, // PublicKey
}).sendAndConfirm(umi);
PDAヘルパー
| 関数 | シード |
|---|---|
| findGenesisAccountV2Pda() | baseMint, genesisIndex |
| findLaunchPoolBucketV2Pda() | genesisAccount, bucketIndex |
| findPresaleBucketV2Pda() | genesisAccount, bucketIndex |
| findUnlockedBucketV2Pda() | genesisAccount, bucketIndex |
| findLaunchPoolDepositV2Pda() | bucket, recipient |
| findPresaleDepositV2Pda() | bucket, recipient |
const [genesisAccountPda] = findGenesisAccountV2Pda(umi, { baseMint: mint.publicKey, genesisIndex: 0 });
const [bucketPda] = findLaunchPoolBucketV2Pda(umi, { genesisAccount: genesisAccountPda, bucketIndex: 0 });
const [depositPda] = findLaunchPoolDepositV2Pda(umi, { bucket: bucketPda, recipient: wallet });
フェッチ関数
| 関数 | 戻り値 |
|---|---|
| fetchLaunchPoolBucketV2() | バケットの状態(存在しない場合はエラーをスロー) |
| safeFetchLaunchPoolBucketV2() | バケットの状態またはnull |
| fetchPresaleBucketV2() | バケットの状態(存在しない場合はエラーをスロー) |
| safeFetchPresaleBucketV2() | バケットの状態またはnull |
| fetchLaunchPoolDepositV2() | 入金の状態(存在しない場合はエラーをスロー) |
| safeFetchLaunchPoolDepositV2() | 入金の状態またはnull |
| fetchPresaleDepositV2() | 入金の状態(存在しない場合はエラーをスロー) |
| safeFetchPresaleDepositV2() | 入金の状態またはnull |
const bucket = await fetchLaunchPoolBucketV2(umi, bucketPda);
const deposit = await safeFetchLaunchPoolDepositV2(umi, depositPda); // null if not found
バケットの状態フィールド: quoteTokenDepositTotal, depositCount, claimCount, bucket.baseTokenAllocation
入金の状態フィールド: amountQuoteToken, claimed
型
TimeCondition
{
__kind: 'TimeAbsolute',
padding: Array(47).fill(0),
time: bigint, // Unix timestamp (seconds)
triggeredTimestamp: null,
}
EndBehavior
{
__kind: 'SendQuoteTokenPercentage',
padding: Array(4).fill(0),
destinationBucket: PublicKey,
percentageBps: number, // 10000 = 100%
processed: false,
}
定数
| 定数 | 値 |
|---|---|
WRAPPED_SOL_MINT | So11111111111111111111111111111111111111112 |
よくあるエラー
| エラー | 原因 |
|---|---|
insufficient funds | 手数料に必要なSOLが不足 |
already initialized | Genesis Accountが既に存在 |
already finalized | ファイナライズ後は変更不可 |
deposit period not active | 入金期間外 |
claim period not active | 請求期間外 |
FAQ
Umiとは何ですか?なぜ必要ですか?
UmiはMetaplexのSolana向けJavaScriptフレームワークです。トランザクションの構築、署名者の管理、Metaplexプログラムとのやり取りに一貫したインターフェースを提供します。
Genesis SDKをブラウザで使用できますか?
はい。SDKはNode.jsとブラウザの両方の環境で動作します。ブラウザでは、キーペアファイルの代わりにウォレットアダプターを使用して署名を行います。
fetchとsafeFetchの違いは何ですか?
fetchはアカウントが存在しない場合にエラーをスローします。safeFetchは代わりにnullを返すため、アカウントの存在確認に便利です。
トランザクションエラーはどのように処理しますか?
sendAndConfirmの呼び出しを try/catch ブロックで囲みます。エラーメッセージで具体的な失敗理由を確認してください。
次のステップ
完全な実装チュートリアルについて:
- はじめに - セットアップと初回ローンチ
- Launch Pool - 比例配分
- Presale - 固定価格販売
