编译器
0.8.21+commit.d9974bed
文件 1 的 10:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 10:DividendPayingToken.sol
pragma solidity ^0.8.10;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "./SafeMath.sol";
import "./interfaces/IDividendPayingToken.sol";
interface IPair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function token0() external view returns (address);
function sync() external;
}
interface IFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
}
interface IUniswapRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
)
external
payable
returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
contract DividendPayingToken is ERC20, DividendPayingTokenInterface, Ownable {
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
address public rewardToken;
uint256 internal constant magnitude = 2 ** 128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
uint256 public totalDividendsDistributed;
uint256 public totalDividendsWithdrawn;
constructor(
string memory _name,
string memory _symbol
) ERC20(_name, _symbol) {}
function distributeRewardTokenDividends(uint256 amount) public onlyOwner {
require(totalSupply() > 0);
if (amount > 0) {
magnifiedDividendPerShare = magnifiedDividendPerShare.add(
(amount).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, amount);
totalDividendsDistributed = totalDividendsDistributed.add(amount);
}
}
function withdrawDividend() public virtual override {
_withdrawDividendOfUser(payable(msg.sender));
}
function _withdrawDividendOfUser(
address payable user
) internal returns (uint256) {
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(
_withdrawableDividend
);
totalDividendsWithdrawn += _withdrawableDividend;
emit DividendWithdrawn(user, _withdrawableDividend);
bool success = IERC20(rewardToken).transfer(
user,
_withdrawableDividend
);
if (!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(
_withdrawableDividend
);
totalDividendsWithdrawn -= _withdrawableDividend;
return 0;
}
return _withdrawableDividend;
}
return 0;
}
function dividendOf(address _owner) public view override returns (uint256) {
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(
address _owner
) public view override returns (uint256) {
return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
}
function withdrawnDividendOf(
address _owner
) public view override returns (uint256) {
return withdrawnDividends[_owner];
}
function accumulativeDividendOf(
address _owner
) public view override returns (uint256) {
return
magnifiedDividendPerShare
.mul(balanceOf(_owner))
.toInt256Safe()
.add(magnifiedDividendCorrections[_owner])
.toUint256Safe() / magnitude;
}
function _transfer(
address from,
address to,
uint256 value
) internal virtual override {
int256 _magCorrection = magnifiedDividendPerShare
.mul(value)
.toInt256Safe();
magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
.add(_magCorrection);
magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
_magCorrection
);
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) {
uint256 mintAmount = newBalance.sub(currentBalance);
_mint(account, mintAmount);
} else if (newBalance < currentBalance) {
uint256 burnAmount = currentBalance.sub(newBalance);
_burn(account, burnAmount);
}
}
}
文件 3 的 10:ERC20.sol
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
文件 4 的 10:IDividendPayingToken.sol
pragma solidity ^0.8.6;
interface DividendPayingTokenInterface {
function dividendOf(address _owner) external view returns (uint256);
function withdrawDividend() external;
function withdrawableDividendOf(
address _owner
) external view returns (uint256);
function withdrawnDividendOf(
address _owner
) external view returns (uint256);
function accumulativeDividendOf(
address _owner
) external view returns (uint256);
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
}
文件 5 的 10:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}
文件 6 的 10:IERC20Metadata.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
文件 7 的 10:Mixquity.sol
pragma solidity 0.8.21;
abstract contract ERC20Detailed is IERC20 {
string private _name;
string private _symbol;
uint8 private _decimals;
constructor(
string memory _tokenName,
string memory _tokenSymbol,
uint8 _tokenDecimals
) {
_name = _tokenName;
_symbol = _tokenSymbol;
_decimals = _tokenDecimals;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
}
import "./Tracker.sol";
contract MixQuity is ERC20Detailed, Ownable {
struct Taxes {
uint256 marketing;
uint256 lpReward;
}
uint8 private constant DECIMALS = 9;
uint256 private constant INITIAL_TOKENS_SUPPLY =
10_000_000 * 10 ** DECIMALS;
uint256 private constant TOTAL_PARTS =
type(uint256).max - (type(uint256).max % INITIAL_TOKENS_SUPPLY);
Tracker public tracker;
uint256 public compoundFrequency = 1800;
uint256 public nextCompound;
uint256 public lastCompound;
uint256 public compoundEnd;
uint256 public finalEpoch = 960;
uint256 public currentEpoch;
uint256 public compoundPercentage = 480857656;
bool public autoCompound;
address public marketingWallet;
Taxes public phase1 = Taxes(300, 300);
Taxes public phase2 = Taxes(100, 300);
Taxes public curFee = phase1;
uint256 public curTotalTax = phase1.marketing + phase1.lpReward;
uint256 public antiBotFee = 9000;
uint256 antiBotTime;
uint256 antiBuySellBotTime;
uint256 blockBotTime;
uint256 antiBotDuration = 24;
uint256 blockBotDuration = 300;
uint256 antiBotBuySellDuration = 600;
uint256 maxBuyAntiBotAmount = 300_000 * 10 ** DECIMALS;
event SendDividends(uint256 tokensSwapped, uint256 amount);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event Compound(uint256 indexed time, uint256 totalSupply);
IUniswapRouter public router;
address public pair;
bool public tradingEnable = false;
uint256 private _totalSupply;
uint256 private _partsPerToken;
uint256 private swapTokenAtAmount = INITIAL_TOKENS_SUPPLY / 200;
mapping(address => uint256) private _partBalances;
mapping(address => mapping(address => uint256)) private _allowedTokens;
mapping(address => bool) public isExcludedFromFees;
mapping(address => mapping(uint256 => bool)) public isTransferSpent;
mapping(address => bool) public blockedBot;
bool inSwap;
modifier swapping() {
inSwap = true;
_;
inSwap = false;
}
constructor(
address _router,
address _marketing
) ERC20Detailed("MixQuity.finance", "MIXQ", DECIMALS) {
tracker = new Tracker();
marketingWallet = _marketing;
router = IUniswapRouter(_router);
_totalSupply = INITIAL_TOKENS_SUPPLY;
_partBalances[msg.sender] = TOTAL_PARTS;
_partsPerToken = TOTAL_PARTS / (_totalSupply);
pair = IFactory(router.factory()).createPair(
address(this),
router.WETH()
);
excludedFromFees(address(this), true);
excludedFromFees(address(router), true);
excludedFromFees(msg.sender, true);
excludedFromFees(_marketing, true);
tracker.updateRewardToken(address(pair));
tracker.excludeFromDividends(address(tracker), true);
tracker.excludeFromDividends(address(this), true);
tracker.excludeFromDividends(msg.sender, true);
tracker.excludeFromDividends(address(0), true);
tracker.excludeFromDividends(_marketing, true);
tracker.excludeFromDividends(_router, true);
tracker.excludeFromDividends(address(pair), true);
_allowedTokens[address(this)][address(router)] = type(uint256).max;
_allowedTokens[address(msg.sender)][address(router)] = type(uint256)
.max;
emit Transfer(
address(0),
address(msg.sender),
balanceOf(address(this))
);
}
function claim() external {
tracker.processAccount(payable(msg.sender));
}
function trackerRescueETH20Tokens(address tokenAddress) external onlyOwner {
tracker.trackerRescueETH20Tokens(msg.sender, tokenAddress);
}
function excludeFromDividends(
address account,
bool value
) public onlyOwner {
tracker.excludeFromDividends(account, value);
}
function getTotalDividendsDistributed() external view returns (uint256) {
return tracker.totalDividendsDistributed();
}
function withdrawableDividendOf(
address account
) public view returns (uint256) {
return tracker.withdrawableDividendOf(account);
}
function dividendTokenBalanceOf(
address account
) public view returns (uint256) {
return tracker.balanceOf(account);
}
function getAccountInfo(
address account
) external view returns (address, uint256, uint256, uint256, uint256) {
return tracker.getAccount(account);
}
function manualLiquidityDistribution(uint256 amount) public onlyOwner {
bool success = IERC20(pair).transferFrom(
msg.sender,
address(tracker),
amount
);
if (success) {
tracker.distributeRewardTokenDividends(amount);
}
}
function forceSend() external onlyOwner {
uint256 ETHbalance = address(this).balance;
(bool success, ) = payable(owner()).call{value: ETHbalance}("");
require(success);
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function allowance(
address owner_,
address spender
) external view override returns (uint256) {
return _allowedTokens[owner_][spender];
}
function balanceOf(address who) public view override returns (uint256) {
return _partBalances[who] / (_partsPerToken);
}
function shouldCompound() public view returns (bool) {
return
currentEpoch < finalEpoch &&
nextCompound > 0 &&
nextCompound <= block.timestamp &&
autoCompound;
}
function lpSync() internal {
IPair _pair = IPair(pair);
_pair.sync();
}
function transfer(
address to,
uint256 value
) external override returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
function excludedFromFees(address _address, bool _value) public onlyOwner {
isExcludedFromFees[_address] = _value;
emit ExcludeFromFees(_address, _value);
}
function blockBot(address[] calldata _addresses) external onlyOwner {
require(
block.timestamp <= blockBotTime || !tradingEnable,
"Can only block bot in the first 5 minutes"
);
for (uint256 i = 0; i < _addresses.length; i++) {
blockedBot[_addresses[i]] = true;
}
}
function unblockBot(address[] calldata _addresses) external onlyOwner {
for (uint256 i = 0; i < _addresses.length; i++) {
blockedBot[_addresses[i]] = false;
}
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
require(!blockedBot[sender] && !blockedBot[recipient], "You are bot");
address pairAddress = pair;
if (tx.origin == sender || tx.origin == recipient) {
require(!isTransferSpent[tx.origin][block.number], "You are bot!");
isTransferSpent[tx.origin][block.number] = true;
if (antiBuySellBotTime > block.timestamp) {
isTransferSpent[tx.origin][block.number + 1] = true;
}
}
if (
!inSwap &&
!isExcludedFromFees[sender] &&
!isExcludedFromFees[recipient]
) {
uint256 totalFeePercentage;
if (sender == pairAddress || recipient == pairAddress) {
totalFeePercentage = curTotalTax;
}
require(tradingEnable, "Trading not live");
if (antiBotTime >= block.timestamp) {
if (sender == pairAddress) {
if (amount >= maxBuyAntiBotAmount) {
totalFeePercentage = antiBotFee;
}
}
}
if (recipient == pairAddress) {
if (balanceOf(address(this)) >= swapTokenAtAmount) {
swapAndLiquify(swapTokenAtAmount);
}
}
if (shouldCompound() && sender != pairAddress) {
_compound();
}
uint256 taxAmount;
taxAmount = (amount * totalFeePercentage) / 10000;
if (taxAmount > 0) {
_partBalances[sender] -= (taxAmount * _partsPerToken);
_partBalances[address(this)] += (taxAmount * _partsPerToken);
emit Transfer(sender, address(this), taxAmount);
amount -= taxAmount;
}
}
_partBalances[sender] -= (amount * _partsPerToken);
_partBalances[recipient] += (amount * _partsPerToken);
try
tracker.setBalance(sender, _partBalances[sender] / 10 ** 53)
{} catch {}
try
tracker.setBalance(recipient, _partBalances[recipient] / 10 ** 53)
{} catch {}
emit Transfer(sender, recipient, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) external override returns (bool) {
if (_allowedTokens[from][msg.sender] != type(uint256).max) {
require(
_allowedTokens[from][msg.sender] >= value,
"Insufficient Allowance"
);
_allowedTokens[from][msg.sender] =
_allowedTokens[from][msg.sender] -
(value);
}
_transfer(from, to, value);
return true;
}
function decreaseAllowance(
address spender,
uint256 subtractedValue
) external returns (bool) {
uint256 oldValue = _allowedTokens[msg.sender][spender];
if (subtractedValue >= oldValue) {
_allowedTokens[msg.sender][spender] = 0;
} else {
_allowedTokens[msg.sender][spender] = oldValue - (subtractedValue);
}
emit Approval(msg.sender, spender, _allowedTokens[msg.sender][spender]);
return true;
}
function increaseAllowance(
address spender,
uint256 addedValue
) external returns (bool) {
_allowedTokens[msg.sender][spender] =
_allowedTokens[msg.sender][spender] +
(addedValue);
emit Approval(msg.sender, spender, _allowedTokens[msg.sender][spender]);
return true;
}
function approve(
address spender,
uint256 value
) public override returns (bool) {
_allowedTokens[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
function _compound() internal returns (uint256) {
uint256 cacheLastCompound = lastCompound;
uint256 cacheCompoundFrequency = compoundFrequency;
uint256 cacheFinalEpoch = finalEpoch;
uint256 cacheCompoundEnd = compoundEnd;
uint256 cacheTotalSupply = _totalSupply;
uint256 cacheCompoundPercentage = compoundPercentage;
uint256 compoundTime = block.timestamp;
if (compoundTime > cacheCompoundEnd) {
compoundTime = cacheCompoundEnd;
}
uint256 times = (compoundTime - cacheLastCompound) /
cacheCompoundFrequency;
lastCompound = cacheLastCompound + times * cacheCompoundFrequency;
nextCompound = cacheLastCompound + cacheCompoundFrequency * (times + 1);
if (times + currentEpoch > cacheFinalEpoch) {
times = cacheFinalEpoch - currentEpoch;
}
currentEpoch += times;
for (uint256 i = 0; i < times; i++) {
cacheTotalSupply =
(cacheTotalSupply * (10 ** 11 + cacheCompoundPercentage)) /
10 ** 11;
}
if (cacheTotalSupply == _totalSupply) {
emit Compound(compoundTime, cacheTotalSupply);
return cacheTotalSupply;
}
_totalSupply = cacheTotalSupply;
_partsPerToken = TOTAL_PARTS / (cacheTotalSupply);
if (currentEpoch >= cacheFinalEpoch) {
autoCompound = false;
nextCompound = 0;
curFee = phase2;
curTotalTax = phase2.marketing + phase2.lpReward;
}
lpSync();
emit Compound(compoundTime, cacheTotalSupply);
return cacheTotalSupply;
}
function manualCompound() external {
require(shouldCompound(), "Not time yet");
_compound();
}
function enableTrading() external onlyOwner {
require(!tradingEnable, "Trading Live Already");
_startCompound();
tradingEnable = true;
antiBotTime = block.timestamp + antiBotDuration;
antiBuySellBotTime = block.timestamp + antiBotBuySellDuration;
blockBotTime = block.timestamp + blockBotDuration;
}
function _startCompound() internal {
require(currentEpoch == 0 && !autoCompound, "already started");
autoCompound = true;
nextCompound = block.timestamp + compoundFrequency;
lastCompound = block.timestamp;
compoundEnd = block.timestamp + finalEpoch * compoundFrequency;
}
function swapAndLiquify(uint256 tokens) private swapping {
Taxes memory tempCurFee = curFee;
uint256 tempCurTotalTax = curTotalTax;
uint256 amountToSwap = (tokens * tempCurFee.marketing) /
tempCurTotalTax;
uint256 amountToLpReward = (tokens * tempCurFee.lpReward) /
tempCurTotalTax;
_swapAndAddliquidity(amountToLpReward);
_swapTokensForETH(amountToSwap);
uint256 ethTomarketing = address(this).balance;
if (ethTomarketing > 0) {
(bool success, ) = payable(marketingWallet).call{
value: ethTomarketing
}("");
require(success, "Failed to send ETH to marketing wallet");
}
uint256 lpBalance = IERC20(pair).balanceOf(address(this));
if (lpBalance > 0) {
bool success = IERC20(pair).transfer(address(tracker), lpBalance);
if (success) {
tracker.distributeRewardTokenDividends(lpBalance);
emit SendDividends(tokens, lpBalance);
}
}
}
function _swapTokensForETH(uint256 tokenAmount) internal {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function _swapAndAddliquidity(uint256 amount) internal {
if (amount > 0) {
uint256 half = amount / 2;
uint256 otherHalf = amount - half;
uint256 initialBalance = address(this).balance;
_swapTokensForETH(half);
uint256 newBalance = address(this).balance - (initialBalance);
router.addLiquidityETH{value: newBalance}(
address(this),
otherHalf,
0,
0,
address(this),
block.timestamp
);
}
}
function setSwapAtAmount(uint256 _amount) external onlyOwner {
swapTokenAtAmount = _amount;
}
function fetchBalances(address[] memory wallets) external {
address wallet;
for (uint256 i = 0; i < wallets.length; i++) {
wallet = wallets[i];
emit Transfer(wallet, wallet, 0);
}
}
receive() external payable {}
}
文件 8 的 10:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 9 的 10:SafeMath.sol
pragma solidity ^0.8.6;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
function div(int256 a, int256 b) internal pure returns (int256) {
require(b != -1 || a != MIN_INT256);
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
function toUint256Safe(int256 a) internal pure returns (uint256) {
require(a >= 0);
return uint256(a);
}
}
library SafeMathUint {
function toInt256Safe(uint256 a) internal pure returns (int256) {
int256 b = int256(a);
require(b >= 0);
return b;
}
}
文件 10 的 10:Tracker.sol
pragma solidity ^0.8.10;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/interfaces/IERC20.sol";
import "./DividendPayingToken.sol";
contract Tracker is Ownable, DividendPayingToken {
struct AccountInfo {
address account;
uint256 withdrawableDividends;
uint256 totalDividends;
uint256 lastClaimTime;
}
mapping(address => bool) public excludedFromDividends;
mapping(address => uint256) public lastClaimTimes;
event ExcludeFromDividends(address indexed account, bool value);
event Claim(address indexed account, uint256 amount);
constructor()
DividendPayingToken("MIXQ_Dividend_Tracker", "MIXQ_Dividend_Tracker")
{}
function trackerRescueETH20Tokens(
address recipient,
address tokenAddress
) external onlyOwner {
IERC20(tokenAddress).transfer(
recipient,
IERC20(tokenAddress).balanceOf(address(this))
);
}
function updateRewardToken(address _rewardToken) external onlyOwner {
rewardToken = _rewardToken;
}
function _transfer(address, address, uint256) internal pure override {
require(false, "MIXQ_Dividend_Tracker: Transfer not allowed");
}
function excludeFromDividends(
address account,
bool value
) external onlyOwner {
require(excludedFromDividends[account] != value);
excludedFromDividends[account] = value;
if (value == true) {
_setBalance(account, 0);
} else {
_setBalance(account, balanceOf(account));
}
emit ExcludeFromDividends(account, value);
}
function getAccount(
address account
) public view returns (address, uint256, uint256, uint256, uint256) {
AccountInfo memory info;
info.account = account;
info.withdrawableDividends = withdrawableDividendOf(account);
info.totalDividends = accumulativeDividendOf(account);
info.lastClaimTime = lastClaimTimes[account];
return (
info.account,
info.withdrawableDividends,
info.totalDividends,
info.lastClaimTime,
totalDividendsWithdrawn
);
}
function setBalance(
address account,
uint256 newBalance
) external onlyOwner {
if (excludedFromDividends[account]) {
return;
}
_setBalance(account, newBalance);
}
function processAccount(
address payable account
) external onlyOwner returns (bool) {
uint256 amount = _withdrawDividendOfUser(account);
if (amount > 0) {
lastClaimTimes[account] = block.timestamp;
emit Claim(account, amount);
return true;
}
return false;
}
}
{
"compilationTarget": {
"contracts/Mixquity.sol": "MixQuity"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_marketing","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"Compound","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoCompound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"blockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blockedBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"compoundEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compoundFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"compoundPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curFee","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lpReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"excludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"fetchBalances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finalEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"isTransferSpent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCompound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualCompound","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualLiquidityDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextCompound","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase1","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lpReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phase2","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"lpReward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shouldCompound","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tracker","outputs":[{"internalType":"contract Tracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"trackerRescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"unblockBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]