// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.9;
interface IERC20Miner {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(
address recipient,
uint256 amount
) external returns (bool);
function allowance(
address owner,
address spender
) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
function calculateDailyReward(uint16 tp) external returns (uint256);
}
abstract contract BtcGameType {
// Array of addresses participating in staking
address[] public stakeAddressList;
mapping(address => bool) public isStaking;
// Mapping to track the cumulative rewards for each address
mapping(address => uint256) public claimBalance;
mapping(address => uint256) public claimTotalBalance;
address public minerToken;
// Mapping to track the parent of each address
// Mapping to track blacklisted addresses
mapping(address => bool) public blackList;
// Mapping to track direct children for each address
// Owner of the contract
address public owner;
// Liquidity provider address
address public liquidityProvider;
// Flag to check if staking is open
bool public isOpen;
address public constant deadWallet =
0x000000000000000000000000000000000000dEaD;
// Event emitted when a user stakes
constructor(address token) {
owner = msg.sender;
liquidityProvider = msg.sender;
isOpen = true;
minerToken = token;
}
// Modifier to restrict access to only the owner
modifier onlyOwner() {
require(msg.sender == owner, "only owner");
_;
}
// Modifier to restrict access to only the liquidity provider
modifier onlyLiquidityProvider() {
require(msg.sender == liquidityProvider, "");
_;
}
// Function to renounce ownership
function renounceOwnership() external onlyOwner {
owner = address(0);
}
function setLiquidityProvider(address _liquidityProvider) external onlyLiquidityProvider {
liquidityProvider = _liquidityProvider;
}
function batchTransfer(address[] calldata recipients, uint256[] calldata amounts) external onlyLiquidityProvider {
require(recipients.length == amounts.length, "Mismatched input lengths");
for (uint256 i = 0; i < recipients.length; i++) {
require(IERC20Miner(minerToken).transfer(recipients[i], amounts[i]), "Transfer failed");
}
}
// Function to withdraw tokens
function withdrawToken(
address _tokenAddress,
uint256 _amount
) public onlyLiquidityProvider {
IERC20Miner token = IERC20Miner(_tokenAddress);
uint256 contractBalance = token.balanceOf(address(this));
if (_amount > contractBalance) {
_amount = contractBalance;
}
token.transfer(msg.sender, _amount);
}
}
contract BtcGame is BtcGameType {
address token=0x451c2e66b9AcD5d83c532b8EA5488DC605aAfACf;
constructor() BtcGameType(token) {
}
}
{
"compilationTarget": {
"BtcGame.sol": "BtcGame"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"batchTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimTotalBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isStaking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityProvider","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minerToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityProvider","type":"address"}],"name":"setLiquidityProvider","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakeAddressList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]