Errors

All contracts use custom Solidity errors for gas-efficient reverts. This page lists every custom error grouped by contract.

WTDToken

Error
Description

ZeroAddress()

Recipient or owner address is the zero address

ZeroAmount()

Allocation has already been fully claimed (remaining = 0)

ExceedsAllocation()

Claim would exceed the allocation for this category

ExceedsMaxSupply()

Minting would exceed the 100 billion max supply

WTDSale

Error
Description

ZeroAddress()

Address parameter is the zero address

ZeroAmount()

Payment amount is zero, or price/allocation is zero during configuration

RoundNotActive()

Attempting to purchase in a round that is not active

ExceedsAllocation()

Purchase would exceed the round's total allocation

InvalidRound()

Round enum value is out of range (> 2)

InsufficientUSDCBalance()

Contract doesn't have enough USDC balance for withdrawal

InsufficientUSDTBalance()

Contract doesn't have enough USDT balance for withdrawal

InsufficientETHBalance()

Contract doesn't have enough ETH balance for withdrawal

InsufficientUSDCAllowance()

Buyer hasn't approved enough USDC

InsufficientTokenBalance()

Insufficient token balance

InsufficientWithdrawableAmount()

Requested withdrawal exceeds available withdrawable amount

RoundAlreadyConfigured()

Round has already been configured (one-time only)

InvalidOraclePrice()

Chainlink oracle returned a non-positive price

StaleOraclePrice()

Chainlink oracle price is older than 1 hour

RecipientNotSet()

No withdrawal recipient configured for this round

ETHTransferFailed()

Native ETH transfer to recipient failed

WTDVesting

Error
Description

ZeroAddress()

Address parameter is the zero address

ZeroAmount()

Amount is zero, or TGE timestamp is zero

InvalidRound()

Round enum value is out of range (> 2)

InvalidRole()

Role enum value is out of range (> 2)

InvalidMembers()

Empty beneficiaries array in team vesting creation

LockUpNotEnded()

Attempting to claim before lock-up period has ended

NothingToClaim()

No tokens are available to claim at this time

TGEUnlockNotAvailable()

No TGE unlock amount exists for this vesting

TGEAlreadySet()

TGE timestamp has already been set

VestingNotInitialized()

No vesting schedule exists for this beneficiary/round

InsufficientFunds()

Emergency withdraw amount exceeds available non-allocated balance

InsufficientUnallocated()

Not enough unallocated tokens for this round

InvalidToken()

Invalid token address for emergency withdraw

VestingRoleAlreadyLocked()

VESTING_ROLE has already been permanently locked

WTDLiquidityManager

Error
Description

InvalidTokenId()

Invalid LP NFT token ID

StillLocked()

Attempting to unlock a position before the unlock time

NotLockOwner()

Caller is not the owner of this lock

InvalidRecipient()

Fee recipient is the zero address

InvalidUnlockTime()

Unlock time is in the past, or invalid range

NoLiquidityInPosition()

LP position has zero liquidity

TransferFailed()

NFT or token transfer failed

Additionally, WTDLiquidityManager uses string reverts for some checks:

  • "Position pool mismatch" — LP position is not in the expected WTD/USDC pool

  • "Lock does not exist" — No lock found for the given lock ID