编译器
0.8.19+commit.7dd6d404
文件 1 的 8:Address.sol
pragma solidity ^0.8.1;
library Address {
function isContract(address account) internal view returns (bool) {
return account.code.length > 0;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
文件 2 的 8: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;
}
}
文件 3 的 8:FXISportsToken.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IUniswapV2Factory.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IFXISportsToken.sol";
contract FXISportsToken is Ownable, IFXISportsToken {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) public excludedFromFees;
mapping(address => bool) public excludedFromMaxWallet;
mapping(address => bool) public whitelists;
uint256 private _totalSupply = 300_000_000 * 10 ** _decimals;
uint256 public launchTime;
uint256 public whitelistPeriod;
uint256 public swapThreshold;
uint256 public maxWalletAmount;
uint256 private accLiquidityAmount;
uint256 private accMarketingAmount;
uint256 public totalBuyFeeRate;
uint256 public totalSellFeeRate;
address public marketingTaxRecv;
address public pair;
address constant DEAD = 0x000000000000000000000000000000000000dEaD;
bool private inSwapLiquidity;
string private _name = "FXI Sports";
string private _symbol = "FXI";
uint256 public immutable FIXED_POINT = 1000;
uint16 public constant MAX_FEE = 100;
uint8 private constant _decimals = 18;
IUniswapV2Router02 public dexRouter;
FeeRate public buyfeeRate;
FeeRate public sellfeeRate;
constructor(
FeeRate memory _buyfeeRate,
FeeRate memory _sellfeeRate,
Param memory _param
) checkFeeRates(_buyfeeRate) checkFeeRates(_sellfeeRate) {
require(
_param.marketingTaxRecv != address(0),
"Invalid MarketingTaxRecv address"
);
require(_param.dexRouter != address(0), "Invalid dexRouter adddress");
require(_param.whitelistPeriod > 0, "Invalid whitelistPeriod");
address sender = msg.sender;
marketingTaxRecv = _param.marketingTaxRecv;
dexRouter = IUniswapV2Router02(_param.dexRouter);
whitelistPeriod = _param.whitelistPeriod;
buyfeeRate.liquidityFeeRate = _buyfeeRate.liquidityFeeRate;
buyfeeRate.marketingFeeRate = _buyfeeRate.marketingFeeRate;
totalBuyFeeRate =
_buyfeeRate.liquidityFeeRate +
_buyfeeRate.marketingFeeRate;
sellfeeRate.liquidityFeeRate = _sellfeeRate.liquidityFeeRate;
sellfeeRate.marketingFeeRate = _sellfeeRate.marketingFeeRate;
totalSellFeeRate =
_sellfeeRate.liquidityFeeRate +
_sellfeeRate.marketingFeeRate;
excludedFromFees[sender] = true;
excludedFromMaxWallet[sender] = true;
excludedFromMaxWallet[address(this)] = true;
excludedFromMaxWallet[marketingTaxRecv] = true;
whitelists[sender] = true;
whitelists[address(this)] = true;
_balances[sender] += _totalSupply;
emit Transfer(address(0), sender, _totalSupply);
swapThreshold = _totalSupply / 10000;
}
receive() external payable {}
modifier checkFeeRates(FeeRate memory _fees) {
require(
_fees.marketingFeeRate + _fees.liquidityFeeRate <= MAX_FEE,
"Max Rate exceeded, please lower value"
);
_;
}
function name() external view returns (string memory) {
return _name;
}
function symbol() external view returns (string memory) {
return _symbol;
}
function decimals() external pure returns (uint8) {
return _decimals;
}
function totalSupply() external view returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view returns (uint256) {
return _balances[account];
}
function transfer(
address _recipient,
uint256 _amount
) external override returns (bool) {
_transfer(msg.sender, _recipient, _amount);
return true;
}
function allowance(
address _owner,
address _spender
) external view override returns (uint256) {
return _allowances[_owner][_spender];
}
function approve(
address _spender,
uint256 _amount
) external override returns (bool) {
_approve(msg.sender, _spender, _amount);
return true;
}
function transferFrom(
address _sender,
address _recipient,
uint256 _amount
) external override returns (bool) {
uint256 currentAllowance = _allowances[_sender][msg.sender];
require(currentAllowance >= _amount, "Transfer > allowance");
_approve(_sender, msg.sender, currentAllowance - _amount);
_transfer(_sender, _recipient, _amount);
return true;
}
function updateDexRouter(address _newRouter) external onlyOwner {
require(Address.isContract(_newRouter), "Address is not a contract");
dexRouter = IUniswapV2Router02(_newRouter);
}
function updatePair(address _pair) external onlyOwner {
require(_pair != address(0), "Invalid pair address");
if (pair != address(0)) {
excludedFromMaxWallet[pair] = false;
whitelists[pair] = false;
}
pair = _pair;
excludedFromMaxWallet[_pair] = true;
whitelists[_pair] = true;
}
function setWhiteListPeriod(
uint256 _newWhiteListPeriod
) external onlyOwner {
require(_newWhiteListPeriod > 0, "Invalid whitelistPeriod");
whitelistPeriod = _newWhiteListPeriod;
}
function multiSender(
address[] memory _recipients,
uint256[] memory _amounts
) external onlyOwner {
require(_recipients.length == _amounts.length, "Invalid arrays length");
uint256 totalAmountToSend = 0;
for (uint256 i = 0; i < _recipients.length; ) {
require(_recipients[i] != address(0), "Invalid recipient address");
totalAmountToSend += _amounts[i];
unchecked {
i++;
}
}
require(
_balances[msg.sender] >= totalAmountToSend,
"Not enough balance to send"
);
for (uint256 i = 0; i < _recipients.length; ) {
_transfer(msg.sender, _recipients[i], _amounts[i]);
unchecked {
i++;
}
}
}
function setLaunchBegin() external override onlyOwner {
require(launchTime == 0, "Already launched");
launchTime = block.timestamp;
}
function updateWhitelists(
address[] memory _accounts,
bool _add
) external override onlyOwner {
uint256 length = _accounts.length;
require(length > 0, "Invalid accounts length");
for (uint256 i = 0; i < length; ) {
whitelists[_accounts[i]] = _add;
unchecked {
i++;
}
}
}
function excludeWalletsFromMaxWallets(
address[] memory _accounts,
bool _add
) external override onlyOwner {
uint256 length = _accounts.length;
require(length > 0, "Invalid length array");
for (uint256 i = 0; i < length; ) {
excludedFromMaxWallet[_accounts[i]] = _add;
unchecked {
i++;
}
}
}
function excludeWalletsFromFees(
address[] memory _accounts,
bool _add
) external override onlyOwner {
uint256 length = _accounts.length;
require(length > 0, "Invalid length array");
for (uint256 i = 0; i < length; ) {
excludedFromFees[_accounts[i]] = _add;
unchecked {
i++;
}
}
}
function setMaxWalletAmount(uint256 newLimit) external override onlyOwner {
require(newLimit >= (_totalSupply * 10) / 1000, "Min 1% limit");
maxWalletAmount = newLimit;
}
function setMarketingTaxWallet(
address _marketingTaxWallet
) external override onlyOwner {
require(
_marketingTaxWallet != address(0),
"Invalid marketingTaxWallet address"
);
marketingTaxRecv = _marketingTaxWallet;
}
function updateBuyFeeRate(
uint16 _marketingBuyFeeRate,
uint16 _liquidityBuyFeeRate
) external override onlyOwner {
require(
_marketingBuyFeeRate + _liquidityBuyFeeRate <= MAX_FEE,
"Max Rate exceeded, please lower value"
);
buyfeeRate.marketingFeeRate = _marketingBuyFeeRate;
buyfeeRate.liquidityFeeRate = _liquidityBuyFeeRate;
totalBuyFeeRate = _marketingBuyFeeRate + _liquidityBuyFeeRate;
}
function updateSellFeeRate(
uint16 _marketingSellFeeRate,
uint16 _liquiditySellFeeRate
) external override onlyOwner {
require(
_marketingSellFeeRate + _liquiditySellFeeRate <= MAX_FEE,
"Max Rate exceeded, please lower value"
);
sellfeeRate.marketingFeeRate = _marketingSellFeeRate;
sellfeeRate.liquidityFeeRate = _liquiditySellFeeRate;
totalSellFeeRate = _marketingSellFeeRate + _liquiditySellFeeRate;
}
function setSwapThreshold(
uint256 _swapThreshold
) external override onlyOwner {
require(_swapThreshold > 0, "Invalid swapThreshold");
swapThreshold = _swapThreshold;
}
function _transfer(
address _sender,
address _recipient,
uint256 _amount
) internal {
require(_sender != address(0), "Transfer from zero address");
require(_recipient != address(0), "Transfer to zero address");
require(_amount > 0, "Zero amount");
require(_balances[_sender] >= _amount, "Not enough amount to transfer");
require(_sender == owner() || launchTime != 0, "Not launched yet");
if (block.timestamp < launchTime + whitelistPeriod) {
require(whitelists[_recipient], "only whitelist");
}
if (maxWalletAmount > 0) {
require(
excludedFromMaxWallet[_recipient] ||
_balances[_recipient] + _amount <= maxWalletAmount,
"Exceeds to maxWalletAmount"
);
}
if (
inSwapLiquidity ||
excludedFromFees[_recipient] ||
excludedFromFees[_sender]
) {
_basicTransfer(_sender, _recipient, _amount);
emit Transfer(_sender, _recipient, _amount);
return;
}
if (pair != address(0)) {
if (_sender == pair) {
_taxonBuyTransfer(_sender, _recipient, _amount);
} else {
_swapBack();
if (_recipient == pair) {
_taxonSellTransfer(_sender, _recipient, _amount);
} else {
_basicTransfer(_sender, _recipient, _amount);
}
}
}
emit Transfer(_sender, _recipient, _amount);
}
function _swapBack() internal {
uint256 accTotalAmount = accLiquidityAmount + accMarketingAmount;
if (accTotalAmount <= swapThreshold) {
return;
}
inSwapLiquidity = true;
uint256 swapAmountForLiquidity = accLiquidityAmount / 2;
uint256 swapAmount = accTotalAmount - swapAmountForLiquidity;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
_approve(address(this), address(dexRouter), swapAmount);
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
swapAmount,
0,
path,
address(this),
block.timestamp + 30 minutes
);
uint256 swappedETHAmount = address(this).balance;
require(swappedETHAmount > 0, "Too small token for swapBack");
uint256 ethForLiquidity = (swappedETHAmount * swapAmountForLiquidity) /
swapAmount;
if (ethForLiquidity > 0) {
uint256 amountForLiquidity = accLiquidityAmount -
swapAmountForLiquidity;
_approve(address(this), address(dexRouter), amountForLiquidity);
dexRouter.addLiquidityETH{value: ethForLiquidity}(
address(this),
amountForLiquidity,
0,
0,
0x000000000000000000000000000000000000dEaD,
block.timestamp + 30 minutes
);
swappedETHAmount -= ethForLiquidity;
}
_transferETH(marketingTaxRecv, swappedETHAmount);
accLiquidityAmount = 0;
accMarketingAmount = 0;
inSwapLiquidity = false;
}
function _taxonSellTransfer(
address _sender,
address _recipient,
uint256 _amount
) internal {
(
uint256 marketingFeeRate,
uint256 liquidityFeeRate
) = _getSellFeeRate();
uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
uint256 recvAmount = _amount -
(marketingFeeAmount + liquidityFeeAmount);
_balances[_sender] -= _amount;
_balances[_recipient] += recvAmount;
_balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
accLiquidityAmount += liquidityFeeAmount;
accMarketingAmount += marketingFeeAmount;
}
function _taxonBuyTransfer(
address _sender,
address _recipient,
uint256 _amount
) internal {
(uint256 marketingFeeRate, uint256 liquidityFeeRate) = _getBuyFeeRate();
uint256 marketingFeeAmount = (_amount * marketingFeeRate) / FIXED_POINT;
uint256 liquidityFeeAmount = (_amount * liquidityFeeRate) / FIXED_POINT;
uint256 recvAmount = _amount -
(marketingFeeAmount + liquidityFeeAmount);
_balances[_sender] -= _amount;
_balances[_recipient] += recvAmount;
_balances[address(this)] += (marketingFeeAmount + liquidityFeeAmount);
accLiquidityAmount += liquidityFeeAmount;
accMarketingAmount += marketingFeeAmount;
}
function _basicTransfer(
address _sender,
address _recipient,
uint256 _amount
) internal {
_balances[_sender] -= _amount;
_balances[_recipient] += _amount;
}
function _getSellFeeRate()
internal
view
returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
{
return (sellfeeRate.marketingFeeRate, sellfeeRate.liquidityFeeRate);
}
function _getBuyFeeRate()
internal
view
returns (uint256 _marketingFeeRate, uint256 _liquidityFeeRate)
{
return (buyfeeRate.marketingFeeRate, buyfeeRate.liquidityFeeRate);
}
function _transferETH(address _recipient, uint256 _amount) internal {
if (_amount == 0) return;
(bool sent, ) = _recipient.call{value: _amount}("");
require(sent, "Sending ETH failed");
}
function _approve(
address _owner,
address _spender,
uint256 _amount
) private {
require(_owner != address(0), "Approve from zero");
require(_spender != address(0), "Approve to zero");
_allowances[_owner][_spender] = _amount;
emit Approval(_owner, _spender, _amount);
}
}
文件 4 的 8: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 的 8:IFXISportsToken.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
interface IFXISportsToken is IERC20 {
struct Param {
address marketingTaxRecv;
address dexRouter;
uint256 whitelistPeriod;
}
struct FeeRate {
uint256 marketingFeeRate;
uint256 liquidityFeeRate;
}
function setLaunchBegin() external;
function updateWhitelists(address[] memory _accounts, bool _add) external;
function excludeWalletsFromMaxWallets(
address[] memory _accounts,
bool _add
) external;
function excludeWalletsFromFees(
address[] memory _accounts,
bool _add
) external;
function setMaxWalletAmount(uint256 _maxWalletAmount) external;
function setMarketingTaxWallet(address _marketingTaxWallet) external;
function updateBuyFeeRate(
uint16 _marketingBuyFeeRate,
uint16 _liquidityBuyFeeRate
) external;
function updateSellFeeRate(
uint16 _marketingSellFeeRate,
uint16 _liquiditySellFeeRate
) external;
function setSwapThreshold(uint256 _swapThreshold) external;
}
文件 6 的 8:IUniswapV2Factory.sol
pragma solidity ^0.8.19;
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;
}
文件 7 的 8:IUniswapV2Router02.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;
}
文件 8 的 8: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());
}
function owner() public view virtual returns (address) {
return _owner;
}
modifier onlyOwner() {
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);
}
}
{
"compilationTarget": {
"contracts/FXISportsToken.sol": "FXISportsToken"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_buyfeeRate","type":"tuple"},{"components":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"internalType":"struct IFXISportsToken.FeeRate","name":"_sellfeeRate","type":"tuple"},{"components":[{"internalType":"address","name":"marketingTaxRecv","type":"address"},{"internalType":"address","name":"dexRouter","type":"address"},{"internalType":"uint256","name":"whitelistPeriod","type":"uint256"}],"internalType":"struct IFXISportsToken.Param","name":"_param","type":"tuple"}],"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":[{"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":"FIXED_POINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FEE","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"buyfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"excludeWalletsFromMaxWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTaxRecv","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_recipients","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"multiSender","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":"sellfeeRate","outputs":[{"internalType":"uint256","name":"marketingFeeRate","type":"uint256"},{"internalType":"uint256","name":"liquidityFeeRate","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setLaunchBegin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingTaxWallet","type":"address"}],"name":"setMarketingTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"}],"name":"setSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newWhiteListPeriod","type":"uint256"}],"name":"setWhiteListPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","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":"totalBuyFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFeeRate","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":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","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":"uint16","name":"_marketingBuyFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquidityBuyFeeRate","type":"uint16"}],"name":"updateBuyFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newRouter","type":"address"}],"name":"updateDexRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_marketingSellFeeRate","type":"uint16"},{"internalType":"uint16","name":"_liquiditySellFeeRate","type":"uint16"}],"name":"updateSellFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"bool","name":"_add","type":"bool"}],"name":"updateWhitelists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]