/*
In a Blockchain far, far away hid a meme of epic proportions!…
basedyoda.com
x.com/YodaBase
t.me/YodaBased
May the pumps be with you.
*/
pragma solidity 0.8.23;
// SPDX-License-Identifier: MIT
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
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;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(
address to,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
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;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
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;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
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;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
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 {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
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;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
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);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
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);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() external virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IDexFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
}
contract BasedYoda is ERC20, Ownable {
mapping(address => bool) public exemptFromTaxes;
mapping(address => bool) public exemptFromLimits;
bool public tradingActive;
uint256 public maxTransaction;
uint256 public maxWallet;
address public marketingAddress;
uint256 public buyTax;
uint256 public sellTax;
bool public limitsInEffect = true;
bool private swapping;
uint256 public swapTokensAtAmt;
address public lpPair;
IDexRouter public dexRouter;
uint256 public constant FEE_DIVISOR = 100_00;
// events
event SetExemptFromTaxes(address _address, bool _isExempt);
event SetExemptFromLimits(address _address, bool _isExempt);
event RemovedLimits();
event UpdatedBuyTax(uint256 newAmt);
event UpdatedSellTax(uint256 newAmt);
event UpdateRouterAddress(address routerAddress);
event UpdateLpPairAddress(address pairAddress);
event UpdatedMaxWalletAmount(uint256 maxWalletAmount);
event UpdatedMaxTxAmount(uint256 maxTxAmount);
event UpdatedMarketingAddress(address marketingAddress, bool withExemption);
event TradingEnabled();
event UpdatedSwapTokensAtAmt(uint256 swapTokensAtAmt);
modifier onlyMarketing() {
require(
_msgSender() == marketingAddress,
"Only marketing address can call this function"
);
_;
}
// constructor
constructor() ERC20("Based Yoda", "BODA") {
uint256 _totalSupply = 100_000_000_000 * (10 ** decimals());
_mint(msg.sender, _totalSupply);
address _v2Router;
// @dev assumes WETH pair
if (block.chainid == 1) {
_v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
} else if (block.chainid == 5) {
_v2Router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
} else if (block.chainid == 8453) {
_v2Router = 0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24; // Uniswap v2 router
} else {
revert("Chain not configured");
}
dexRouter = IDexRouter(_v2Router);
marketingAddress = 0x7fd3Fc10De54F753B171359Cd6D0C03D3eFF5A1E;
buyTax = 80_00;
sellTax = 80_00;
maxTransaction = (_totalSupply * 5) / 1000; // 0.5%
maxWallet = (_totalSupply * 1) / 100; // 1%
swapTokensAtAmt = (_totalSupply * 5) / 1000; // 0.5%
lpPair = IDexFactory(dexRouter.factory()).createPair(
address(this),
dexRouter.WETH()
);
exemptFromLimits[lpPair] = true;
exemptFromLimits[msg.sender] = true;
exemptFromLimits[address(this)] = true;
exemptFromLimits[address(dexRouter)] = true;
exemptFromLimits[address(marketingAddress)] = true;
exemptFromTaxes[msg.sender] = true;
exemptFromTaxes[address(this)] = true;
exemptFromTaxes[address(dexRouter)] = true;
exemptFromTaxes[address(marketingAddress)] = true;
_approve(address(this), address(dexRouter), type(uint256).max);
}
/**
* =====================================
* General functions
* =====================================
*/
function openTrading() external onlyOwner {
require(!tradingActive, "Trading active");
tradingActive = true;
emit TradingEnabled();
}
function removeLimits() external onlyOwner {
limitsInEffect = false;
maxTransaction = totalSupply();
maxWallet = totalSupply();
emit RemovedLimits();
}
function setSwapTokensAtAmt(uint256 _swapTokensAtAmt) external onlyOwner {
swapTokensAtAmt = _swapTokensAtAmt;
emit UpdatedSwapTokensAtAmt(_swapTokensAtAmt);
}
/**
* =====================================
* Update addresses
* =====================================
*/
function updateMarketingAddress(
address _address,
bool _withExemption
) external onlyOwner {
require(_address != address(0), "zero address");
marketingAddress = _address;
if (_withExemption) {
exemptFromTaxes[_address] = true;
exemptFromLimits[_address] = true;
}
emit UpdatedMarketingAddress(_address, _withExemption);
}
function updateRouterAddress(
address _router,
bool withPair_
) public onlyOwner {
require(_router != address(0), "Router cannot be zero address");
require(_router != address(0xdead), "Router cannot be dead address");
_approve(address(this), address(dexRouter), 0);
dexRouter = IDexRouter(_router);
if (withPair_) {
lpPair = IDexFactory(dexRouter.factory()).getPair(
address(this),
dexRouter.WETH()
);
if (lpPair == address(0)) {
lpPair = IDexFactory(dexRouter.factory()).createPair(
address(this),
dexRouter.WETH()
);
}
exemptFromLimits[lpPair] = true;
exemptFromLimits[address(dexRouter)] = true;
exemptFromTaxes[address(dexRouter)] = true;
_approve(address(this), address(dexRouter), type(uint256).max);
}
emit UpdateRouterAddress(_router);
}
function updateLpPairAddress(address _lpPair) public onlyOwner {
require(_lpPair != address(0), "Pair cannot be zero address");
require(_lpPair != address(0xdead), "Pair cannot be dead address");
lpPair = _lpPair;
exemptFromLimits[lpPair] = true;
emit UpdateLpPairAddress(_lpPair);
}
/**
* =====================================
* Update Taxes
*
* Note: Only possible if there is an owner
* =====================================
*/
function updateTaxes(uint256 _buyTax, uint256 _sellTax) external onlyOwner {
updateBuyTax(_buyTax);
updateSellTax(_sellTax);
}
function updateBuyTax(uint256 buyTax_) public onlyOwner {
require(
buyTax_ <= buyTax || buyTax_ <= 200,
"Can only reduce tax above 2%"
);
buyTax = buyTax_;
emit UpdatedBuyTax(buyTax_);
}
function updateSellTax(uint256 sellTax_) public onlyOwner {
require(
sellTax_ <= sellTax || sellTax_ <= 250,
"Can only reduce tax above 2.5%"
);
sellTax = sellTax_;
emit UpdatedSellTax(sellTax_);
}
/**
* =====================================
* Limits
* =====================================
*/
function updateMaxWalletAmount(uint256 _maxWallet) external onlyOwner {
require(
limitsInEffect,
"Cannot change max tx amount when limits are off"
);
require(
_maxWallet >= (totalSupply() * 1) / 100,
"Amount must be above 1% of total supply"
);
maxWallet = _maxWallet;
emit UpdatedMaxWalletAmount(_maxWallet);
}
function updateMaxTxAmount(uint256 _maxTxAmount) external onlyOwner {
require(
limitsInEffect,
"Cannot change max tx amount when limits are off"
);
require(
_maxTxAmount >= (totalSupply() * 5) / 1000,
"Amount must be above 0.5% of total supply"
);
maxTransaction = _maxTxAmount;
emit UpdatedMaxTxAmount(_maxTxAmount);
}
/**
* @dev Set an address exempt from taxes
*
* This is commented out because of the automatic audit scanner
*
* function setExemptFromTax(address _address, bool _isExempt) external onlyOwner {
* require(_address != address(0), "Zero Address");
* exemptFromTaxes[_address] = _isExempt;
* emit SetExemptFromTaxes(_address, _isExempt);
* }
*/
/**
* @dev Set an address exempt from limits
*
* This is commented out because of the automatic audit scanner
*
* function setExemptFromLimits(address _address, bool _isExempt) external onlyOwner {
* require(_address != address(0), "Zero Address");
*
* if (!_isExempt) {
* require(_address != lpPair, "Pair");
* }
*
* exemptFromLimits[_address] = _isExempt;
* emit SetExemptFromLimits(_address, _isExempt);
* }
*/
/**
* =====================================
* Internal/Private functions
* =====================================
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override {
if (!exemptFromTaxes[from] && !exemptFromTaxes[to]) {
require(tradingActive, "Trading not active");
if (limitsInEffect) {
_checkTransactionLimits(from, to, amount);
}
amount -= _handleTransferAmount(from, to, amount);
}
super._transfer(from, to, amount);
}
function _checkTransactionLimits(
address from,
address to,
uint256 amount
) internal view {
// buy
if (from == lpPair && !exemptFromLimits[to]) {
require(amount <= maxTransaction, "Max tx exceeded.");
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
// sell
else if (to == lpPair && !exemptFromLimits[from]) {
require(amount <= maxTransaction, "Max tx exceeded.");
} else if (!exemptFromLimits[to]) {
require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
}
}
function _handleTransferAmount(
address from,
address to,
uint256 amount
) internal returns (uint256) {
if (
balanceOf(address(this)) >= swapTokensAtAmt &&
!swapping &&
to == lpPair
) {
swapping = true;
_swapBack();
swapping = false;
}
uint256 tax = 0;
// on sell
if (to == lpPair && sellTax > 0) {
tax = (amount * sellTax) / FEE_DIVISOR;
}
// on buy
else if (from == lpPair && buyTax > 0) {
tax = (amount * buyTax) / FEE_DIVISOR;
}
if (tax > 0) {
super._transfer(from, address(this), tax);
}
return tax;
}
function _swapTokensForETH(uint256 tokenAmt) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmt,
0,
path,
address(marketingAddress),
block.timestamp
);
}
function _swapBack() private {
uint256 contractBalance = balanceOf(address(this));
if (contractBalance == 0) {
return;
}
if (contractBalance > swapTokensAtAmt) {
contractBalance = swapTokensAtAmt;
}
_swapTokensForETH(contractBalance);
}
}
{
"compilationTarget": {
"BasedYoda.sol": "BasedYoda"
},
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[],"name":"RemovedLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_isExempt","type":"bool"}],"name":"SetExemptFromTaxes","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pairAddress","type":"address"}],"name":"UpdateLpPairAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"routerAddress","type":"address"}],"name":"UpdateRouterAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedBuyTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"},{"indexed":false,"internalType":"bool","name":"withExemption","type":"bool"}],"name":"UpdatedMarketingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"UpdatedMaxTxAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWalletAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmt","type":"uint256"}],"name":"UpdatedSellTax","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapTokensAtAmt","type":"uint256"}],"name":"UpdatedSwapTokensAtAmt","type":"event"},{"inputs":[],"name":"FEE_DIVISOR","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","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":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFromTaxes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","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":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAtAmt","type":"uint256"}],"name":"setSwapTokensAtAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"tradingActive","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":"uint256","name":"buyTax_","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpPair","type":"address"}],"name":"updateLpPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_withExemption","type":"bool"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"withPair_","type":"bool"}],"name":"updateRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTax_","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"}],"name":"updateTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"}]