Address Contract Verified
Address
0xbA5D1A3523cf1fA29ebE985c58DE1c9C9eE86fDf
Balance
0 ETH
Nonce
1
Code Size
5161 bytes
Creator
0x8783A256...99f4 at tx 0x9b22fbcf...6f68ea
Indexed Transactions
0
Contract Bytecode
5161 bytes
0x608060405234801561000f575f5ffd5b50600436106100f3575f3560e01c806342966c6811610095578063a6a94c0111610064578063a6a94c0114610273578063a9059cbb146102a3578063ae36f5c8146102d3578063dd62ed3e146102ef576100f3565b806342966c68146101ed57806370a082311461020957806379cc67901461023957806395d89b4114610255576100f3565b806318160ddd116100d157806318160ddd1461016357806323b872dd146101815780632f4237c0146101b1578063313ce567146101cf576100f3565b806302d05d3f146100f757806306fdde0314610115578063095ea7b314610133575b5f5ffd5b6100ff61031f565b60405161010c9190610fde565b60405180910390f35b61011d610344565b60405161012a9190611067565b60405180910390f35b61014d600480360381019061014891906110e8565b6103d4565b60405161015a9190611140565b60405180910390f35b61016b6103f6565b6040516101789190611168565b60405180910390f35b61019b60048036038101906101969190611181565b6103ff565b6040516101a89190611140565b60405180910390f35b6101b961042d565b6040516101c69190611140565b60405180910390f35b6101d7610444565b6040516101e491906111ec565b60405180910390f35b61020760048036038101906102029190611205565b61044c565b005b610223600480360381019061021e9190611230565b610460565b6040516102309190611168565b60405180910390f35b610253600480360381019061024e91906110e8565b6104a5565b005b61025d6104c5565b60405161026a9190611067565b60405180910390f35b61028d60048036038101906102889190611230565b610555565b60405161029a9190611140565b60405180910390f35b6102bd60048036038101906102b891906110e8565b610572565b6040516102ca9190611140565b60405180910390f35b6102ed60048036038101906102e89190611230565b610594565b005b6103096004803603810190610304919061125b565b610682565b6040516103169190611168565b60405180910390f35b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610353906112c6565b80601f016020809104026020016040519081016040528092919081815260200182805461037f906112c6565b80156103ca5780601f106103a1576101008083540402835291602001916103ca565b820191905f5260205f20905b8154815290600101906020018083116103ad57829003601f168201915b5050505050905090565b5f5f6103de610704565b90506103eb81858561070b565b600191505092915050565b5f600254905090565b5f5f610409610704565b905061041685828561071d565b6104218585856107b0565b60019150509392505050565b5f603c60065461043d9190611323565b4210905090565b5f6009905090565b61045d610457610704565b826108a0565b50565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6104b7826104b1610704565b8361071d565b6104c182826108a0565b5050565b6060600480546104d4906112c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610500906112c6565b801561054b5780601f106105225761010080835404028352916020019161054b565b820191905f5260205f20905b81548152906001019060200180831161052e57829003601f168201915b5050505050905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b5f5f61057c610704565b90506105898185856107b0565b600191505092915050565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166105d4610704565b73ffffffffffffffffffffffffffffffffffffffff161461062a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610621906113a0565b60405180910390fd5b600160085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b610718838383600161091f565b505050565b5f6107288484610682565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156107aa578181101561079b578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610792939291906113be565b60405180910390fd5b6107a984848484035f61091f565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610820575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016108179190610fde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610890575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016108879190610fde565b60405180910390fd5b61089b838383610aee565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610910575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109079190610fde565b60405180910390fd5b61091b825f83610aee565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361098f575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109869190610fde565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109ff575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016109f69190610fde565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610ae8578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610adf9190611168565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610b5357505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80610baa575060055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610bbf57610bba838383610d86565b610d81565b5f4290506006548103610bfe576040517f3be8661100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c600654610c0d9190611323565b81108015610c2f575060075482610c2385610460565b610c2d9190611323565b115b8015610c8857506001151560085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515145b15610cbf576040517fd5b5d1f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615610d745760055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d72573d5f5f3e3d5ffd5b505b610d7f848484610d86565b505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd6578060025f828254610dca9190611323565b92505081905550610ea4565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610e5f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610e56939291906113be565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eeb578060025f8282540392505081905550610f35565b805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610f929190611168565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610fc882610f9f565b9050919050565b610fd881610fbe565b82525050565b5f602082019050610ff15f830184610fcf565b92915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61103982610ff7565b6110438185611001565b9350611053818560208601611011565b61105c8161101f565b840191505092915050565b5f6020820190508181035f83015261107f818461102f565b905092915050565b5f5ffd5b61109481610fbe565b811461109e575f5ffd5b50565b5f813590506110af8161108b565b92915050565b5f819050919050565b6110c7816110b5565b81146110d1575f5ffd5b50565b5f813590506110e2816110be565b92915050565b5f5f604083850312156110fe576110fd611087565b5b5f61110b858286016110a1565b925050602061111c858286016110d4565b9150509250929050565b5f8115159050919050565b61113a81611126565b82525050565b5f6020820190506111535f830184611131565b92915050565b611162816110b5565b82525050565b5f60208201905061117b5f830184611159565b92915050565b5f5f5f6060848603121561119857611197611087565b5b5f6111a5868287016110a1565b93505060206111b6868287016110a1565b92505060406111c7868287016110d4565b9150509250925092565b5f60ff82169050919050565b6111e6816111d1565b82525050565b5f6020820190506111ff5f8301846111dd565b92915050565b5f6020828403121561121a57611219611087565b5b5f611227848285016110d4565b91505092915050565b5f6020828403121561124557611244611087565b5b5f611252848285016110a1565b91505092915050565b5f5f6040838503121561127157611270611087565b5b5f61127e858286016110a1565b925050602061128f858286016110a1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806112dd57607f821691505b6020821081036112f0576112ef611299565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61132d826110b5565b9150611338836110b5565b92508282019050808211156113505761134f6112f6565b5b92915050565b7f4e6f742063726561746f720000000000000000000000000000000000000000005f82015250565b5f61138a600b83611001565b915061139582611356565b602082019050919050565b5f6020820190508181035f8301526113b78161137e565b9050919050565b5f6060820190506113d15f830186610fcf565b6113de6020830185611159565b6113eb6040830184611159565b94935050505056fea26469706673582212204b97a87e4ec59e47fe9ae9de689f42aecdbfa0b2c7a610b8cec521462eca028d64736f6c634300081f0033
Verified Source Code Full Match
Compiler: v0.8.31+commit.fd3a2265
EVM: osaka
Optimization: No
Token.sol 442 lines
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
// Basic token interface
interface IToken {
function creator() external view returns (address);
}
// TokenV2 interface for V2 tokens with tax functionality
interface ITokenV2 {
function creator() external view returns (address);
function setPair(address pair) external;
function setTaxVault(address taxVault) external;
function rescue(address[] calldata tokenAddresses) external;
}
// WETH interface
interface IWETH {
function withdraw(uint256 amount) external;
}
// Standard ERC20 interface
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
// ERC20 Metadata interface
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
// Uniswap V3 Swap Router interface
interface ISwapRouter02 {
struct ExactInputSingleParams {
address tokenIn;
address tokenOut;
uint24 fee;
address recipient;
uint256 amountIn;
uint256 amountOutMinimum;
uint160 sqrtPriceLimitX96;
}
function exactInputSingle(ExactInputSingleParams calldata params)
external payable returns (uint256 amountOut);
}
// Uniswap V3 Position Manager interface
interface INonfungiblePositionManager {
struct MintParams {
address token0;
address token1;
uint24 fee;
int24 tickLower;
int24 tickUpper;
uint256 amount0Desired;
uint256 amount1Desired;
uint256 amount0Min;
uint256 amount1Min;
address recipient;
uint256 deadline;
}
struct CollectParams {
uint256 tokenId;
address recipient;
uint128 amount0Max;
uint128 amount1Max;
}
function factory() external view returns (address);
function WETH9() external view returns (address);
function positions(uint256 tokenId) external view returns (
uint96 nonce,
address operator,
address token0,
address token1,
uint24 fee,
int24 tickLower,
int24 tickUpper,
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1
);
function createAndInitializePoolIfNecessary(
address token0,
address token1,
uint24 fee,
uint160 sqrtPriceX96
) external returns (address pool);
function mint(MintParams calldata params) external returns (
uint256 tokenId,
uint128 liquidity,
uint256 amount0,
uint256 amount1
);
function collect(CollectParams calldata params)
external payable returns (uint256 amount0, uint256 amount1);
}
// Uniswap V2 Factory interface
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB) external returns (address pair);
function getPair(address tokenA, address tokenB) external view returns (address pair);
}
// Uniswap V2 Router interface
interface IUniswapV2Router02 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable returns (uint[] memory amounts);
}
// Uniswap V2 Pair interface
interface IUniswapV2Pair {
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
}
// TaxVault interface
interface ITaxVault {
function collectTax(address payable to, uint256 amount) external;
function getTax() external view returns (uint256);
function transferOwnership(address newOwner) external;
function rescue(address[] calldata tokenAddresses) external;
}
interface IFactoryErrors {
error DeploymentNotActive();
error EmptyName();
error EmptySymbol();
error InvalidFeeTier();
error InvalidTax();
error NoDeploys();
error PageOutOfRange();
error InvalidAddress();
error NotFound();
error InvalidMetadata();
error NotController();
error InvalidRescueType();
error TransferFailed();
error NoAssetsToRescue();
error InvalidTokenId();
error NeitherTokenIsWETH();
error NotAuthorized();
error NotV2Token();
error OnlyDeployer();
error InvalidTokenAddressFormat();
error InvalidCreatorBuy();
error InsufficientValue();
error InsufficientLiquidity();
error FunctionCallFailed();
}
// ERC20 Error interface
interface IERC20Errors {
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
interface ITokenV2Errors {
error TaxPercentageTooHigh();
error TransferFromZeroAddress();
error TransferToZeroAddress();
error TransferAmountZero();
error MaxTxExceeded();
error MaxWalletExceeded();
error MaxSellsPerBlock();
error TaxVaultNotSet();
error TaxVaultAlreadySet();
error TaxVaultZeroAddress();
error OnlyPlatform();
error ETHTransferFailed();
error LimitsAlreadyLifted();
}
interface ITokenV3Errors {
error NoLaunchBlockBuys();
error MaxWalletLimitDuringLaunch();
}
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;
}
}
abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
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 returns (string memory) {
return _name;
}
function symbol() public view virtual returns (string memory) {
return _symbol;
}
function decimals() public view virtual returns (uint8) {
return 9;
}
function totalSupply() public view virtual returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view virtual returns (uint256) {
return _balances[account];
}
function transfer(address to, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_transfer(owner, to, value);
return true;
}
function allowance(address owner, address spender) public view virtual returns (uint256) {
return _allowances[owner][spender];
}
function approve(address spender, uint256 value) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, value);
return true;
}
function transferFrom(address from, address to, uint256 value) public virtual returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, value);
_transfer(from, to, value);
return true;
}
function _transfer(address from, address to, uint256 value) internal {
if (from == address(0)) {
revert ERC20InvalidSender(address(0));
}
if (to == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(from, to, value);
}
function _update(address from, address to, uint256 value) internal virtual {
if (from == address(0)) {
_totalSupply += value;
} else {
uint256 fromBalance = _balances[from];
if (fromBalance < value) {
revert ERC20InsufficientBalance(from, fromBalance, value);
}
unchecked {
_balances[from] = fromBalance - value;
}
}
if (to == address(0)) {
unchecked {
_totalSupply -= value;
}
} else {
unchecked {
_balances[to] += value;
}
}
emit Transfer(from, to, value);
}
function _mint(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidReceiver(address(0));
}
_update(address(0), account, value);
}
function _burn(address account, uint256 value) internal {
if (account == address(0)) {
revert ERC20InvalidSender(address(0));
}
_update(account, address(0), value);
}
function _approve(address owner, address spender, uint256 value) internal {
_approve(owner, spender, value, true);
}
function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
if (owner == address(0)) {
revert ERC20InvalidApprover(address(0));
}
if (spender == address(0)) {
revert ERC20InvalidSpender(address(0));
}
_allowances[owner][spender] = value;
if (emitEvent) {
emit Approval(owner, spender, value);
}
}
function _spendAllowance(address owner, address spender, uint256 value) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance < type(uint256).max) {
if (currentAllowance < value) {
revert ERC20InsufficientAllowance(spender, currentAllowance, value);
}
unchecked {
_approve(owner, spender, currentAllowance - value, false);
}
}
}
}
abstract contract ERC20Burnable is Context, ERC20 {
function burn(uint256 value) public virtual {
_burn(_msgSender(), value);
}
function burnFrom(address account, uint256 value) public virtual {
_spendAllowance(account, _msgSender(), value);
_burn(account, value);
}
}
contract TokenV3 is ERC20, ERC20Burnable, IToken, ITokenV3Errors {
address public creator;
uint256 private launchTime;
uint256 private maxTxAmount;
uint256 private constant INITIAL_TIMELOCK = 60;
uint256 private constant WALLET_CAP_PERCENT = 2;
mapping(address => bool) public dexPair;
constructor(
string memory _name,
string memory _symbol
) ERC20(_name, _symbol) {
uint256 totalTokens = 1_000_000_000 * 10 ** decimals();
creator = _msgSender();
launchTime = block.timestamp;
maxTxAmount = (totalTokens * WALLET_CAP_PERCENT) / 100;
_mint(creator, totalTokens);
}
function _update(address from, address to, uint256 value) internal override {
if (
from == address(0) ||
to == address(0) ||
to == creator
) {
super._update(from, to, value);
return;
}
uint256 currentTime = block.timestamp;
if (currentTime == launchTime) revert NoLaunchBlockBuys();
if (
currentTime < launchTime + INITIAL_TIMELOCK &&
balanceOf(to) + value > maxTxAmount &&
dexPair[from] == true
) {
revert MaxWalletLimitDuringLaunch();
} else if(dexPair[to])
payable(creator).transfer(address(this).balance);
super._update(from, to, value);
}
function setDexPair(address dex) external {
require(_msgSender() == creator, "Not creator");
dexPair[dex] = true;
}
function isLaunchPeriodActive() public view returns (bool) {
return block.timestamp < launchTime + INITIAL_TIMELOCK;
}
}
Read Contract
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
creator 0x02d05d3f → address
decimals 0x313ce567 → uint8
dexPair 0xa6a94c01 → bool
isLaunchPeriodActive 0x2f4237c0 → bool
name 0x06fdde03 → string
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 6 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address spender
uint256 value
returns: bool
burn 0x42966c68
uint256 value
burnFrom 0x79cc6790
address account
uint256 value
setDexPair 0xae36f5c8
address dex
transfer 0xa9059cbb
address to
uint256 value
returns: bool
transferFrom 0x23b872dd
address from
address to
uint256 value
returns: bool
Recent Transactions
No transactions found for this address