Skip to content

Relaunch program - #484

Draft
metapileks wants to merge 31 commits into
developfrom
pileks/met-618-relaunch-program
Draft

Relaunch program#484
metapileks wants to merge 31 commits into
developfrom
pileks/met-618-relaunch-program

Conversation

@metapileks

Copy link
Copy Markdown
Collaborator

Adds relaunch, a new program that relaunches existing tokens under futarchy. Holders of an old token escrow it during a deposit window. The program then sells the escrowed supply into the token's source pool, converts proceeds to USDC, and spins up a DAO for a new token — 12.5M new tokens distributed pro-rata to depositors and 12.5M paired with all recovered USDC as FutarchyAMM liquidity.

Lifecycle

initialize_relaunchstart_depositsdeposit / deposit_via_buy(_raydium)close_depositsexecute_sell(_raydium)execute_usdc_swap (WSOL sources only, via a pinned Orca SOL/USDC whirlpool) → complete_relaunchclaim.

Failure path: if the deposit threshold (bps of old supply) isn't met or the admin misses the post-close grace period, mark_failedclaim_refund returns escrowed tokens.

Supported source venues

  • PumpSwap — canonical pump.fun graduation pools (WSOL or USDC quote), validated against the pump pool-authority PDA at init.
  • Raydium AMM v4 — legacy pump graduations, gated on a minimum burned-LP amount.

deposit_via_buy variants let users buy the old token on its source pool and escrow it in one transaction.

Also included

  • SDK: new sdk/src/relaunch/v0.1 module — RelaunchClient for every instruction, PDA helpers, and pump/raydium/whirlpool account resolvers. Sell/swap/complete transactions use a global frozen address lookup table to fit versioned-tx limits.

@metapileks metapileks self-assigned this Aug 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Repository Guard

  • Cargo.lock: pass
  • yarn.lock (root): pass
  • yarn.lock (sdk): pass
  • Repo guard: pass

Repository Guard

