This contract's source code is verified! Compiler
0.8.19+commit.7dd6d404
File 1 of 4: AlphaGardeners.sol
pragma solidity ^0.8.19;
import "./Ownable.sol" ;
import "./Pausable.sol" ;
import "./IUniswap.sol" ;
contract AG is Ownable , Pausable {
event Transfer (address indexed from , address indexed to, uint256 amount ) ;
event Approval (address indexed owner, address indexed spender, uint256 amount ) ;
event BlacklistStatusUpdated (address wallet, bool isBlacklisted ) ;
event MarketPairUpdated (address pair, bool isMarketPair ) ;
event ExcludedFromFeesUpdated (address wallet, bool isExcluded ) ;
event TaxRecipientUpdated (address recipient ) ;
event TaxesUpdated (uint256 buyTax, uint256 sellTax, uint256 transferTax ) ;
event LimitsUpdated (uint256 maxBuy, uint256 maxSell, uint256 maxWallet ) ;
event NumTokensToSwapUpdated (uint256 amount ) ;
event ContractSwapEnabledUpdated (bool autoEnabled, bool manualEnabled ) ;
string public name;
string public symbol;
uint8 public constant decimals = 18 ;
uint256 public constant totalSupply = 8_000_000_000 * 10 * * decimals;
mapping (address = > uint256 ) public balanceOf;
mapping (address = > mapping (address = > uint256 )) public allowance;
address public taxRecipient;
uint256 public numTokensToSwap = 2_500_000 * 10 * * decimals;
bool public contractSwapEnabled = false ;
bool public manualSwapEnabled = false ;
bool private inSwap;
IUniswapV2Router02 public uniswapV2Router;
address private WETH;
event UniswapRouterUpdated (address newRouter ) ;
struct taxAndLimit {
uint128 tax;
uint128 limit;
}
taxAndLimit public buyTaxAndLimit = taxAndLimit({
tax: 0 ,
limit: uint128 (totalSupply)
});
taxAndLimit public sellTaxAndLimit = taxAndLimit({
tax: 0 ,
limit: uint128 (totalSupply)
});
uint256 public transferTax = 0 ;
uint256 public maxWallet = totalSupply;
uint256 private constant maxTax = 1_000 ;
uint256 private constant taxDenominator = 10_000 ;
struct walletState {
bool isBlacklisted;
bool isMarketPair;
bool isExcludedFromFees;
}
mapping (address = > walletState) public _walletState;
uint256 internal immutable INITIAL_CHAIN_ID;
bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;
mapping (address = > uint256 ) public nonces;
constructor (
string memory _name,
string memory _symbol,
address _taxRecipient,
address routerAddress
) Ownable (msg .sender ) Pausable (true ) {
require (totalSupply < type (uint128 ).max , "TOTAL_SUPPLY_EXCEEDS_MAX" );
name = _name;
symbol = _symbol;
taxRecipient = _taxRecipient;
uniswapV2Router = IUniswapV2Router02(routerAddress);
_approve(address (this ), routerAddress, type (uint256 ).max );
WETH = uniswapV2Router.WETH();
INITIAL_CHAIN_ID = block .chainid ;
INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
_walletState[msg .sender ] = walletState({
isBlacklisted: false ,
isMarketPair: false ,
isExcludedFromFees: true
});
emit ExcludedFromFeesUpdated(msg .sender , true );
_walletState[address (this )] = walletState({
isBlacklisted: false ,
isMarketPair: false ,
isExcludedFromFees: true
});
emit ExcludedFromFeesUpdated(address (this ), true );
unchecked {
balanceOf[msg .sender ] + = totalSupply;
}
emit Transfer(address (0 ), msg .sender , totalSupply);
}
function approve (address spender, uint256 amount ) public returns (bool ) {
_approve(msg .sender , spender, amount);
return true ;
}
function increaseAllowance (address spender, uint256 addedValue ) public virtual returns (bool ) {
address owner = msg .sender ;
_approve(owner, spender, allowance[owner][spender] + addedValue);
return true ;
}
function decreaseAllowance (address spender, uint256 subtractedValue ) public virtual returns (bool ) {
address owner = msg .sender ;
uint256 currentAllowance = allowance[owner][spender];
require (currentAllowance > = subtractedValue, "ERC20: decreased allowance below zero" );
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true ;
}
function _approve (
address owner,
address spender,
uint256 amount
) internal {
require (owner ! = address (0 ), "ERC20: approve from the zero address" );
require (spender ! = address (0 ), "ERC20: approve to the zero address" );
allowance[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function transfer (address to, uint256 amount ) public whenNotPaused returns (bool ) {
_transfer(msg .sender , to, amount);
return true ;
}
function transferFrom (
address from ,
address to,
uint256 amount
) public whenNotPaused returns (bool ) {
uint256 allowed = allowance[from ][msg .sender ];
if (allowed ! = type (uint256 ).max ) {
require (allowed > = amount, "ERC20: insufficient allowance" );
unchecked {
allowance[from ][msg .sender ] = allowed - amount;
}
}
_transfer(from , to, amount);
return true ;
}
function _buyTransfer (address to, uint256 amount ) internal view returns (uint256 ) {
unchecked {
taxAndLimit memory buyConfig = buyTaxAndLimit;
uint256 fees = (amount * buyConfig.tax) / taxDenominator;
require (amount < = buyConfig.limit, "transfer exceeds max buy" );
require (balanceOf[to] + amount < = maxWallet, "balance exceeds max wallet" );
return fees;
}
}
function _sellTransfer (uint256 amount ) internal view returns (uint256 ) {
unchecked {
taxAndLimit memory sellConfig = sellTaxAndLimit;
uint256 fees = (amount * sellConfig.tax) / taxDenominator;
require (amount < = sellConfig.limit, "transfer exceeds max sell" );
return fees;
}
}
function _baseTransfer (address to, uint256 amount ) internal view returns (uint256 ) {
unchecked {
require (balanceOf[to] + amount < = maxWallet, "balance exceeds max wallet" );
return (amount * transferTax) / taxDenominator;
}
}
function _swapTokens ( ) internal {
uint256 numTokens = numTokensToSwap;
bool overMinTokenBalance = balanceOf[address (this )] > = numTokens;
if (
overMinTokenBalance & &
! inSwap & &
contractSwapEnabled
) {
try this .swapFeesAndSend(numTokens, 0 ) {} catch {}
}
}
function _calcFees (address to, uint256 amount, bool isBuy, bool isSell ) internal view returns (uint256 ) {
if (isBuy) {
return _buyTransfer(to, amount);
}
if (isSell) {
return _sellTransfer(amount);
}
return _baseTransfer(to, amount);
}
function _transfer (address from , address to, uint256 amount ) internal {
require (from ! = address (0 ), "ERC20: transfer from the zero address" );
require (to ! = address (0 ), "ERC20: transfer to the zero address" );
uint256 balance = balanceOf[from ];
require (balance > = amount, "ERC20: transfer amount exceeds balance" );
unchecked {
balanceOf[from ] = balance - amount;
}
walletState memory fromWalletState = _walletState[from ];
walletState memory toWalletState = _walletState[to];
require (! fromWalletState.isBlacklisted & & ! toWalletState.isBlacklisted, "blacklisted" );
uint256 fees = 0 ;
bool takeFee = ! fromWalletState.isExcludedFromFees & & ! toWalletState.isExcludedFromFees;
if (takeFee) {
bool isBuy = fromWalletState.isMarketPair;
bool isSell = toWalletState.isMarketPair;
fees = _calcFees(to, amount, isBuy, isSell);
if (isSell & & ! isBuy) {
_swapTokens();
}
}
uint256 amountMinusFees;
unchecked {
amountMinusFees = amount - fees;
balanceOf[to] + = amountMinusFees;
}
emit Transfer(from , to, amountMinusFees);
if (fees > 0 ) {
emit Transfer(from , address (this ), fees);
unchecked {
balanceOf[address (this )] + = fees;
}
}
}
modifier lockTheSwap {
inSwap = true ;
_ ;
inSwap = false ;
}
function swapFeesAndSend (uint256 tokenAmount, uint256 minOut ) external lockTheSwap {
if (msg .sender ! = address (this )) {
require (manualSwapEnabled | | msg .sender = = owner(), "manual swap disabled" );
}
address [] memory path = new address [](2 );
path[0 ] = address (this );
path[1 ] = WETH;
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
minOut,
path,
taxRecipient,
block .timestamp
);
}
function setBlacklisted (address account, bool value ) external onlyOwner {
require (account ! = address (this ), "cant change contract" );
_walletState[account].isBlacklisted = value;
emit BlacklistStatusUpdated(account, value);
}
function setMarketPair (address account, bool value ) external onlyOwner {
require (account ! = address (this ), "cant change contract" );
_walletState[account].isMarketPair = value;
emit MarketPairUpdated(account, value);
}
function setExcludedFromFees (address account, bool value ) external onlyOwner {
require (account ! = address (this ), "cant change contract" );
_walletState[account].isExcludedFromFees = value;
emit ExcludedFromFeesUpdated(account, value);
}
function setTaxRecipient (address account ) external onlyOwner {
taxRecipient = account;
emit TaxRecipientUpdated(account);
}
function setTaxes (uint256 _buyTax, uint256 _sellTax, uint256 _transferTax ) public onlyOwner {
require (_buyTax < = maxTax, "buy is too high" );
require (_sellTax < = maxTax, "sell is too high" );
require (_transferTax < = maxTax, "transfer is too high" );
buyTaxAndLimit.tax = uint128 (_buyTax);
sellTaxAndLimit.tax = uint128 (_sellTax);
transferTax = _transferTax;
emit TaxesUpdated(_buyTax, _sellTax, _transferTax);
}
function setLimits (uint256 _maxBuyWad, uint256 _maxSellWad, uint256 _maxWalletWad ) public onlyOwner {
require (_maxBuyWad > = 20_000_000 , "buy is too low" );
require (_maxSellWad > = 20_000_000 , "sell is too low" );
require (_maxWalletWad > = 20_000_000 , "wallet is too low" );
buyTaxAndLimit.limit = uint128 (_maxBuyWad * 10 * * decimals);
sellTaxAndLimit.limit = uint128 (_maxSellWad * 10 * * decimals);
maxWallet = _maxWalletWad * 10 * * decimals;
emit LimitsUpdated(_maxBuyWad * 10 * * decimals, _maxSellWad * 10 * * decimals, _maxWalletWad * 10 * * decimals);
}
function setNumTokensToSwap (uint256 amountWad ) external onlyOwner {
require (amountWad > 0 , "amount cant be zero" );
numTokensToSwap = amountWad * 10 * * decimals;
emit NumTokensToSwapUpdated(amountWad * 10 * * decimals);
}
function setContractSwapEnabled (bool _contractSwapEnabled, bool _manualSwapEnabled ) public onlyOwner {
contractSwapEnabled = _contractSwapEnabled;
manualSwapEnabled = _manualSwapEnabled;
emit ContractSwapEnabledUpdated(_contractSwapEnabled, _manualSwapEnabled);
}
function Unpause ( ) external onlyOwner {
_unpause();
}
function Pause ( ) external onlyOwner {
_pause();
}
function updateUniswapRouter (address newRouter ) external onlyOwner {
address oldRouterAddress = address (uniswapV2Router);
require (oldRouterAddress ! = newRouter, "can't set the same router address" );
uniswapV2Router = IUniswapV2Router02(newRouter);
WETH = uniswapV2Router.WETH();
_approve(address (this ), newRouter, type (uint256 ).max );
_approve(address (this ), oldRouterAddress, 0 );
emit UniswapRouterUpdated(newRouter);
}
function openTrading ( ) external onlyOwner {
setContractSwapEnabled(true , false );
setLimits(
20_000_000 ,
20_000_000 ,
60_000_000
);
setTaxes(1000 , 1000 , 0 );
_unpause();
}
function skimETH (address to, uint256 amount ) external onlyOwner {
(bool success,) = to.call {value : amount}("" );
require (success, "ETH transfer failed" );
}
function safeTransfer (address token, address to, uint value ) internal {
(bool success, bytes memory data) = token.call (abi .encodeWithSelector (0xa9059cbb , to, value));
require (success & & (data.length = = 0 | | abi .decode (data, (bool ))), 'TRANSFER_FAILED' );
}
function skimTokens (address tokenAddress, address to, uint256 amount ) external onlyOwner {
safeTransfer(tokenAddress, to, amount);
}
function _requireNotPaused ( ) internal view override {
if (paused()) {
if (tx .origin ! = owner() & & msg .sender ! = owner()) {
revert EnforcedPause();
}
}
}
function permit (
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) public {
require (deadline > = block .timestamp , "PERMIT_DEADLINE_EXPIRED" );
unchecked {
address recoveredAddress = ecrecover (
keccak256 (
abi .encodePacked (
"\x19\x01" ,
DOMAIN_SEPARATOR(),
keccak256 (
abi .encode (
keccak256 (
"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
),
owner,
spender,
value,
nonces[owner]+ + ,
deadline
)
)
)
),
v,
r,
s
);
require (recoveredAddress ! = address (0 ) & & recoveredAddress = = owner, "INVALID_SIGNER" );
allowance[recoveredAddress][spender] = value;
}
emit Approval(owner, spender, value);
}
function DOMAIN_SEPARATOR ( ) public view returns (bytes32 ) {
return block .chainid = = INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
}
function computeDomainSeparator ( ) internal view returns (bytes32 ) {
return
keccak256 (
abi .encode (
keccak256 ("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ),
keccak256 (bytes (name)),
keccak256 ("1" ),
block .chainid ,
address (this )
)
);
}
}
File 2 of 4: IUniswap.sol
pragma solidity ^0.8.19;
interface IUniswapV2Router01 {
function factory ( ) external pure returns (address ) ;
function WETH ( ) external pure returns (address ) ;
function addLiquidity (
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity ) ;
function addLiquidityETH (
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity ) ;
function removeLiquidity (
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB ) ;
function removeLiquidityETH (
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH ) ;
function removeLiquidityWithPermit (
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB ) ;
function removeLiquidityETHWithPermit (
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH ) ;
function swapExactTokensForTokens (
uint amountIn,
uint amountOutMin,
address [] calldata path,
address to,
uint deadline
) external returns (uint [] memory amounts ) ;
function swapTokensForExactTokens (
uint amountOut,
uint amountInMax,
address [] calldata path,
address to,
uint deadline
) external returns (uint [] memory amounts ) ;
function swapExactETHForTokens (uint amountOutMin, address [] calldata path, address to, uint deadline )
external
payable
returns (uint [] memory amounts ) ;
function swapTokensForExactETH (uint amountOut, uint amountInMax, address [] calldata path, address to, uint deadline )
external
returns (uint [] memory amounts ) ;
function swapExactTokensForETH (uint amountIn, uint amountOutMin, address [] calldata path, address to, uint deadline )
external
returns (uint [] memory amounts ) ;
function swapETHForExactTokens (uint amountOut, address [] calldata path, address to, uint deadline )
external
payable
returns (uint [] memory amounts ) ;
function quote (uint amountA, uint reserveA, uint reserveB ) external pure returns (uint amountB ) ;
function getAmountOut (uint amountIn, uint reserveIn, uint reserveOut ) external pure returns (uint amountOut ) ;
function getAmountIn (uint amountOut, uint reserveIn, uint reserveOut ) external pure returns (uint amountIn ) ;
function getAmountsOut (uint amountIn, address [] calldata path ) external view returns (uint [] memory amounts ) ;
function getAmountsIn (uint amountOut, address [] calldata path ) external view returns (uint [] memory amounts ) ;
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens (
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH ) ;
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens (
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH ) ;
function swapExactTokensForTokensSupportingFeeOnTransferTokens (
uint amountIn,
uint amountOutMin,
address [] calldata path,
address to,
uint deadline
) external ;
function swapExactETHForTokensSupportingFeeOnTransferTokens (
uint amountOutMin,
address [] calldata path,
address to,
uint deadline
) external payable ;
function swapExactTokensForETHSupportingFeeOnTransferTokens (
uint amountIn,
uint amountOutMin,
address [] calldata path,
address to,
uint deadline
) external ;
}
interface IUniswapV2Factory {
event PairCreated (address indexed token0, address indexed token1, address pair, uint ) ;
function feeTo ( ) external view returns (address ) ;
function feeToSetter ( ) external view returns (address ) ;
function getPair (address tokenA, address tokenB ) external view returns (address pair ) ;
function allPairs (uint ) external view returns (address pair ) ;
function allPairsLength ( ) external view returns (uint ) ;
function createPair (address tokenA, address tokenB ) external returns (address pair ) ;
function setFeeTo (address ) external ;
function setFeeToSetter (address ) external ;
}
interface IUniswapV2Pair {
event Approval (address indexed owner, address indexed spender, uint value ) ;
event Transfer (address indexed from , address indexed to, uint value ) ;
function name ( ) external pure returns (string memory ) ;
function symbol ( ) external pure returns (string memory ) ;
function decimals ( ) external pure returns (uint8 ) ;
function totalSupply ( ) external view returns (uint ) ;
function balanceOf (address owner ) external view returns (uint ) ;
function allowance (address owner, address spender ) external view returns (uint ) ;
function approve (address spender, uint value ) external returns (bool ) ;
function transfer (address to, uint value ) external returns (bool ) ;
function transferFrom (address from , address to, uint value ) external returns (bool ) ;
function DOMAIN_SEPARATOR ( ) external view returns (bytes32 ) ;
function PERMIT_TYPEHASH ( ) external pure returns (bytes32 ) ;
function nonces (address owner ) external view returns (uint ) ;
function permit (address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s ) external ;
event Mint (address indexed sender, uint amount0, uint amount1 ) ;
event Burn (address indexed sender, uint amount0, uint amount1, address indexed to ) ;
event Swap (
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
) ;
event Sync (uint112 reserve0, uint112 reserve1 ) ;
function MINIMUM_LIQUIDITY ( ) external pure returns (uint ) ;
function factory ( ) external view returns (address ) ;
function token0 ( ) external view returns (address ) ;
function token1 ( ) external view returns (address ) ;
function getReserves ( ) external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast ) ;
function price0CumulativeLast ( ) external view returns (uint ) ;
function price1CumulativeLast ( ) external view returns (uint ) ;
function kLast ( ) external view returns (uint ) ;
function mint (address to ) external returns (uint liquidity ) ;
function burn (address to ) external returns (uint amount0, uint amount1 ) ;
function swap (uint amount0Out, uint amount1Out, address to, bytes calldata data ) external ;
function skim (address to ) external ;
function sync ( ) external ;
function initialize (address , address ) external ;
} File 3 of 4: Ownable.sol
pragma solidity ^0.8.19;
abstract contract Ownable {
address private _owner;
error OwnableUnauthorizedAccount (address account ) ;
error OwnableInvalidOwner (address owner ) ;
event OwnershipTransferred (address indexed previousOwner, address indexed newOwner ) ;
constructor (address initialOwner ) {
_transferOwnership(initialOwner);
}
modifier onlyOwner ( ) {
_checkOwner();
_ ;
}
function owner ( ) public view virtual returns (address ) {
return _owner;
}
function _checkOwner ( ) internal view virtual {
if (owner() ! = msg .sender ) {
revert OwnableUnauthorizedAccount(msg .sender );
}
}
function renounceOwnership ( ) public virtual onlyOwner {
_transferOwnership(address (0 ));
}
function transferOwnership (address newOwner ) public virtual onlyOwner {
if (newOwner = = address (0 )) {
revert OwnableInvalidOwner(address (0 ));
}
_transferOwnership(newOwner);
}
function _transferOwnership (address newOwner ) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
} File 4 of 4: Pausable.sol
pragma solidity ^0.8.19;
abstract contract Pausable {
bool private _paused;
event Paused (address account ) ;
event Unpaused (address account ) ;
error EnforcedPause ( ) ;
error ExpectedPause ( ) ;
constructor (bool initialPaused ) {
_paused = initialPaused;
}
modifier whenNotPaused ( ) {
_requireNotPaused();
_ ;
}
modifier whenPaused ( ) {
_requirePaused();
_ ;
}
function paused ( ) public view virtual returns (bool ) {
return _paused;
}
function _requireNotPaused ( ) internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
function _requirePaused ( ) internal view virtual {
if (! paused()) {
revert ExpectedPause();
}
}
function _pause ( ) internal virtual whenNotPaused {
_paused = true ;
emit Paused(msg .sender );
}
function _unpause ( ) internal virtual whenPaused {
_paused = false ;
emit Unpaused(msg .sender );
}
} {
"compilationTarget" : {
"AlphaGardeners.sol" : "AG"
} ,
"evmVersion" : "paris" ,
"libraries" : { } ,
"metadata" : {
"bytecodeHash" : "ipfs"
} ,
"optimizer" : {
"enabled" : true ,
"runs" : 200
} ,
"remappings" : [ ]
} [{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"_taxRecipient","type":"address"},{"internalType":"address","name":"routerAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"BlacklistStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"autoEnabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"manualEnabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludedFromFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"isMarketPair","type":"bool"}],"name":"MarketPairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NumTokensToSwapUpdated","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":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"}],"name":"TaxRecipientUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferTax","type":"uint256"}],"name":"TaxesUpdated","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":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouter","type":"address"}],"name":"UniswapRouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_walletState","outputs":[{"internalType":"bool","name":"isBlacklisted","type":"bool"},{"internalType":"bool","name":"isMarketPair","type":"bool"},{"internalType":"bool","name":"isExcludedFromFees","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","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":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","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":[{"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":"manualSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxAndLimit","outputs":[{"internalType":"uint128","name":"tax","type":"uint128"},{"internalType":"uint128","name":"limit","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_contractSwapEnabled","type":"bool"},{"internalType":"bool","name":"_manualSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyWad","type":"uint256"},{"internalType":"uint256","name":"_maxSellWad","type":"uint256"},{"internalType":"uint256","name":"_maxWalletWad","type":"uint256"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountWad","type":"uint256"}],"name":"setNumTokensToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"uint256","name":"_transferTax","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"skimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"minOut","type":"uint256"}],"name":"swapFeesAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"transferTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"}]