12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // SPDX-License-Identifier: MIT
- pragma solidity ^0.8.20;
- /**
- * @dev Helper library for emitting standardized panic codes.
- *
- * ```solidity
- * contract Example {
- * using Panic for uint256;
- *
- * // Use any of the declared internal constants
- * function foo() { Panic.GENERIC.panic(); }
- *
- * // Alternatively
- * function foo() { Panic.panic(Panic.GENERIC); }
- * }
- * ```
- *
- * Follows the list from https://github.com/ethereum/solidity/blob/v0.8.24/libsolutil/ErrorCodes.h[libsolutil].
- */
- // slither-disable-next-line unused-state
- library Panic {
- /// @dev generic / unspecified error
- uint256 internal constant GENERIC = 0x00;
- /// @dev used by the assert() builtin
- uint256 internal constant ASSERT = 0x01;
- /// @dev arithmetic underflow or overflow
- uint256 internal constant UNDER_OVERFLOW = 0x11;
- /// @dev division or modulo by zero
- uint256 internal constant DIVISION_BY_ZERO = 0x12;
- /// @dev enum conversion error
- uint256 internal constant ENUM_CONVERSION_ERROR = 0x21;
- /// @dev invalid encoding in storage
- uint256 internal constant STORAGE_ENCODING_ERROR = 0x22;
- /// @dev empty array pop
- uint256 internal constant EMPTY_ARRAY_POP = 0x31;
- /// @dev array out of bounds access
- uint256 internal constant ARRAY_OUT_OF_BOUNDS = 0x32;
- /// @dev resource error (too large allocation or too large array)
- uint256 internal constant RESOURCE_ERROR = 0x41;
- /// @dev calling invalid internal function
- uint256 internal constant INVALID_INTERNAL_FUNCTION = 0x51;
- /// @dev Reverts with a panic code. Recommended to use with
- /// the internal constants with predefined codes.
- function panic(uint256 code) internal pure {
- /// @solidity memory-safe-assembly
- assembly {
- mstore(0x00, 0x4e487b71)
- mstore(0x20, code)
- revert(0x1c, 0x24)
- }
- }
- }
|