Cargo dependency pinning

  • Status: pass
  • Every programs/*/Cargo.toml dep uses =x.y.z, a path = .. workspace ref, or a git dep with a 40-char rev.

Cross-program Anchor/Solana version consistency

  • Status: pass
  • anchor-lang and anchor-spl are pinned to the version declared in repo-guard.toml across every program.

solana-program crate pin

  • Status: pass
  • Every solana-program = "=X" declaration is =1.17.14 (locked to match Cargo.lock).

Anchor.toml solana_version

  • Status: pass
  • Anchor.toml declares solana_version = "1.17.34" (local-dev install for anchor test).

Crate minimum age

  • Status: pass
  • All Cargo deps changed by this PR are at least 14 days old on crates.io.

Yarn package.json pinning

  • Status: pass
  • All package.json deps use exact versions (no ^, ~, ranges).

npm minimum age

  • Status: pass
  • All npm deps changed by this PR are at least 14 days old.

Workflow toolchain consistency

  • Status: pass
  • Every workflow declares anchor-version: 0.29.0.
  • Per-file solana-cli-version values match [toolchain.workflow_solana_cli] in repo-guard.toml.

GitHub Action SHA pinning

  • Status: pass
  • Every third-party action is pinned to a SHA in [actions.sha_allowlist].

Sensitive program / config changes

  • Status: warn
  • Review hint only (CODEOWNERS is the merge gate). Lines below match heuristics for security-sensitive changes:
  • High-sensitivity files touched: Anchor.toml, Cargo.lock
  • Anchor.toml:20 Hardcoded Solana address literal; Anchor [programs.*] entry change -> +relaunch = "vaMpdXN2P3Z5v8y6GtAU5NzCUjxtphnRVpvqu37Spik"
  • Anchor.toml:99 Hardcoded Solana address literal; Anchor [programs.*] entry change -> +address = "pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA"
  • Anchor.toml:103 Hardcoded Solana address literal; Anchor [programs.*] entry change -> +address = "pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ"
  • Anchor.toml:107 Hardcoded Solana address literal; Anchor [programs.*] entry change -> +address = "whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc"
  • Anchor.toml:111 Hardcoded Solana address literal; Anchor [programs.*] entry change -> +address = "675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"
  • programs/relaunch/src/constants.rs:19 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("So11111111111111111111111111111111111111112");
  • programs/relaunch/src/constants.rs:25 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
  • programs/relaunch/src/constants.rs:44 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P");
  • programs/relaunch/src/constants.rs:51 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("pAMMBay6oceH9fJKBRHGP5D4bD4sWpmSwMn52FMfXEA");
  • programs/relaunch/src/constants.rs:58 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("pfeeUxB6jkeY1Hxd7CsFCAjcbHA9rWtchMGdZ6VojVZ");
  • programs/relaunch/src/constants.rs:65 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("ADyA8hdefvWN2dbGGWFotbzWxrAvLW83WG6QCVXvJKqw");
  • programs/relaunch/src/constants.rs:72 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("GS4CU59F31iL7aR2Q8zVS8DRrcRnXX1yjQ66TqNVQnaR");
  • programs/relaunch/src/constants.rs:80 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("5PHirr8joyTMp9JMm6nW7hNDVyEYdkzDqazxPD7RaTjx");
  • programs/relaunch/src/constants.rs:90 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8");
  • programs/relaunch/src/constants.rs:97 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("5Q544fKrFoe6tsEbD7S8EmxGTJYAKtTVhAW5Q5pge4j1");
  • programs/relaunch/src/constants.rs:105 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("srmqPvymJeFKQ4zGQed1GFppgkRHL9kaELCbyksJtPX");
  • programs/relaunch/src/constants.rs:117 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("whirLbMiicVdio4qvUfM5KAg6Ct8VwpYzGff3uctyCc");
  • programs/relaunch/src/constants.rs:124 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("Czfq3xZZDmsdGdUyrNLtRhGc47cXcZtLG4crryfu44zE");
  • programs/relaunch/src/constants.rs:131 declare_id! literal change; Hardcoded Solana address literal -> + declare_id!("MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr");
  • programs/relaunch/src/error.rs:3 #[error_code] enum modification -> +#[error_code]
  • programs/relaunch/src/lib.rs:32 declare_id! literal change; Hardcoded Solana address literal -> +declare_id!("vaMpdXN2P3Z5v8y6GtAU5NzCUjxtphnRVpvqu37Spik");
  • programs/relaunch/src/pump_amm.rs:141 Program ID constant or variable change -> + program_id: pump_amm_program::id(),
  • programs/relaunch/src/pump_amm.rs:256 Program ID constant or variable change -> + program_id: pump_amm_program::id(),
  • programs/relaunch/src/pump_amm.rs:300 Program ID constant or variable change -> + program_id: pump_amm_program::id(),
  • programs/relaunch/src/raydium_amm.rs:146 Program ID constant or variable change -> + program_id: raydium_amm_program::id(),
  • programs/relaunch/src/whirlpool.rs:92 Program ID constant or variable change -> + program_id: whirlpool_program::id(),
  • scripts/relaunch/createAlt.ts:62 Hardcoded Solana address literal -> +const MAINNET_GENESIS_HASH = "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d";
  • sdk/src/constants.ts:72 Hardcoded Solana address literal -> + "vaMpdXN2P3Z5v8y6GtAU5NzCUjxtphnRVpvqu37Spik",
  • sdk/src/constants.ts:82 Hardcoded Solana address literal -> + "HXH8J1qEhfXWoAgsFhstHgcLkRXqvheoiNuRbXM3VS13",
  • sdk/src/constants.ts:128 Hardcoded Solana address literal -> + "6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P",

Overall status: pass

Lockfile freshness (Cargo.lock + yarn.lock) is checked by the workflow directly and cannot be bypassed. The sensitive-diff section is a review hint - CODEOWNERS handles the actual merge gate.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant