编译器
0.8.19+commit.7dd6d404
文件 1 的 9:Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
文件 2 的 9:EnumerableSet.sol
pragma solidity ^0.8.0;
library EnumerableSet {
struct Set {
bytes32[] _values;
mapping(bytes32 => uint256) _indexes;
}
function _add(Set storage set, bytes32 value) private returns (bool) {
if (!_contains(set, value)) {
set._values.push(value);
set._indexes[value] = set._values.length;
return true;
} else {
return false;
}
}
function _remove(Set storage set, bytes32 value) private returns (bool) {
uint256 valueIndex = set._indexes[value];
if (valueIndex != 0) {
uint256 toDeleteIndex = valueIndex - 1;
uint256 lastIndex = set._values.length - 1;
if (lastIndex != toDeleteIndex) {
bytes32 lastValue = set._values[lastIndex];
set._values[toDeleteIndex] = lastValue;
set._indexes[lastValue] = valueIndex;
}
set._values.pop();
delete set._indexes[value];
return true;
} else {
return false;
}
}
function _contains(Set storage set, bytes32 value) private view returns (bool) {
return set._indexes[value] != 0;
}
function _length(Set storage set) private view returns (uint256) {
return set._values.length;
}
function _at(Set storage set, uint256 index) private view returns (bytes32) {
return set._values[index];
}
function _values(Set storage set) private view returns (bytes32[] memory) {
return set._values;
}
struct Bytes32Set {
Set _inner;
}
function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _add(set._inner, value);
}
function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
return _remove(set._inner, value);
}
function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
return _contains(set._inner, value);
}
function length(Bytes32Set storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
return _at(set._inner, index);
}
function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
bytes32[] memory store = _values(set._inner);
bytes32[] memory result;
assembly {
result := store
}
return result;
}
struct AddressSet {
Set _inner;
}
function add(AddressSet storage set, address value) internal returns (bool) {
return _add(set._inner, bytes32(uint256(uint160(value))));
}
function remove(AddressSet storage set, address value) internal returns (bool) {
return _remove(set._inner, bytes32(uint256(uint160(value))));
}
function contains(AddressSet storage set, address value) internal view returns (bool) {
return _contains(set._inner, bytes32(uint256(uint160(value))));
}
function length(AddressSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(AddressSet storage set, uint256 index) internal view returns (address) {
return address(uint160(uint256(_at(set._inner, index))));
}
function values(AddressSet storage set) internal view returns (address[] memory) {
bytes32[] memory store = _values(set._inner);
address[] memory result;
assembly {
result := store
}
return result;
}
struct UintSet {
Set _inner;
}
function add(UintSet storage set, uint256 value) internal returns (bool) {
return _add(set._inner, bytes32(value));
}
function remove(UintSet storage set, uint256 value) internal returns (bool) {
return _remove(set._inner, bytes32(value));
}
function contains(UintSet storage set, uint256 value) internal view returns (bool) {
return _contains(set._inner, bytes32(value));
}
function length(UintSet storage set) internal view returns (uint256) {
return _length(set._inner);
}
function at(UintSet storage set, uint256 index) internal view returns (uint256) {
return uint256(_at(set._inner, index));
}
function values(UintSet storage set) internal view returns (uint256[] memory) {
bytes32[] memory store = _values(set._inner);
uint256[] memory result;
assembly {
result := store
}
return result;
}
}
文件 3 的 9:IERC20.sol
pragma solidity ^0.8.0;
interface IERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
文件 4 的 9:IProofToken.sol
pragma solidity ^0.8.19;
interface IProofToken {
struct Tax {
uint16 revenueRate;
uint16 stakingRate;
uint16 ventureFundRate;
}
function enableTrading(bool _enable) external;
function setMaxWallet(uint256 _maxWallet) external;
function setMaxTransfer(uint256 _maxTransfer) external;
function setRevenue(address _revenue) external;
function setStakingContract(address _staking) external;
function setVentureFund(address _ventureFund) external;
function setTaxForBuy(Tax memory _tax) external;
function setTaxForSell(Tax memory _tax) external;
function withdrawRestAmount(uint256 _amount) external;
function setSwapBackSettings(
uint256 _swapThreshold,
bool _swapEnable
) external;
function excludeWalletsFromTxLimit(
address[] memory _wallets,
bool _exclude
) external;
function excludeWalletsFromMaxWallet(
address[] memory _wallets,
bool _exclude
) external;
function excludeWalletsFromFees(
address[] memory _wallets,
bool _exclude
) external;
}
文件 5 的 9: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;
}
文件 6 的 9: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;
}
文件 7 的 9:Ownable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
constructor() {
_transferOwnership(_msgSender());
}
modifier onlyOwner() {
_checkOwner();
_;
}
function owner() public view virtual returns (address) {
return _owner;
}
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
文件 8 的 9:Pausable.sol
pragma solidity ^0.8.0;
import "../utils/Context.sol";
abstract contract Pausable is Context {
event Paused(address account);
event Unpaused(address account);
bool private _paused;
constructor() {
_paused = false;
}
modifier whenNotPaused() {
_requireNotPaused();
_;
}
modifier whenPaused() {
_requirePaused();
_;
}
function paused() public view virtual returns (bool) {
return _paused;
}
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
文件 9 的 9:ProofToken.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/Pausable.sol";
import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
import "./interfaces/IProofToken.sol";
import "./interfaces/IUniswapV2Router02.sol";
import "./interfaces/IUniswapV2Factory.sol";
contract ProofToken is Ownable, Pausable, IERC20, IProofToken {
using EnumerableSet for EnumerableSet.AddressSet;
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) public excludedFromTxLimit;
mapping(address => bool) public excludedFromMaxWallet;
mapping(address => bool) public excludedFromFees;
uint256 private constant _totalSupply = 100_000_000 * 10 ** _decimals;
uint256 public maxTransfer;
uint256 public maxWallet;
uint256 public immutable launchTime;
uint256 public swapThreshold;
uint256 public accAmountForStaking;
uint256 public accAmountForRevenue;
uint256 public accAmountForVentureFund;
address public revenue;
address public stakingContract;
address public ventureFund;
address public pair;
Tax public taxForBuy;
Tax public taxForSell;
address public immutable router;
bool public tradingEnable;
bool private inSwapLiquidity;
bool public swapEnable;
string private constant _name = "PROOF";
string private constant _symbol = "PROOF";
uint8 private constant _decimals = 9;
uint16 public constant FIXED_POINT = 1000;
constructor(
address _router,
address _revenue,
address _ventureFund,
address _stakingContract,
Tax memory _taxForBuy,
Tax memory _taxForSell
) {
require(_router != address(0), "zero router address");
require(_revenue != address(0), "zero revenue address");
require(_ventureFund != address(0), "zero ventureFund address");
revenue = _revenue;
ventureFund = _ventureFund;
stakingContract = _stakingContract;
_balances[address(this)] = _totalSupply;
emit Transfer(address(0), address(this), _totalSupply);
maxWallet = _totalSupply / 100;
maxTransfer = (_totalSupply * 5) / 1000;
router = _router;
_createPair();
swapThreshold = _totalSupply / 10000;
excludedFromTxLimit[msg.sender] = true;
excludedFromTxLimit[pair] = true;
excludedFromTxLimit[address(this)] = true;
excludedFromMaxWallet[msg.sender] = true;
excludedFromMaxWallet[pair] = true;
excludedFromMaxWallet[address(this)] = true;
excludedFromMaxWallet[revenue] = true;
excludedFromMaxWallet[stakingContract] = true;
excludedFromMaxWallet[ventureFund] = true;
excludedFromFees[msg.sender] = true;
excludedFromFees[_revenue] = true;
excludedFromFees[_ventureFund] = true;
excludedFromFees[stakingContract] = true;
taxForBuy = _taxForBuy;
taxForSell = _taxForSell;
swapEnable = true;
launchTime = block.timestamp;
}
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 airdrop(address[] memory users, uint256[] memory amounts) external onlyOwner {
uint256 len = users.length;
require(len == amounts.length, "lists must be equal");
for (uint256 i = 0; i < len; i++) {
_basicTransfer(amounts[i], address(this), users[i]);
emit Transfer(address(this), users[i], amounts[i]);
}
}
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 excludeWalletsFromTxLimit(
address[] memory _wallets,
bool _exclude
) external override onlyOwner {
uint256 length = _wallets.length;
require(length > 0, "invalid array");
for (uint256 i = 0; i < length; i++) {
excludedFromTxLimit[_wallets[i]] = _exclude;
}
}
function excludeWalletsFromMaxWallet(
address[] memory _wallets,
bool _exclude
) external override onlyOwner {
uint256 length = _wallets.length;
require(length > 0, "invalid array");
for (uint256 i = 0; i < length; i++) {
excludedFromMaxWallet[_wallets[i]] = _exclude;
}
}
function excludeWalletsFromFees(
address[] memory _wallets,
bool _exclude
) external override onlyOwner {
uint256 length = _wallets.length;
require(length > 0, "invalid array");
for (uint256 i = 0; i < length; i++) {
excludedFromFees[_wallets[i]] = _exclude;
}
}
function enableTrading(bool _enable) external override onlyOwner {
tradingEnable = _enable;
}
function setMaxWallet(uint256 _maxWallet) external override onlyOwner {
require(_maxWallet > 0, "invalid maxWallet");
maxWallet = _maxWallet;
}
function setMaxTransfer(uint256 _maxTransfer) external override onlyOwner {
require(_maxTransfer > 0, "invalid maxTransfer");
maxTransfer = _maxTransfer;
}
function setSwapBackSettings(
uint256 _swapThreshold,
bool _swapEnable
) external override onlyOwner {
swapEnable = _swapEnable;
swapThreshold = _swapThreshold;
}
function setRevenue(address _revenue) external override onlyOwner {
require(_revenue != address(0), "zero revenue address");
excludedFromFees[revenue] = false;
excludedFromFees[_revenue] = true;
revenue = _revenue;
}
function setStakingContract(address _staking) external override onlyOwner {
require(_staking != address(0), "zero staking contract address");
if (stakingContract != address(0)) {
excludedFromFees[stakingContract] = false;
}
excludedFromMaxWallet[_staking] = true;
excludedFromFees[_staking] = true;
stakingContract = _staking;
}
function setVentureFund(address _ventureFund) external override onlyOwner {
require(_ventureFund != address(0), "zero revenue address");
excludedFromFees[ventureFund] = false;
excludedFromFees[_ventureFund] = true;
ventureFund = _ventureFund;
}
function setTaxForBuy(Tax memory _tax) external override onlyOwner {
require((_tax.revenueRate + _tax.stakingRate + _tax.ventureFundRate) <= 120, "12% max");
taxForBuy = _tax;
}
function setTaxForSell(Tax memory _tax) external override onlyOwner {
require((_tax.revenueRate + _tax.stakingRate + _tax.ventureFundRate) <= 170, "17% max");
taxForSell = _tax;
}
function withdrawRestAmount(uint256 _amount) external override onlyOwner {
uint256 availableAmount = _balances[address(this)];
uint256 feeAmount = accAmountForRevenue +
accAmountForStaking +
accAmountForVentureFund;
availableAmount -= feeAmount;
require(availableAmount >= _amount, "not enough balance to withdraw");
_transfer(address(this), owner(), _amount);
}
receive() external payable {}
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(
tradingEnable || (_recipient == stakingContract || _sender == stakingContract || _sender == owner() || _sender == address(this)),
"trading is not enabled"
);
if (inSwapLiquidity || !tradingEnable) {
_basicTransfer(_amount, _sender, _recipient);
emit Transfer(_sender, _recipient, _amount);
return;
}
require(
excludedFromTxLimit[_sender] || _amount <= maxTransfer,
"over max transfer amount"
);
require(
excludedFromMaxWallet[_recipient] ||
_balances[_recipient] + _amount <= maxWallet,
"exceeds to max wallet"
);
bool feelessTransfer = (excludedFromFees[_sender] ||
excludedFromFees[_recipient]);
if (_sender == pair) {
if (feelessTransfer) {
_basicTransfer(_amount, _sender, _recipient);
} else {
_takeFee(taxForBuy, _amount, _sender, _recipient);
}
} else {
_distributeFees();
if (_recipient == pair) {
if (feelessTransfer) {
_basicTransfer(_amount, _sender, _recipient);
} else {
_takeFee(taxForSell, _amount, _sender, _recipient);
}
} else {
_basicTransfer(_amount, _sender, _recipient);
}
}
emit Transfer(_sender, _recipient, _amount);
}
function _basicTransfer(
uint256 _amount,
address _sender,
address _recipient
) internal {
_balances[_sender] -= _amount;
_balances[_recipient] += _amount;
}
function _takeFee(
Tax memory _tax,
uint256 _amount,
address _sender,
address _recipient
) internal {
uint16 totalFee = _tax.revenueRate + _tax.stakingRate + _tax.ventureFundRate;
uint256 feeAmount = (_amount * totalFee) / FIXED_POINT;
uint256 revenueFee = (_amount * _tax.revenueRate) / FIXED_POINT;
uint256 stakingFee = (_amount * _tax.stakingRate) / FIXED_POINT;
uint256 ventureFee = feeAmount - revenueFee - stakingFee;
accAmountForRevenue += revenueFee;
accAmountForStaking += stakingFee;
accAmountForVentureFund += ventureFee;
uint256 transferAmount = _amount - feeAmount;
_balances[address(this)] += feeAmount;
_balances[_sender] -= _amount;
_balances[_recipient] += transferAmount;
}
function _distributeFees() internal {
uint256 feeAmount = accAmountForRevenue +
accAmountForStaking +
accAmountForVentureFund;
if (feeAmount < swapThreshold || !swapEnable) {
return;
}
if (feeAmount > 0) {
inSwapLiquidity = true;
_swapTokensToETH(feeAmount);
uint256 swappedETHAmount = address(this).balance;
inSwapLiquidity = false;
uint256 revenueFee = (swappedETHAmount * accAmountForRevenue) /
feeAmount;
uint256 ventureFee = (swappedETHAmount * accAmountForVentureFund) /
feeAmount;
uint256 stakingFee = swappedETHAmount - revenueFee - ventureFee;
_transferETH(revenue, revenueFee);
_transferETH(stakingContract, stakingFee);
_transferETH(ventureFund, ventureFee);
}
accAmountForRevenue = 0;
accAmountForStaking = 0;
accAmountForVentureFund = 0;
}
function _swapTokensToETH(uint256 _amount) internal {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = _getWrappedToken();
_approve(address(this), router, _amount);
IUniswapV2Router02(router)
.swapExactTokensForETHSupportingFeeOnTransferTokens(
_amount,
0,
path,
address(this),
block.timestamp
);
}
function _transferETH(address _to, uint256 _amount) internal {
if (_amount == 0) return;
(bool sent, ) = _to.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);
}
function _createPair() internal {
address WToken = _getWrappedToken();
pair = IUniswapV2Factory(IUniswapV2Router02(router).factory())
.createPair(WToken, address(this));
}
function _getWrappedToken() internal view returns (address) {
return
IUniswapV2Router02(router).WETH();
}
}
{
"compilationTarget": {
"contracts/ProofToken.sol": "ProofToken"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": [],
"viaIR": true
}
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_revenue","type":"address"},{"internalType":"address","name":"_ventureFund","type":"address"},{"internalType":"address","name":"_stakingContract","type":"address"},{"components":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"internalType":"struct IProofToken.Tax","name":"_taxForBuy","type":"tuple"},{"components":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"internalType":"struct IProofToken.Tax","name":"_taxForSell","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"FIXED_POINT","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountForRevenue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountForStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"accAmountForVentureFund","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"users","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enable","type":"bool"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludeWalletsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludeWalletsFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_wallets","type":"address[]"},{"internalType":"bool","name":"_exclude","type":"bool"}],"name":"excludeWalletsFromTxLimit","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":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromTxLimit","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":"maxTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revenue","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransfer","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_revenue","type":"address"}],"name":"setRevenue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"bool","name":"_swapEnable","type":"bool"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"internalType":"struct IProofToken.Tax","name":"_tax","type":"tuple"}],"name":"setTaxForBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"internalType":"struct IProofToken.Tax","name":"_tax","type":"tuple"}],"name":"setTaxForSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ventureFund","type":"address"}],"name":"setVentureFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"taxForBuy","outputs":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForSell","outputs":[{"internalType":"uint16","name":"revenueRate","type":"uint16"},{"internalType":"uint16","name":"stakingRate","type":"uint16"},{"internalType":"uint16","name":"ventureFundRate","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"ventureFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawRestAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]