contract TreasureHunt {
error AlreadyClaimed(bytes32 treasureHash);
error InvalidProof();
error NotEnoughFunds();
error InvalidRecipient();
error AllTreasuresClaimed();
error OwnerCannotClaim();
error OwnerCannotBeRecipient();
error InvalidVerifier();
error HuntNotOver();
error NoFundsToWithdraw();
error OnlyOwnerCanFund();
error OnlyOwnerCanPause();
error OnlyOwnerCanUnpause();
error ContractPaused();
error TheContractMustBePaused();
error OnlyOwnerCanUpdateVerifier();
error OnlyOwnerCanEmergencyWithdraw();
error InvalidAmount();
uint256 public constant REWARD = 10 ether;
uint256 public constant MAX_TREASURES = 10;
IVerifier private verifier;
address private immutable owner;
bytes32 private immutable _treasureHash;
mapping(bytes32 => bool) public claimed;
uint256 public claimsCount;
bool private paused;
bool private locked;
event Claimed(bytes32 indexed treasureHash, address indexed recipient);
event Funded(uint256 amount, uint256 newBalance);
event Withdrawn(uint256 amount, uint256 newBalance);
event VerifierUpdated(address indexed newVerifier);
event EmergencyWithdraw(address indexed recipient, uint256 amount);
event Paused(address indexed by);
event Unpaused(address indexed by);
modifier onlyOwner() {
require(msg.sender == owner, "ONLY_OWNER");
_;
}
Change error handling to use custom errors defined.
// @contracts/src/TreasureHunt.withdraw()
function withdraw() external {
- require(claimsCount >= MAX_TREASURES, "HUNT_NOT_OVER");
+ if(claimsCount < MAX_TREASURES) revert HuntNotOver();
// @contracts/src/TreasureHunt.pause()
function pause() external {
- require(msg.sender == owner, "ONLY_OWNER_CAN_PAUSE");
+ if (msg.sender != owner) revert OnlyOwnerCanPause();
// @contracts/src/TreasureHunt.fund()
function fund() external payable {
- require(msg.sender==owner, "ONLY_OWNER_CAN_FUND");
+ if (msg.sender != owner) revert OnlyOwnerCanFund();
// other similar changes for:
// OnlyOwnerCanUnpause()
// TheContractMustBePaused()
// OnlyOwnerCanUpdateVerifier()
// OnlyOwnerCanEmergencyWithdraw()