Errors
Aborts are Move clever errors. Each names its module and constant and carries a message. Modules are blast_presale unless named.
| Step | Error | Meaning and fix |
|---|---|---|
| Start | creation_policy::EQuoteNotAllowed, EMigrationWitnessNotAllowed |
The quote type or venue is not listed. Ask Blast. |
| Start | EInvalidAssetPair |
The sale coin and the quote coin are the same type. |
| Start | EInitialSupplyNotZero |
The TreasuryCap has already minted. Use a fresh coin. |
| Start | bluefin::EInvalidTier, bluefin::ESymbolTooLong |
Bluefin tier out of range, or symbol over 32 bytes. |
| Partner | creation_policy::EPartnerNotAccepted |
set_partner, on the initializer, named a partner not accepted for new sales. |
| Finalize | EMissingSetting |
The eligibility policy or the fee split was never set. |
| Finalize | EInvalidRaiseTarget |
The raise target is zero or was never set. |
| Finalize | EInvalidTokenAllocation |
The supply is zero or unset, the supply shares do not total 10,000 with Blast’s token rate, or a recipient is zero, duplicated, or past 64. |
| Finalize | EInvalidRaiseAllocation |
No pool share left after recipients and Blast, or a duplicate or zero share. |
| Finalize | EInvalidWindow |
Zero or unset duration, or a liquidity window under 7 days. share also raises it if the deadlines overflow. |
| Finalize | EUnreachableRaise |
min_commitment × max_participants is below the raise. |
| Finalize | EInvalidHardCap |
The hard cap starts at or after the window’s end. |
| Finalize | EInvalidEligibilityPolicy, EInvalidUncappedPhase, EInvalidFeeSplit, EInvalidVestingTerms |
The value failed its constructor’s or finalize’s rules. See Create a sale. |
| Finalize | EUnseedablePrice |
The pool’s seed price is outside what both venues can price. |
| Commit | EPresaleNotStarted, EPresaleEnded |
Outside the window. |
| Commit | EZeroCommitment |
The commitment coin is empty. |
| Commit | EWrongEligibilityPolicy |
Wrong commit function for the sale’s policy. |
| Commit | EInvalidEligibilityProof |
Wrong index, cap, proof, or sender, or a cap different from the wallet’s first commit. |
| Commit | EWalletCapExceeded |
Lower the amount, or wait for the uncapped phase. |
| Commit | EBelowMinimumCommitment |
The wallet’s total must reach the minimum. |
| Commit | EParticipantCapacityReached |
No slots left for new wallets. |
| Commit | EUncappedPhaseNotOpen |
No phase for anyone, or it has not started. |
| Commit | EPresaleFilled |
The sale’s hard cap is in force and the raise is full. |
| Commit | EInvalidLifecycle |
The sale is not Open: not yet shared, or already settled, perhaps after an early close. |
| Settle | EPresaleNotEnded |
The window has not ended and the sale cannot close early. |
| Migrate | EInvalidLifecycle |
Not Funded: unsettled, underfunded, cancelled, or already migrated. |
| Migrate | EWrongMigrationWitness |
Wrong venue for this sale. |
| Migrate | cetus::EInvalidCoinOrder, cetus::EWrongCoinPair |
Swap CoinA and CoinB, or pass the sale’s own two types. |
| Partner pay | EWrongPartner, ENoPartnerPayout |
Wrong partner, or not migrated yet or already paid. |
| Claim | ENoCommitment |
The wallet never committed or has already claimed. |
| Cancel | ELiquidityDeadlineNotReached |
Wait until end_ms + liquidity_window_ms. |
PresaleCap |
EWrongPresaleCap, presale_vault::ENoMigrationResiduals |
Wrong cap, or the residuals were already claimed. |
| Lock a position | cetus::EPositionPoolMismatch, bluefin::EPositionPoolMismatch, presale_vault::EZeroLiquidity |
The position belongs to another pool, or holds no liquidity. |
| Rewards | holder_rewards::EInvalidProof, EAlreadyClaimed, EClaimsStillOpen |
Bad proof, a repeat claim, or closing before the deadline. |
| Publish rewards | holder_rewards::ETreasuryChanged, EInsufficientBudget, EInvalidInterval |
Refresh the governed treasury, keep holder funding plus gas reserve within available balances, and use a nonempty interval that does not overlap the preceding round. |
| Settle gas reserve | holder_rewards::EReserveSettled, EOverReserve, EWrongVault |
Reimbursement is disabled or already settled, exceeds its reserve, or names another vault. |
Admin calls require the matching presale role from the shared Blast ACL. blast_acl::sign_in rejects a revoked AdminCap or one without that role. See Authority.
The complete list with every message is in llms/presale.txt.