|
| 1 | +//SPDX-License-Identifier: MIT |
| 2 | +pragma solidity ^0.8.23; |
| 3 | + |
| 4 | +import {SignatureDiscountValidatorBase} from "./SignatureDiscountValidatorBase.t.sol"; |
| 5 | +import {SybilResistanceVerifier} from "src/lib/SybilResistanceVerifier.sol"; |
| 6 | + |
| 7 | +contract IsValidDiscountRegistration is SignatureDiscountValidatorBase { |
| 8 | + function test_reverts_whenTheValidationData_claimerAddressMismatch(address notUser) public { |
| 9 | + vm.assume(notUser != user && notUser != address(0)); |
| 10 | + bytes memory validationData = _getDefaultValidationData(); |
| 11 | + (, uint64 expires, bytes memory sig) = abi.decode(validationData, (address, uint64, bytes)); |
| 12 | + bytes memory claimerMismatchValidationData = abi.encode(notUser, expires, sig); |
| 13 | + |
| 14 | + vm.expectRevert(abi.encodeWithSelector(SybilResistanceVerifier.ClaimerAddressMismatch.selector, notUser, user)); |
| 15 | + validator.isValidDiscountRegistration(user, claimerMismatchValidationData); |
| 16 | + } |
| 17 | + |
| 18 | + function test_reverts_whenTheValidationData_signatureIsExpired() public { |
| 19 | + bytes memory validationData = _getDefaultValidationData(); |
| 20 | + (address expectedClaimer,, bytes memory sig) = abi.decode(validationData, (address, uint64, bytes)); |
| 21 | + bytes memory claimerMismatchValidationData = abi.encode(expectedClaimer, (block.timestamp - 1), sig); |
| 22 | + |
| 23 | + vm.expectRevert(abi.encodeWithSelector(SybilResistanceVerifier.SignatureExpired.selector)); |
| 24 | + validator.isValidDiscountRegistration(user, claimerMismatchValidationData); |
| 25 | + } |
| 26 | + |
| 27 | + function test_returnsFalse_whenTheExpectedSignerMismatches(uint256 pk) public view { |
| 28 | + vm.assume(pk != signerPk && pk != 0 && pk < type(uint128).max); |
| 29 | + address badSigner = vm.addr(pk); |
| 30 | + bytes32 digest = SybilResistanceVerifier._makeSignatureHash(address(validator), badSigner, user, expires); |
| 31 | + (uint8 v, bytes32 r, bytes32 s) = vm.sign(pk, digest); |
| 32 | + bytes memory sig = abi.encodePacked(r, s, v); |
| 33 | + bytes memory badSignerValidationData = abi.encode(user, expires, sig); |
| 34 | + |
| 35 | + assertFalse(validator.isValidDiscountRegistration(user, badSignerValidationData)); |
| 36 | + } |
| 37 | + |
| 38 | + function test_returnsTrue_whenEverythingIsHappy() public { |
| 39 | + assertTrue(validator.isValidDiscountRegistration(user, _getDefaultValidationData())); |
| 40 | + } |
| 41 | +} |
0 commit comments