Skip to main content

Errors

DollarStore uses custom errors for gas-efficient reverts with clear failure reasons.

Validation errors

StablecoinNotSupported

error StablecoinNotSupported(address stablecoin);

The stablecoin address is not in the supported list. Check isSupported() before calling.


StablecoinAlreadySupported

error StablecoinAlreadySupported(address stablecoin);

Admin tried to add a stablecoin that's already supported.


ZeroAmount

error ZeroAmount();

Amount parameter was 0. All operations require non-zero amounts.


ZeroAddress

error ZeroAddress();

Address parameter was the zero address.


SameStablecoin

error SameStablecoin();

Swap attempted with same input and output stablecoin. Use deposit/withdraw instead.


Reserve errors

InsufficientReserves

error InsufficientReserves(
address stablecoin,
uint256 requested,
uint256 available
);

Not enough reserves for a withdrawal. Check getReserve() first, or use swap with queue option.


InsufficientReservesNoQueue

error InsufficientReservesNoQueue(
address stablecoin,
uint256 requested,
uint256 available
);

Aggregator swap (swapExactInput) failed due to insufficient reserves. This function never queues—it either fully executes or reverts.

For aggregators: Check getSwapQuote() returns non-zero before calling swapExactInput.


InsufficientDlrsBalance

error InsufficientDlrsBalance(
uint256 required,
uint256 available
);

User doesn't have enough DLRS for the operation.


Queue errors

QueueFull

error QueueFull(
address stablecoin,
uint256 currentCount
);

Queue has reached maximum capacity (150 positions). Wait for positions to be filled or try later.


QueuePositionNotFound

error QueuePositionNotFound(uint256 positionId);

The position ID doesn't exist (never created or already removed).


NotPositionOwner

error NotPositionOwner(
uint256 positionId,
address caller,
address owner
);

Caller tried to cancel a position they don't own.


OrderTooSmall

error OrderTooSmall(
uint256 provided,
uint256 minimum
);

Order amount is below the minimum for current queue depth. Check getMinimumOrderSize() for the current minimum.


Aggregator errors

DeadlineExpired

error DeadlineExpired(
uint256 deadline,
uint256 currentTime
);

The swapExactInput deadline has passed. Transaction was either delayed or deadline was set too tight.


Admin errors

OnlyAdmin

error OnlyAdmin();

Function restricted to admin. Caller is not the current admin.


OnlyPendingAdmin

error OnlyPendingAdmin();

Only the pending admin can accept admin transfer.


Handling errors

In Solidity

try dollarStore.swap(from, to, amount, false) returns (uint256 received, uint256 positionId) {
// Success
} catch (bytes memory reason) {
// Decode and handle specific errors
}

In ethers.js/viem

Custom errors are decoded automatically. Check the error name:

try {
await dollarStore.swap(from, to, amount, false);
} catch (error) {
if (error.errorName === 'InsufficientReserves') {
const { stablecoin, requested, available } = error.errorArgs;
// Handle insufficient reserves
}
}