文件 1 的 12:Address.sol
pragma solidity ^0.8.4;
library Address {
function isContract(address account) internal view returns (bool) {
bytes32 codehash;
bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
assembly {
codehash := extcodehash(account)
}
return (codehash != accountHash && codehash != 0x0);
}
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"
);
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(
address target,
bytes memory data,
uint256 weiValue,
string memory errorMessage
) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: weiValue}(
data
);
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 的 12:Context.sol
pragma solidity ^0.8.4;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes memory) {
this;
return msg.data;
}
}
文件 3 的 12:ERC20.sol
pragma solidity ^0.8.4;
import "./IERC20.sol";
import "./IERC20Metadata.sol";
import "./Context.sol";
import "./SafeMath.sol";
import "./Address.sol";
contract ERC20 is Context, IERC20, IERC20Metadata {
using SafeMath for uint256;
using Address for address;
mapping(address => uint256) internal _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 internal _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 recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, 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) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
_approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
return true;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(sender, recipient, amount);
_balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, 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 = _totalSupply.add(amount);
_balances[account] = _balances[account].add(amount);
emit Transfer(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);
_balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
_totalSupply = _totalSupply.sub(amount);
emit Transfer(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 _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
文件 4 的 12:IERC20.sol
pragma solidity ^0.8.4;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, 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 sender,
address recipient,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
文件 5 的 12:IERC20Metadata.sol
pragma solidity ^0.8.4;
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 的 12:IRewardsTracker.sol
pragma solidity 0.8.4;
interface IRewardsTracker {
function addAllocation(uint identifier) external payable;
}
文件 7 的 12:IUniswapV2Factory.sol
pragma solidity 0.8.4;
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
文件 8 的 12:IUniswapV2Router.sol
pragma solidity 0.8.4;
interface IUniswapV2Router {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
文件 9 的 12:Ownable.sol
pragma solidity 0.8.4;
import "./Context.sol";
contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
address msgSender = _msgSender();
_owner = msgSender;
emit OwnershipTransferred(address(0), msgSender);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == _msgSender(), "Ownable: caller is not the owner");
_;
}
function renounceOwnership() external virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
function transferOwnership(address newOwner) external virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
文件 10 的 12:PeepsPay.sol
pragma solidity ^0.8.4;
import "./SafeMath.sol";
import "./Address.sol";
import "./RewardsToken.sol";
import "./IUniswapV2Factory.sol";
import "./IUniswapV2Router.sol";
import "./IRewardsTracker.sol";
contract PeepsPay is RewardsToken {
using SafeMath for uint256;
using Address for address;
uint256 private constant REWARDS_TRACKER_IDENTIFIER = 4;
uint256 private constant TOTAL_SUPPLY = 1000000000000 * (10**9);
uint256 public maxTxAmount = TOTAL_SUPPLY.mul(2).div(1000);
uint256 private platformFee = 75;
uint256 private _previousPlatformFee = platformFee;
uint256 public devFee = 525;
uint256 private _previousDevFee = devFee;
uint256 public rewardsFee = 600;
uint256 private _previousRewardsFee = rewardsFee;
uint256 public launchSellFee = 775;
uint256 private _previousLaunchSellFee = launchSellFee;
address payable private _platformWalletAddress =
payable(0xF83Ba7773Acc6F87Ea53Ff8B6B9C6a979fef63AD);
address payable private _devWalletAddress =
payable(0x4327B5B2F7CcAA445816Da43150697f1Bc5A892d);
uint256 public launchSellFeeDeadline = 0;
IRewardsTracker private _rewardsTracker;
bool public useGenericTransfer = true;
bool private preparedForLaunch = false;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) private _isExcludedFromMaxTx;
IUniswapV2Router public uniswapV2Router;
address public uniswapV2Pair;
bool currentlySwapping;
bool public swapAndRedirectEthFeesEnabled = true;
uint256 private minTokensBeforeSwap = 100000000 * 10**9;
event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
event SwapAndRedirectEthFeesUpdated(bool enabled);
event OnSwapAndRedirectEthFees(
uint256 tokensSwapped,
uint256 ethToDevWallet
);
event MaxTxAmountUpdated(uint256 maxTxAmount);
event GenericTransferChanged(bool useGenericTransfer);
event ExcludeFromFees(address wallet);
event IncludeInFees(address wallet);
event DevWalletUpdated(address newDevWallet);
event RewardsTrackerUpdated(address newRewardsTracker);
event RouterUpdated(address newRouterAddress);
event FeesChanged(uint256 newDevFee, uint256 newRewardsFee);
event LaunchFeeUpdated(uint256 newLaunchSellFee);
modifier lockTheSwap() {
currentlySwapping = true;
_;
currentlySwapping = false;
}
constructor() ERC20("PeepsPay", "PeepsPay") {
IUniswapV2Router _uniswapV2Router = IUniswapV2Router(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
uniswapV2Router = _uniswapV2Router;
_mint(owner(), TOTAL_SUPPLY);
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromMaxTx[owner()] = true;
_isExcludedFromMaxTx[address(this)] = true;
excludeFromRewards(address(this));
excludeFromRewards(address(0xdead));
excludeFromRewards(uniswapV2Pair);
}
function decimals() public view virtual override returns (uint8) {
return 9;
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual override {
require(preparedForLaunch || _msgSender() == owner(), "Contract has not been prepared for launch and user is not owner");
if (useGenericTransfer) {
super._transfer(from, to, amount);
return;
}
if (
!_isExcludedFromMaxTx[from] &&
!_isExcludedFromMaxTx[to]
) {
require(
amount <= maxTxAmount,
"Transfer amount exceeds the maxTxAmount"
);
}
uint256 baseDevFee = devFee;
if (launchSellFeeDeadline >= block.timestamp && to == uniswapV2Pair) {
devFee = devFee.add(launchSellFee);
}
uint256 contractTokenBalance = balanceOf(address(this));
bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
if (
overMinTokenBalance &&
!currentlySwapping &&
from != uniswapV2Pair &&
swapAndRedirectEthFeesEnabled
) {
swapAndRedirectEthFees(contractTokenBalance);
}
if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
removeAllFee();
}
(uint256 tTransferAmount, uint256 tFee) = _getValues(amount);
_balances[from] = _balances[from].sub(amount);
_balances[to] = _balances[to].add(tTransferAmount);
_takeFee(tFee);
if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
restoreAllFee();
}
devFee = baseDevFee;
emit Transfer(from, to, tTransferAmount);
}
receive() external payable {}
function _getValues(uint256 tAmount)
private
view
returns (uint256, uint256)
{
uint256 tFee = calculateFee(tAmount);
uint256 tTransferAmount = tAmount.sub(tFee);
return (tTransferAmount, tFee);
}
function _takeFee(uint256 fee) private {
_balances[address(this)] = _balances[address(this)].add(fee);
}
function calculateFee(uint256 _amount)
private
view
returns (uint256)
{
uint256 totalFee = devFee.add(rewardsFee).add(platformFee);
return _amount.mul(totalFee).div(10000);
}
function removeAllFee() private {
if (devFee == 0 && rewardsFee == 0 && platformFee == 0) return;
_previousPlatformFee = platformFee;
_previousDevFee = devFee;
_previousRewardsFee = rewardsFee;
platformFee = 0;
devFee = 0;
rewardsFee = 0;
}
function restoreAllFee() private {
platformFee = _previousPlatformFee;
devFee = _previousDevFee;
rewardsFee = _previousRewardsFee;
}
function swapAndRedirectEthFees(uint256 contractTokenBalance)
private
lockTheSwap
{
uint256 totalRedirectFee = devFee.add(rewardsFee).add(platformFee);
if (totalRedirectFee == 0) return;
uint256 initialBalance = address(this).balance;
swapTokensForEth(contractTokenBalance);
uint256 newBalance = address(this).balance.sub(initialBalance);
if (newBalance > 0) {
uint256 platformBalance = newBalance.mul(platformFee).div(totalRedirectFee);
sendEthToWallet(_platformWalletAddress, platformBalance);
uint256 rewardsBalance = newBalance.mul(rewardsFee).div(totalRedirectFee);
if (rewardsBalance > 0 && address(_rewardsTracker) != address(0)) {
try _rewardsTracker.addAllocation{value: rewardsBalance}(REWARDS_TRACKER_IDENTIFIER) {} catch {}
}
uint256 devBalance = newBalance.mul(devFee).div(totalRedirectFee);
sendEthToWallet(_devWalletAddress, devBalance);
emit OnSwapAndRedirectEthFees(contractTokenBalance, newBalance);
}
}
function sendEthToWallet(address wallet, uint256 amount) private {
if (amount > 0) {
payable(wallet).transfer(amount);
}
}
function swapTokensForEth(uint256 tokenAmount) private {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function prepareForLaunch() external onlyOwner {
require(!preparedForLaunch, "Already prepared for launch");
preparedForLaunch = true;
launchSellFeeDeadline = block.timestamp + 3 days;
}
function setUseGenericTransfer(bool genericTransfer) external onlyOwner {
useGenericTransfer = genericTransfer;
emit GenericTransferChanged(genericTransfer);
}
function setMaxTxPercent(uint256 newMaxTx) external onlyOwner {
require(newMaxTx >= 5, "Max TX should be above 0.5%");
maxTxAmount = TOTAL_SUPPLY.mul(newMaxTx).div(1000);
emit MaxTxAmountUpdated(maxTxAmount);
}
function isExcludedFromFee(address account) external view returns (bool) {
return _isExcludedFromFee[account];
}
function excludeFromFee(address account) external onlyOwner {
_isExcludedFromFee[account] = true;
emit ExcludeFromFees(account);
}
function includeInFee(address account) external onlyOwner {
_isExcludedFromFee[account] = false;
emit IncludeInFees(account);
}
function setFees(uint256 newDevFee, uint256 newRewardsFee) external onlyOwner {
require(newDevFee <= 1000 && newRewardsFee <= 1000, "Fees exceed maximum allowed value");
devFee = newDevFee;
rewardsFee = newRewardsFee;
emit FeesChanged(newDevFee, newRewardsFee);
}
function setLaunchSellFee(uint256 newLaunchSellFee) external onlyOwner {
require(newLaunchSellFee <= 2500, "Maximum launch sell fee is 25%");
launchSellFee = newLaunchSellFee;
emit LaunchFeeUpdated(newLaunchSellFee);
}
function setDevWallet(address payable newDevWallet)
external
onlyOwner
{
_devWalletAddress = newDevWallet;
emit DevWalletUpdated(newDevWallet);
}
function setRewardsTracker(address payable newRewardsTracker)
external
onlyOwner
{
_rewardsTracker = IRewardsTracker(newRewardsTracker);
emit RewardsTrackerUpdated(newRewardsTracker);
}
function setRouterAddress(address newRouter) external onlyOwner {
IUniswapV2Router _newUniswapRouter = IUniswapV2Router(newRouter);
uniswapV2Pair = IUniswapV2Factory(_newUniswapRouter.factory())
.createPair(address(this), _newUniswapRouter.WETH());
uniswapV2Router = _newUniswapRouter;
emit RouterUpdated(newRouter);
}
function setSwapAndRedirectEthFeesEnabled(bool enabled) external onlyOwner {
swapAndRedirectEthFeesEnabled = enabled;
emit SwapAndRedirectEthFeesUpdated(enabled);
}
function setMinTokensBeforeSwap(uint256 minTokens) external onlyOwner {
minTokensBeforeSwap = minTokens * 10**9;
emit MinTokensBeforeSwapUpdated(minTokens);
}
function manualSwap() external onlyOwner {
uint256 contractBalance = balanceOf(address(this));
swapTokensForEth(contractBalance);
}
function manualSend() external onlyOwner {
uint256 contractEthBalance = address(this).balance;
sendEthToWallet(_devWalletAddress, contractEthBalance);
}
}
文件 11 的 12:RewardsToken.sol
pragma solidity ^0.8.4;
import "./ERC20.sol";
import "./Ownable.sol";
abstract contract RewardsToken is ERC20, Ownable {
address[] private excludedFromRewards;
mapping(address => bool) private isAddressExcluded;
event ExcludeFromRewards(address wallet);
event IncludeInRewards(address wallet);
function deleteExcluded(uint index) internal {
require(index < excludedFromRewards.length, "Index is greater than array length");
excludedFromRewards[index] = excludedFromRewards[excludedFromRewards.length - 1];
excludedFromRewards.pop();
}
function getExcludedBalances() internal view returns (uint256) {
uint256 totalExcludedHoldings = 0;
for (uint i = 0; i < excludedFromRewards.length; i++) {
totalExcludedHoldings += balanceOf(excludedFromRewards[i]);
}
return totalExcludedHoldings;
}
function excludeFromRewards(address wallet) public onlyOwner {
require(!isAddressExcluded[wallet], "Address is already excluded from rewards");
excludedFromRewards.push(wallet);
isAddressExcluded[wallet] = true;
emit ExcludeFromRewards(wallet);
}
function includeInRewards(address wallet) external onlyOwner {
require(isAddressExcluded[wallet], "Address is not excluded from rewards");
for (uint i = 0; i < excludedFromRewards.length; i++) {
if (excludedFromRewards[i] == wallet) {
isAddressExcluded[wallet] = false;
deleteExcluded(i);
break;
}
}
emit IncludeInRewards(wallet);
}
function isExcludedFromRewards(address wallet) external view returns (bool) {
return isAddressExcluded[wallet];
}
function getAllExcludedFromRewards() external view returns (address[] memory) {
return excludedFromRewards;
}
function getRewardsSupply() public view returns (uint256) {
return _totalSupply - getExcludedBalances();
}
}
文件 12 的 12:SafeMath.sol
pragma solidity ^0.8.4;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
{
"compilationTarget": {
"PeepsPay.sol": "PeepsPay"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newDevWallet","type":"address"}],"name":"DevWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"ExcludeFromRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newRewardsFee","type":"uint256"}],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"useGenericTransfer","type":"bool"}],"name":"GenericTransferChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"IncludeInFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"IncludeInRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newLaunchSellFee","type":"uint256"}],"name":"LaunchFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethToDevWallet","type":"uint256"}],"name":"OnSwapAndRedirectEthFees","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":"newRewardsTracker","type":"address"}],"name":"RewardsTrackerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"RouterUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndRedirectEthFeesUpdated","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":[{"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"excludeFromRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllExcludedFromRewards","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRewardsSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"includeInRewards","outputs":[],"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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isExcludedFromRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchSellFeeDeadline","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTxAmount","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":"prepareForLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"newDevWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDevFee","type":"uint256"},{"internalType":"uint256","name":"newRewardsFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLaunchSellFee","type":"uint256"}],"name":"setLaunchSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxTx","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokens","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newRewardsTracker","type":"address"}],"name":"setRewardsTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndRedirectEthFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"genericTransfer","type":"bool"}],"name":"setUseGenericTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndRedirectEthFeesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"useGenericTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]