编译器
0.8.19+commit.7dd6d404
文件 1 的 9: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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
文件 2 的 9: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 {}
}
文件 3 的 9:GIB.sol
pragma solidity ^0.8.19;
import "./GIBDiv.sol";
contract GIB is ERC20, Ownable {
IUniswapRouter public router;
address public pair;
uint256 public constant PERIOD_DURATION = 300;
uint256 public startTimestamp;
enum Interval {
First,
Second,
Third
}
bool private swapping;
bool public swapEnabled = true;
bool public claimEnabled = true;
bool public tradingEnabled;
DividendTracker public dividendTracker;
address public devWallet;
uint256 public swapTokensAtAmount;
uint256 public maxBuyAmount;
uint256 public maxSellAmount;
uint256 public maxWallet;
uint256 buyDevTax = 10;
uint256 buyMemesTax = 10;
uint256 sellDevTax = 10;
uint256 sellMemesTax = 10;
uint256 public totalBuyTax = 20;
uint256 public totalSellTax = 20;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public automatedMarketMakerPairs;
mapping(address => bool) private _isExcludedFromMaxWallet;
address[3] public tokensArray;
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
constructor() ERC20("GIB6900", "GIB") {
dividendTracker = new DividendTracker(
"GIB_DIVIDEND_Tracker",
"GIB_DIVIDEND_Tracker"
);
setDevWallet(0xAcBd180c9D49b5EbE57a9aCaa25fd11c0237A823);
IUniswapRouter _router = IUniswapRouter(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
address _pair = IFactory(_router.factory()).createPair(
address(this),
_router.WETH()
);
startTimestamp = block.timestamp;
router = _router;
pair = _pair;
setSwapTokensAtAmount(420690000);
updateMaxWalletAmount(8413800000);
setMaxBuyAndSell(8413800000, 8413800000);
_setAutomatedMarketMakerPair(_pair, true);
buyDevTax = 190;
buyMemesTax = 20;
sellDevTax = 190;
sellMemesTax = 20;
totalBuyTax = 210;
totalSellTax = 210;
tokensArray[0] = 0xE0f63A424a4439cBE457D80E4f4b51aD25b2c56C;
tokensArray[1] = 0x812Ba41e071C7b7fA4EBcFB62dF5F45f6fA853Ee;
tokensArray[2] = 0x72e4f9F808C49A2a61dE9C5896298920Dc4EEEa9;
dividendTracker.updateToken(
tokensArray[0],
tokensArray[1],
tokensArray[2]
);
dividendTracker.excludeFromDividends(address(dividendTracker), true);
dividendTracker.excludeFromDividends(address(this), true);
dividendTracker.excludeFromDividends(owner(), true);
dividendTracker.excludeFromDividends(address(0xdead), true);
dividendTracker.excludeFromDividends(address(0), true);
dividendTracker.excludeFromDividends(address(_router), true);
excludeFromMaxWallet(address(_pair), true);
excludeFromMaxWallet(address(this), true);
excludeFromMaxWallet(address(_router), true);
excludeFromMaxWallet(address(dividendTracker), true);
excludeFromMaxWallet(address(0xdead), true);
excludeFromFees(address(this), true);
excludeFromFees(address(dividendTracker), true);
excludeFromFees(address(0xdead), true);
_mint(owner(), 420690000000 * (10**18));
}
receive() external payable {}
modifier onlyDev() {
if (msg.sender != devWallet) {
revert("not dev account");
}
_;
}
function updateDividendTracker(address newAddress) public onlyDev {
DividendTracker newDividendTracker = DividendTracker(newAddress);
newDividendTracker.excludeFromDividends(
address(newDividendTracker),
true
);
newDividendTracker.excludeFromDividends(address(this), true);
newDividendTracker.excludeFromDividends(owner(), true);
newDividendTracker.excludeFromDividends(address(router), true);
dividendTracker.excludeFromDividends(address(0), true);
dividendTracker = newDividendTracker;
}
function claimDividend() external {
require(claimEnabled, "Claim not enabled");
dividendTracker.processAccount(msg.sender);
}
function removeLimits() external onlyOwner {
updateMaxWalletAmount(420690000000);
setMaxBuyAndSell(420690000000, 420690000000);
}
function updateMaxWalletAmount(uint256 newNum) internal {
maxWallet = newNum * 10**18;
}
function setMaxBuyAndSell(uint256 maxBuy, uint256 maxSell) internal {
maxBuyAmount = maxBuy * 10**18;
maxSellAmount = maxSell * 10**18;
}
function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
swapTokensAtAmount = amount * 10**18;
}
function excludeFromMaxWallet(address account, bool excluded)
public
onlyOwner
{
_isExcludedFromMaxWallet[account] = excluded;
}
function rescueETH20Tokens(address tokenAddress) external onlyDev {
IERC20(tokenAddress).transfer(
owner(),
IERC20(tokenAddress).balanceOf(address(this))
);
}
function forceSend() external onlyDev {
uint256 ETHbalance = address(this).balance;
(bool success, ) = payable(devWallet).call{value: ETHbalance}("");
require(success);
}
function trackerRescueETH20Tokens(address tokenAddress) external onlyDev {
dividendTracker.trackerRescueETH20Tokens(msg.sender, tokenAddress);
}
function updateRouter(address newRouter) external onlyOwner {
router = IUniswapRouter(newRouter);
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
require(
_isExcludedFromFees[account] != excluded,
"Account is already the value of 'excluded'"
);
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function excludeFromDividends(address account, bool value)
public
onlyOwner
{
dividendTracker.excludeFromDividends(account, value);
}
function setDevWallet(address newWallet) public onlyOwner {
devWallet = newWallet;
}
function setBuyTaxes(uint256 _dev, uint256 _memes) external onlyOwner {
require(_dev + _memes <= 350, "Fee must be <= 35%");
buyDevTax = _dev;
buyMemesTax = _memes;
totalBuyTax = _dev + _memes;
}
function setSellTaxes(uint256 _dev, uint256 _memes) external onlyOwner {
require(_dev + _memes <= 350, "Fee must be <= 35%");
sellDevTax = _dev;
sellMemesTax = _memes;
totalSellTax = _dev + _memes;
}
function setSwapEnabled(bool _enabled) external onlyOwner {
swapEnabled = _enabled;
}
function enableTrading() external onlyOwner {
require(!tradingEnabled, "Trading already enabled");
tradingEnabled = true;
}
function setClaimEnabled(bool state) external onlyOwner {
claimEnabled = state;
}
function setAutomatedMarketMakerPair(address newPair, bool value)
external
onlyOwner
{
_setAutomatedMarketMakerPair(newPair, value);
}
function _setAutomatedMarketMakerPair(address newPair, bool value) private {
require(
automatedMarketMakerPairs[newPair] != value,
"Automated market maker pair is already set to that value"
);
automatedMarketMakerPairs[newPair] = value;
if (value) {
dividendTracker.excludeFromDividends(newPair, true);
}
emit SetAutomatedMarketMakerPair(newPair, value);
}
function getTotalDividendsDistributed()
external
view
returns (
uint256,
uint256,
uint256
)
{
return (
dividendTracker.totalDividendsDistributedSPX6900(),
dividendTracker.totalDividendsDistributedNeiro(),
dividendTracker.totalDividendsDistributedBitcoinHP()
);
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function withdrawableDividendOf(address account)
public
view
returns (
uint256,
uint256,
uint256
)
{
return dividendTracker.withdrawableDividendOf(account);
}
function dividendTokenBalanceOf(address account)
public
view
returns (uint256)
{
return dividendTracker.balanceOf(account);
}
function getAccountInfo(address account)
external
view
returns (
address,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
return dividendTracker.getAccount(account);
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (
!_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping && from != owner()
) {
require(tradingEnabled, "Trading not active");
if (automatedMarketMakerPairs[to]) {
require(
amount <= maxSellAmount,
"You are exceeding maxSellAmount"
);
} else if (automatedMarketMakerPairs[from])
require(
amount <= maxBuyAmount,
"You are exceeding maxBuyAmount"
);
if (!_isExcludedFromMaxWallet[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Unable to exceed Max Wallet"
);
}
}
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
!swapping &&
swapEnabled &&
automatedMarketMakerPairs[to] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
if (totalSellTax > 0) {
swapAndLiquify(swapTokensAtAmount);
}
swapping = false;
}
bool takeFee = !swapping;
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
if (!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from])
takeFee = false;
if (takeFee) {
uint256 feeAmt;
if (automatedMarketMakerPairs[to])
feeAmt = (amount * totalSellTax) / 1000;
else if (automatedMarketMakerPairs[from])
feeAmt = (amount * totalBuyTax) / 1000;
amount = amount - feeAmt;
super._transfer(from, address(this), feeAmt);
}
super._transfer(from, to, amount);
try dividendTracker.setBalance(from, balanceOf(from)) {} catch {}
try dividendTracker.setBalance(to, balanceOf(to)) {} catch {}
}
function swapAndLiquify(uint256 tokens) private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokens = tokens;
if (contractBalance == 0 || totalTokens == 0) {
return;
}
if (contractBalance > totalTokens * 15) {
totalTokens *= 15;
}
uint256 balanceBefore = address(this).balance;
uint256 toSwapForDev = (totalTokens * sellDevTax) / totalSellTax;
swapTokensForETH(toSwapForDev);
uint256 devAmt = address(this).balance - balanceBefore;
if (devAmt > 0) {
(bool success, ) = payable(devWallet).call{value: devAmt}("");
require(success, "Failed to send ETH to dev wallet");
}
uint256 tokenForMemesDividends = ((totalTokens * sellMemesTax) /
totalSellTax);
uint8 currentInterval = uint8(getCurrentInterval());
distributeDividendsForInterval(currentInterval, tokenForMemesDividends);
}
function distributeDividendsForInterval(
uint8 intervalIndex,
uint256 tokensForDividends
) private {
uint256 balanceBefore = address(this).balance;
swapTokensForETH(tokensForDividends);
uint256 currentBalance = address(this).balance - balanceBefore;
address token = tokensArray[intervalIndex];
if (currentBalance > 0) {
swapETHForTokens(currentBalance, token);
}
uint256 tokenBalance = IERC20(token).balanceOf(address(this));
uint256 tokenDividends = tokenBalance;
if (tokenDividends > 0) {
bool success = IERC20(token).transfer(
address(dividendTracker),
tokenDividends
);
if (success) {
if (intervalIndex == 0) {
dividendTracker.distributeDividends(tokenDividends, 0, 0);
} else if (intervalIndex == 1) {
dividendTracker.distributeDividends(0, tokenDividends, 0);
} else if (intervalIndex == 2) {
dividendTracker.distributeDividends(0, 0, tokenDividends);
}
}
}
}
function ManualSPX6900DividendDistribution(uint256 amount) public onlyDev {
bool success = IERC20(pair).transferFrom(
msg.sender,
address(dividendTracker),
amount
);
if (success) {
dividendTracker.distributeDividends(amount, 0, 0);
}
}
function ManualNeiroDividendDistribution(uint256 amount) public onlyDev {
bool success = transferFrom(
msg.sender,
address(dividendTracker),
amount
);
if (success) {
dividendTracker.distributeDividends(0, amount, 0);
}
}
function ManualBitcoinDividendDistribution(uint256 amount) public onlyDev {
bool success = transferFrom(
msg.sender,
address(dividendTracker),
amount
);
if (success) {
dividendTracker.distributeDividends(0, 0, amount);
}
}
function swapTokensForETH(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
_approve(address(this), address(router), tokenAmount);
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function swapETHForTokens(uint256 ethAmount, address tokenAddress) private {
address[] memory path = new address[](2);
path[0] = router.WETH();
path[1] = tokenAddress;
router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: ethAmount
}(0, path, address(this), block.timestamp);
}
function getCurrentInterval() public view returns (Interval) {
uint256 timeElapsed = block.timestamp - startTimestamp;
uint256 intervalIndex = (timeElapsed / PERIOD_DURATION) % 3;
if (intervalIndex == 0) {
return Interval.First;
} else if (intervalIndex == 1) {
return Interval.Second;
} else if (intervalIndex > 1) {
return Interval.Third;
} else {
return Interval.First;
}
}
}
contract DividendTracker is Ownable, DividendPayingToken {
struct AccountInfo {
address account;
uint256 withdrawableDividendsSPX6900;
uint256 withdrawableDividendsNeiro;
uint256 withdrawableDividendsBitcoinHP;
uint256 totalDividendsSPX6900;
uint256 totalDividendsNeiro;
uint256 totalDividendsBitcoinHP;
uint256 lastClaimTimeSPX6900;
uint256 lastClaimTimeNeiro;
uint256 lastClaimTimeBitcoinHP;
}
mapping(address => bool) public excludedFromDividends;
mapping(address => uint256) public lastClaimTimesSPX6900;
mapping(address => uint256) public lastClaimTimesNeiro;
mapping(address => uint256) public lastClaimTimesBitcoinHP;
event ExcludeFromDividends(address indexed account, bool value);
event Claim(address indexed account, uint256 amount);
constructor(string memory name, string memory symbol)
DividendPayingToken(name, symbol)
{}
function trackerRescueETH20Tokens(address recipient, address tokenAddress)
external
onlyOwner
{
IERC20(tokenAddress).transfer(
recipient,
IERC20(tokenAddress).balanceOf(address(this))
);
}
function updateToken(
address _spx6900,
address _neiro,
address _bitcoinHp
) external onlyOwner {
spx6900 = _spx6900;
neiro = _neiro;
bitcoinHP = _bitcoinHp;
}
function _transfer(
address,
address,
uint256
) internal pure override {
require(false, "GIB_Dividend_Tracker: No transfers 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,
uint256,
uint256,
uint256,
uint256,
uint256
)
{
AccountInfo memory info;
info.account = account;
(
info.withdrawableDividendsSPX6900,
info.withdrawableDividendsNeiro,
info.withdrawableDividendsBitcoinHP
) = withdrawableDividendOf(account);
(
info.totalDividendsSPX6900,
info.totalDividendsNeiro,
info.totalDividendsBitcoinHP
) = accumulativeDividendOf(account);
info.lastClaimTimeSPX6900 = lastClaimTimesSPX6900[account];
info.lastClaimTimeNeiro = lastClaimTimesNeiro[account];
info.lastClaimTimeBitcoinHP = lastClaimTimesBitcoinHP[account];
return (
info.account,
info.withdrawableDividendsSPX6900,
info.withdrawableDividendsNeiro,
info.withdrawableDividendsBitcoinHP,
info.lastClaimTimeSPX6900,
info.lastClaimTimeNeiro,
info.lastClaimTimeBitcoinHP,
totalDividendsWithdrawnSPX6900,
totalDividendsWithdrawnNeiro,
totalDividendsWithdrawnBitcoinHP
);
}
function setBalance(address account, uint256 newBalance)
external
onlyOwner
{
if (excludedFromDividends[account]) {
return;
}
_setBalance(account, newBalance);
}
function processAccount(address account) external onlyOwner returns (bool) {
(
uint256 amountSPX6900,
uint256 amountNeiro,
uint256 amountBitcoinHP
) = _withdrawDividendOfUser(account);
if (amountSPX6900 > 0) {
lastClaimTimesSPX6900[account] = block.timestamp;
emit Claim(account, amountSPX6900);
return true;
}
if (amountNeiro > 0) {
lastClaimTimesNeiro[account] = block.timestamp;
emit Claim(account, amountNeiro);
return true;
}
if (amountBitcoinHP > 0) {
lastClaimTimesBitcoinHP[account] = block.timestamp;
emit Claim(account, amountBitcoinHP);
return true;
}
return true;
}
}
文件 4 的 9:GIBDiv.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./libraries/SafeMath.sol";
import "./interfaces/IGIBDiv.sol";
interface IPair {
function getReserves()
external
view
returns (
uint112 reserve0,
uint112 reserve1,
uint32 blockTimestampLast
);
function token0() external view returns (address);
}
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,
uint256 amountTokensDesired,
uint256 amountTokensMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactETHForTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable returns (uint256[] memory amounts);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract DividendPayingToken is ERC20, DividendPayingTokenInterface, Ownable {
using SafeMath for uint256;
using SafeMathUint for uint256;
using SafeMathInt for int256;
address public spx6900;
address public neiro;
address public bitcoinHP;
uint256 internal constant magnitude = 2**128;
uint256 internal MagnifiedDividendPerShareSPX6900;
uint256 internal MagnifiedDividendPerShareNeiro;
uint256 internal MagnifiedDividendPerShareBitcoinHP;
mapping(address => int256) internal magnifiedDividendCorrectionsSPX6900;
mapping(address => int256) internal magnifiedDividendCorrectionsNeiro;
mapping(address => int256) internal magnifiedDividendCorrectionsBitcoinHP;
mapping(address => uint256) internal withdrawnDividendsSPX6900;
mapping(address => uint256) internal withdrawnDividendsNeiro;
mapping(address => uint256) internal withdrawnDividendsBitcoinHP;
uint256 public totalDividendsDistributedSPX6900;
uint256 public totalDividendsDistributedNeiro;
uint256 public totalDividendsDistributedBitcoinHP;
uint256 public totalDividendsWithdrawnSPX6900;
uint256 public totalDividendsWithdrawnNeiro;
uint256 public totalDividendsWithdrawnBitcoinHP;
constructor(string memory _name, string memory _symbol)
ERC20(_name, _symbol)
{}
function distributeDividends(
uint256 amountSPX6900,
uint256 amountNeiro,
uint256 amountBitcoinHP
) public onlyOwner {
require(totalSupply() > 0, "Total supply must be greater than zero");
if (amountSPX6900 > 0) {
MagnifiedDividendPerShareSPX6900 = MagnifiedDividendPerShareSPX6900.add(
(amountSPX6900).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, amountSPX6900);
totalDividendsDistributedSPX6900 = totalDividendsDistributedSPX6900.add(
amountSPX6900
);
}
if (amountNeiro > 0) {
MagnifiedDividendPerShareNeiro = MagnifiedDividendPerShareNeiro.add(
(amountNeiro).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, amountNeiro);
totalDividendsDistributedNeiro = totalDividendsDistributedNeiro.add(
amountNeiro
);
}
if (amountBitcoinHP > 0) {
MagnifiedDividendPerShareBitcoinHP = MagnifiedDividendPerShareBitcoinHP.add(
(amountBitcoinHP).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, amountBitcoinHP);
totalDividendsDistributedBitcoinHP = totalDividendsDistributedBitcoinHP.add(
amountBitcoinHP
);
}
}
function withdrawDividend() public
{
_withdrawDividendOfUser(msg.sender);
}
function _withdrawDividendOfUser(address user)
internal
returns (
uint256,
uint256,
uint256
)
{
uint256 withdrawableSPX6900;
uint256 withdrawableNeiro;
uint256 withdrawableBitcoinHP;
(
uint256 _withdrawableDividendSPx6900,
uint256 _withdrawableDividendNeiro,
uint256 _withdrawableDividendBitcoinHP
) = withdrawableDividendOf(user);
if (_withdrawableDividendSPx6900 > 0) {
withdrawnDividendsSPX6900[user] = withdrawnDividendsSPX6900[user].add(
_withdrawableDividendSPx6900
);
totalDividendsWithdrawnSPX6900 += _withdrawableDividendSPx6900;
emit DividendWithdrawn(user, _withdrawableDividendSPx6900);
bool success = IERC20(spx6900).transfer(
user,
_withdrawableDividendSPx6900
);
if (!success) {
withdrawnDividendsSPX6900[user] = withdrawnDividendsSPX6900[user]
.sub(_withdrawableDividendSPx6900);
totalDividendsWithdrawnSPX6900 -= _withdrawableDividendSPx6900;
} else {
withdrawableSPX6900 = _withdrawableDividendSPx6900;
}
}
if (_withdrawableDividendNeiro > 0) {
withdrawnDividendsNeiro[user] = withdrawnDividendsNeiro[user].add(
_withdrawableDividendNeiro
);
totalDividendsWithdrawnNeiro += _withdrawableDividendNeiro;
emit DividendWithdrawn(user, _withdrawableDividendNeiro);
bool success = IERC20(neiro).transfer(
user,
_withdrawableDividendNeiro
);
if (!success) {
withdrawnDividendsNeiro[user] = withdrawnDividendsNeiro[user].sub(
_withdrawableDividendNeiro
);
totalDividendsWithdrawnNeiro -= _withdrawableDividendNeiro;
} else {
withdrawableNeiro = _withdrawableDividendNeiro;
}
}
if (_withdrawableDividendBitcoinHP > 0) {
withdrawnDividendsBitcoinHP[user] = withdrawnDividendsBitcoinHP[user].add(
_withdrawableDividendBitcoinHP
);
totalDividendsWithdrawnBitcoinHP += _withdrawableDividendBitcoinHP;
emit DividendWithdrawn(user, _withdrawableDividendBitcoinHP);
bool success = IERC20(bitcoinHP).transfer(
user,
_withdrawableDividendBitcoinHP
);
if (!success) {
withdrawnDividendsBitcoinHP[user] = withdrawnDividendsBitcoinHP[user].sub(
_withdrawableDividendBitcoinHP
);
totalDividendsWithdrawnBitcoinHP -= _withdrawableDividendBitcoinHP;
} else {
withdrawableBitcoinHP = _withdrawableDividendBitcoinHP;
}
}
return (withdrawableSPX6900, withdrawableNeiro, withdrawableBitcoinHP);
}
function dividendOf(address _owner)
public
view
override
returns (
uint256,
uint256,
uint256
)
{
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(address _owner)
public
view
override
returns (
uint256,
uint256,
uint256
)
{
(
uint256 dividendOfSPX6900,
uint256 dividendOfNeiro,
uint256 dividendOfBitcoinHP
) = accumulativeDividendOf(_owner);
return (
dividendOfSPX6900.sub(withdrawnDividendsSPX6900[_owner]),
dividendOfNeiro.sub(withdrawnDividendsNeiro[_owner]),
dividendOfBitcoinHP.sub(withdrawnDividendsBitcoinHP[_owner])
);
}
function withdrawnDividendOf(address _owner)
public
view
override
returns (
uint256,
uint256,
uint256
)
{
return (
withdrawnDividendsSPX6900[_owner],
withdrawnDividendsNeiro[_owner],
withdrawnDividendsBitcoinHP[_owner]
);
}
function accumulativeDividendOf(address _owner)
public
view
override
returns (
uint256,
uint256,
uint256
)
{
uint256 spx6900Share = MagnifiedDividendPerShareSPX6900
.mul(balanceOf(_owner))
.toInt256Safe()
.add(magnifiedDividendCorrectionsSPX6900[_owner])
.toUint256Safe() / magnitude;
uint256 neiroShare = MagnifiedDividendPerShareNeiro
.mul(balanceOf(_owner))
.toInt256Safe()
.add(magnifiedDividendCorrectionsNeiro[_owner])
.toUint256Safe() / magnitude;
uint256 bitcoinShare = MagnifiedDividendPerShareBitcoinHP
.mul(balanceOf(_owner))
.toInt256Safe()
.add(magnifiedDividendCorrectionsBitcoinHP[_owner])
.toUint256Safe() / magnitude;
return (spx6900Share, neiroShare, bitcoinShare);
}
function _transfer(
address from,
address to,
uint256 value
) internal virtual override {
require(false);
int256 _magCorrection = MagnifiedDividendPerShareSPX6900
.mul(value)
.toInt256Safe();
magnifiedDividendCorrectionsSPX6900[
from
] = magnifiedDividendCorrectionsSPX6900[from].add(_magCorrection);
magnifiedDividendCorrectionsSPX6900[
to
] = magnifiedDividendCorrectionsSPX6900[to].sub(_magCorrection);
int256 _magCorrectionToken = MagnifiedDividendPerShareNeiro
.mul(value)
.toInt256Safe();
magnifiedDividendCorrectionsNeiro[
from
] = magnifiedDividendCorrectionsNeiro[from].add(_magCorrectionToken);
magnifiedDividendCorrectionsNeiro[to] = magnifiedDividendCorrectionsNeiro[
to
].sub(_magCorrectionToken);
int256 _magCorrectionBitcoin = MagnifiedDividendPerShareBitcoinHP
.mul(value)
.toInt256Safe();
magnifiedDividendCorrectionsBitcoinHP[
from
] = magnifiedDividendCorrectionsBitcoinHP[from].add(_magCorrectionToken);
magnifiedDividendCorrectionsBitcoinHP[to] = magnifiedDividendCorrectionsBitcoinHP[
to
].sub(_magCorrectionBitcoin);
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrectionsSPX6900[
account
] = magnifiedDividendCorrectionsSPX6900[account].sub(
(MagnifiedDividendPerShareSPX6900.mul(value)).toInt256Safe()
);
magnifiedDividendCorrectionsNeiro[
account
] = magnifiedDividendCorrectionsNeiro[account].sub(
(MagnifiedDividendPerShareNeiro.mul(value)).toInt256Safe()
);
magnifiedDividendCorrectionsBitcoinHP[
account
] = magnifiedDividendCorrectionsBitcoinHP[account].sub(
(MagnifiedDividendPerShareBitcoinHP.mul(value)).toInt256Safe()
);
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrectionsSPX6900[
account
] = magnifiedDividendCorrectionsSPX6900[account].add(
(MagnifiedDividendPerShareSPX6900.mul(value)).toInt256Safe()
);
magnifiedDividendCorrectionsNeiro[
account
] = magnifiedDividendCorrectionsNeiro[account].add(
(MagnifiedDividendPerShareNeiro.mul(value)).toInt256Safe()
);
magnifiedDividendCorrectionsBitcoinHP[
account
] = magnifiedDividendCorrectionsBitcoinHP[account].add(
(MagnifiedDividendPerShareBitcoinHP.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);
}
}
}
文件 5 的 9: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 的 9: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 的 9:IGIBDiv.sol
pragma solidity ^0.8.19;
interface DividendPayingTokenInterface {
function dividendOf(address _owner)
external
view
returns (
uint256,
uint256,
uint256
);
function withdrawDividend() external;
function withdrawableDividendOf(address _owner)
external
view
returns (
uint256,
uint256,
uint256
);
function withdrawnDividendOf(address _owner)
external
view
returns (
uint256,
uint256,
uint256
);
function accumulativeDividendOf(address _owner)
external
view
returns (
uint256,
uint256,
uint256
);
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(address indexed to, uint256 weiAmount);
}
文件 8 的 9: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 的 9:SafeMath.sol
pragma solidity ^0.8.19;
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;
}
}
{
"compilationTarget": {
"contracts/GIB.sol": "GIB"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"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":"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":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":"uint256","name":"amount","type":"uint256"}],"name":"ManualBitcoinDividendDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualNeiroDividendDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ManualSPX6900DividendDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PERIOD_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendTracker","name":"","type":"address"}],"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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","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"},{"internalType":"uint256","name":"","type":"uint256"},{"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":"getCurrentInterval","outputs":[{"internalType":"enum GIB.Interval","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"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":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_memes","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setClaimEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_dev","type":"uint256"},{"internalType":"uint256","name":"_memes","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokensArray","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"trackerRescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","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":"amount","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":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]