From c01f79c4e2673178b92341d928ea53c80d6afbc9 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Thu, 19 Feb 2026 18:04:04 +0100 Subject: [PATCH 1/8] add Genesis launch commands (create & register) Add `genesis launch create` and `genesis launch register` CLI commands that use the Genesis SDK API module to create and register token launches via the Metaplex platform. - `genesis launch create`: all-in-one flow that calls the Genesis API, signs/sends transactions, and registers the launch - `genesis launch register`: registers an existing on-chain genesis account with the platform using a JSON config file - Both commands show API response details on validation errors - Bump @metaplex-foundation/genesis to ^0.20.3 Note: launch commands require the Genesis SDK API module (createLaunch, registerLaunch, createAndRegisterLaunch) which will be available once the SDK PR is merged and published. --- package.json | 2 +- pnpm-lock.yaml | 10 +- src/commands/genesis/index.ts | 1 + src/commands/genesis/launch/create.ts | 225 +++++++++++++++ src/commands/genesis/launch/index.ts | 27 ++ src/commands/genesis/launch/register.ts | 117 ++++++++ test/commands/genesis/genesis.launch.test.ts | 272 +++++++++++++++++++ 7 files changed, 648 insertions(+), 6 deletions(-) create mode 100644 src/commands/genesis/launch/create.ts create mode 100644 src/commands/genesis/launch/index.ts create mode 100644 src/commands/genesis/launch/register.ts create mode 100644 test/commands/genesis/genesis.launch.test.ts diff --git a/package.json b/package.json index 803e6af..94a793d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@ledgerhq/hw-transport": "^6.31.4", "@ledgerhq/hw-transport-node-hid-singleton": "^6.31.5", "@metaplex-foundation/digital-asset-standard-api": "^2.0.0", - "@metaplex-foundation/genesis": "^0.18.0", + "@metaplex-foundation/genesis": "^0.20.3", "@metaplex-foundation/mpl-bubblegum": "^5.0.2", "@metaplex-foundation/mpl-core": "^1.4.0", "@metaplex-foundation/mpl-core-candy-machine": "^0.3.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a316d21..3edc89a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: ^2.0.0 version: 2.0.0(@metaplex-foundation/umi@1.4.1) '@metaplex-foundation/genesis': - specifier: ^0.18.0 - version: 0.18.0(@metaplex-foundation/umi@1.4.1) + specifier: ^0.20.3 + version: 0.20.3(@metaplex-foundation/umi@1.4.1) '@metaplex-foundation/mpl-bubblegum': specifier: ^5.0.2 version: 5.0.2(@metaplex-foundation/umi@1.4.1) @@ -842,8 +842,8 @@ packages: peerDependencies: '@metaplex-foundation/umi': '>= 0.8.2 <= 1' - '@metaplex-foundation/genesis@0.18.0': - resolution: {integrity: sha512-Uzj9PYiW+6JkAGu1Kjhu5jm8p0+dSSApyIEbtfhu4FgIA9S/apx9rbt2mNL+0MgIghbQTj2zh0ooFxx6YmP6mQ==} + '@metaplex-foundation/genesis@0.20.3': + resolution: {integrity: sha512-1cuUImXEr5SO2B7CzOZodtOBwLxUZ0fRh5VD6cA1JImOgWud7+RIe5mgF++Td2jb6nt+1slEdUQvBSBxXLjkFQ==} peerDependencies: '@metaplex-foundation/umi': ^1.4.1 @@ -6590,7 +6590,7 @@ snapshots: dependencies: '@metaplex-foundation/umi': 1.4.1 - '@metaplex-foundation/genesis@0.18.0(@metaplex-foundation/umi@1.4.1)': + '@metaplex-foundation/genesis@0.20.3(@metaplex-foundation/umi@1.4.1)': dependencies: '@metaplex-foundation/mpl-token-metadata': 3.4.0(@metaplex-foundation/umi@1.4.1) '@metaplex-foundation/mpl-toolbox': 0.10.0(@metaplex-foundation/umi@1.4.1) diff --git a/src/commands/genesis/index.ts b/src/commands/genesis/index.ts index 4969b9e..f3eead6 100644 --- a/src/commands/genesis/index.ts +++ b/src/commands/genesis/index.ts @@ -29,6 +29,7 @@ export default class Genesis extends Command { this.log('') this.log('Subcommand groups:') this.log(' genesis bucket Manage buckets (add-launch-pool, add-presale, add-unlocked, fetch)') + this.log(' genesis launch Create and register launches via the Genesis API') this.log(' genesis presale Presale deposit and claim commands') this.log('') this.log('Run "mplx genesis --help" for more information about a command.') diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts new file mode 100644 index 0000000..2066143 --- /dev/null +++ b/src/commands/genesis/launch/create.ts @@ -0,0 +1,225 @@ +import { + CreateLaunchInput, + GenesisApiConfig, + LockedAllocation, + SvmNetwork, + createAndRegisterLaunch, +} from '@metaplex-foundation/genesis' +import { Flags } from '@oclif/core' +import fs from 'node:fs' +import ora from 'ora' + +import { TransactionCommand } from '../../../TransactionCommand.js' +import { generateExplorerUrl } from '../../../explorers.js' +import { RpcChain, txSignatureToString } from '../../../lib/util.js' + +export default class GenesisLaunchCreate extends TransactionCommand { + static override description = `Create a new token launch via the Genesis API. + +This is an all-in-one command that: + 1. Calls the Genesis API to build the on-chain transactions + 2. Signs and sends them to the network + 3. Registers the launch on the Metaplex platform + +The Genesis API handles creating the genesis account, mint, launch pool bucket, +and optional locked allocations in a single flow. + +Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` + + static override examples = [ + '$ mplx genesis launch create --name "My Token" --symbol "MTK" --image "https://gateway.irys.xyz/abc123" --tokenAllocation 500000000 --depositStartTime 2025-03-01T00:00:00Z --raiseGoal 200 --raydiumLiquidityBps 5000 --fundsRecipient
', + '$ mplx genesis launch create --name "My Token" --symbol "MTK" --image "https://gateway.irys.xyz/abc123" --tokenAllocation 500000000 --depositStartTime 1709251200 --raiseGoal 200 --raydiumLiquidityBps 5000 --fundsRecipient
--quoteMint USDC', + '$ mplx genesis launch create --name "My Token" --symbol "MTK" --image "https://gateway.irys.xyz/abc123" --tokenAllocation 500000000 --depositStartTime 2025-03-01T00:00:00Z --raiseGoal 200 --raydiumLiquidityBps 5000 --fundsRecipient
--lockedAllocations allocations.json', + ] + + static override flags = { + // Token metadata + name: Flags.string({ + char: 'n', + description: 'Name of the token (1-32 characters)', + required: true, + }), + symbol: Flags.string({ + char: 's', + description: 'Symbol of the token (1-10 characters)', + required: true, + }), + image: Flags.string({ + description: 'Token image URL (must start with https://gateway.irys.xyz/)', + required: true, + }), + description: Flags.string({ + description: 'Token description (max 250 characters)', + required: false, + }), + website: Flags.string({ + description: 'Project website URL', + required: false, + }), + twitter: Flags.string({ + description: 'Project Twitter URL', + required: false, + }), + telegram: Flags.string({ + description: 'Project Telegram URL', + required: false, + }), + + // Launchpool config + tokenAllocation: Flags.integer({ + description: 'Launch pool token allocation (portion of 1B total supply)', + required: true, + }), + depositStartTime: Flags.string({ + description: 'Deposit start time (ISO date string or unix timestamp). Deposit period is 48 hours.', + required: true, + }), + raiseGoal: Flags.integer({ + description: 'Raise goal in whole units (e.g., 200 for 200 SOL)', + required: true, + }), + raydiumLiquidityBps: Flags.integer({ + description: 'Raydium liquidity in basis points (2000-10000, i.e. 20%-100%)', + required: true, + }), + fundsRecipient: Flags.string({ + description: 'Funds recipient wallet address', + required: true, + }), + + // Optional + lockedAllocations: Flags.string({ + description: 'Path to JSON file with locked allocation configs', + required: false, + }), + quoteMint: Flags.string({ + description: 'Quote mint: SOL (default), USDC, or a mint address', + default: 'SOL', + }), + network: Flags.option({ + description: 'Network override (auto-detected from RPC if not set)', + options: ['solana-mainnet', 'solana-devnet'] as const, + required: false, + })(), + apiUrl: Flags.string({ + description: 'Genesis API base URL', + default: 'https://api.metaplex.com', + required: false, + }), + } + + static override usage = 'genesis launch create [FLAGS]' + + public async run(): Promise { + const { flags } = await this.parse(GenesisLaunchCreate) + + const spinner = ora('Creating token launch via Genesis API...').start() + + try { + // Detect network from chain if not specified + let network: SvmNetwork + if (flags.network) { + network = flags.network + } else { + network = this.context.chain === RpcChain.Mainnet + ? 'solana-mainnet' + : 'solana-devnet' + } + + // Parse locked allocations from JSON file if provided + let lockedAllocations: LockedAllocation[] | undefined + if (flags.lockedAllocations) { + const filePath = flags.lockedAllocations + if (!fs.existsSync(filePath)) { + throw new Error(`Locked allocations file not found: ${filePath}`) + } + + const fileContent = fs.readFileSync(filePath, 'utf-8') + lockedAllocations = JSON.parse(fileContent) as LockedAllocation[] + + if (!Array.isArray(lockedAllocations)) { + throw new Error('Locked allocations file must contain a JSON array') + } + } + + // Build external links + const externalLinks: Record = {} + if (flags.website) externalLinks.website = flags.website + if (flags.twitter) externalLinks.twitter = flags.twitter + if (flags.telegram) externalLinks.telegram = flags.telegram + + // Build input + const wallet = this.context.signer.publicKey.toString() + + const input: CreateLaunchInput = { + wallet, + token: { + name: flags.name, + symbol: flags.symbol, + image: flags.image, + ...(flags.description && { description: flags.description }), + ...(Object.keys(externalLinks).length > 0 && { externalLinks }), + }, + launchType: 'project', + launch: { + launchpool: { + tokenAllocation: flags.tokenAllocation, + depositStartTime: flags.depositStartTime, + raiseGoal: flags.raiseGoal, + raydiumLiquidityBps: flags.raydiumLiquidityBps, + fundsRecipient: flags.fundsRecipient, + }, + ...(lockedAllocations && { lockedAllocations }), + }, + network, + quoteMint: flags.quoteMint, + } + + const apiConfig: GenesisApiConfig = { + baseUrl: flags.apiUrl, + } + + spinner.text = 'Building transactions via Genesis API...' + + const result = await createAndRegisterLaunch( + this.context.umi, + apiConfig, + input, + { commitment: (this.context.commitment as 'processed' | 'confirmed' | 'finalized') ?? 'confirmed' }, + ) + + spinner.succeed('Token launch created and registered successfully!') + + this.log('') + this.logSuccess(`Genesis Account: ${result.genesisAccount}`) + this.log(`Mint Address: ${result.mintAddress}`) + this.log(`Launch ID: ${result.launch.id}`) + this.log(`Launch Link: ${result.launch.link}`) + this.log(`Token ID: ${result.token.id}`) + this.log('') + this.log('Transactions:') + for (const sig of result.signatures) { + const sigStr = txSignatureToString(sig) + this.log(` ${sigStr}`) + this.log( + ` ${generateExplorerUrl( + this.context.explorer, + this.context.chain, + sigStr, + 'transaction', + )}`, + ) + } + + this.log('') + this.log('Your token launch is live! Share the launch link with your community.') + } catch (error) { + spinner.fail('Failed to create token launch') + if (error && typeof error === 'object' && 'responseBody' in error) { + this.logJson((error as { responseBody: unknown }).responseBody) + } + + throw error + } + } +} diff --git a/src/commands/genesis/launch/index.ts b/src/commands/genesis/launch/index.ts new file mode 100644 index 0000000..948e12a --- /dev/null +++ b/src/commands/genesis/launch/index.ts @@ -0,0 +1,27 @@ +import { Command } from '@oclif/core' + +export default class GenesisLaunch extends Command { + static override description = 'Genesis Launch Commands - Create and register token launches via the Genesis API' + + static override examples = [ + '<%= config.bin %> genesis launch create --name "My Token" --symbol "MTK" --image "https://gateway.irys.xyz/..." --tokenAllocation 500000000 --depositStartTime 2025-03-01T00:00:00Z --raiseGoal 200 --raydiumLiquidityBps 5000 --fundsRecipient
', + '<%= config.bin %> genesis launch register ', + ] + + public async run(): Promise { + await this.parse(GenesisLaunch) + + this.log('Genesis Launch Commands - Create and register token launches via the Genesis API') + this.log('') + this.log('The Genesis API provides an all-in-one flow for creating token launches:') + this.log(' 1. Builds the on-chain transactions (genesis account, buckets, etc.)') + this.log(' 2. Signs and sends them to the network') + this.log(' 3. Registers the launch on the Metaplex platform') + this.log('') + this.log('Available commands:') + this.log(' genesis launch create Create a new token launch via the Genesis API') + this.log(' genesis launch register Register an existing genesis account') + this.log('') + this.log('Run "mplx genesis launch --help" for more information.') + } +} diff --git a/src/commands/genesis/launch/register.ts b/src/commands/genesis/launch/register.ts new file mode 100644 index 0000000..bd9c248 --- /dev/null +++ b/src/commands/genesis/launch/register.ts @@ -0,0 +1,117 @@ +import { + CreateLaunchInput, + GenesisApiConfig, + SvmNetwork, + registerLaunch, +} from '@metaplex-foundation/genesis' +import { Args, Flags } from '@oclif/core' +import fs from 'node:fs' +import ora from 'ora' + +import { TransactionCommand } from '../../../TransactionCommand.js' +import { RpcChain } from '../../../lib/util.js' + +export default class GenesisLaunchRegister extends TransactionCommand { + static override description = `Register an existing genesis account with the Metaplex platform. + +Use this command if you created a genesis account using the low-level CLI commands +(genesis create, bucket add-launch-pool, etc.) and want to register it on the +Metaplex platform to get a public launch page. + +Requires the same launch configuration that was used to create the genesis account, +provided as a JSON file via --launchConfig.` + + static override examples = [ + '$ mplx genesis launch register --launchConfig launch.json', + '$ mplx genesis launch register --launchConfig launch.json --network solana-devnet', + ] + + static override args = { + genesisAccount: Args.string({ + description: 'Genesis account address to register', + required: true, + }), + } + + static override flags = { + launchConfig: Flags.string({ + description: 'Path to JSON file with the launch configuration (same format as launch create input)', + required: true, + }), + network: Flags.option({ + description: 'Network override (auto-detected from RPC if not set)', + options: ['solana-mainnet', 'solana-devnet'] as const, + required: false, + })(), + apiUrl: Flags.string({ + description: 'Genesis API base URL', + default: 'https://api.metaplex.com', + required: false, + }), + } + + static override usage = 'genesis launch register [FLAGS]' + + public async run(): Promise { + const { args, flags } = await this.parse(GenesisLaunchRegister) + + const spinner = ora('Registering genesis account...').start() + + try { + // Detect network from chain if not specified + let network: SvmNetwork + if (flags.network) { + network = flags.network + } else { + network = this.context.chain === RpcChain.Mainnet + ? 'solana-mainnet' + : 'solana-devnet' + } + + // Read launch config from JSON file + const filePath = flags.launchConfig + if (!fs.existsSync(filePath)) { + throw new Error(`Launch config file not found: ${filePath}`) + } + + const fileContent = fs.readFileSync(filePath, 'utf-8') + const launchConfig = JSON.parse(fileContent) as CreateLaunchInput + + // Override network if specified via flag + launchConfig.network = network + + // Use the configured signer as wallet if not set in the config + if (!launchConfig.wallet) { + launchConfig.wallet = this.context.signer.publicKey.toString() + } + + const apiConfig: GenesisApiConfig = { + baseUrl: flags.apiUrl, + } + + const result = await registerLaunch(this.context.umi, apiConfig, { + genesisAccount: args.genesisAccount, + createLaunchInput: launchConfig, + }) + + if (result.existing) { + spinner.succeed('Genesis account was already registered.') + } else { + spinner.succeed('Genesis account registered successfully!') + } + + this.log('') + this.logSuccess(`Launch ID: ${result.launch.id}`) + this.log(`Launch Link: ${result.launch.link}`) + this.log(`Token ID: ${result.token.id}`) + this.log(`Mint Address: ${result.token.mintAddress}`) + } catch (error) { + spinner.fail('Failed to register genesis account') + if (error && typeof error === 'object' && 'responseBody' in error) { + this.logJson((error as { responseBody: unknown }).responseBody) + } + + throw error + } + } +} diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts new file mode 100644 index 0000000..a6b7223 --- /dev/null +++ b/test/commands/genesis/genesis.launch.test.ts @@ -0,0 +1,272 @@ +import { expect } from 'chai' +import fs from 'node:fs' +import path from 'node:path' +import { runCli } from '../../runCli' +import { stripAnsi } from './genesishelpers' + +describe('genesis launch commands', () => { + + before(async () => { + try { + await runCli( + ["toolbox", "sol", "airdrop", "100", "TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx"] + ) + } catch (error) { + // runCli may reject on OCLIF warnings in stderr (e.g. missing exports + // from updated SDK). The airdrop still succeeds if exit code is 0. + if (!(error as Error).message.includes('code 0')) { + throw error + } + } + + await new Promise(resolve => setTimeout(resolve, 10000)) + }) + + describe('genesis launch create', () => { + + it('fails when required flags are missing (no --name)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails when required flags are missing (no --symbol)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails when required flags are missing (no --image)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails when required flags are missing (no --tokenAllocation)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails when required flags are missing (no --raiseGoal)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails with non-existent locked allocations file', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + '--lockedAllocations', '/tmp/nonexistent-file-12345.json', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for non-existent file') + } catch (error) { + expect((error as Error).message).to.contain('not found') + } + }) + + it('calls the Genesis API with valid flags (expects API error since API is not local)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-06-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an API error (API not available on localnet)') + } catch (error) { + // The command should get past flag parsing and validation, + // then fail at the API call + const msg = (error as Error).message + expect(msg).to.contain('Failed') + } + }) + }) + + describe('genesis launch register', () => { + + it('fails when genesis account argument is missing', async () => { + // Create a temp config file for the test + const tmpConfig = path.join('/tmp', 'test-launch-config.json') + fs.writeFileSync(tmpConfig, JSON.stringify({ + wallet: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + token: { name: 'Test', symbol: 'TST', image: 'https://gateway.irys.xyz/abc' }, + launchType: 'project', + launch: { + launchpool: { + tokenAllocation: 500000000, + depositStartTime: '2025-06-01T00:00:00Z', + raiseGoal: 200, + raydiumLiquidityBps: 5000, + fundsRecipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + }, + }, + })) + + const cliInput = [ + 'genesis', 'launch', 'register', + '--launchConfig', tmpConfig, + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing argument') + } catch (error) { + expect((error as Error).message).to.not.be.empty + } + + fs.unlinkSync(tmpConfig) + }) + + it('fails when --launchConfig is missing', async () => { + const cliInput = [ + 'genesis', 'launch', 'register', + '11111111111111111111111111111111', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + } + }) + + it('fails with non-existent launch config file', async () => { + const cliInput = [ + 'genesis', 'launch', 'register', + '11111111111111111111111111111111', + '--launchConfig', '/tmp/nonexistent-config-12345.json', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for non-existent file') + } catch (error) { + expect((error as Error).message).to.contain('not found') + } + }) + + it('calls the Genesis API with valid input (expects API error since API is not local)', async () => { + const tmpConfig = path.join('/tmp', 'test-launch-config-register.json') + fs.writeFileSync(tmpConfig, JSON.stringify({ + wallet: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + token: { name: 'Test', symbol: 'TST', image: 'https://gateway.irys.xyz/abc' }, + launchType: 'project', + launch: { + launchpool: { + tokenAllocation: 500000000, + depositStartTime: '2025-06-01T00:00:00Z', + raiseGoal: 200, + raydiumLiquidityBps: 5000, + fundsRecipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + }, + }, + })) + + const cliInput = [ + 'genesis', 'launch', 'register', + '11111111111111111111111111111111', + '--launchConfig', tmpConfig, + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an API error') + } catch (error) { + const msg = (error as Error).message + expect(msg).to.contain('Failed') + } + + fs.unlinkSync(tmpConfig) + }) + }) +}) From 646256bb56b7d206064d31364f8e2fcfa0b2f993 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 15:59:46 +0100 Subject: [PATCH 2/8] update genesis SDK --- .amman/genesis.so | Bin 1107088 -> 1147088 bytes package.json | 2 +- pnpm-lock.yaml | 10 +- .../genesis/bucket/add-launch-pool.ts | 31 +- src/commands/genesis/transition.ts | 4 +- test/commands/genesis/genesis.launch.test.ts | 316 +++++++++++++++++- test/commands/genesis/genesishelpers.ts | 4 +- test/runCli.ts | 13 +- 8 files changed, 341 insertions(+), 39 deletions(-) diff --git a/.amman/genesis.so b/.amman/genesis.so index 61f98164777ec595418002042512f1b25a6a9cbc..b7e718dc3a123f3680782d584ed9e71d0e826975 100644 GIT binary patch delta 252855 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 z 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 a92wo>yHEXO?6~aRxlhJ2|A+tkNBn;|9Ta&0 delta 304953 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 z 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 S= 0.8.2 <= 1' - '@metaplex-foundation/genesis@0.20.3': - resolution: {integrity: sha512-1cuUImXEr5SO2B7CzOZodtOBwLxUZ0fRh5VD6cA1JImOgWud7+RIe5mgF++Td2jb6nt+1slEdUQvBSBxXLjkFQ==} + '@metaplex-foundation/genesis@0.20.5': + resolution: {integrity: sha512-yZZ8MEGKDJTg1hFCqkxUlsbcR+ydsGBZDmUxllSb8ePktHoQN8QxcB1/y3mBwGszhr1VABCIzVNk9IRm3UE5Bg==} peerDependencies: '@metaplex-foundation/umi': ^1.4.1 @@ -6590,7 +6590,7 @@ snapshots: dependencies: '@metaplex-foundation/umi': 1.4.1 - '@metaplex-foundation/genesis@0.20.3(@metaplex-foundation/umi@1.4.1)': + '@metaplex-foundation/genesis@0.20.5(@metaplex-foundation/umi@1.4.1)': dependencies: '@metaplex-foundation/mpl-token-metadata': 3.4.0(@metaplex-foundation/umi@1.4.1) '@metaplex-foundation/mpl-toolbox': 0.10.0(@metaplex-foundation/umi@1.4.1) diff --git a/src/commands/genesis/bucket/add-launch-pool.ts b/src/commands/genesis/bucket/add-launch-pool.ts index c6726ea..3172389 100644 --- a/src/commands/genesis/bucket/add-launch-pool.ts +++ b/src/commands/genesis/bucket/add-launch-pool.ts @@ -1,7 +1,9 @@ import { addLaunchPoolBucketV2, + setLaunchPoolBucketV2Behaviors, safeFetchGenesisAccountV2, findLaunchPoolBucketV2Pda, + createClaimSchedule, } from '@metaplex-foundation/genesis' import { publicKey, some, none } from '@metaplex-foundation/umi' import { Args, Flags } from '@oclif/core' @@ -196,14 +198,13 @@ Use Unix timestamps for absolute times.` // Parse optional ClaimSchedule const parseClaimSchedule = (json: string) => { const parsed = JSON.parse(json) - return { + return createClaimSchedule({ startTime: BigInt(parsed.startTime), endTime: BigInt(parsed.endTime), period: BigInt(parsed.period), cliffTime: BigInt(parsed.cliffTime), cliffAmountBps: Number(parsed.cliffAmountBps), - reserved: new Array(7).fill(0), - } + }) } // Parse optional Allowlist @@ -219,7 +220,7 @@ Use Unix timestamps for absolute times.` } } - // Build the add bucket transaction + // Build the add bucket transaction (without endBehaviors to stay within tx size limit) spinner.text = 'Adding launch pool bucket...' const transaction = addLaunchPoolBucketV2(this.context.umi, { genesisAccount: genesisAddress, @@ -258,11 +259,31 @@ Use Unix timestamps for absolute times.` minimumQuoteTokenThreshold: flags.minimumQuoteTokenThreshold ? some({ amount: BigInt(flags.minimumQuoteTokenThreshold) }) : none(), - endBehaviors, + endBehaviors: [], }) const result = await umiSendAndConfirmTransaction(this.context.umi, transaction) + // Set end behaviors in a separate transaction if provided + if (endBehaviors.length > 0) { + const [bucketPda] = findLaunchPoolBucketV2Pda(this.context.umi, { + genesisAccount: genesisAddress, + bucketIndex, + }) + + spinner.text = 'Setting end behaviors...' + const setBehaviorsTx = setLaunchPoolBucketV2Behaviors(this.context.umi, { + genesisAccount: genesisAddress, + bucket: bucketPda, + authority: this.context.signer, + payer: this.context.payer, + padding: new Array(3).fill(0), + endBehaviors, + }) + + await umiSendAndConfirmTransaction(this.context.umi, setBehaviorsTx) + } + // Get the bucket PDA const [bucketPda] = findLaunchPoolBucketV2Pda(this.context.umi, { genesisAccount: genesisAddress, diff --git a/src/commands/genesis/transition.ts b/src/commands/genesis/transition.ts index d317ee7..a3a358c 100644 --- a/src/commands/genesis/transition.ts +++ b/src/commands/genesis/transition.ts @@ -1,5 +1,5 @@ import { - transitionV2, + triggerBehaviorsV2, safeFetchGenesisAccountV2, findLaunchPoolBucketV2Pda, safeFetchLaunchPoolBucketV2, @@ -103,7 +103,7 @@ Requirements: // Build the transition transaction spinner.text = 'Executing transition...' - const transaction = transitionV2(this.context.umi, { + const transaction = triggerBehaviorsV2(this.context.umi, { genesisAccount: genesisAddress, primaryBucket: primaryBucketPda, baseMint: genesisAccount.baseMint, diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index a6b7223..b2f0265 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -2,28 +2,36 @@ import { expect } from 'chai' import fs from 'node:fs' import path from 'node:path' import { runCli } from '../../runCli' -import { stripAnsi } from './genesishelpers' +import { stripAnsi, createGenesisAccount, addLaunchPoolBucket } from './genesishelpers' describe('genesis launch commands', () => { before(async () => { - try { - await runCli( - ["toolbox", "sol", "airdrop", "100", "TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx"] - ) - } catch (error) { - // runCli may reject on OCLIF warnings in stderr (e.g. missing exports - // from updated SDK). The airdrop still succeeds if exit code is 0. - if (!(error as Error).message.includes('code 0')) { - throw error - } - } - + await runCli(["toolbox", "sol", "airdrop", "100", "TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx"]) await new Promise(resolve => setTimeout(resolve, 10000)) + await runCli(['toolbox', 'sol', 'wrap', '50']) }) describe('genesis launch create', () => { + it('fails when all required flags are missing', async () => { + try { + await runCli(['genesis', 'launch', 'create']) + expect.fail('Should have thrown an error for missing required flags') + } catch (error) { + const msg = (error as Error).message + expect(msg).to.contain('Missing required flag') + expect(msg).to.contain('name') + expect(msg).to.contain('symbol') + expect(msg).to.contain('image') + expect(msg).to.contain('tokenAllocation') + expect(msg).to.contain('depositStartTime') + expect(msg).to.contain('raiseGoal') + expect(msg).to.contain('raydiumLiquidityBps') + expect(msg).to.contain('fundsRecipient') + } + }) + it('fails when required flags are missing (no --name)', async () => { const cliInput = [ 'genesis', 'launch', 'create', @@ -41,6 +49,7 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing required flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('name') } }) @@ -61,6 +70,7 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing required flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('symbol') } }) @@ -81,6 +91,7 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing required flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('image') } }) @@ -101,6 +112,28 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing required flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('tokenAllocation') + } + }) + + it('fails when required flags are missing (no --depositStartTime)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('depositStartTime') } }) @@ -121,6 +154,49 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing required flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('raiseGoal') + } + }) + + it('fails when required flags are missing (no --raydiumLiquidityBps)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('raydiumLiquidityBps') + } + }) + + it('fails when required flags are missing (no --fundsRecipient)', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('fundsRecipient') } }) @@ -146,6 +222,103 @@ describe('genesis launch commands', () => { } }) + it('fails when locked allocations file is not a JSON array', async () => { + const tmpFile = path.join('/tmp', 'test-bad-allocations.json') + fs.writeFileSync(tmpFile, JSON.stringify({ notAnArray: true })) + + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-03-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + '--lockedAllocations', tmpFile, + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for non-array allocations') + } catch (error) { + expect((error as Error).message).to.contain('must contain a JSON array') + } + + fs.unlinkSync(tmpFile) + }) + + it('parses locked allocations file and reaches API call', async () => { + const tmpFile = path.join('/tmp', 'test-locked-allocations.json') + fs.writeFileSync(tmpFile, JSON.stringify([ + { + name: 'Team', + recipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + tokenAmount: 200000000, + vestingStartTime: '2025-06-01T00:00:00Z', + vestingDuration: { value: 1, unit: 'YEAR' }, + unlockSchedule: 'MONTH', + cliff: { + duration: { value: 3, unit: 'MONTH' }, + unlockAmount: 50000000, + }, + }, + ])) + + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-06-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + '--lockedAllocations', tmpFile, + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an API error (API not available on localnet)') + } catch (error) { + // Should get past file parsing and validation, then fail at the API call + const msg = (error as Error).message + expect(msg).to.contain('Failed') + } + + fs.unlinkSync(tmpFile) + }) + + it('passes optional metadata flags and reaches API call', async () => { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--description', 'A test token with all metadata', + '--website', 'https://example.com', + '--twitter', 'https://x.com/testproject', + '--telegram', 'https://t.me/testproject', + '--tokenAllocation', '500000000', + '--depositStartTime', '2025-06-01T00:00:00Z', + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + ] + + try { + await runCli(cliInput) + expect.fail('Should have thrown an API error (API not available on localnet)') + } catch (error) { + // Should get past flag parsing and validation (including metadata), + // then fail at the API call + const msg = (error as Error).message + expect(msg).to.contain('Failed') + } + }) + it('calls the Genesis API with valid flags (expects API error since API is not local)', async () => { const cliInput = [ 'genesis', 'launch', 'create', @@ -217,6 +390,7 @@ describe('genesis launch commands', () => { expect.fail('Should have thrown an error for missing flag') } catch (error) { expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain('launchConfig') } }) @@ -269,4 +443,120 @@ describe('genesis launch commands', () => { fs.unlinkSync(tmpConfig) }) }) + + describe('add-launch-pool with claimSchedule (createClaimSchedule)', () => { + let genesisAddress: string + + it('creates a genesis account for claimSchedule test', async () => { + const result = await createGenesisAccount({ + name: 'ClaimSchedule Test', + symbol: 'CST', + totalSupply: '1000000000', + decimals: 9, + }) + + genesisAddress = result.genesisAddress + expect(genesisAddress).to.match(/^[a-zA-Z0-9]+$/) + }) + + it('adds a launch pool bucket with claimSchedule', async () => { + const now = Math.floor(Date.now() / 1000) + const depositStart = (now - 3600).toString() + const depositEnd = (now + 86400).toString() + const claimStart = (now + 86400 + 1).toString() + const claimEnd = (now + 86400 * 365).toString() + + const claimSchedule = JSON.stringify({ + startTime: now + 86400 + 1, + endTime: now + 86400 * 100, + period: 86400, + cliffTime: now + 86400 + 1, + cliffAmountBps: 1000, + }) + + const cliInput = [ + 'genesis', 'bucket', 'add-launch-pool', + genesisAddress, + '--allocation', '1000000000', + '--depositStart', depositStart, + '--depositEnd', depositEnd, + '--claimStart', claimStart, + '--claimEnd', claimEnd, + '--claimSchedule', claimSchedule, + ] + + const { stdout, stderr, code } = await runCli(cliInput) + + const cleanStderr = stripAnsi(stderr) + const cleanStdout = stripAnsi(stdout) + + expect(code).to.equal(0) + expect(cleanStderr).to.contain('Launch pool bucket added successfully') + expect(cleanStdout).to.contain('Token Allocation: 1000000000') + }) + + it('fetches the bucket and verifies it was created', async () => { + await new Promise(resolve => setTimeout(resolve, 2000)) + + const { stdout, stderr, code } = await runCli([ + 'genesis', 'bucket', 'fetch', + genesisAddress, + '--bucketIndex', '0', + ]) + + const cleanStderr = stripAnsi(stderr) + const cleanStdout = stripAnsi(stdout) + + expect(code).to.equal(0) + expect(cleanStderr).to.contain('Bucket fetched successfully') + expect(cleanStdout).to.contain('Launch Pool Bucket') + expect(cleanStdout).to.contain('Base Token Allocation: 1000000000') + }) + }) + + describe('transition uses triggerBehaviorsV2', () => { + let genesisAddress: string + + it('creates a genesis account for transition test', async () => { + const result = await createGenesisAccount({ + name: 'Transition Test', + symbol: 'TRN', + totalSupply: '1000000000', + decimals: 9, + }) + + genesisAddress = result.genesisAddress + expect(genesisAddress).to.match(/^[a-zA-Z0-9]+$/) + }) + + it('adds a launch pool bucket', async () => { + const now = Math.floor(Date.now() / 1000) + const result = await addLaunchPoolBucket(genesisAddress, { + allocation: '1000000000', + depositStart: (now - 3600).toString(), + depositEnd: (now + 86400).toString(), + claimStart: (now + 86400 + 1).toString(), + claimEnd: (now + 86400 * 365).toString(), + }) + + expect(result.bucketAddress).to.match(/^[a-zA-Z0-9]+$/) + }) + + it('transition invokes triggerBehaviorsV2 on-chain', async () => { + // The transition command invokes triggerBehaviorsV2. + // It will fail because the account is not finalized, + // but the program log confirms the renamed function is called. + try { + await runCli([ + 'genesis', 'transition', genesisAddress, + '--bucketIndex', '0', + ]) + expect.fail('Should have thrown an error since account is not finalized') + } catch (error) { + const msg = (error as Error).message + // The program log shows "TriggerBehaviorsV2" confirming the rename works + expect(msg).to.contain('TriggerBehaviorsV2') + } + }) + }) }) diff --git a/test/commands/genesis/genesishelpers.ts b/test/commands/genesis/genesishelpers.ts index d36f4df..39324b6 100644 --- a/test/commands/genesis/genesishelpers.ts +++ b/test/commands/genesis/genesishelpers.ts @@ -106,7 +106,7 @@ const addLaunchPoolBucket = async ( const allocation = options?.allocation ?? '500000000' const depositStart = options?.depositStart ?? (now - 3600).toString() const depositEnd = options?.depositEnd ?? (now + 86400).toString() - const claimStart = options?.claimStart ?? (now + 86400).toString() + const claimStart = options?.claimStart ?? (now + 86400 + 1).toString() const claimEnd = options?.claimEnd ?? (now + 86400 * 365).toString() const cliInput = [ @@ -165,7 +165,7 @@ const addPresaleBucket = async ( const quoteCap = options?.quoteCap ?? '1000000000' const depositStart = options?.depositStart ?? (now - 3600).toString() const depositEnd = options?.depositEnd ?? (now + 86400).toString() - const claimStart = options?.claimStart ?? (now + 86400).toString() + const claimStart = options?.claimStart ?? (now + 86400 + 1).toString() const claimEnd = options?.claimEnd ?? (now + 86400 * 365).toString() const bucketIndex = (options?.bucketIndex ?? 0).toString() diff --git a/test/runCli.ts b/test/runCli.ts index 51f4bb2..2ec0e1b 100644 --- a/test/runCli.ts +++ b/test/runCli.ts @@ -12,7 +12,6 @@ export const runCli = (args: string[], stdin?: string[]): Promise<{ stdout: stri let stdout = '' let stderr = '' - let hasError = false child.stdout.on('data', (data) => { const str = data.toString() @@ -22,27 +21,19 @@ export const runCli = (args: string[], stdin?: string[]): Promise<{ stdout: stri child.stderr.on('data', (data) => { const str = data.toString() - // Check if this is an actual error message - if (str.toLowerCase().includes('error') || str.toLowerCase().includes('failed')) { - hasError = true - } // console.log('stderr:', str) stderr += str }) child.on('error', (error) => { - // console.error('Process error:', error) - hasError = true reject(error) }) child.on('close', (code) => { - // If we have an error in stderr or non-zero exit code, treat as error - if (hasError || code !== 0) { + if (code !== 0) { reject(new Error(`Process failed with code ${code}\nstderr: ${stderr}`)) } else { - // console.log('Process exited with code:', code) - resolve({ stdout, stderr, code: code || 0 }) + resolve({ stdout, stderr, code: 0 }) } }) From 57f024dc61746136a5a08e18df03c54ce2d14d24 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 16:38:43 +0100 Subject: [PATCH 3/8] code rabbit --- .../genesis/bucket/add-launch-pool.ts | 33 +++++++++------ src/commands/genesis/launch/create.ts | 42 ++++++++++++++++--- src/commands/genesis/launch/index.ts | 13 ------ src/commands/genesis/launch/register.ts | 8 ++-- test/commands/genesis/genesis.launch.test.ts | 39 +++++++++-------- 5 files changed, 82 insertions(+), 53 deletions(-) diff --git a/src/commands/genesis/bucket/add-launch-pool.ts b/src/commands/genesis/bucket/add-launch-pool.ts index 3172389..32a881b 100644 --- a/src/commands/genesis/bucket/add-launch-pool.ts +++ b/src/commands/genesis/bucket/add-launch-pool.ts @@ -262,15 +262,17 @@ Use Unix timestamps for absolute times.` endBehaviors: [], }) + // Compute bucket PDA once for reuse + const [bucketPda] = findLaunchPoolBucketV2Pda(this.context.umi, { + genesisAccount: genesisAddress, + bucketIndex, + }) + const result = await umiSendAndConfirmTransaction(this.context.umi, transaction) // Set end behaviors in a separate transaction if provided + let behaviorsSignature: string | undefined if (endBehaviors.length > 0) { - const [bucketPda] = findLaunchPoolBucketV2Pda(this.context.umi, { - genesisAccount: genesisAddress, - bucketIndex, - }) - spinner.text = 'Setting end behaviors...' const setBehaviorsTx = setLaunchPoolBucketV2Behaviors(this.context.umi, { genesisAccount: genesisAddress, @@ -281,15 +283,10 @@ Use Unix timestamps for absolute times.` endBehaviors, }) - await umiSendAndConfirmTransaction(this.context.umi, setBehaviorsTx) + const behaviorsResult = await umiSendAndConfirmTransaction(this.context.umi, setBehaviorsTx) + behaviorsSignature = txSignatureToString(behaviorsResult.transaction.signature as Uint8Array) } - // Get the bucket PDA - const [bucketPda] = findLaunchPoolBucketV2Pda(this.context.umi, { - genesisAccount: genesisAddress, - bucketIndex, - }) - spinner.succeed('Launch pool bucket added successfully!') this.log('') @@ -317,6 +314,18 @@ Use Unix timestamps for absolute times.` 'transaction' ) ) + if (behaviorsSignature) { + this.log('') + this.log(`Behaviors Transaction: ${behaviorsSignature}`) + this.log( + generateExplorerUrl( + this.context.explorer, + this.context.chain, + behaviorsSignature, + 'transaction' + ) + ) + } } catch (error) { spinner.fail('Failed to add launch pool bucket') diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts index 2066143..1caa5db 100644 --- a/src/commands/genesis/launch/create.ts +++ b/src/commands/genesis/launch/create.ts @@ -6,11 +6,12 @@ import { createAndRegisterLaunch, } from '@metaplex-foundation/genesis' import { Flags } from '@oclif/core' -import fs from 'node:fs' +import { existsSync } from 'node:fs' import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' import { generateExplorerUrl } from '../../../explorers.js' +import { readJsonSync } from '../../../lib/file.js' import { RpcChain, txSignatureToString } from '../../../lib/util.js' export default class GenesisLaunchCreate extends TransactionCommand { @@ -130,16 +131,40 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` let lockedAllocations: LockedAllocation[] | undefined if (flags.lockedAllocations) { const filePath = flags.lockedAllocations - if (!fs.existsSync(filePath)) { + if (!existsSync(filePath)) { throw new Error(`Locked allocations file not found: ${filePath}`) } - const fileContent = fs.readFileSync(filePath, 'utf-8') - lockedAllocations = JSON.parse(fileContent) as LockedAllocation[] + const parsed = readJsonSync(filePath) - if (!Array.isArray(lockedAllocations)) { + if (!Array.isArray(parsed)) { throw new Error('Locked allocations file must contain a JSON array') } + + const validTimeUnits = new Set(['SECOND', 'MINUTE', 'HOUR', 'DAY', 'WEEK', 'TWO_WEEKS', 'MONTH', 'QUARTER', 'YEAR']) + for (let i = 0; i < parsed.length; i++) { + const entry = parsed[i] + if (typeof entry.name !== 'string' || entry.name.length === 0) { + throw new Error(`Locked allocation [${i}]: "name" must be a non-empty string`) + } + if (typeof entry.recipient !== 'string' || entry.recipient.length === 0) { + throw new Error(`Locked allocation [${i}]: "recipient" must be a non-empty string`) + } + if (typeof entry.tokenAmount !== 'number' || entry.tokenAmount <= 0) { + throw new Error(`Locked allocation [${i}]: "tokenAmount" must be a positive number`) + } + if (!entry.vestingStartTime || (typeof entry.vestingStartTime !== 'string' && !(entry.vestingStartTime instanceof Date))) { + throw new Error(`Locked allocation [${i}]: "vestingStartTime" must be a date string or Date`) + } + if (!entry.vestingDuration || typeof entry.vestingDuration.value !== 'number' || !validTimeUnits.has(entry.vestingDuration.unit)) { + throw new Error(`Locked allocation [${i}]: "vestingDuration" must have a numeric "value" and a valid "unit"`) + } + if (!validTimeUnits.has(entry.unlockSchedule)) { + throw new Error(`Locked allocation [${i}]: "unlockSchedule" must be a valid time unit`) + } + } + + lockedAllocations = parsed as LockedAllocation[] } // Build external links @@ -181,11 +206,16 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` spinner.text = 'Building transactions via Genesis API...' + const allowedCommitments = ['processed', 'confirmed', 'finalized'] as const + const commitment = allowedCommitments.includes(this.context.commitment as typeof allowedCommitments[number]) + ? (this.context.commitment as typeof allowedCommitments[number]) + : 'confirmed' + const result = await createAndRegisterLaunch( this.context.umi, apiConfig, input, - { commitment: (this.context.commitment as 'processed' | 'confirmed' | 'finalized') ?? 'confirmed' }, + { commitment }, ) spinner.succeed('Token launch created and registered successfully!') diff --git a/src/commands/genesis/launch/index.ts b/src/commands/genesis/launch/index.ts index 948e12a..60d2695 100644 --- a/src/commands/genesis/launch/index.ts +++ b/src/commands/genesis/launch/index.ts @@ -10,18 +10,5 @@ export default class GenesisLaunch extends Command { public async run(): Promise { await this.parse(GenesisLaunch) - - this.log('Genesis Launch Commands - Create and register token launches via the Genesis API') - this.log('') - this.log('The Genesis API provides an all-in-one flow for creating token launches:') - this.log(' 1. Builds the on-chain transactions (genesis account, buckets, etc.)') - this.log(' 2. Signs and sends them to the network') - this.log(' 3. Registers the launch on the Metaplex platform') - this.log('') - this.log('Available commands:') - this.log(' genesis launch create Create a new token launch via the Genesis API') - this.log(' genesis launch register Register an existing genesis account') - this.log('') - this.log('Run "mplx genesis launch --help" for more information.') } } diff --git a/src/commands/genesis/launch/register.ts b/src/commands/genesis/launch/register.ts index bd9c248..5fa9076 100644 --- a/src/commands/genesis/launch/register.ts +++ b/src/commands/genesis/launch/register.ts @@ -5,10 +5,11 @@ import { registerLaunch, } from '@metaplex-foundation/genesis' import { Args, Flags } from '@oclif/core' -import fs from 'node:fs' +import { existsSync } from 'node:fs' import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' +import { readJsonSync } from '../../../lib/file.js' import { RpcChain } from '../../../lib/util.js' export default class GenesisLaunchRegister extends TransactionCommand { @@ -70,12 +71,11 @@ provided as a JSON file via --launchConfig.` // Read launch config from JSON file const filePath = flags.launchConfig - if (!fs.existsSync(filePath)) { + if (!existsSync(filePath)) { throw new Error(`Launch config file not found: ${filePath}`) } - const fileContent = fs.readFileSync(filePath, 'utf-8') - const launchConfig = JSON.parse(fileContent) as CreateLaunchInput + const launchConfig = readJsonSync(filePath) as CreateLaunchInput // Override network if specified via flag launchConfig.network = network diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index b2f0265..4d5c57d 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -4,6 +4,11 @@ import path from 'node:path' import { runCli } from '../../runCli' import { stripAnsi, createGenesisAccount, addLaunchPoolBucket } from './genesishelpers' +/** Return an ISO timestamp offset from now by the given number of seconds. */ +function futureIso(offsetSeconds: number): string { + return new Date(Date.now() + offsetSeconds * 1000).toISOString() +} + describe('genesis launch commands', () => { before(async () => { @@ -38,7 +43,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -59,7 +64,7 @@ describe('genesis launch commands', () => { '--name', 'My Token', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -80,7 +85,7 @@ describe('genesis launch commands', () => { '--name', 'My Token', '--symbol', 'MTK', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -101,7 +106,7 @@ describe('genesis launch commands', () => { '--name', 'My Token', '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -144,7 +149,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', ] @@ -165,7 +170,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', ] @@ -186,7 +191,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', ] @@ -207,7 +212,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -232,7 +237,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-03-01T00:00:00Z', + '--depositStartTime', futureIso(7 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -256,7 +261,7 @@ describe('genesis launch commands', () => { name: 'Team', recipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', tokenAmount: 200000000, - vestingStartTime: '2025-06-01T00:00:00Z', + vestingStartTime: futureIso(30 * 86400), vestingDuration: { value: 1, unit: 'YEAR' }, unlockSchedule: 'MONTH', cliff: { @@ -272,7 +277,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-06-01T00:00:00Z', + '--depositStartTime', futureIso(30 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -302,7 +307,7 @@ describe('genesis launch commands', () => { '--twitter', 'https://x.com/testproject', '--telegram', 'https://t.me/testproject', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-06-01T00:00:00Z', + '--depositStartTime', futureIso(30 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -326,7 +331,7 @@ describe('genesis launch commands', () => { '--symbol', 'MTK', '--image', 'https://gateway.irys.xyz/abc123', '--tokenAllocation', '500000000', - '--depositStartTime', '2025-06-01T00:00:00Z', + '--depositStartTime', futureIso(30 * 86400), '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -356,7 +361,7 @@ describe('genesis launch commands', () => { launch: { launchpool: { tokenAllocation: 500000000, - depositStartTime: '2025-06-01T00:00:00Z', + depositStartTime: futureIso(30 * 86400), raiseGoal: 200, raydiumLiquidityBps: 5000, fundsRecipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -418,7 +423,7 @@ describe('genesis launch commands', () => { launch: { launchpool: { tokenAllocation: 500000000, - depositStartTime: '2025-06-01T00:00:00Z', + depositStartTime: futureIso(30 * 86400), raiseGoal: 200, raydiumLiquidityBps: 5000, fundsRecipient: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', @@ -456,7 +461,6 @@ describe('genesis launch commands', () => { }) genesisAddress = result.genesisAddress - expect(genesisAddress).to.match(/^[a-zA-Z0-9]+$/) }) it('adds a launch pool bucket with claimSchedule', async () => { @@ -526,7 +530,6 @@ describe('genesis launch commands', () => { }) genesisAddress = result.genesisAddress - expect(genesisAddress).to.match(/^[a-zA-Z0-9]+$/) }) it('adds a launch pool bucket', async () => { @@ -539,7 +542,7 @@ describe('genesis launch commands', () => { claimEnd: (now + 86400 * 365).toString(), }) - expect(result.bucketAddress).to.match(/^[a-zA-Z0-9]+$/) + expect(result.bucketAddress).to.be.a('string') }) it('transition invokes triggerBehaviorsV2 on-chain', async () => { From b2078ed211933aa5d4c8946369f0e6f8b2ace0f8 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 17:58:29 +0100 Subject: [PATCH 4/8] Code Rabbit 2 --- .../genesis/bucket/add-launch-pool.ts | 39 ++++--- src/commands/genesis/launch/create.ts | 4 +- src/commands/genesis/launch/register.ts | 11 ++ test/commands/genesis/genesis.launch.test.ts | 100 +++++++++--------- 4 files changed, 87 insertions(+), 67 deletions(-) diff --git a/src/commands/genesis/bucket/add-launch-pool.ts b/src/commands/genesis/bucket/add-launch-pool.ts index 32a881b..a56aba4 100644 --- a/src/commands/genesis/bucket/add-launch-pool.ts +++ b/src/commands/genesis/bucket/add-launch-pool.ts @@ -272,22 +272,35 @@ Use Unix timestamps for absolute times.` // Set end behaviors in a separate transaction if provided let behaviorsSignature: string | undefined + let behaviorsError: unknown if (endBehaviors.length > 0) { - spinner.text = 'Setting end behaviors...' - const setBehaviorsTx = setLaunchPoolBucketV2Behaviors(this.context.umi, { - genesisAccount: genesisAddress, - bucket: bucketPda, - authority: this.context.signer, - payer: this.context.payer, - padding: new Array(3).fill(0), - endBehaviors, - }) - - const behaviorsResult = await umiSendAndConfirmTransaction(this.context.umi, setBehaviorsTx) - behaviorsSignature = txSignatureToString(behaviorsResult.transaction.signature as Uint8Array) + try { + spinner.text = 'Setting end behaviors...' + const setBehaviorsTx = setLaunchPoolBucketV2Behaviors(this.context.umi, { + genesisAccount: genesisAddress, + bucket: bucketPda, + authority: this.context.signer, + payer: this.context.payer, + padding: new Array(3).fill(0), + endBehaviors, + }) + + const behaviorsResult = await umiSendAndConfirmTransaction(this.context.umi, setBehaviorsTx) + behaviorsSignature = txSignatureToString(behaviorsResult.transaction.signature as Uint8Array) + } catch (error) { + behaviorsError = error + } } - spinner.succeed('Launch pool bucket added successfully!') + if (behaviorsError) { + spinner.warn('Bucket created but failed to set end behaviors') + this.warn( + `End behaviors were not set. Run setLaunchPoolBucketV2Behaviors manually for bucket ${bucketPda}.\n` + + `Error: ${behaviorsError instanceof Error ? behaviorsError.message : String(behaviorsError)}` + ) + } else { + spinner.succeed('Launch pool bucket added successfully!') + } this.log('') this.logSuccess(`Launch Pool Bucket Added`) diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts index 1caa5db..a19c476 100644 --- a/src/commands/genesis/launch/create.ts +++ b/src/commands/genesis/launch/create.ts @@ -153,8 +153,8 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` if (typeof entry.tokenAmount !== 'number' || entry.tokenAmount <= 0) { throw new Error(`Locked allocation [${i}]: "tokenAmount" must be a positive number`) } - if (!entry.vestingStartTime || (typeof entry.vestingStartTime !== 'string' && !(entry.vestingStartTime instanceof Date))) { - throw new Error(`Locked allocation [${i}]: "vestingStartTime" must be a date string or Date`) + if (typeof entry.vestingStartTime !== 'string' || entry.vestingStartTime.length === 0) { + throw new Error(`Locked allocation [${i}]: "vestingStartTime" must be a non-empty date string`) } if (!entry.vestingDuration || typeof entry.vestingDuration.value !== 'number' || !validTimeUnits.has(entry.vestingDuration.unit)) { throw new Error(`Locked allocation [${i}]: "vestingDuration" must have a numeric "value" and a valid "unit"`) diff --git a/src/commands/genesis/launch/register.ts b/src/commands/genesis/launch/register.ts index 5fa9076..bedd531 100644 --- a/src/commands/genesis/launch/register.ts +++ b/src/commands/genesis/launch/register.ts @@ -77,6 +77,17 @@ provided as a JSON file via --launchConfig.` const launchConfig = readJsonSync(filePath) as CreateLaunchInput + // Validate required top-level fields + if (!launchConfig.token || typeof launchConfig.token !== 'object') { + throw new Error('Launch config is missing required "token" object (must include name, symbol, image)') + } + if (!launchConfig.launch || typeof launchConfig.launch !== 'object') { + throw new Error('Launch config is missing required "launch" object (must include launchpool config)') + } + if (launchConfig.launchType !== 'project') { + throw new Error(`Launch config "launchType" must be "project", got "${launchConfig.launchType}"`) + } + // Override network if specified via flag launchConfig.network = network diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index 4d5c57d..a633bba 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -231,27 +231,27 @@ describe('genesis launch commands', () => { const tmpFile = path.join('/tmp', 'test-bad-allocations.json') fs.writeFileSync(tmpFile, JSON.stringify({ notAnArray: true })) - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - '--lockedAllocations', tmpFile, - ] - try { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', futureIso(7 * 86400), + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + '--lockedAllocations', tmpFile, + ] + await runCli(cliInput) expect.fail('Should have thrown an error for non-array allocations') } catch (error) { expect((error as Error).message).to.contain('must contain a JSON array') + } finally { + fs.unlinkSync(tmpFile) } - - fs.unlinkSync(tmpFile) }) it('parses locked allocations file and reaches API call', async () => { @@ -271,29 +271,29 @@ describe('genesis launch commands', () => { }, ])) - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(30 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - '--lockedAllocations', tmpFile, - ] - try { + const cliInput = [ + 'genesis', 'launch', 'create', + '--name', 'My Token', + '--symbol', 'MTK', + '--image', 'https://gateway.irys.xyz/abc123', + '--tokenAllocation', '500000000', + '--depositStartTime', futureIso(30 * 86400), + '--raiseGoal', '200', + '--raydiumLiquidityBps', '5000', + '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', + '--lockedAllocations', tmpFile, + ] + await runCli(cliInput) expect.fail('Should have thrown an API error (API not available on localnet)') } catch (error) { // Should get past file parsing and validation, then fail at the API call const msg = (error as Error).message expect(msg).to.contain('Failed') + } finally { + fs.unlinkSync(tmpFile) } - - fs.unlinkSync(tmpFile) }) it('passes optional metadata flags and reaches API call', async () => { @@ -369,19 +369,19 @@ describe('genesis launch commands', () => { }, })) - const cliInput = [ - 'genesis', 'launch', 'register', - '--launchConfig', tmpConfig, - ] - try { + const cliInput = [ + 'genesis', 'launch', 'register', + '--launchConfig', tmpConfig, + ] + await runCli(cliInput) expect.fail('Should have thrown an error for missing argument') } catch (error) { expect((error as Error).message).to.not.be.empty + } finally { + fs.unlinkSync(tmpConfig) } - - fs.unlinkSync(tmpConfig) }) it('fails when --launchConfig is missing', async () => { @@ -431,28 +431,28 @@ describe('genesis launch commands', () => { }, })) - const cliInput = [ - 'genesis', 'launch', 'register', - '11111111111111111111111111111111', - '--launchConfig', tmpConfig, - ] - try { + const cliInput = [ + 'genesis', 'launch', 'register', + '11111111111111111111111111111111', + '--launchConfig', tmpConfig, + ] + await runCli(cliInput) expect.fail('Should have thrown an API error') } catch (error) { const msg = (error as Error).message expect(msg).to.contain('Failed') + } finally { + fs.unlinkSync(tmpConfig) } - - fs.unlinkSync(tmpConfig) }) }) describe('add-launch-pool with claimSchedule (createClaimSchedule)', () => { let genesisAddress: string - it('creates a genesis account for claimSchedule test', async () => { + before(async () => { const result = await createGenesisAccount({ name: 'ClaimSchedule Test', symbol: 'CST', @@ -521,7 +521,7 @@ describe('genesis launch commands', () => { describe('transition uses triggerBehaviorsV2', () => { let genesisAddress: string - it('creates a genesis account for transition test', async () => { + before(async () => { const result = await createGenesisAccount({ name: 'Transition Test', symbol: 'TRN', @@ -530,19 +530,15 @@ describe('genesis launch commands', () => { }) genesisAddress = result.genesisAddress - }) - it('adds a launch pool bucket', async () => { const now = Math.floor(Date.now() / 1000) - const result = await addLaunchPoolBucket(genesisAddress, { + await addLaunchPoolBucket(genesisAddress, { allocation: '1000000000', depositStart: (now - 3600).toString(), depositEnd: (now + 86400).toString(), claimStart: (now + 86400 + 1).toString(), claimEnd: (now + 86400 * 365).toString(), }) - - expect(result.bucketAddress).to.be.a('string') }) it('transition invokes triggerBehaviorsV2 on-chain', async () => { From b010248b4bd7112779bfff74715f25b4f98549f2 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 18:24:40 +0100 Subject: [PATCH 5/8] CR3 --- src/commands/genesis/launch/create.ts | 22 ++- src/commands/genesis/launch/register.ts | 11 +- src/lib/util.ts | 4 + test/commands/genesis/genesis.launch.test.ts | 194 +++---------------- 4 files changed, 46 insertions(+), 185 deletions(-) diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts index a19c476..b987e2b 100644 --- a/src/commands/genesis/launch/create.ts +++ b/src/commands/genesis/launch/create.ts @@ -12,7 +12,7 @@ import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' import { generateExplorerUrl } from '../../../explorers.js' import { readJsonSync } from '../../../lib/file.js' -import { RpcChain, txSignatureToString } from '../../../lib/util.js' +import { detectSvmNetwork, txSignatureToString } from '../../../lib/util.js' export default class GenesisLaunchCreate extends TransactionCommand { static override description = `Create a new token launch via the Genesis API. @@ -118,14 +118,7 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` try { // Detect network from chain if not specified - let network: SvmNetwork - if (flags.network) { - network = flags.network - } else { - network = this.context.chain === RpcChain.Mainnet - ? 'solana-mainnet' - : 'solana-devnet' - } + const network: SvmNetwork = flags.network ?? detectSvmNetwork(this.context.chain) // Parse locked allocations from JSON file if provided let lockedAllocations: LockedAllocation[] | undefined @@ -162,6 +155,17 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` if (!validTimeUnits.has(entry.unlockSchedule)) { throw new Error(`Locked allocation [${i}]: "unlockSchedule" must be a valid time unit`) } + if (entry.cliff !== undefined) { + if (typeof entry.cliff !== 'object' || entry.cliff === null) { + throw new Error(`Locked allocation [${i}]: "cliff" must be an object`) + } + if (!entry.cliff.duration || typeof entry.cliff.duration.value !== 'number' || !validTimeUnits.has(entry.cliff.duration.unit)) { + throw new Error(`Locked allocation [${i}]: "cliff.duration" must have a numeric "value" and a valid "unit"`) + } + if (entry.cliff.unlockAmount !== undefined && (typeof entry.cliff.unlockAmount !== 'number' || entry.cliff.unlockAmount < 0)) { + throw new Error(`Locked allocation [${i}]: "cliff.unlockAmount" must be a non-negative number`) + } + } } lockedAllocations = parsed as LockedAllocation[] diff --git a/src/commands/genesis/launch/register.ts b/src/commands/genesis/launch/register.ts index bedd531..81db4f3 100644 --- a/src/commands/genesis/launch/register.ts +++ b/src/commands/genesis/launch/register.ts @@ -10,7 +10,7 @@ import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' import { readJsonSync } from '../../../lib/file.js' -import { RpcChain } from '../../../lib/util.js' +import { detectSvmNetwork } from '../../../lib/util.js' export default class GenesisLaunchRegister extends TransactionCommand { static override description = `Register an existing genesis account with the Metaplex platform. @@ -60,14 +60,7 @@ provided as a JSON file via --launchConfig.` try { // Detect network from chain if not specified - let network: SvmNetwork - if (flags.network) { - network = flags.network - } else { - network = this.context.chain === RpcChain.Mainnet - ? 'solana-mainnet' - : 'solana-devnet' - } + const network: SvmNetwork = flags.network ?? detectSvmNetwork(this.context.chain) // Read launch config from JSON file const filePath = flags.launchConfig diff --git a/src/lib/util.ts b/src/lib/util.ts index ef5c7ec..75ecd7e 100644 --- a/src/lib/util.ts +++ b/src/lib/util.ts @@ -112,6 +112,10 @@ export enum RpcChain { Localnet } +export function detectSvmNetwork(chain: RpcChain): 'solana-mainnet' | 'solana-devnet' { + return chain === RpcChain.Mainnet ? 'solana-mainnet' : 'solana-devnet' +} + const GENESIS_HASH_MAP = new Map([ ['5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d', RpcChain.Mainnet], // Solana Mainnet (current) ['EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG', RpcChain.Devnet], // Solana Devnet (current) diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index a633bba..2506b5b 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -37,173 +37,33 @@ describe('genesis launch commands', () => { } }) - it('fails when required flags are missing (no --name)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('name') - } - }) - - it('fails when required flags are missing (no --symbol)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('symbol') - } - }) - - it('fails when required flags are missing (no --image)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('image') - } - }) - - it('fails when required flags are missing (no --tokenAllocation)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('tokenAllocation') - } - }) - - it('fails when required flags are missing (no --depositStartTime)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('depositStartTime') - } - }) - - it('fails when required flags are missing (no --raiseGoal)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raydiumLiquidityBps', '5000', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('raiseGoal') - } - }) - - it('fails when required flags are missing (no --raydiumLiquidityBps)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('raydiumLiquidityBps') - } - }) - - it('fails when required flags are missing (no --fundsRecipient)', async () => { - const cliInput = [ - 'genesis', 'launch', 'create', - '--name', 'My Token', - '--symbol', 'MTK', - '--image', 'https://gateway.irys.xyz/abc123', - '--tokenAllocation', '500000000', - '--depositStartTime', futureIso(7 * 86400), - '--raiseGoal', '200', - '--raydiumLiquidityBps', '5000', - ] - - try { - await runCli(cliInput) - expect.fail('Should have thrown an error for missing required flag') - } catch (error) { - expect((error as Error).message).to.contain('Missing required flag') - expect((error as Error).message).to.contain('fundsRecipient') - } - }) + const allFlags: Record = { + name: ['--name', 'My Token'], + symbol: ['--symbol', 'MTK'], + image: ['--image', 'https://gateway.irys.xyz/abc123'], + tokenAllocation: ['--tokenAllocation', '500000000'], + depositStartTime: ['--depositStartTime', futureIso(7 * 86400)], + raiseGoal: ['--raiseGoal', '200'], + raydiumLiquidityBps: ['--raydiumLiquidityBps', '5000'], + fundsRecipient: ['--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx'], + } + + for (const omitted of Object.keys(allFlags)) { + it(`fails when required flags are missing (no --${omitted})`, async () => { + const cliInput = ['genesis', 'launch', 'create'] + for (const [key, pair] of Object.entries(allFlags)) { + if (key !== omitted) cliInput.push(...pair) + } + + try { + await runCli(cliInput) + expect.fail('Should have thrown an error for missing required flag') + } catch (error) { + expect((error as Error).message).to.contain('Missing required flag') + expect((error as Error).message).to.contain(omitted) + } + }) + } it('fails with non-existent locked allocations file', async () => { const cliInput = [ From a9b66208ab924da8740119a868dd4cdd64f2b9b9 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 20:52:46 +0100 Subject: [PATCH 6/8] more CR --- src/commands/genesis/launch/create.ts | 4 ++++ test/commands/genesis/genesis.launch.test.ts | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts index b987e2b..a475d44 100644 --- a/src/commands/genesis/launch/create.ts +++ b/src/commands/genesis/launch/create.ts @@ -114,6 +114,10 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` public async run(): Promise { const { flags } = await this.parse(GenesisLaunchCreate) + if (flags.raydiumLiquidityBps < 2000 || flags.raydiumLiquidityBps > 10000) { + this.error('raydiumLiquidityBps must be between 2000 and 10000 (20%-100%)') + } + const spinner = ora('Creating token launch via Genesis API...').start() try { diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index 2506b5b..84887f3 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -238,7 +238,11 @@ describe('genesis launch commands', () => { await runCli(cliInput) expect.fail('Should have thrown an error for missing argument') } catch (error) { - expect((error as Error).message).to.not.be.empty + const msg = (error as Error).message + expect(msg).to.satisfy( + (m: string) => m.includes('genesisAccount') || m.includes('Missing'), + 'Expected error about missing genesisAccount argument' + ) } finally { fs.unlinkSync(tmpConfig) } From ce0fff514372c806fc72a3de9f681f4e73b6eab6 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 21:21:04 +0100 Subject: [PATCH 7/8] code rabbit.... --- src/commands/genesis/launch/create.ts | 13 ++++++++----- src/commands/genesis/launch/register.ts | 13 ++++++++----- test/commands/genesis/genesis.launch.test.ts | 13 +++++++------ 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/commands/genesis/launch/create.ts b/src/commands/genesis/launch/create.ts index a475d44..d2d7115 100644 --- a/src/commands/genesis/launch/create.ts +++ b/src/commands/genesis/launch/create.ts @@ -6,7 +6,6 @@ import { createAndRegisterLaunch, } from '@metaplex-foundation/genesis' import { Flags } from '@oclif/core' -import { existsSync } from 'node:fs' import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' @@ -128,12 +127,16 @@ Total token supply is fixed at 1,000,000,000. The deposit period is 48 hours.` let lockedAllocations: LockedAllocation[] | undefined if (flags.lockedAllocations) { const filePath = flags.lockedAllocations - if (!existsSync(filePath)) { - throw new Error(`Locked allocations file not found: ${filePath}`) + let parsed: unknown + try { + parsed = readJsonSync(filePath) + } catch (err) { + if (err && typeof err === 'object' && 'code' in err && (err as NodeJS.ErrnoException).code === 'ENOENT') { + throw new Error(`Locked allocations file not found: ${filePath}`) + } + throw err } - const parsed = readJsonSync(filePath) - if (!Array.isArray(parsed)) { throw new Error('Locked allocations file must contain a JSON array') } diff --git a/src/commands/genesis/launch/register.ts b/src/commands/genesis/launch/register.ts index 81db4f3..c9e0cf7 100644 --- a/src/commands/genesis/launch/register.ts +++ b/src/commands/genesis/launch/register.ts @@ -5,7 +5,6 @@ import { registerLaunch, } from '@metaplex-foundation/genesis' import { Args, Flags } from '@oclif/core' -import { existsSync } from 'node:fs' import ora from 'ora' import { TransactionCommand } from '../../../TransactionCommand.js' @@ -64,12 +63,16 @@ provided as a JSON file via --launchConfig.` // Read launch config from JSON file const filePath = flags.launchConfig - if (!existsSync(filePath)) { - throw new Error(`Launch config file not found: ${filePath}`) + let launchConfig: CreateLaunchInput + try { + launchConfig = readJsonSync(filePath) as CreateLaunchInput + } catch (err) { + if (err && typeof err === 'object' && 'code' in err && (err as NodeJS.ErrnoException).code === 'ENOENT') { + throw new Error(`Launch config file not found: ${filePath}`) + } + throw err } - const launchConfig = readJsonSync(filePath) as CreateLaunchInput - // Validate required top-level fields if (!launchConfig.token || typeof launchConfig.token !== 'object') { throw new Error('Launch config is missing required "token" object (must include name, symbol, image)') diff --git a/test/commands/genesis/genesis.launch.test.ts b/test/commands/genesis/genesis.launch.test.ts index 84887f3..73eae6a 100644 --- a/test/commands/genesis/genesis.launch.test.ts +++ b/test/commands/genesis/genesis.launch.test.ts @@ -1,5 +1,6 @@ import { expect } from 'chai' import fs from 'node:fs' +import os from 'node:os' import path from 'node:path' import { runCli } from '../../runCli' import { stripAnsi, createGenesisAccount, addLaunchPoolBucket } from './genesishelpers' @@ -76,7 +77,7 @@ describe('genesis launch commands', () => { '--raiseGoal', '200', '--raydiumLiquidityBps', '5000', '--fundsRecipient', 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', - '--lockedAllocations', '/tmp/nonexistent-file-12345.json', + '--lockedAllocations', path.join(os.tmpdir(), 'nonexistent-file-12345.json'), ] try { @@ -88,7 +89,7 @@ describe('genesis launch commands', () => { }) it('fails when locked allocations file is not a JSON array', async () => { - const tmpFile = path.join('/tmp', 'test-bad-allocations.json') + const tmpFile = path.join(os.tmpdir(), `test-bad-allocations-${process.pid}.json`) fs.writeFileSync(tmpFile, JSON.stringify({ notAnArray: true })) try { @@ -115,7 +116,7 @@ describe('genesis launch commands', () => { }) it('parses locked allocations file and reaches API call', async () => { - const tmpFile = path.join('/tmp', 'test-locked-allocations.json') + const tmpFile = path.join(os.tmpdir(), `test-locked-allocations-${process.pid}.json`) fs.writeFileSync(tmpFile, JSON.stringify([ { name: 'Team', @@ -213,7 +214,7 @@ describe('genesis launch commands', () => { it('fails when genesis account argument is missing', async () => { // Create a temp config file for the test - const tmpConfig = path.join('/tmp', 'test-launch-config.json') + const tmpConfig = path.join(os.tmpdir(), `test-launch-config-${process.pid}.json`) fs.writeFileSync(tmpConfig, JSON.stringify({ wallet: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', token: { name: 'Test', symbol: 'TST', image: 'https://gateway.irys.xyz/abc' }, @@ -267,7 +268,7 @@ describe('genesis launch commands', () => { const cliInput = [ 'genesis', 'launch', 'register', '11111111111111111111111111111111', - '--launchConfig', '/tmp/nonexistent-config-12345.json', + '--launchConfig', path.join(os.tmpdir(), 'nonexistent-config-12345.json'), ] try { @@ -279,7 +280,7 @@ describe('genesis launch commands', () => { }) it('calls the Genesis API with valid input (expects API error since API is not local)', async () => { - const tmpConfig = path.join('/tmp', 'test-launch-config-register.json') + const tmpConfig = path.join(os.tmpdir(), `test-launch-config-register-${process.pid}.json`) fs.writeFileSync(tmpConfig, JSON.stringify({ wallet: 'TESTfCYwTPxME2cAnPcKvvF5xdPah3PY7naYQEP2kkx', token: { name: 'Test', symbol: 'TST', image: 'https://gateway.irys.xyz/abc' }, From 8f2b6fbb96c6c273ffa9464a1a3bda604fb33ab6 Mon Sep 17 00:00:00 2001 From: MarkSackerberg <93528482+MarkSackerberg@users.noreply.github.com> Date: Tue, 24 Feb 2026 21:21:14 +0100 Subject: [PATCH 8/8] fix CI --- .github/workflows/onRelease.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/onRelease.yml b/.github/workflows/onRelease.yml index 8dc42e6..f0a36e2 100644 --- a/.github/workflows/onRelease.yml +++ b/.github/workflows/onRelease.yml @@ -21,7 +21,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: latest + node-version: 24 registry-url: https://registry.npmjs.org - name: Install npm >= 11.5.1 run: npm install -g "npm@>=11.5.1" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index af79974..7f99e35 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: os: ['ubuntu-latest'] - node_version: [lts/-1, lts/*, latest] + node_version: [lts/-1, lts/*, 24] fail-fast: false runs-on: ${{ matrix.os }} steps: