contracts-imtbl/contracts/core/ClaimHistory.sol
2024-08-22 15:18:47 +08:00

22 lines
753 B
Solidity

// SPDX-License-Identifier: MIT
pragma solidity 0.8.19;
contract ClaimHistory {
mapping(address user=> mapping(uint256 index => uint256 val)) private claimedBitMap;
function isClaimed(address user, uint256 index) public view returns (bool) {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
uint256 claimedWord = claimedBitMap[user][claimedWordIndex];
uint256 mask = (1 << claimedBitIndex);
return claimedWord & mask == mask;
}
function setClaimed(address user, uint256 index) internal {
uint256 claimedWordIndex = index / 256;
uint256 claimedBitIndex = index % 256;
claimedBitMap[user][claimedWordIndex] = claimedBitMap[user][claimedWordIndex] | (1 << claimedBitIndex);
}
}