diff --git a/contracts/activity/ClaimBoxFactory.sol b/contracts/activity/ClaimBoxFactory.sol index a16b9da..f0be548 100644 --- a/contracts/activity/ClaimBoxFactory.sol +++ b/contracts/activity/ClaimBoxFactory.sol @@ -11,6 +11,7 @@ interface IClaimBox { contract ClaimBoxFactory is HasSignature, TimeChecker { address public executor; mapping(address => bool) public tokenSupported; + mapping(address => uint256) public claimHistory; event BoxClaimed( address indexed nftAddress, @@ -45,6 +46,10 @@ contract ClaimBoxFactory is HasSignature, TimeChecker { ) external signatureValid(signature) timeValid(startTime) { require(tokenSupported[nftAddress], "ClaimBoxFactory: unsupported NFT"); address to = _msgSender(); + require( + claimHistory[to] == 0, + "ClaimBoxFactory: you have claimed this NFT" + ); bytes32 criteriaMessageHash = getMessageHash( to, nftAddress, @@ -54,6 +59,7 @@ contract ClaimBoxFactory is HasSignature, TimeChecker { checkSigner(executor, criteriaMessageHash, signature); uint256 tokenId = IClaimBox(nftAddress).mint(to); _useSignature(signature); + claimHistory[to] = tokenId; emit BoxClaimed(nftAddress, to, saltNonce, tokenId); }