huff-language / huffmate

A library of modern, hyper-optimized, and extensible Huff contracts with extensive testing and documentation built by Huff maintainers.
https://github.com/pentagonxyz/huffmate
MIT License
438 stars 56 forks source link

Adding custom errors #136

Open eugenioclrc opened 1 year ago

eugenioclrc commented 1 year ago

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
}
eugenioclrc commented 1 year ago

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:
}