134 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| // SPDX-License-Identifier: MIT
 | |
| pragma solidity ^0.8.19;
 | |
| 
 | |
| import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
 | |
| 
 | |
| // prettier-ignore
 | |
| interface EventAndErrors {
 | |
|     /// ███ Events ████████████████████████████████████████████████████████████
 | |
| 
 | |
|     /// @dev 0x63d8d7d5e63e9840ec91a12a160d27b7cfab294f6ba070b7359692acfe6b03bf
 | |
|     event DepositAdded(
 | |
|         address indexed seller,
 | |
|         // uint256 depositID,
 | |
|         ERC20 token,
 | |
|         uint256 amount
 | |
|     );
 | |
|     /// @dev 0xca585721b6b442dc9183932f7c84dc2880efb67c4da52cc06873e78971105d49
 | |
|     event ValidSet(
 | |
|         address indexed seller,
 | |
|         ERC20 token,
 | |
|         bool state
 | |
|     );
 | |
|     /// @dev 0x2cd6435b1b961c13f55202979edd0765a809f69a539d8a477436c94c1211e43e
 | |
|     event DepositWithdrawn(
 | |
|         address indexed seller,
 | |
|         ERC20 token,
 | |
|         uint256 amount
 | |
|     );
 | |
|     /// @dev 0x8fb3989f70bd172a37d15b41b015e48ea09d59329638377304a4198cd0c4ea65
 | |
|     event LockAdded(
 | |
|         address indexed buyer,
 | |
|         uint256 indexed lockID,
 | |
|         address seller,
 | |
|         uint256 amount
 | |
|     );
 | |
|     /// @dev 0x364537f14276f2a0ce9905588413f96454cbb8fb2e4f5308389307c1098bede8
 | |
|     event LockReleased(
 | |
|         address indexed buyer, 
 | |
|         uint256 lockId,
 | |
|         uint256 amount
 | |
|     );
 | |
|     /// @dev 0x830501e61b8b075e170b22a430e39454bdb12ed3e9620e586430b6ac00079da5
 | |
|     event LockReturned(
 | |
|         address indexed buyer, 
 | |
|         uint256 lockId
 | |
|     );
 | |
|     /// @dev 0xeaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d
 | |
|     event FundsWithdrawn(
 | |
|         address owner, 
 | |
|         uint256 amount
 | |
|     );
 | |
|     /// @dev 0x0b294da292f26e55fd442b5c0164fbb9013036ff00c5cfdde0efd01c1baaf632
 | |
|     event RootUpdated(
 | |
|         address indexed seller, 
 | |
|         bytes32 indexed merkleRoot
 | |
|     );
 | |
|     /// @dev 0x5d6e86e5341d57a92c49934296c51542a25015c9b1782a1c2722a940131c3d9a
 | |
|     event AllowedERC20Updated(
 | |
|         address indexed token,
 | |
|         bool indexed state
 | |
|     );
 | |
|     /// @dev 0xbee55516e29d3969d3cb8eb01351eb3c52d06f9e2435bd5a8bfe3647e185df92
 | |
|     event TrustedForwarderUpdated(
 | |
|         address indexed forwarder, 
 | |
|         bool indexed state
 | |
|     );
 | |
|     /// @dev 0xe127cf589a3879da0156d4a24f43b44f65cfa3570de594806b0bfa2fcf06884f
 | |
|     event ReputationUpdated(address reputation);
 | |
|     /// @dev 0x70fa43ca70216ad905ade86b9e650a691b2ce5a01980d0a81bdd8324141b8511
 | |
|     event LockBlocksUpdated(uint256 blocks);
 | |
|     /// @dev 0x14a422d2412784a5749d03da98921fe468c98577b767851389a9f58ea5a363d7
 | |
|     event ValidSignersUpdated(address[] signers);
 | |
| 
 | |
| 
 | |
|     /// ███ Errors ████████████████████████████████████████████████████████████
 | |
| 
 | |
|     /// @dev Only seller could call this function.
 | |
|     /// @dev `msg.sender` and the seller differ.
 | |
|     /// @dev 0x85d1f726
 | |
|     error OnlySeller();
 | |
|     /// @dev Lock not expired or already released.
 | |
|     /// @dev Another lock with same ID is not expired yet.
 | |
|     /// @dev 0xd0404f85
 | |
|     error NotExpired();
 | |
|     /// @dev Loop bounds have overflowed.
 | |
|     /// @dev 0xdfb035c9
 | |
|     error LoopOverflow();
 | |
|     /// @dev Deposit not valid anymore.
 | |
|     /// @dev 0xb2e532de
 | |
|     error InvalidDeposit();
 | |
|     /// @dev Not enough token remaining on deposit.
 | |
|     /// @dev 0x22bbb43c
 | |
|     error NotEnoughTokens();
 | |
|     /// @dev Lock already released or returned.
 | |
|     /// @dev 0x63b4904e
 | |
|     error AlreadyReleased();
 | |
|     /// @dev Transaction already used to unlock payment.
 | |
|     /// @dev 0xf490a6ea
 | |
|     error TxAlreadyUsed();
 | |
|     /// @dev Signer is not a valid signer.
 | |
|     /// @dev 0x815e1d64
 | |
|     error InvalidSigner();
 | |
|     /// @dev Address doesn't exist in a MerkleTree.
 | |
|     /// @dev Address not allowed as relayer.
 | |
|     /// @dev 0x3b8474be
 | |
|     error AddressDenied();
 | |
|     /// @dev Arrays' length don't match.
 | |
|     /// @dev 0xff633a38
 | |
|     error LengthMismatch();
 | |
|     /// @dev No tokens array provided as argument.
 | |
|     /// @dev 0xdf957883
 | |
|     error NoTokens();
 | |
|     /// @dev Token address not allowed to be deposited.
 | |
|     /// @dev 0x1578328e
 | |
|     error TokenDenied();
 | |
|     /// @dev Wished amount to be locked exceeds the limit allowed.
 | |
|     /// @dev 0x1c18f846
 | |
|     error AmountNotAllowed();
 | |
|     /// @dev Reverts when success return value returns false.
 | |
|     /// @dev 0xe10bf1cc
 | |
|     error StaticCallFailed();
 | |
|     /// @dev Reverts on an expired lock.
 | |
|     /// @dev 0xf6fafba0
 | |
|     error LockExpired();
 | |
|     /// @dev 0xce3a3d37
 | |
|     error DecOverflow();
 | |
|     /// @dev 0xf3fb0eb9
 | |
|     error MaxBalExceeded();
 | |
|     /// @dev 0x6a3bc53e
 | |
|     error EmptyPixTarget();
 | |
|     /// @dev 0x87138d5c
 | |
|     error NotInitialized();
 | |
| }
 |