Migrator is a standalone Solana migration engine for strict 1:1 classic SPL
(Tokenkeg) token migrations.
It is designed for high-assurance migrations with a deliberately small surface:
initialize_configset_pausemigrate_exactwithdraw_unclaimed
- atomic
burn -> transfermigration flow - init-time reserve funding from a dedicated funding wallet
- immutable on-chain migration cap
- canonical ATA-only destination routing
- pause control
- permissionless post-deadline reserve closeout to a fixed refund wallet
- manifest-driven release validation and deterministic-build checks
Out of scope for V1:
- Token-2022 support
- Rust
2021 Pinocchiopinocchio-token- classic SPL Token /
Tokenkegonly - TypeScript SDK with
@solana/web3.js LiteSVMMolluskKanisolana-verify
programs/migrator/— on-chain program cratesdk/— manual TypeScript SDK and release validatorsdocs/handoff/— frontend and integrator contractdocs/runbooks/— public verification and release proceduresrelease/— public launch-manifest templatescripts/— local assurance, deterministic build, and dry-run wrappers
Start here:
docs/handoff/PROGRAM_SPEC.mddocs/runbooks/MAINNET_DRY_RUN.mddocs/runbooks/VERIFIED_BUILD.mddocs/runbooks/KANI_LANE.mddocs/runbooks/MOLLUSK_LANE.md
cargo testcargo clippy --all-targets --all-features -- -D warningsnpm --prefix sdk testnpm --prefix sdk run typecheck./scripts/run-sbf-assurance-lane.sh./scripts/run-mollusk-lane.sh./scripts/run-kani-lane.sh./scripts/run-verified-build.sh./scripts/run-local-assurance-lane.sh./scripts/run-mainnet-dry-run.sh <filled-inputs.json>./scripts/run-mainnet-dry-run-quorum.sh <filled-inputs.json>
Current coverage notes:
LiteSVMmigration-flow suite covers67end-to-end casesMollusklane covers11SBF-backed regression and fixture-replay casesKanilane covers16proof harnesses- SDK test suite covers
29release and validator checks run-local-assurance-lane.shrequires a clean worktree by default; verified-build is part of the release-grade path
Important toolchain note:
- use
./scripts/run-kani-lane.shas the release gate - direct
cargo kani -p migrator --features no-entrypointcan still hit a late toolchain failure on the pinned environment even when all harnesses pass
Mint policy:
- V1 accepts only mints owned by
TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
Destination policy:
migrate_exactrequires the canonical ATA for(user, destination mint)- destination accounts with delegate, close-authority, or wrapped-native controls are rejected
Closeout policy:
withdraw_unclaimedis available only oncenow > end_ts- it sweeps the full reserve ATA balance
- it stays blocked if
pausedis still set
Eligibility policy:
- V1 does not enforce wallet-by-wallet eligibility on-chain
- the only hard on-chain limiter is the immutable global
migration_cap - excluded source-token balances must be prevented operationally before launch
Old-market policy:
- any controlled legacy liquidity path must be retired before or at open
- official routing, bots, docs, and analytics must flip to the new mint at launch
Before mainnet launch, follow:
docs/runbooks/MAINNET_DRY_RUN.mddocs/runbooks/VERIFIED_BUILD.mddocs/runbooks/UPGRADE_AUTHORITY_POLICY.md
Built by Quantu Labs. Licensed under MIT.