Skip to main content

Errors

Custom errors provide a structured way to revert transactions with meaningful error information.

Overview​

The AssemblyScript Stylus SDK uses ErrorFactory to define custom error types that can be thrown to revert transactions with structured data. Custom errors help developers and users understand why a transaction failed.

Creating Errors​

Use ErrorFactory.create() to define error structures:

import { ErrorFactory, U256, Address } from "@wakeuplabs/as-stylus";

const InsufficientBalance = ErrorFactory.create<[amount: U256, balance: U256]>();
const Unauthorized = ErrorFactory.create<[user: Address]>();

Syntax​

const ErrorName = ErrorFactory.create<[Type1, Type2, Type3]>();
  • Define error parameter types that will be passed when the error is thrown
  • All parameters are passed to the error when reverting

Reverting with Errors​

Call the .revert() method on your error with the appropriate parameters:

// Simple revert
Unauthorized.revert(msg.sender);

// Multiple parameters
InsufficientBalance.revert(requestedAmount, availableBalance);

// With constructed values
InvalidParameter.revert(StrFactory.fromString("amount"), providedValue, maxValue);

Basic Example​

import { Contract, External, U256, ErrorFactory } from "@wakeuplabs/as-stylus";

const InsufficientBalance = ErrorFactory.create<[amount: U256, balance: U256]>();

@Contract
export class Wallet {
balance: U256;

@External
withdraw(amount: U256): void {
if (amount.greaterThan(this.balance)) {
// Revert with custom error showing requested and available amounts
InsufficientBalance.revert(amount, this.balance);
}

this.balance = this.balance.sub(amount);
}
}