// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ScrollStatGame {
address public owner;
uint256 public prizePool;
uint256 public devFund;
// Prices for game tiers
uint256 public PRICE_10_GAMES = 0.0005 ether;
uint256 public PRICE_15_GAMES = 0.0007 ether;
uint256 public PRICE_30_GAMES = 0.0012 ether;
event GamePurchased(address indexed player, uint256 games, uint256 amount);
event PrizePoolFunded(address indexed funder, uint256 amount);
event WithdrawDevFunds(uint256 amount);
event WithdrawPrizePool(uint256 amount);
event Price10GamesUpdated(uint256 newPrice);
event Price15GamesUpdated(uint256 newPrice);
event Price30GamesUpdated(uint256 newPrice);
constructor() {
owner = msg.sender;
}
function buy10Games() external payable {
require(msg.value == PRICE_10_GAMES, "Incorrect payment amount for 10 games");
_distributeFunds(msg.value, 10);
}
function buy15Games() external payable {
require(msg.value == PRICE_15_GAMES, "Incorrect payment amount for 15 games");
_distributeFunds(msg.value, 15);
}
function buy30Games() external payable {
require(msg.value == PRICE_30_GAMES, "Incorrect payment amount for 30 games");
_distributeFunds(msg.value, 30);
}
function _distributeFunds(uint256 amount, uint256 numberOfGames) internal {
uint256 amountForPrizePool = (amount * 80) / 100;
uint256 amountForDev = (amount * 20) / 100;
prizePool += amountForPrizePool;
devFund += amountForDev;
emit GamePurchased(msg.sender, numberOfGames, amount);
}
function depositToPrizePool() external payable {
prizePool += msg.value;
emit PrizePoolFunded(msg.sender, msg.value);
}
function withdrawDevFunds() external {
require(msg.sender == owner, "Only the owner can withdraw dev funds");
require(devFund > 0, "No funds available for withdrawal");
uint256 amount = devFund;
devFund = 0;
payable(owner).transfer(amount);
emit WithdrawDevFunds(amount);
}
function withdrawPrizePool() external {
require(msg.sender == owner, "Only the owner can withdraw the prize pool");
require(prizePool > 0, "No prize pool funds available");
uint256 amount = prizePool;
prizePool = 0;
payable(owner).transfer(amount);
emit WithdrawPrizePool(amount);
}
function getContractBalance() external view returns (uint256) {
return address(this).balance;
}
function updatePrice10Games(uint256 newPrice) external {
require(msg.sender == owner, "Only the owner can update the price for 10 games");
PRICE_10_GAMES = newPrice;
emit Price10GamesUpdated(newPrice);
}
function updatePrice15Games(uint256 newPrice) external {
require(msg.sender == owner, "Only the owner can update the price for 15 games");
PRICE_15_GAMES = newPrice;
emit Price15GamesUpdated(newPrice);
}
function updatePrice30Games(uint256 newPrice) external {
require(msg.sender == owner, "Only the owner can update the price for 30 games");
PRICE_30_GAMES = newPrice;
emit Price30GamesUpdated(newPrice);
}
}
{
"compilationTarget": {
"contracts/ScrollStatGame.sol": "ScrollStatGame"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"player","type":"address"},{"indexed":false,"internalType":"uint256","name":"games","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"GamePurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"Price10GamesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"Price15GamesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"Price30GamesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"funder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PrizePoolFunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawDevFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawPrizePool","type":"event"},{"inputs":[],"name":"PRICE_10_GAMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_15_GAMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE_30_GAMES","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy10Games","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buy15Games","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"buy30Games","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"depositToPrizePool","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"devFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice10Games","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice15Games","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"updatePrice30Games","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDevFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"}]