huff-language / huffmate

A library of modern, hyper-optimized, and extensible Huff contracts with extensive testing and documentation built by Huff maintainers.

Home Page:https://github.com/pentagonxyz/huffmate

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Adding custom errors

eugenioclrc opened this issue · comments

Currently there is the REQUIRE that lets you mimic solidity require(condition, "message")

I want to propose a REQUIRE_CUSTOM_ERROR:

#define macro REQUIRE_CUSTOM_ERROR() = takes(2) returns(0) {
    // [condition, customErrorSig]
    do_not_throwErr jumpi
    0x00 mstore
    0x04 0x00 revert

    do_not_throwErr:
    pop
}

Perhaps this is even better, (ERROR_SIGNATURE = PUSH4 SIG):

/// @notice Reverts with a Custom error
#define macro ERR_CUSTOM() = takes (1) returns (0) {
    // ERROR SIGNATURE
    0x00 mstore
    0x04 0x1c revert
}

#define macro REQUIRE_CUSTOM_ERROR(ERROR_SIGNATURE) = takes(2) returns(0) {
    // [condition, customErrorSig]
    do_not_throwErr jumpi
    <ERROR_SIGNATURE>
    ERR_CUSTOM()

    do_not_throwErr:
}