文件 1 的 1:AstraGameBooster.sol
pragma solidity >=0.8.2 <0.9.0;
contract AstraGameBooster {
struct BoostData {
uint256 latestBoostTime;
uint256 boostCount;
uint256 consecutiveDays;
}
mapping(address => BoostData) private users;
event GameBoost(address indexed sender, uint256 boostCount, uint256 consecutiveDays, uint256 latestBoostTime);
uint256 private constant BOOST_INTERVAL = 24 * 60 * 60;
uint256 public participantCount;
function boost() public returns (uint256 latestBoostTime, uint256 boostCount, uint256 consecutiveDays) {
address currentUser = msg.sender;
BoostData storage user = users[currentUser];
require(
user.latestBoostTime == 0 || block.timestamp >= user.latestBoostTime + BOOST_INTERVAL,
"AstraGameBoost available only once every 24 hours."
);
if (user.boostCount == 0) {
participantCount++;
}
if (block.timestamp < user.latestBoostTime + 2 * BOOST_INTERVAL) {
user.consecutiveDays++;
} else {
user.consecutiveDays = 1;
}
user.latestBoostTime = block.timestamp;
user.boostCount++;
emit GameBoost(currentUser, user.boostCount, user.consecutiveDays, block.timestamp);
return (user.latestBoostTime, user.boostCount, user.consecutiveDays);
}
function userGameBoost(
address userAddress
) public view returns (uint256 latestBoostTime, uint256 boostCount, uint256 consecutiveDays) {
BoostData storage user = users[userAddress];
return (user.latestBoostTime, user.boostCount, user.consecutiveDays);
}
}
{
"compilationTarget": {
"contracts/AstraGameBooster.sol": "AstraGameBooster"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}