// 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); } }