编译器
0.8.19+commit.7dd6d404
文件 1 的 7:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 7: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 的 7:ERC20UniswapV2InternalSwaps.sol
pragma solidity 0.8.19;
interface IUniswapV2Pair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1);
function swap(
uint amount0Out,
uint amount1Out,
address to,
bytes calldata data
) external;
function mint(address to) external;
}
interface IUniswapV2Factory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
interface IERC20 {
function transferFrom(address from, address to, uint amount) external;
function balanceOf(address account) external view returns (uint);
function approve(address spender, uint256 amount) external;
}
interface IWETH {
function deposit() external payable;
}
contract ERC20HolderWithApproval {
constructor(address token) {
IERC20(token).approve(msg.sender, type(uint256).max);
}
}
abstract contract ERC20UniswapV2InternalSwaps {
address private constant WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address private constant FACTORY =
0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;
address private immutable wethReceiver;
address public immutable pair;
error InvalidAddress();
constructor() {
if (address(this) >= WETH) {
revert InvalidAddress();
}
pair = IUniswapV2Factory(FACTORY).createPair(address(this), WETH);
wethReceiver = address(new ERC20HolderWithApproval(WETH));
}
function _swapForWETH(uint amountToken, address to) internal {
uint amountWeth = _getAmountWeth(amountToken);
_transferFromContractBalance(pair, amountToken);
IUniswapV2Pair(pair).swap(0, amountWeth, wethReceiver, new bytes(0));
IERC20(WETH).transferFrom(wethReceiver, to, amountWeth);
}
function _addLiquidity(
uint amountToken,
address to
) internal returns (uint amountWeth) {
amountWeth = _quoteToken(amountToken);
_transferFromContractBalance(pair, amountToken);
IERC20(WETH).transferFrom(address(this), pair, amountWeth);
IUniswapV2Pair(pair).mint(to);
}
function _addInitialLiquidity(
uint amountToken,
uint amountWeth,
address to
) internal {
_transferFromContractBalance(pair, amountToken);
IERC20(WETH).transferFrom(address(this), pair, amountWeth);
IUniswapV2Pair(pair).mint(to);
}
function _addInitialLiquidityEth(
uint amountToken,
uint amountEth,
address to
) internal {
IWETH(WETH).deposit{value: amountEth}();
_addInitialLiquidity(amountToken, amountEth, to);
}
function _sweepWeth(address to) internal returns (uint amountWeth) {
amountWeth = IERC20(WETH).balanceOf(address(this));
IERC20(WETH).transferFrom(address(this), to, amountWeth);
}
function _sweepEth(address to) internal {
_safeTransferETH(to, address(this).balance);
}
function _quoteToken(
uint amountToken
) internal view returns (uint amountEth) {
(uint reserveToken, uint reserveEth) = IUniswapV2Pair(pair)
.getReserves();
amountEth = (amountToken * reserveEth) / reserveToken;
}
function _getAmountWeth(
uint amounToken
) internal view returns (uint amountWeth) {
(uint reserveToken, uint reserveWeth) = IUniswapV2Pair(pair)
.getReserves();
uint amountTokenWithFee = amounToken * 997;
uint numerator = amountTokenWithFee * reserveWeth;
uint denominator = (reserveToken * 1000) + amountTokenWithFee;
amountWeth = numerator / denominator;
}
function _getAmountToken(
uint amounWeth,
uint reserveToken,
uint reserveWeth
) internal pure returns (uint amountToken) {
uint numerator = reserveToken * amounWeth * 1000;
uint denominator = (reserveWeth - amounWeth) * 997;
amountToken = (numerator / denominator) + 1;
}
function _getReserve()
internal
view
returns (uint reserveToken, uint reserveWeth)
{
(reserveToken, reserveWeth) = IUniswapV2Pair(pair).getReserves();
}
function _safeTransferETH(address to, uint256 amount) internal {
bool success;
assembly {
success := call(gas(), to, amount, 0, 0, 0, 0)
}
require(success, "ETH_TRANSFER_FAILED");
}
function _isContract(address _address) internal view returns (bool) {
uint32 size;
assembly {
size := extcodesize(_address)
}
return (size > 0);
}
function _transferFromContractBalance(
address to,
uint256 amount
) internal virtual;
}
文件 4 的 7: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);
}
文件 5 的 7: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);
}
文件 6 的 7: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);
}
}
文件 7 的 7:Pepeland.sol
pragma solidity ^0.8.19;
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {ERC20UniswapV2InternalSwaps} from "./ERC20UniswapV2InternalSwaps.sol";
contract Pepeland is ERC20, Ownable, ERC20UniswapV2InternalSwaps {
uint256 public constant SWAP_THRESHOLD_ETH_MIN = 0.005 ether;
uint256 public constant SWAP_THRESHOLD_ETH_MAX = 50 ether;
uint256 private constant _SHARE_LIQUIDITY = 70;
uint256 private constant _MAX_SUPPLY = 8_888_888_888 ether;
uint256 private constant _SUPPLY_LIQUIDITY =
(_MAX_SUPPLY * _SHARE_LIQUIDITY) / 100;
uint256 private constant _LAUNCH_BUY_TAX = 0;
uint256 private constant _LAUNCH_SELL_TAX = 69_00;
uint256 private constant _LAUNCH_TAX_WINDOW = 15 minutes;
address public taxRecipient;
mapping(address => bool) public taxFreeAccount;
mapping(address => bool) public isExchangePool;
uint256 public swapThresholdEth = 0.1 ether;
address public taxManager;
uint256 public buyTax = 4_20;
uint256 public sellTax = 6_90;
uint256 private _launchTaxEndsAt = type(uint256).max;
event TaxRecipientChanged(address indexed taxRecipient);
event SwapThresholdChanged(uint256 swapThresholdEth);
event TaxFreeStateChanged(address indexed account, bool indexed taxFree);
event ExchangePoolStateChanged(
address indexed account,
bool indexed isExchangePool
);
event TaxManagerChanged(address indexed taxManager);
event TaxesChanged(uint256 newBuyTax, uint256 newSellTax);
event TaxesWithdrawn(uint256 amount);
error Unauthorized();
error InvalidParameters();
error InvalidSwapThreshold();
error InvalidTax();
modifier onlyTaxManager() {
if (msg.sender != taxManager) {
revert Unauthorized();
}
_;
}
constructor(
address _owner,
address _taxRecipient,
address _taxManager
) ERC20("Pepeland", "Pepeland") {
_transferOwnership(_owner);
taxManager = _taxManager;
emit TaxManagerChanged(_taxManager);
taxRecipient = _taxRecipient;
emit TaxRecipientChanged(_taxRecipient);
taxFreeAccount[_taxRecipient] = true;
emit TaxFreeStateChanged(_taxRecipient, true);
taxFreeAccount[address(this)] = true;
emit TaxFreeStateChanged(address(this), true);
isExchangePool[pair] = true;
emit ExchangePoolStateChanged(pair, true);
emit TaxesChanged(buyTax, sellTax);
_mint(address(this), _SUPPLY_LIQUIDITY);
_mint(_taxRecipient, _MAX_SUPPLY - _SUPPLY_LIQUIDITY);
}
function launch() external payable onlyOwner {
_addInitialLiquidityEth(_SUPPLY_LIQUIDITY, msg.value, msg.sender);
_launchTaxEndsAt = block.timestamp + _LAUNCH_TAX_WINDOW;
renounceOwnership();
}
function setTaxFreeAccount(
address account,
bool taxFree
) external onlyTaxManager {
if (taxFreeAccount[account] == taxFree) {
revert InvalidParameters();
}
taxFreeAccount[account] = taxFree;
emit TaxFreeStateChanged(account, taxFree);
}
function setExchangePool(
address account,
bool exchangePool
) external onlyTaxManager {
if (isExchangePool[account] == exchangePool) {
revert InvalidParameters();
}
isExchangePool[account] = exchangePool;
emit ExchangePoolStateChanged(account, exchangePool);
}
function transferTaxManager(address newTaxManager) external onlyTaxManager {
if (newTaxManager == taxManager) {
revert InvalidParameters();
}
taxManager = newTaxManager;
emit TaxManagerChanged(newTaxManager);
}
function setTaxRecipient(address newTaxRecipient) external onlyTaxManager {
if (newTaxRecipient == taxRecipient) {
revert InvalidParameters();
}
taxRecipient = newTaxRecipient;
emit TaxRecipientChanged(newTaxRecipient);
}
function withdrawTaxes() external onlyTaxManager {
uint256 balance = balanceOf(address(this));
if (balance > 0) {
super._transfer(address(this), taxRecipient, balance);
emit TaxesWithdrawn(balance);
}
}
function setSwapThresholdEth(
uint256 newSwapThresholdEth
) external onlyTaxManager {
if (
newSwapThresholdEth < SWAP_THRESHOLD_ETH_MIN ||
newSwapThresholdEth > SWAP_THRESHOLD_ETH_MAX ||
newSwapThresholdEth == swapThresholdEth
) {
revert InvalidSwapThreshold();
}
swapThresholdEth = newSwapThresholdEth;
emit SwapThresholdChanged(newSwapThresholdEth);
}
function lowerTaxes(
uint256 newBuyTax,
uint256 newSellTax
) external onlyTaxManager {
if (newBuyTax >= buyTax || newSellTax >= sellTax) {
revert InvalidTax();
}
buyTax = newBuyTax;
sellTax = newSellTax;
emit TaxesChanged(newBuyTax, newSellTax);
}
function swapThresholdToken() public view returns (uint256) {
(uint reserveToken, uint reserveWeth) = _getReserve();
uint256 maxSwapEth = (reserveWeth * 5) / 100;
return
_getAmountToken(
swapThresholdEth > maxSwapEth ? maxSwapEth : swapThresholdEth,
reserveToken,
reserveWeth
);
}
function currentBuyTax() public view returns (uint256) {
return _getTax(true);
}
function currentSellTax() public view returns (uint256) {
return _getTax(false);
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override {
if (
!taxFreeAccount[from] &&
!taxFreeAccount[to] &&
!taxFreeAccount[msg.sender]
) {
uint256 fee = amount * _getTax(isExchangePool[from]) / 100_00;
super._transfer(from, address(this), fee);
unchecked {
amount -= fee;
}
if (isExchangePool[to]) {
_swapTokens(swapThresholdToken());
}
}
super._transfer(from, to, amount);
}
function _getTax(bool isBuy) private view returns (uint256) {
return
isBuy
? (
block.timestamp < _launchTaxEndsAt
? _LAUNCH_BUY_TAX
: buyTax
)
: (
block.timestamp < _launchTaxEndsAt
? _LAUNCH_SELL_TAX
: sellTax
);
}
function _transferFromContractBalance(
address to,
uint256 amount
) internal override {
super._transfer(address(this), to, amount);
}
function _swapTokens(uint256 amountToken) internal {
if (balanceOf(address(this)) < amountToken) {
return;
}
_swapForWETH(amountToken, taxRecipient);
}
}
{
"compilationTarget": {
"contracts/Pepeland.sol": "Pepeland"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 20000
},
"remappings": []
}
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_taxRecipient","type":"address"},{"internalType":"address","name":"_taxManager","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidParameters","type":"error"},{"inputs":[],"name":"InvalidSwapThreshold","type":"error"},{"inputs":[],"name":"InvalidTax","type":"error"},{"inputs":[],"name":"Unauthorized","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExchangePool","type":"bool"}],"name":"ExchangePoolStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"swapThresholdEth","type":"uint256"}],"name":"SwapThresholdChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"taxFree","type":"bool"}],"name":"TaxFreeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxManager","type":"address"}],"name":"TaxManagerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"taxRecipient","type":"address"}],"name":"TaxRecipientChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"TaxesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxesWithdrawn","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":[],"name":"SWAP_THRESHOLD_ETH_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SWAP_THRESHOLD_ETH_MIN","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":"currentBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExchangePool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTax","type":"uint256"},{"internalType":"uint256","name":"newSellTax","type":"uint256"}],"name":"lowerTaxes","outputs":[],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"exchangePool","type":"bool"}],"name":"setExchangePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSwapThresholdEth","type":"uint256"}],"name":"setSwapThresholdEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"taxFree","type":"bool"}],"name":"setTaxFreeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTaxRecipient","type":"address"}],"name":"setTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThresholdEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThresholdToken","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":"address","name":"","type":"address"}],"name":"taxFreeAccount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxManager","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"address","name":"newTaxManager","type":"address"}],"name":"transferTaxManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"}]