pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/math/SafeMath.sol"; contract ClaimableToken { using SafeMath for uint256; uint256 public totalSupply = 10000000; // 记录所有地址的交易数 mapping(address => uint256) public txCounts; // 领取token数量 uint256 public amount = 100; // token名称 string public name = "Claimable Token"; // token代号 string public symbol = "CLM"; // balances记录所有地址的代币余额 mapping(address => uint256) public balances; // 最后一次交互的时间戳 mapping(address => uint256) public lastInteraction; constructor() { balances[msg.sender] = totalSupply; } // 允许用户领取token function claim() public { // 判断地址交易数是否大于0 require(txCounts[msg.sender] > 0, "No tx record"); // 判断最后一次交互是否在2023年5月之前 require(lastInteraction[msg.sender] < 1690908800, "Not eligible for claim"); // 更新最后一次交互的时间戳 lastInteraction[msg.sender] = block.timestamp; // 从合约地址转账token给用户,使用SafeMath库避免整数溢出和下溢的问题 balances[address(this)] = balances[address(this)].sub(amount); balances[msg.sender] = balances[msg.sender].add(amount); } // 记录用户一笔新的Optimism交易 function recordTx() public { // 累加发送者交易数 txCounts[msg.sender]++; // 更新最后一次交互的时间戳 lastInteraction[msg.sender] = block.timestamp; } }
0.7.1