These are the errors people hit most. Viem shows an error’s name only if the error is in the ABI you call with. Add lines like "error SlippageExceeded(uint256 actual, uint256 minimum)" to your ABIs to get readable errors.
Launching
| Error | Meaning | Fix |
|---|---|---|
InvalidMetadata() |
A required field is empty, or a field is too long. | Check the metadata limits in Launch a token. Lengths are in bytes. |
LaunchFeeNotPaid() |
You sent ETH to launchToken. |
Send value: 0. To buy at launch, use launchAndBuy. |
LaunchEconomicsMismatch(bytes32 expected, bytes32 actual) |
The launch settings changed after you read expectedEconomics. |
Read previewLaunchEconomics again and retry. |
UnsupportedCreatorTax() |
creatorTaxBps isn’t 0. |
Set it to 0. |
UnsupportedBuyback() |
buybackEnabled is true. |
Set it to false. |
PairTokenNotApproved() |
The pair token isn’t allowed. | Use ETH, or check approvedPairTokens(pairToken) on the factory. |
InvalidLaunchConfigId() / LaunchConfigDisabled() |
Wrong or turned-off launch config. | Use 0. |
NotWhitelisted() |
Launches are paused. | Check launchEnabled() on the factory and try later. |
ZeroAddress() |
An address argument is zero, like recipient or creatorFeeRecipient. |
Pass a real address. |
NativeValueMismatch(uint256 sent, uint256 expected) |
launchAndBuy got a value that doesn’t match the buy amount. |
For ETH, send value equal to the buy amount. For ERC-20, send 0. |
LaunchAlreadyExists() |
A token with the same creator, params and salt already exists. | Change the salt. |
Trading on the curve
| Error | Meaning | Fix |
|---|---|---|
CurveGraduated() |
The curve stopped trading. It sold out and is graduating or has graduated. | Trade in the Uniswap V4 pool once it’s live. |
SlippageExceeded(uint256 actual, uint256 minimum) |
The price moved and you’d get less than your minimum. | Get a new quote and retry. |
NativeValueMismatch(uint256 supplied, uint256 expected) |
value doesn’t equal quoteIn. |
Send exactly quoteIn. |
UnexpectedNativeValue() |
You sent ETH to a curve that uses an ERC-20 pair token. | Send value: 0 and approve the curve instead. |
ZeroAmount() |
The amount is 0, or nothing is left after fees. |
Use a bigger amount. |
ZeroOutput() |
The trade is too small to get anything back. | Use a bigger amount. |
ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed) |
The curve can’t take your tokens. | approve the curve before selling. |
Graduation
| Error | Meaning | Fix |
|---|---|---|
InvalidState(uint8 expected, uint8 actual) |
The curve isn’t in the state this call needs. | Read state() on the curve. Call graduate in state 1 (Ready) and createGraduatedPool in state 2 (Swept). See Token lifecycle. |
Uniswap V4 swaps
If a swap through the Universal Router reverts with no clear reason, check these first:
- Did you include the extra
minHopPriceX36field in the route? See Trade after graduation. - Is the pool key right?
hooksmust be the Clank hook, and ETH must becurrency0. - For sells, did you do both Permit2 approvals?
- Is the
deadlinein the future?