编译器
0.8.19+commit.7dd6d404
文件 1 的 14: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 functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, 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) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
if (returndata.length > 0) {
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
文件 2 的 14:BaseFlection.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "./DividendTracker.sol";
contract BaseFlection is ERC20, Ownable {
IUniswapV2Router02 public immutable uniswapV2Router;
IDividendTracker public immutable dividendTracker;
address public immutable uniswapV2Pair;
address public marketingWallet;
bool private swapping;
bool public limitsInEffect = true;
bool public tradingActive = true;
bool public swapEnabled = true;
uint8 public buyTotalFees;
uint8 public buyMarketingFee;
uint8 public buyReflectionsFee;
uint8 public sellTotalFees;
uint8 public sellMarketingFee;
uint8 public sellReflectionsFee;
uint32 public gasForProcessingDividends;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public swapMaxTokensAmount;
uint256 public maxWalletAmount;
uint256 public tokensForMarketing;
uint256 public tokensForReflections;
mapping (address => bool) public isExcludedFromFees;
mapping (address => bool) public isExcludedMaxTransaction;
mapping (address => bool) public automatedMarketMakerPairs;
struct DeployArgs {
string name;
string symbol;
string dtName;
string dtSymbol;
uint256 dtClaimWait;
address marketingWallet;
address uniswapV2Router;
uint8 buyMarketingFee;
uint8 buyReflectionsFee;
uint8 sellMarketingFee;
uint8 sellReflectionsFee;
uint32 gasForProcessingDividends;
uint256 maxWalletAmount;
uint256 maxTransactionAmount;
uint256 swapTokensAtAmount;
uint256 swapMaxTokensAmount;
uint256 totalSupply;
}
constructor(
DeployArgs memory args
)
ERC20(args.name, args.symbol)
{
uniswapV2Router = IUniswapV2Router02(args.uniswapV2Router);
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
setAutomatedMarketMakerPair(uniswapV2Pair, true);
dividendTracker = new DividendTracker(args.dtName, args.dtSymbol);
setDividendClaimWait(args.dtClaimWait);
setExcludedFromDividends(owner(), true);
setExcludedFromDividends(uniswapV2Pair, true);
setGasForProcessingDividends(args.gasForProcessingDividends);
setMarketingWallet(args.marketingWallet);
setExcludeFromFees(args.marketingWallet, true);
setExcludeFromFees(address(this), true);
setExcludeFromFees(address(0xdead), true);
setExcludeFromFees(owner(), true);
setExcludeFromMaxTransaction(args.uniswapV2Router, true);
setExcludeFromMaxTransaction(uniswapV2Pair, true);
setExcludeFromMaxTransaction(args.marketingWallet, true);
setExcludeFromMaxTransaction(address(this), true);
setExcludeFromMaxTransaction(address(0xdead), true);
setExcludeFromMaxTransaction(owner(), true);
_mint(owner(), args.totalSupply);
setMaxWalletAmount(args.maxWalletAmount);
setMaxTransactionAmount(args.maxTransactionAmount);
setSwapTokensAtAmount(args.swapTokensAtAmount, args.swapMaxTokensAmount);
setBuyFees(args.buyMarketingFee, args.buyReflectionsFee);
setSellFees(args.sellMarketingFee, args.sellReflectionsFee);
}
function enableTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
emit TradingEnabled();
}
function removeLimits() external onlyOwner {
limitsInEffect = false;
emit LimitsRemoved();
}
function setDividendClaimWait(uint256 value) public onlyOwner {
dividendTracker.setDividendClaimWait(value);
emit SetDividendClaimWait(value);
}
function setExcludedFromDividends(address account, bool state) public onlyOwner {
dividendTracker.setExcludedFromDividends(account, state);
emit SetExcludeFromDividends(account, state);
}
function setSwapTokensAtAmount(uint256 value, uint256 maxValue) public onlyOwner {
_checkAlreadySet(swapTokensAtAmount == value);
require(value >= totalSupply() / 100000, "setSwapTokensAtAmount 1");
require(value <= totalSupply() / 100, "setSwapTokensAtAmount 2");
swapTokensAtAmount = value;
require(value <= maxValue, "setSwapTokensAtAmount 3");
swapMaxTokensAmount = maxValue;
emit SetSwapTokensAtAmount(value);
}
function setGasForProcessingDividends(uint32 value) public onlyOwner {
_checkAlreadySet(gasForProcessingDividends == value);
require(value >= 100_000, "setGasForProcessingDividends 1");
require(value <= 1_500_000, "setGasForProcessingDividends 2");
gasForProcessingDividends = value;
emit SetGasForProcessingDividends(value);
}
function setMaxTransactionAmount(uint256 value) public onlyOwner {
_checkAlreadySet(maxTransactionAmount == value);
require(value >= totalSupply() / 1000, "setMaxTransactionAmount");
maxTransactionAmount = value;
emit SetMaxTransactionAmount(value);
}
function setMaxWalletAmount(uint256 value) public onlyOwner {
_checkAlreadySet(maxWalletAmount == value);
require(value >= totalSupply() * 5 / 1000, "setMaxWalletAmount");
maxWalletAmount = value;
emit SetMaxWalletAmount(value);
}
function setExcludeFromMaxTransaction(address account, bool state) public onlyOwner {
_checkAlreadySet(isExcludedMaxTransaction[account] == state);
isExcludedMaxTransaction[account] = state;
emit SetExcludeFromMaxTransaction(state);
}
function setSwapEnabled(bool state) public onlyOwner(){
_checkAlreadySet(swapEnabled == state);
swapEnabled = state;
emit SetSwapEnabled(state);
}
function setBuyFees(uint8 marketingFee_, uint8 reflectionsFee_) public onlyOwner {
buyMarketingFee = marketingFee_;
buyReflectionsFee = reflectionsFee_;
buyTotalFees = buyMarketingFee + buyReflectionsFee;
require(buyTotalFees <= 50, "setBuyFees");
emit SetBuyFees(buyMarketingFee, buyReflectionsFee);
}
function setSellFees(uint8 marketingFee_, uint8 reflectionsFee_) public onlyOwner {
sellMarketingFee = marketingFee_;
sellReflectionsFee = reflectionsFee_;
sellTotalFees = sellMarketingFee + sellReflectionsFee;
require(sellTotalFees <= 99, "setSellFees");
emit SetSellFees(buyMarketingFee, buyReflectionsFee);
}
function setExcludeFromFees(address account, bool state) public onlyOwner {
_checkAlreadySet(isExcludedFromFees[account] == state);
isExcludedFromFees[account] = state;
emit SetExcludeFromFees(account, state);
}
function setAutomatedMarketMakerPair(address account, bool state) public onlyOwner {
if (account == uniswapV2Pair && !state) {
require(state, "setAutomatedMarketMakerPair");
}
_checkAlreadySet(automatedMarketMakerPairs[account] == state);
automatedMarketMakerPairs[account] = state;
emit SetAutomatedMarketMakerPair(account, state);
}
function setMarketingWallet(address account) public onlyOwner {
_checkAlreadySet(marketingWallet == account);
marketingWallet = account;
emit SetMarketingWallet(account);
}
function _checkAlreadySet(bool result) internal pure {
require(!result, "Already set");
}
function _transfer(address from, address to, uint256 amount) internal override {
if (amount == 0) return super._transfer(from, to, 0);
if (limitsInEffect){
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
){
if (!tradingActive){
require(isExcludedFromFees[from] || isExcludedFromFees[to], "Trading is not active");
}
if (automatedMarketMakerPairs[from] && !isExcludedMaxTransaction[to]) {
require(amount <= maxTransactionAmount, "Buy amount exceeded");
require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
}
else if (automatedMarketMakerPairs[to] && !isExcludedMaxTransaction[from]) {
require(amount <= maxTransactionAmount, "Sell amount exceeded");
}
else if (!isExcludedMaxTransaction[to]){
require(amount + balanceOf(to) <= maxWalletAmount, "Max wallet exceeded");
}
}
}
if (balanceOf(address(this)) >= swapTokensAtAmount &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!isExcludedFromFees[from] &&
!isExcludedFromFees[to]
) {
swapping = true;
_swapBack();
swapping = false;
}
uint256 fees = 0;
bool takeFee = !swapping;
if (isExcludedFromFees[from] || isExcludedFromFees[to]) takeFee = false;
if (takeFee){
if (sellTotalFees != 0 &&
automatedMarketMakerPairs[to]
) {
fees = amount * sellTotalFees / 100;
tokensForReflections += fees * sellReflectionsFee / sellTotalFees;
tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
}
else
if (buyTotalFees != 0 &&
automatedMarketMakerPairs[from]
) {
fees = amount * buyTotalFees / 100;
tokensForReflections += fees * buyReflectionsFee / buyTotalFees;
tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
}
if (fees > 0) super._transfer(from, address(this), fees);
amount -= fees;
}
super._transfer(from, to, amount);
dividendTracker.setBalance(payable(from), balanceOf(from));
dividendTracker.setBalance(payable(to), balanceOf(to));
if (!swapping) {
(uint256 iterations, uint256 claims, uint256 lastProcessedIndex) = dividendTracker.process(gasForProcessingDividends);
emit ProcessedDividends(iterations, claims, lastProcessedIndex);
}
}
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 _swapBack() private {
uint256 amountToSwapForETH = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForReflections + tokensForMarketing;
if (amountToSwapForETH == 0 || totalTokensToSwap == 0) return;
if (amountToSwapForETH > swapMaxTokensAmount) amountToSwapForETH = swapMaxTokensAmount;
uint256 initialETHBalance = address(this).balance;
_swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance - initialETHBalance;
uint256 ethForReflections = ethBalance * tokensForReflections / totalTokensToSwap;
tokensForMarketing = 0;
tokensForReflections = 0;
bool success;
(success,) = address(dividendTracker).call{value: ethForReflections}("");
(success,) = marketingWallet.call{value: address(this).balance}("");
}
receive() external payable { }
event TradingEnabled();
event LimitsRemoved();
event SetMarketingWallet(address account);
event SetSwapTokensAtAmount(uint256 value);
event SetMaxTransactionAmount(uint256 value);
event SetMaxWalletAmount(uint256 value);
event SetExcludeFromMaxTransaction(bool state);
event SetSwapEnabled(bool state);
event SetBuyFees(uint8 buyMarketingFee, uint8 buyReflectionsFee);
event SetSellFees(uint8 buyMarketingFee, uint8 buyReflectionsFee);
event SetExcludeFromFees(address account, bool state);
event SetAutomatedMarketMakerPair(address account, bool state);
event SetGasForProcessingDividends(uint256 value);
event SetExcludeFromDividends(address account, bool state);
event SetDividendClaimWait(uint256 value);
event ProcessedDividends(uint256 iterations, uint256 claims, uint256 lastProcessedIndex);
}
文件 3 的 14: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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
文件 4 的 14:DividendToken.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract DividendToken is ERC20 {
event DividendsDistributed(
address indexed from,
uint256 weiAmount,
uint256 magnifiedDividendPerShare
);
event DividendWithdrawn(
address indexed to,
uint256 weiAmount
);
event DividendReturn(
address indexed to,
uint256 weiAmount
);
uint256 constant internal magnitude = 2**128;
uint256 public magnifiedDividendPerShare;
mapping(address => int256) public magnifiedDividendCorrections;
mapping(address => uint256) public withdrawnDividends;
mapping(address => bool) public excludedAccounts;
uint256 public totalDividendsDistributed;
constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {
}
receive() external payable {
distributeDividends();
}
function distributeDividends() public payable {
require(totalSupply() != 0);
if (msg.value != 0) {
magnifiedDividendPerShare += msg.value * magnitude / totalSupply();
emit DividendsDistributed(msg.sender, msg.value, magnifiedDividendPerShare);
totalDividendsDistributed += msg.value;
}
}
function returnDividends(uint256 amount) internal {
if (amount != 0) {
magnifiedDividendPerShare += amount * magnitude / totalSupply();
}
}
function isExcluded(address account) public view returns (bool) {
return excludedAccounts[account];
}
function _exclude(address account) internal {
if (!excludedAccounts[account]) excludedAccounts[account] = true;
}
function _include(address account) internal {
if (excludedAccounts[account]) excludedAccounts[account] = false;
}
function withdrawDividend() public {
_withdrawDividendOfUser(payable(msg.sender));
}
function _withdrawDividendOfUser(address payable account) internal returns (uint256) {
uint256 _withdrawableDividend = withdrawableDividendOf(account);
if (_withdrawableDividend != 0) {
withdrawnDividends[account] += _withdrawableDividend;
if (!isExcluded(account)) {
emit DividendWithdrawn(account, _withdrawableDividend);
(bool success,) = account.call{ value: _withdrawableDividend, gas: 3000 }("");
if (!success) {
withdrawnDividends[account] -= _withdrawableDividend;
return 0;
}
return _withdrawableDividend;
} else {
returnDividends(_withdrawableDividend);
emit DividendReturn(account, _withdrawableDividend);
}
}
return 0;
}
function dividendOf(address account) public view returns(uint256) {
return withdrawableDividendOf(account);
}
function withdrawableDividendOf(address account) public view returns(uint256) {
return accumulativeDividendOf(account) - withdrawnDividends[account];
}
function withdrawnDividendOf(address account) public view returns(uint256) {
return withdrawnDividends[account];
}
function accumulativeDividendOf(address account) public view returns(uint256) {
return uint256(int256(magnifiedDividendPerShare * balanceOf(account)) + magnifiedDividendCorrections[account]) / magnitude;
}
function _transfer(address from, address to, uint256 value) internal virtual override {
require(false);
int256 _magCorrection = int256(magnifiedDividendPerShare * value);
magnifiedDividendCorrections[from] += _magCorrection;
magnifiedDividendCorrections[to] -= _magCorrection;
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrections[account] -= int256(magnifiedDividendPerShare * value);
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrections[account] += int256(magnifiedDividendPerShare * value);
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) {
uint256 mintAmount = newBalance - currentBalance;
_mint(account, mintAmount);
} else if (newBalance < currentBalance) {
uint256 burnAmount = currentBalance - newBalance;
_burn(account, burnAmount);
}
}
}
文件 5 的 14:DividendTracker.sol
pragma solidity ^0.8.19;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "./DividendToken.sol";
interface IDividendTracker {
function setExcludedFromDividends(address account, bool state) external;
function setBalance(address payable account, uint256 amount) external;
function setDividendClaimWait(uint256 value) external;
function process(uint256 gas) external returns (uint256, uint256, uint256);
}
contract DividendTracker is IDividendTracker, DividendToken {
using SafeERC20 for IERC20;
IERC20 public immutable mainToken;
struct Map {
address[] keys;
mapping(address => uint) indexOf;
mapping(address => bool) inserted;
}
Map private tokenHoldersMap;
uint256 public lastProcessedIndex;
uint256 public claimWait;
mapping (address => bool) public excludedFromDividends;
mapping (address => uint256) public lastClaimTimes;
constructor(
string memory dtName_,
string memory dtSymbol_
)
DividendToken(dtName_, dtSymbol_)
{
mainToken = IERC20(msg.sender);
}
modifier onlyMainToken() {
require(_msgSender() == address(mainToken), "Not allowed");
_;
}
function setDividendClaimWait(uint256 value) public onlyMainToken {
_checkAlreadySet(claimWait == value);
claimWait = value;
}
function setExcludedFromDividends(address account, bool state) public onlyMainToken {
_checkAlreadySet(excludedFromDividends[account] == state);
excludedFromDividends[account] = state;
if (!state) {
_processAccount(payable(account));
_exclude(account);
_setBalance(account, 0);
_tokenHoldersRemove(account);
}
}
function setBalance(address payable account, uint256 value) external onlyMainToken {
if (excludedFromDividends[account]) return;
_tokenHoldersAdd(account);
_setBalance(account, value);
_processAccount(account);
_include(account);
}
function getAccount(address account_) public view returns (
address account,
int256 index,
int256 iterationsUntilProcessed,
uint256 withdrawableDividends,
uint256 totalDividends,
uint256 lastClaimTime,
uint256 nextClaimTime,
uint256 secondsUntilAutoClaimAvailable
) {
account = account_;
index = tokenHoldersGetIndexOfKey(account);
iterationsUntilProcessed = -1;
if (index >= 0) {
if (uint256(index) > lastProcessedIndex) {
iterationsUntilProcessed = index - int256(lastProcessedIndex);
} else {
uint256 processesUntilEndOfArray = tokenHoldersSize() > lastProcessedIndex ? tokenHoldersSize() - lastProcessedIndex : 0;
iterationsUntilProcessed = index + int256(processesUntilEndOfArray);
}
}
withdrawableDividends = withdrawableDividendOf(account);
totalDividends = accumulativeDividendOf(account);
lastClaimTime = lastClaimTimes[account];
nextClaimTime = lastClaimTime > 0 ? lastClaimTime + claimWait : 0;
secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp ? nextClaimTime - block.timestamp : 0;
}
function getAccountAtIndex(uint256 index) public view returns (address, int256, int256, uint256, uint256, uint256, uint256, uint256) {
if (index >= tokenHoldersSize()) {
return (0x0000000000000000000000000000000000000000, -1, -1, 0, 0, 0, 0, 0);
}
address account = tokenHoldersGetKeyAtIndex(index);
return getAccount(account);
}
function process(uint256 gas) public returns (uint256, uint256, uint256) {
uint256 numberOfTokenHolders = tokenHoldersSize();
if (numberOfTokenHolders == 0) {
return (0, 0, lastProcessedIndex);
}
uint256 _lastProcessedIndex = lastProcessedIndex;
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
uint256 claims = 0;
while (gasUsed < gas && iterations < numberOfTokenHolders) {
_lastProcessedIndex++;
if (_lastProcessedIndex >= tokenHoldersSize()) {
_lastProcessedIndex = 0;
}
address account = tokenHoldersMap.keys[_lastProcessedIndex];
bool canClaim = block.timestamp - lastClaimTimes[account] >= claimWait;
if (canClaim && _processAccount(payable(account))) claims++;
iterations++;
uint256 newGasLeft = gasleft();
if (gasLeft > newGasLeft) {
uint256 iterationGas = gasLeft - newGasLeft;
gasUsed += iterationGas;
}
gasLeft = newGasLeft;
}
lastProcessedIndex = _lastProcessedIndex;
return (iterations, claims, lastProcessedIndex);
}
function _processAccount(address payable account) internal returns (bool) {
uint256 amount = _withdrawDividendOfUser(account);
if (amount != 0) {
lastClaimTimes[account] = block.timestamp;
return true;
}
return false;
}
function _checkAlreadySet(bool result) internal pure {
require(!result, "Already set");
}
function tokenHoldersGetIndexOfKey(address key) public view returns (int) {
if (!tokenHoldersMap.inserted[key]) {
return -1;
}
return int(tokenHoldersMap.indexOf[key]);
}
function tokenHoldersGetKeyAtIndex(uint index) public view returns (address) {
return tokenHoldersMap.keys[index];
}
function tokenHoldersSize() public view returns (uint) {
return tokenHoldersMap.keys.length;
}
function _tokenHoldersAdd(address key) internal {
Map storage map = tokenHoldersMap;
if (!map.inserted[key]) {
map.inserted[key] = true;
map.indexOf[key] = map.keys.length;
map.keys.push(key);
}
}
function _tokenHoldersRemove(address key) internal {
Map storage map = tokenHoldersMap;
if (!map.inserted[key]) {
return;
}
delete map.inserted[key];
uint index = map.indexOf[key];
uint lastIndex = map.keys.length - 1;
address lastKey = map.keys[lastIndex];
map.indexOf[lastKey] = index;
delete map.indexOf[key];
map.keys[index] = lastKey;
map.keys.pop();
}
}
文件 6 的 14:ERC20.sol
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}
文件 7 的 14: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);
}
文件 8 的 14:IERC20Metadata.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
文件 9 的 14:IERC20Permit.sol
pragma solidity ^0.8.0;
interface IERC20Permit {
function permit(
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) external;
function nonces(address owner) external view returns (uint256);
function DOMAIN_SEPARATOR() external view returns (bytes32);
}
文件 10 的 14:IUniswapV2Factory.sol
pragma solidity >=0.5.0;
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;
}
文件 11 的 14:IUniswapV2Router01.sol
pragma solidity >=0.6.2;
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);
}
文件 12 的 14:IUniswapV2Router02.sol
pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
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;
}
文件 13 的 14: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);
}
}
文件 14 的 14:SafeERC20.sol
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
function safeApprove(IERC20 token, address spender, uint256 value) internal {
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value));
}
}
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value);
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0));
_callOptionalReturn(token, approvalCall);
}
}
function safePermit(
IERC20Permit token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
uint256 nonceBefore = token.nonces(owner);
token.permit(owner, spender, value, deadline, v, r, s);
uint256 nonceAfter = token.nonces(owner);
require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed");
}
function _callOptionalReturn(IERC20 token, bytes memory data) private {
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
(bool success, bytes memory returndata) = address(token).call(data);
return
success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token));
}
}
{
"compilationTarget": {
"contracts/BaseFlection.sol": "BaseFlection"
},
"evmVersion": "paris",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 5
},
"remappings": []
}
[{"inputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"dtName","type":"string"},{"internalType":"string","name":"dtSymbol","type":"string"},{"internalType":"uint256","name":"dtClaimWait","type":"uint256"},{"internalType":"address","name":"marketingWallet","type":"address"},{"internalType":"address","name":"uniswapV2Router","type":"address"},{"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"internalType":"uint8","name":"buyReflectionsFee","type":"uint8"},{"internalType":"uint8","name":"sellMarketingFee","type":"uint8"},{"internalType":"uint8","name":"sellReflectionsFee","type":"uint8"},{"internalType":"uint32","name":"gasForProcessingDividends","type":"uint32"},{"internalType":"uint256","name":"maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"maxTransactionAmount","type":"uint256"},{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"},{"internalType":"uint256","name":"swapMaxTokensAmount","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"internalType":"struct BaseFlection.DeployArgs","name":"args","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":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"}],"name":"ProcessedDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyReflectionsFee","type":"uint8"}],"name":"SetBuyFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetDividendClaimWait","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetExcludeFromMaxTransaction","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetGasForProcessingDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"SetMarketingWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxTransactionAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"buyMarketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyReflectionsFee","type":"uint8"}],"name":"SetSellFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"state","type":"bool"}],"name":"SetSwapEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"SetSwapTokensAtAmount","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyReflectionsFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"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":"dividendTracker","outputs":[{"internalType":"contract IDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessingDividends","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellReflectionsFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingFee_","type":"uint8"},{"internalType":"uint8","name":"reflectionsFee_","type":"uint8"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setDividendClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setExcludedFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"value","type":"uint32"}],"name":"setGasForProcessingDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingFee_","type":"uint8"},{"internalType":"uint8","name":"reflectionsFee_","type":"uint8"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"maxValue","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMaxTokensAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]