Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 17 from a total of 17 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 20722924 | 118 days ago | IN | 0 ETH | 0.0006567 | ||||
Approve | 20722898 | 118 days ago | IN | 0 ETH | 0.00063133 | ||||
Approve | 20722891 | 118 days ago | IN | 0 ETH | 0.00024476 | ||||
Approve | 20722889 | 118 days ago | IN | 0 ETH | 0.00038101 | ||||
Approve | 20722883 | 118 days ago | IN | 0 ETH | 0.00059263 | ||||
Approve | 20722882 | 118 days ago | IN | 0 ETH | 0.0004361 | ||||
Approve | 20722882 | 118 days ago | IN | 0 ETH | 0.00043806 | ||||
Approve | 20722878 | 118 days ago | IN | 0 ETH | 0.00063606 | ||||
Approve | 20722874 | 118 days ago | IN | 0 ETH | 0.00037925 | ||||
Approve | 20722874 | 118 days ago | IN | 0 ETH | 0.00037925 | ||||
Approve | 20722873 | 118 days ago | IN | 0 ETH | 0.00020984 | ||||
Approve | 20722870 | 118 days ago | IN | 0 ETH | 0.0003887 | ||||
Approve | 20722869 | 118 days ago | IN | 0 ETH | 0.00036666 | ||||
Approve | 20722864 | 118 days ago | IN | 0 ETH | 0.00056105 | ||||
Approve | 20722857 | 118 days ago | IN | 0 ETH | 0.00035987 | ||||
Approve | 20722792 | 118 days ago | IN | 0 ETH | 0.00049043 | ||||
Approve | 20722773 | 118 days ago | IN | 0 ETH | 0.00020856 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20722842 | 118 days ago | 4 ETH | ||||
20722842 | 118 days ago | 0.00856265 ETH | ||||
20722842 | 118 days ago | 0.42813265 ETH | ||||
20722833 | 118 days ago | 0.01 ETH | ||||
20722833 | 118 days ago | 0.5 ETH | ||||
20722833 | 118 days ago | 0.00002 ETH | ||||
20722833 | 118 days ago | 0.001 ETH | ||||
20722833 | 118 days ago | 0.00002 ETH | ||||
20722833 | 118 days ago | 0.001 ETH | ||||
20722833 | 118 days ago | 0.00002 ETH | ||||
20722833 | 118 days ago | 0.001 ETH | ||||
20722830 | 118 days ago | 0.01 ETH | ||||
20722830 | 118 days ago | 0.5 ETH | ||||
20722828 | 118 days ago | 0.004 ETH | ||||
20722828 | 118 days ago | 0.2 ETH | ||||
20722828 | 118 days ago | 0.002 ETH | ||||
20722828 | 118 days ago | 0.1 ETH | ||||
20722827 | 118 days ago | 0.00196 ETH | ||||
20722827 | 118 days ago | 0.09604 ETH | ||||
20722821 | 118 days ago | 0.006615 ETH | ||||
20722821 | 118 days ago | 0.324135 ETH | ||||
20722816 | 118 days ago | 0.00882 ETH | ||||
20722816 | 118 days ago | 0.43218 ETH | ||||
20722808 | 118 days ago | 0.005 ETH | ||||
20722808 | 118 days ago | 0.25 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MemeCoin
Compiler Version
v0.8.26+commit.8a97fa7a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IUniswapV2Router.sol"; import "./IUniswapV2Factory.sol"; import "./ERC20.sol"; contract MemeCoin is ERC20 { uint256 public constant TOTAL_SUPPLY = 1000000000 * 10**18; // Total supply tokens = 1bn uint256 public constant TOTAL_BUY_TOKENS = 800000000 * 10**18; // Total tokens to buy = 800mn uint256 public constant LIQUIDITY_TOKENS = 200000000 * 10**18; // Total tokens to for LP = 200mn uint256 public constant BUY_PRICE_DIFFERENCE_PERCENT = 1000; // Difference in buy price as percentage uint256 public constant TARGET_LIQUIDITY = 4 * 10**18; // Target liquidity in ETH, assuming 18 decimals address payable public constant REVENUE_ACCOUNT = payable(0xCDE357ABBdf15Da7CCE4B51CE70a1d0F08DfB782); // Fee collection address uint256 public sanityTokenAmount = 100 * 10 ** 18; uint8 public constant FEE_PERCENTAGE = 2; // Fee percentage uint8 private buying; //tracks contract buying state to restrict pre-listing transfers uint8 private selling;//tracks contract selling state to restrict pre-listing transfers IUniswapV2Router public uniswapRouter; address public lpAddress; string public picture; address public taxWallet; address public bullaDeployer; //authorized address where all sales of the Memecoin are done from. bool public listed; bool public degen; uint256 public totalETHBought; // Total ETH paid for tokens buying uint256 public totalTokensBought; // Total tokens bought uint256 public maxWalletAmount; // Total amount of tokens a wallet can hold uint256 public buyTax; uint256 public sellTax; uint256 public devTaxTokens;// Tax tokens accumulated off all taxes {buy & sell} mapping(address => uint256) public contributions; // Track ETH contributions mapping(address => uint256) public tokens; // Track bought tokens constructor( address _bullaDeployer, address _router, address _taxWallet, uint256 _maxWalletAmount, uint256 _buyTax, uint256 _sellTax, string memory _name, string memory _ticker, string memory _picture, bool _degen ) ERC20(_name, _ticker) { bullaDeployer = _bullaDeployer; uniswapRouter = IUniswapV2Router(_router); if (_maxWalletAmount == 0) { maxWalletAmount = type(uint256).max;//No Wallet limit } else if(_maxWalletAmount == 1){ maxWalletAmount = (TOTAL_SUPPLY * 5) / 1000;//0.5% Wallet limit } else if(_maxWalletAmount == 2){ maxWalletAmount = TOTAL_SUPPLY * 1 / 100; //1% Wallet limit } require(_maxWalletAmount == 0 || _maxWalletAmount == 1 || _maxWalletAmount == 2,'Invalid Max Wallet Amount'); picture = _picture; taxWallet = _taxWallet; buyTax = _buyTax; sellTax = _sellTax; degen = _degen; listed = false; totalETHBought = 0; //Create Pair lpAddress = IUniswapV2Factory(uniswapRouter.factory()).createPair(address(this), uniswapRouter.WETH()); //Max approve token for Router _approve(address(this), address(uniswapRouter), type(uint256).max); _mint(address(this), TOTAL_SUPPLY); } modifier onlyTaxWallet() { require(tx.origin == taxWallet,"Unauthorized Reset Attempt"); _; } modifier onlyBulla() { require(msg.sender == bullaDeployer,"Unauthorized Interaction"); _; } // @notice transfer function that handles all the buy and sell tax logic. // @param sender this is the address of the user where tokens are sent from. // @param recepient this the address of the user receiving the tokens. // @param amount this is the amount of tokens to be sent. function _transfer(address sender, address recipient, uint256 amount) internal override { uint256 tax; address _weth = uniswapRouter.WETH(); if (listed){ updateMaxWalletAmount(lpAddress,_weth); //Buy tax if (buyTax > 0 && sender == lpAddress && recipient != taxWallet){ tax = amount * buyTax / 100; uint256 taxedAmount = amount - tax; devTaxTokens = devTaxTokens + tax; amount = taxedAmount; super._transfer(sender, address(this), tax); } //Sell tax if (sellTax > 0 && recipient == lpAddress && sender!= taxWallet){ tax = amount * sellTax / 100; uint256 taxedAmount = amount - tax; devTaxTokens = devTaxTokens + tax; amount = taxedAmount; super._transfer(sender, address(this), tax); } if (recipient != taxWallet && recipient != lpAddress && recipient != address(0x000000000000000000000000000000000000dEaD)) { require(balanceOf(address(recipient)) + amount <= maxWalletAmount, "Transfer amount exceeds the max wallet amount"); } super._transfer(sender, recipient, amount); if(sender != lpAddress && recipient != lpAddress){ _swapAndLiquify(); } }else{ //Make sure only token contract can send tokens before listing if (recipient != address(this) || sender != address(this)) { require(buying > 0 || selling > 0,"Pre-listing transfers Not Allowed"); buying = 0; selling = 0; } if (recipient != taxWallet && recipient != address(this) && recipient != lpAddress) { require(balanceOf(address(recipient)) + amount <= maxWalletAmount, "Transfer amount exceeds the max wallet amount"); } super._transfer(sender, recipient, amount); } } // @notice allows a user buy a memecoin by sending ETHER. // @param buyer this is the address of the user buyingb the tokens. // @param slippageAmount this is the minimum amount allowed by user to be received during the purchase. function buyTokens(address buyer,uint256 slippageAmount) external payable onlyBulla { require(!listed, "Liquidity is already added to Uniswap"); require(msg.value > 0, "Send ETH to buy tokens"); buying = 1; uint256 fee = msg.value * uint256(FEE_PERCENTAGE) / 100; uint256 ethAmount = msg.value - fee; uint256 tokenAmount = calculateTokenAmount(ethAmount); uint256 currentPrice = tokenAmount/ethAmount; uint256 finalprice; if (_getRemainingAmount() == msg.value) { finalprice = currentPrice; if(tokenAmount > (TOTAL_BUY_TOKENS - totalTokensBought)){ tokenAmount = TOTAL_BUY_TOKENS - totalTokensBought; } } totalTokensBought += tokenAmount; contributions[buyer] += ethAmount; if(finalprice == 0){ require(tokenAmount >= slippageAmount, "Slippage Amount Restriction"); } if(buyTax > 0 && buyer != taxWallet){ uint256 tax = tokenAmount * buyTax / 100; uint256 buyerTokens = tokenAmount - tax; devTaxTokens = devTaxTokens + tax; tokens[buyer] += buyerTokens; tokenAmount = buyerTokens; }else{ tokens[buyer] += tokenAmount; } totalETHBought += ethAmount; _transfer(address(this), buyer, tokenAmount); bool success; (success, ) = REVENUE_ACCOUNT.call{value: fee}(""); require(success, "Transfer failed"); if (address(this).balance >= TARGET_LIQUIDITY && !listed) { _addLiquidity(); _burnRemainingTokens(); } } // @notice allows a user sell a memecoin. // @param seller this is the address of the user selling tokens. // @param tokenAmount this is the amount of tokens a user wants to sell. function sellTokens(address seller,uint256 tokenAmount) external onlyBulla { require(!listed, "Liquidity is already added to Uniswap"); require(tokenAmount > 0, "Amount must be greater than 0"); selling = 1; uint256 ethAmount = calculateEthAmount(seller,tokenAmount); if ((balanceOf(address(this)) + tokenAmount) == TOTAL_SUPPLY) { ethAmount = address(this).balance; if(!degen){ contributions[seller] = 0; } totalETHBought = 0; } else { if(!degen){ contributions[seller] -= ethAmount; totalETHBought -= ethAmount; }else{ if(contributions[seller] < ethAmount){ uint subAmount; if(tokenAmount > 0 && tokenAmount <= (tokens[seller] * 25 / 100)){ subAmount = contributions[seller] * 25 / 100; } else if (tokenAmount >= (tokens[seller] * 25 / 100) && tokenAmount <= (tokens[seller] * 50 / 100)){ subAmount = contributions[seller] * 50 / 100; } else if (tokenAmount >= (tokens[seller] * 50 / 100) && tokenAmount <= (tokens[seller] * 75 / 100)){ subAmount = contributions[seller] * 75 / 100; } else if (tokenAmount >= (tokens[seller] * 75 / 100) && tokenAmount <= (tokens[seller] * 100 / 100)){ subAmount = contributions[seller] * 100 / 100; } contributions[seller] = contributions[seller] - subAmount; totalETHBought -= ethAmount; }else{ totalETHBought -= ethAmount; } } } uint256 fee = ethAmount * uint256(FEE_PERCENTAGE) / 100; if(sellTax > 0 && seller != taxWallet){ uint256 tax = tokenAmount * sellTax / 100; uint256 sellerTokens = tokenAmount - tax; tokens[seller] -= tokenAmount; devTaxTokens = devTaxTokens + tax; tokenAmount = sellerTokens; }else{ tokens[seller] -= tokenAmount; } totalTokensBought -= tokenAmount; _transfer(seller, address(this), tokenAmount); bool success; (success, ) = seller.call{value: ethAmount - fee}(""); require(success, "Transfer failed"); (success, ) = REVENUE_ACCOUNT.call{value: fee}(""); require(success, "Transfer failed"); } // @notice call to get the remaining ETHER amount required to be spent by users for the memecoin to be listed. // @returns A uint value indicating the remaining ETHER amount required to be spent by users for the memecoin to be listed. function getRemainingAmount() public view returns (uint256) { require(TARGET_LIQUIDITY > address(this).balance, "Liquidity target exceeded"); return _getRemainingAmount(); } // @notice allows the user calculate the minimum amount required to be received during a buy. // @param ethAmount this of ETHER to be used for the buy. // @param slippageAllowance this is the amount in percentage used to calculate slippage. function slippage(uint256 ethAmount,uint256 slippageAllowance) public view returns(uint256) { uint256 fee = ethAmount * uint256(FEE_PERCENTAGE) / 100; ethAmount = ethAmount - fee; uint256 slippageAmount = calculateTokenAmount(ethAmount); if (buyTax > 0) { uint256 tax = slippageAmount * buyTax / 100; slippageAmount = slippageAmount - tax; } slippageAllowance = slippageAmount * slippageAllowance / 100; slippageAmount = slippageAmount - slippageAllowance; return slippageAmount; } // @notice call to get the remaining ETHER amount required to be spent by users for the memecoin to be listed. // @param ethAmount this an amount of ETHER to be used to buy. // @returns A uint value indicating the token amount a user would receive. function calculateTokenAmount(uint256 ethAmount) public view returns (uint256) { require(totalETHBought + ethAmount <= TARGET_LIQUIDITY, "Liquidity target exceeded"); uint256 initialTokenPrice = _initialTokenPrice(); uint256 tokenPrice = initialTokenPrice + ((initialTokenPrice * BUY_PRICE_DIFFERENCE_PERCENT / 100) * (totalETHBought + (ethAmount / 6)) / TARGET_LIQUIDITY); return ethAmount * 10**18 / tokenPrice; } // @notice call to get the ETHER amount sent to a user when tokens are sold. // @param user this is the address of the user. // @param tokenAmount this the amount of tokens a user want to sell. // @returns A uint value indicating the ETHER amount a user would receive. function calculateEthAmount(address user,uint256 tokenAmount) public view returns (uint256) { uint256 userTokens = tokens[user]; require(userTokens >= tokenAmount, "Insufficient user token balance"); uint256 value; if(!degen){ return contributions[user] * tokenAmount / userTokens; }else{ if(contributions[user] < totalETHBought){ value = totalETHBought - contributions[user]; value = value / 5; value = value + contributions[user]; }else{ value = totalETHBought; } return value * tokenAmount / userTokens; } } // @notice allows the creator of a memecoin set the minimum amount required to be met before a swap of the tax tokens occurs. // @param value this is the minimum amount required to be met before a swap of the tax tokens. function setSanityTokenAmount(uint256 newValue) external onlyBulla onlyTaxWallet { sanityTokenAmount = newValue * 10 ** 18; } // @notice allows the creator of a memecoin tax from the token. function removeTaxFees() external onlyBulla onlyTaxWallet { buyTax = 0; sellTax = 0; } // @notice function that adds liqudity to Uniswap once the Target Liquidity is met. function _addLiquidity() internal { listed = true; uniswapRouter.addLiquidityETH{ value: address(this).balance }( address(this), LIQUIDITY_TOKENS, 0, 0, address(this), block.timestamp ); uint256 amount = IERC20(lpAddress).balanceOf(address(this)); //Burn LP IERC20(lpAddress).transfer(address(0x000000000000000000000000000000000000dEaD),amount); _swapAndLiquify(); } // @notice function that burns the remaining tokens in the contract after liquidity is added. function _burnRemainingTokens() internal { uint256 amount; if(devTaxTokens > 0){ amount = IERC20(address(this)).balanceOf(address(this)) - devTaxTokens; }else{ amount = IERC20(address(this)).balanceOf(address(this)); } //Burn Remaining Tokens IERC20(address(this)).transfer(address(0x000000000000000000000000000000000000dEaD),amount); } // @notice fucntion that update the maxWalletAmount once the 6 ETHER requirement is met. function updateMaxWalletAmount(address _lpToken,address _weth) internal { if(maxWalletAmount == type(uint256).max) return; uint256 amount = IERC20(_weth).balanceOf(address(_lpToken)); if (amount >= 6 ether) { maxWalletAmount = type(uint256).max; } } // @notice call to get the remaining ETHER amount required to be spent by users for the memecoin to be listed. // @returns A uint value indicating the remaining ETHER amount required to be spent by users for the memecoin to be listed. function _getRemainingAmount() internal view returns (uint256) { return (TARGET_LIQUIDITY - totalETHBought) * 100 / (100 - uint256(FEE_PERCENTAGE)); } // Get initial ETH normalized price per token function _initialTokenPrice() internal pure returns (uint256){ return TARGET_LIQUIDITY * 10**18 / ((TOTAL_BUY_TOKENS * BUY_PRICE_DIFFERENCE_PERCENT) / 375); } // @notice function that swaps devTaxToken balance for ETHER. function _swapAndLiquify() private { if(devTaxTokens < sanityTokenAmount) return; _swapTokensForEth(devTaxTokens); devTaxTokens = 0; } // @notice function that executes the swaps devTaxToken balance for ETHER. function _swapTokensForEth(uint256 tokenAmount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapRouter.WETH(); uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, path, taxWallet, block.timestamp ); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./IERC20Metadata.sol"; import "./Context.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * The default value of {decimals} is 18. To change this, you should override * this function so it returns a different value. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ 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; /** * @dev Sets the values for {name} and {symbol}. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the default value returned by this function, unless * it's overridden. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ 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; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, spender) + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ 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; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ 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; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ 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 { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ 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; // Overflow not possible: amount <= accountBalance <= totalSupply. _totalSupply -= amount; } emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ 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); } } } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Factory { 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IUniswapV2Router { 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 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 getAmountsOut(uint256 amountIn, address[] memory path) external view returns (uint256[] memory amounts); function factory() external pure returns (address); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_bullaDeployer","type":"address"},{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_taxWallet","type":"address"},{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"string","name":"_picture","type":"string"},{"internalType":"bool","name":"_degen","type":"bool"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BUY_PRICE_DIFFERENCE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEE_PERCENTAGE","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LIQUIDITY_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVENUE_ACCOUNT","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TARGET_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_BUY_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bullaDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"buyer","type":"address"},{"internalType":"uint256","name":"slippageAmount","type":"uint256"}],"name":"buyTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"calculateEthAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"calculateTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"contributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"degen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devTaxTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRemainingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"listed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"picture","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sanityTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"sellTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSanityTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"},{"internalType":"uint256","name":"slippageAllowance","type":"uint256"}],"name":"slippage","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":"taxWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalETHBought","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":"totalTokensBought","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405268056bc75e2d6310000060055534801561001c575f80fd5b5060405161311a38038061311a83398101604081905261003b91610632565b8383600361004983826107a5565b50600461005682826107a5565b5050600a80546001600160a01b0319166001600160a01b038d8116919091179091556006805462010000600160b01b03191662010000928d1692909202919091179055505f8790036100ac575f19600d5561010f565b866001036100e0576103e86100ce6b033b2e3c9fd0803ce80000006005610873565b6100d89190610890565b600d5561010f565b8660020361010f5760646101016b033b2e3c9fd0803ce80000006001610873565b61010b9190610890565b600d555b86158061011c5750866001145b806101275750866002145b6101785760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204d61782057616c6c657420416d6f756e740000000000000060448201526064015b60405180910390fd5b600861018483826107a5565b50600980546001600160a01b0319166001600160a01b038a811691909117909155600e879055600f869055600a805461ffff60a01b1916600160a81b8415150260ff60a01b19161790555f600b556006546040805163c45a015560e01b81529051620100009092049092169163c45a01559160048281019260209291908290030181865afa158015610218573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061023c91906108af565b6001600160a01b031663c9c6539630600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561029c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102c091906108af565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561030a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032e91906108af565b600780546001600160a01b0319166001600160a01b03928316179055600654610361913091620100009004165f19610386565b610377306b033b2e3c9fd0803ce80000006104a9565b505050505050505050506108e2565b6001600160a01b0383166103e85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161016f565b6001600160a01b0382166104495760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161016f565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166104ff5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161016f565b8060025f82825461051091906108cf565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b0381168114610581575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126105a9575f80fd5b81516001600160401b038111156105c2576105c2610586565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105f0576105f0610586565b604052818152838201602001851015610607575f80fd5b8160208501602083015e5f918101602001919091529392505050565b80518015158114610581575f80fd5b5f805f805f805f805f806101408b8d03121561064c575f80fd5b6106558b61056b565b995061066360208c0161056b565b985061067160408c0161056b565b60608c015160808d015160a08e015160c08f0151939b50919950975095506001600160401b038111156106a2575f80fd5b6106ae8d828e0161059a565b60e08d015190955090506001600160401b038111156106cb575f80fd5b6106d78d828e0161059a565b6101008d015190945090506001600160401b038111156106f5575f80fd5b6107018d828e0161059a565b9250506107116101208c01610623565b90509295989b9194979a5092959850565b600181811c9082168061073657607f821691505b60208210810361075457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561056657805f5260205f20601f840160051c8101602085101561077f5750805b601f840160051c820191505b8181101561079e575f815560010161078b565b5050505050565b81516001600160401b038111156107be576107be610586565b6107d2816107cc8454610722565b8461075a565b6020601f821160018114610804575f83156107ed5750848201515b5f19600385901b1c1916600184901b17845561079e565b5f84815260208120601f198516915b828110156108335787850151825560209485019460019092019101610813565b508482101561085057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761088a5761088a61085f565b92915050565b5f826108aa57634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156108bf575f80fd5b6108c88261056b565b9392505050565b8082018082111561088a5761088a61085f565b61282b806108ef5f395ff3fe608060405260043610610248575f3560e01c8063735de9f711610134578063b198155d116100b3578063cf602ebc11610078578063cf602ebc1461068d578063d89738c1146106ac578063dabaae11146106c1578063dd62ed3e146106d5578063e4860339146106f4578063ee6629221461071f575f80fd5b8063b198155d14610606578063baa9e53114610625578063be7ed9471461063a578063c464fe6514610659578063cc1776d314610678575f80fd5b80639b4dc8cc116100f95780639b4dc8cc14610575578063a24bcf4614610594578063a457c2d7146105b3578063a9059cbb146105d2578063aa4bde28146105f1575f80fd5b8063735de9f7146104f55780637900692a1461051a5780637b1e9cf81461052e578063902d55a51461054257806395d89b4114610561575f80fd5b8063313ce567116101cb5780634ed49269116101905780634ed49269146104525780634f7041a5146104675780635c95eb521461047c5780636fc505261461049757806370a08231146104ac57806372e1a09a146104e0575f80fd5b8063313ce567146103b757806339509351146103ca5780633fccbdff146103e957806342e94c90146104085780634826091214610433575f80fd5b80631747a57b116102115780631747a57b1461031b57806318160ddd1461033b5780631ae947f71461035957806323b872dd146103795780632dc0562d14610398575f80fd5b80620b46f81461024c57806306fdde03146102775780630752881a1461029857806308f59fbc146102ad578063095ea7b3146102ec575b5f80fd5b348015610257575f80fd5b50610260600281565b60405160ff90911681526020015b60405180910390f35b348015610282575f80fd5b5061028b61073d565b60405161026e919061241a565b6102ab6102a6366004612463565b6107cd565b005b3480156102b8575f80fd5b506102d473cde357abbdf15da7cce4b51ce70a1d0f08dfb78281565b6040516001600160a01b03909116815260200161026e565b3480156102f7575f80fd5b5061030b610306366004612463565b610b47565b604051901515815260200161026e565b348015610326575f80fd5b50600a5461030b90600160a01b900460ff1681565b348015610346575f80fd5b506002545b60405190815260200161026e565b348015610364575f80fd5b50600a5461030b90600160a81b900460ff1681565b348015610384575f80fd5b5061030b61039336600461248d565b610b60565b3480156103a3575f80fd5b506009546102d4906001600160a01b031681565b3480156103c2575f80fd5b506012610260565b3480156103d5575f80fd5b5061030b6103e4366004612463565b610b83565b3480156103f4575f80fd5b5061034b610403366004612463565b610ba4565b348015610413575f80fd5b5061034b6104223660046124cb565b60116020525f908152604090205481565b34801561043e575f80fd5b50600a546102d4906001600160a01b031681565b34801561045d575f80fd5b5061034b60105481565b348015610472575f80fd5b5061034b600e5481565b348015610487575f80fd5b5061034b673782dace9d90000081565b3480156104a2575f80fd5b5061034b6103e881565b3480156104b7575f80fd5b5061034b6104c63660046124cb565b6001600160a01b03165f9081526020819052604090205490565b3480156104eb575f80fd5b5061034b600b5481565b348015610500575f80fd5b506006546102d4906201000090046001600160a01b031681565b348015610525575f80fd5b506102ab610ce6565b348015610539575f80fd5b5061028b610d75565b34801561054d575f80fd5b5061034b6b033b2e3c9fd0803ce800000081565b34801561056c575f80fd5b5061028b610e01565b348015610580575f80fd5b506007546102d4906001600160a01b031681565b34801561059f575f80fd5b5061034b6105ae3660046124ed565b610e10565b3480156105be575f80fd5b5061030b6105cd366004612463565b610efc565b3480156105dd575f80fd5b5061030b6105ec366004612463565b610f76565b3480156105fc575f80fd5b5061034b600d5481565b348015610611575f80fd5b5061034b6b0295be96e64066972000000081565b348015610630575f80fd5b5061034b600c5481565b348015610645575f80fd5b506102ab6106543660046124ed565b610f83565b348015610664575f80fd5b506102ab610673366004612463565b61101f565b348015610683575f80fd5b5061034b600f5481565b348015610698575f80fd5b5061034b6106a7366004612504565b611683565b3480156106b7575f80fd5b5061034b60055481565b3480156106cc575f80fd5b5061034b611715565b3480156106e0575f80fd5b5061034b6106ef366004612524565b611776565b3480156106ff575f80fd5b5061034b61070e3660046124cb565b60126020525f908152604090205481565b34801561072a575f80fd5b5061034b6aa56fa5b99019a5c800000081565b60606003805461074c9061255b565b80601f01602080910402602001604051908101604052809291908181526020018280546107789061255b565b80156107c35780601f1061079a576101008083540402835291602001916107c3565b820191905f5260205f20905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f790612593565b60405180910390fd5b600a54600160a01b900460ff161561082a5760405162461bcd60e51b81526004016107f7906125ca565b5f34116108725760405162461bcd60e51b815260206004820152601660248201527553656e642045544820746f2062757920746f6b656e7360501b60448201526064016107f7565b6006805460ff191660011790555f606461088d600234612623565b610897919061263a565b90505f6108a48234612659565b90505f6108b082610e10565b90505f6108bd838361263a565b90505f346108c96117a0565b0361090d5750600c5481906108ea906b0295be96e640669720000000612659565b83111561090d57600c5461090a906b0295be96e640669720000000612659565b92505b82600c5f82825461091e919061266c565b90915550506001600160a01b0387165f908152601160205260408120805486929061094a90849061266c565b90915550505f8190036109a757858310156109a75760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520416d6f756e74205265737472696374696f6e000000000060448201526064016107f7565b5f600e541180156109c657506009546001600160a01b03888116911614155b15610a3c575f6064600e54856109dc9190612623565b6109e6919061263a565b90505f6109f38286612659565b905081601054610a03919061266c565b6010556001600160a01b0389165f9081526012602052604081208054839290610a2d90849061266c565b90915550909450610a69915050565b6001600160a01b0387165f9081526012602052604081208054859290610a6390849061266c565b90915550505b83600b5f828254610a7a919061266c565b90915550610a8b90503088856117d7565b6040515f9073cde357abbdf15da7cce4b51ce70a1d0f08dfb7829087908381818185875af1925050503d805f8114610ade576040519150601f19603f3d011682016040523d82523d5f602084013e610ae3565b606091505b50508091505080610b065760405162461bcd60e51b81526004016107f79061267f565b673782dace9d9000004710158015610b285750600a54600160a01b900460ff16155b15610b3d57610b35611ba1565b610b3d611d44565b5050505050505050565b5f33610b54818585611e8c565b60019150505b92915050565b5f33610b6d858285611faf565b610b788585856117d7565b506001949350505050565b5f33610b54818585610b958383611776565b610b9f919061266c565b611e8c565b6001600160a01b0382165f9081526012602052604081205482811015610c0c5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74207573657220746f6b656e2062616c616e63650060448201526064016107f7565b600a545f90600160a81b900460ff16610c57576001600160a01b0385165f908152601160205260409020548290610c44908690612623565b610c4e919061263a565b92505050610b5a565b600b546001600160a01b0386165f908152601160205260409020541015610cd6576001600160a01b0385165f90815260116020526040902054600b54610c9d9190612659565b9050610caa60058261263a565b6001600160a01b0386165f90815260116020526040902054909150610ccf908261266c565b9050610cdb565b50600b545b81610c448583612623565b600a546001600160a01b03163314610d105760405162461bcd60e51b81526004016107f790612593565b6009546001600160a01b03163214610d6a5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d707400000000000060448201526064016107f7565b5f600e819055600f55565b60088054610d829061255b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dae9061255b565b8015610df95780601f10610dd057610100808354040283529160200191610df9565b820191905f5260205f20905b815481529060010190602001808311610ddc57829003601f168201915b505050505081565b60606004805461074c9061255b565b5f673782dace9d90000082600b54610e28919061266c565b1115610e725760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b60448201526064016107f7565b5f610e7b612027565b90505f673782dace9d900000610e9260068661263a565b600b54610e9f919061266c565b6064610ead6103e886612623565b610eb7919061263a565b610ec19190612623565b610ecb919061263a565b610ed5908361266c565b905080610eea85670de0b6b3a7640000612623565b610ef4919061263a565b949350505050565b5f3381610f098286611776565b905083811015610f695760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107f7565b610b788286868403611e8c565b5f33610b548185856117d7565b600a546001600160a01b03163314610fad5760405162461bcd60e51b81526004016107f790612593565b6009546001600160a01b031632146110075760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d707400000000000060448201526064016107f7565b61101981670de0b6b3a7640000612623565b60055550565b600a546001600160a01b031633146110495760405162461bcd60e51b81526004016107f790612593565b600a54600160a01b900460ff16156110735760405162461bcd60e51b81526004016107f7906125ca565b5f81116110c25760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016107f7565b6006805461ff0019166101001790555f6110dc8383610ba4565b90506b033b2e3c9fd0803ce80000008261110a306001600160a01b03165f9081526020819052604090205490565b611114919061266c565b0361114f5750600a544790600160a81b900460ff16611146576001600160a01b0383165f908152601160205260408120555b5f600b5561148d565b600a54600160a81b900460ff166111aa576001600160a01b0383165f9081526011602052604081208054839290611187908490612659565b9250508190555080600b5f82825461119f9190612659565b9091555061148d9050565b6001600160a01b0383165f90815260116020526040902054811115611476575f808311801561120857506001600160a01b0384165f908152601260205260409020546064906111fa906019612623565b611204919061263a565b8311155b15611244576001600160a01b0384165f90815260116020526040902054606490611233906019612623565b61123d919061263a565b905061141a565b6001600160a01b0384165f9081526012602052604090205460649061126a906019612623565b611274919061263a565b83101580156112b257506001600160a01b0384165f908152601260205260409020546064906112a4906032612623565b6112ae919061263a565b8311155b156112dd576001600160a01b0384165f90815260116020526040902054606490611233906032612623565b6001600160a01b0384165f90815260126020526040902054606490611303906032612623565b61130d919061263a565b831015801561134b57506001600160a01b0384165f9081526012602052604090205460649061133d90604b612623565b611347919061263a565b8311155b15611376576001600160a01b0384165f9081526011602052604090205460649061123390604b612623565b6001600160a01b0384165f9081526012602052604090205460649061139c90604b612623565b6113a6919061263a565b83101580156113e357506001600160a01b0384165f908152601260205260409020546064906113d59082612623565b6113df919061263a565b8311155b1561141a576001600160a01b0384165f9081526011602052604090205460649061140d9082612623565b611417919061263a565b90505b6001600160a01b0384165f9081526011602052604090205461143d908290612659565b6001600160a01b0385165f90815260116020526040812091909155600b805484929061146a908490612659565b9091555061148d915050565b80600b5f8282546114879190612659565b90915550505b5f606461149b600284612623565b6114a5919061263a565b90505f600f541180156114c657506009546001600160a01b03858116911614155b1561153e575f6064600f54856114dc9190612623565b6114e6919061263a565b90505f6114f38286612659565b6001600160a01b0387165f9081526012602052604081208054929350879290919061151f908490612659565b909155505060105461153290839061266c565b601055935061156b9050565b6001600160a01b0384165f9081526012602052604081208054859290611565908490612659565b90915550505b82600c5f82825461157c9190612659565b9091555061158d90508430856117d7565b5f6001600160a01b0385166115a28385612659565b6040515f81818185875af1925050503d805f81146115db576040519150601f19603f3d011682016040523d82523d5f602084013e6115e0565b606091505b505080915050806116035760405162461bcd60e51b81526004016107f79061267f565b60405173cde357abbdf15da7cce4b51ce70a1d0f08dfb7829083905f81818185875af1925050503d805f8114611654576040519150601f19603f3d011682016040523d82523d5f602084013e611659565b606091505b5050809150508061167c5760405162461bcd60e51b81526004016107f79061267f565b5050505050565b5f806064611692600286612623565b61169c919061263a565b90506116a88185612659565b93505f6116b485610e10565b600e54909150156116ea575f6064600e54836116d09190612623565b6116da919061263a565b90506116e68183612659565b9150505b60646116f68583612623565b611700919061263a565b935061170c8482612659565b95945050505050565b5f47673782dace9d900000116117695760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b60448201526064016107f7565b6117716117a0565b905090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f6117ad60026064612659565b600b546117c290673782dace9d900000612659565b6117cd906064612623565b611771919061263a565b5f80600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184e91906126a8565b600a54909150600160a01b900460ff1615611a6257600754611879906001600160a01b031682612067565b5f600e5411801561189757506007546001600160a01b038681169116145b80156118b157506009546001600160a01b03858116911614155b15611900576064600e54846118c69190612623565b6118d0919061263a565b91505f6118dd8385612659565b9050826010546118ed919061266c565b6010559250826118fe8630856120fc565b505b5f600f5411801561191e57506007546001600160a01b038581169116145b801561193857506009546001600160a01b03868116911614155b15611987576064600f548461194d9190612623565b611957919061263a565b91505f6119648385612659565b905082601054611974919061266c565b6010559250826119858630856120fc565b505b6009546001600160a01b038581169116148015906119b357506007546001600160a01b03858116911614155b80156119ca57506001600160a01b03841661dead14155b15611a1957600d54836119f1866001600160a01b03165f9081526020819052604090205490565b6119fb919061266c565b1115611a195760405162461bcd60e51b81526004016107f7906126c3565b611a248585856120fc565b6007546001600160a01b03868116911614801590611a5057506007546001600160a01b03858116911614155b15611a5d57611a5d61229e565b61167c565b6001600160a01b03841630141580611a8357506001600160a01b0385163014155b15611b065760065460ff16151580611aa45750600654610100900460ff1615155b611afa5760405162461bcd60e51b815260206004820152602160248201527f5072652d6c697374696e67207472616e7366657273204e6f7420416c6c6f77656044820152601960fa1b60648201526084016107f7565b6006805461ffff191690555b6009546001600160a01b03858116911614801590611b2d57506001600160a01b0384163014155b8015611b4757506007546001600160a01b03858116911614155b15611b9657600d5483611b6e866001600160a01b03165f9081526020819052604090205490565b611b78919061266c565b1115611b965760405162461bcd60e51b81526004016107f7906126c3565b61167c8585856120fc565b600a8054600160a01b60ff60a01b1990911617905560065460405163f305d71960e01b815230600482018190526aa56fa5b99019a5c800000060248301525f60448301819052606483015260848201524260a4820152620100009091046001600160a01b03169063f305d71990479060c40160606040518083038185885af1158015611c2f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c549190612710565b50506007546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015611c9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc3919061273b565b60075460405163a9059cbb60e01b815261dead6004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611d14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d389190612752565b50611d4161229e565b50565b6010545f9015611dc0576010546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611daf919061273b565b611db99190612659565b9050611e21565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611dfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1e919061273b565b90505b60405163a9059cbb60e01b815261dead600482015260248101829052309063a9059cbb906044016020604051808303815f875af1158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190612752565b5050565b6001600160a01b038316611eee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b6001600160a01b038216611f4f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107f7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611fba8484611776565b90505f19811461202157818110156120145760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107f7565b6120218484848403611e8c565b50505050565b5f6101776120436103e86b0295be96e640669720000000612623565b61204d919061263a565b6117cd673782dace9d900000670de0b6b3a7640000612623565b5f19600d5403612075575050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa1580156120bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e0919061273b565b90506753444835ec58000081106120f7575f19600d555b505050565b6001600160a01b0383166121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f7565b6001600160a01b0382166121c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f7565b6001600160a01b0383165f90815260208190526040902054818110156122395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107f7565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612021565b60055460105410156122ac57565b6122b76010546122bd565b5f601055565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f0576122f0612771565b60200260200101906001600160a01b031690816001600160a01b031681525050600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238591906126a8565b8160018151811061239857612398612771565b6001600160a01b03928316602091820292909201015260065460095460405163791ac94760e01b81526201000090920483169263791ac947926123e99287925f928892909116904290600401612785565b5f604051808303815f87803b158015612400575f80fd5b505af1158015612412573d5f803e3d5ffd5b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611d41575f80fd5b5f8060408385031215612474575f80fd5b823561247f8161244f565b946020939093013593505050565b5f805f6060848603121561249f575f80fd5b83356124aa8161244f565b925060208401356124ba8161244f565b929592945050506040919091013590565b5f602082840312156124db575f80fd5b81356124e68161244f565b9392505050565b5f602082840312156124fd575f80fd5b5035919050565b5f8060408385031215612515575f80fd5b50508035926020909101359150565b5f8060408385031215612535575f80fd5b82356125408161244f565b915060208301356125508161244f565b809150509250929050565b600181811c9082168061256f57607f821691505b60208210810361258d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526018908201527f556e617574686f72697a656420496e746572616374696f6e0000000000000000604082015260600190565b60208082526025908201527f4c697175696469747920697320616c726561647920616464656420746f20556e604082015264069737761760dc1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b5a57610b5a61260f565b5f8261265457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b5a57610b5a61260f565b80820180821115610b5a57610b5a61260f565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b5f602082840312156126b8575f80fd5b81516124e68161244f565b6020808252602d908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060408201526c1dd85b1b195d08185b5bdd5b9d609a1b606082015260800190565b5f805f60608486031215612722575f80fd5b5050815160208301516040909301519094929350919050565b5f6020828403121561274b575f80fd5b5051919050565b5f60208284031215612762575f80fd5b815180151581146124e6575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156127d55783516001600160a01b03168352602093840193909201916001016127ae565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122013f65ab7898602339d9cc4d631be7fd348dfed71a58403f6fb42dfc97a869f2064736f6c634300081a00330000000000000000000000007322662ab50400b672c97821f999cbdb4c904a8b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000047b7beeabb9dd0538c27ed9cfda6906998d3946f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d6f6e6b6579000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4d470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f62632d626574612e62756c6c612e66756e2f75706c6f6164732f313732363030323133353838382d4d6f6e6b65795f4d616769635f4d656d655f4c6f676f2e6a706700000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405260043610610248575f3560e01c8063735de9f711610134578063b198155d116100b3578063cf602ebc11610078578063cf602ebc1461068d578063d89738c1146106ac578063dabaae11146106c1578063dd62ed3e146106d5578063e4860339146106f4578063ee6629221461071f575f80fd5b8063b198155d14610606578063baa9e53114610625578063be7ed9471461063a578063c464fe6514610659578063cc1776d314610678575f80fd5b80639b4dc8cc116100f95780639b4dc8cc14610575578063a24bcf4614610594578063a457c2d7146105b3578063a9059cbb146105d2578063aa4bde28146105f1575f80fd5b8063735de9f7146104f55780637900692a1461051a5780637b1e9cf81461052e578063902d55a51461054257806395d89b4114610561575f80fd5b8063313ce567116101cb5780634ed49269116101905780634ed49269146104525780634f7041a5146104675780635c95eb521461047c5780636fc505261461049757806370a08231146104ac57806372e1a09a146104e0575f80fd5b8063313ce567146103b757806339509351146103ca5780633fccbdff146103e957806342e94c90146104085780634826091214610433575f80fd5b80631747a57b116102115780631747a57b1461031b57806318160ddd1461033b5780631ae947f71461035957806323b872dd146103795780632dc0562d14610398575f80fd5b80620b46f81461024c57806306fdde03146102775780630752881a1461029857806308f59fbc146102ad578063095ea7b3146102ec575b5f80fd5b348015610257575f80fd5b50610260600281565b60405160ff90911681526020015b60405180910390f35b348015610282575f80fd5b5061028b61073d565b60405161026e919061241a565b6102ab6102a6366004612463565b6107cd565b005b3480156102b8575f80fd5b506102d473cde357abbdf15da7cce4b51ce70a1d0f08dfb78281565b6040516001600160a01b03909116815260200161026e565b3480156102f7575f80fd5b5061030b610306366004612463565b610b47565b604051901515815260200161026e565b348015610326575f80fd5b50600a5461030b90600160a01b900460ff1681565b348015610346575f80fd5b506002545b60405190815260200161026e565b348015610364575f80fd5b50600a5461030b90600160a81b900460ff1681565b348015610384575f80fd5b5061030b61039336600461248d565b610b60565b3480156103a3575f80fd5b506009546102d4906001600160a01b031681565b3480156103c2575f80fd5b506012610260565b3480156103d5575f80fd5b5061030b6103e4366004612463565b610b83565b3480156103f4575f80fd5b5061034b610403366004612463565b610ba4565b348015610413575f80fd5b5061034b6104223660046124cb565b60116020525f908152604090205481565b34801561043e575f80fd5b50600a546102d4906001600160a01b031681565b34801561045d575f80fd5b5061034b60105481565b348015610472575f80fd5b5061034b600e5481565b348015610487575f80fd5b5061034b673782dace9d90000081565b3480156104a2575f80fd5b5061034b6103e881565b3480156104b7575f80fd5b5061034b6104c63660046124cb565b6001600160a01b03165f9081526020819052604090205490565b3480156104eb575f80fd5b5061034b600b5481565b348015610500575f80fd5b506006546102d4906201000090046001600160a01b031681565b348015610525575f80fd5b506102ab610ce6565b348015610539575f80fd5b5061028b610d75565b34801561054d575f80fd5b5061034b6b033b2e3c9fd0803ce800000081565b34801561056c575f80fd5b5061028b610e01565b348015610580575f80fd5b506007546102d4906001600160a01b031681565b34801561059f575f80fd5b5061034b6105ae3660046124ed565b610e10565b3480156105be575f80fd5b5061030b6105cd366004612463565b610efc565b3480156105dd575f80fd5b5061030b6105ec366004612463565b610f76565b3480156105fc575f80fd5b5061034b600d5481565b348015610611575f80fd5b5061034b6b0295be96e64066972000000081565b348015610630575f80fd5b5061034b600c5481565b348015610645575f80fd5b506102ab6106543660046124ed565b610f83565b348015610664575f80fd5b506102ab610673366004612463565b61101f565b348015610683575f80fd5b5061034b600f5481565b348015610698575f80fd5b5061034b6106a7366004612504565b611683565b3480156106b7575f80fd5b5061034b60055481565b3480156106cc575f80fd5b5061034b611715565b3480156106e0575f80fd5b5061034b6106ef366004612524565b611776565b3480156106ff575f80fd5b5061034b61070e3660046124cb565b60126020525f908152604090205481565b34801561072a575f80fd5b5061034b6aa56fa5b99019a5c800000081565b60606003805461074c9061255b565b80601f01602080910402602001604051908101604052809291908181526020018280546107789061255b565b80156107c35780601f1061079a576101008083540402835291602001916107c3565b820191905f5260205f20905b8154815290600101906020018083116107a657829003601f168201915b5050505050905090565b600a546001600160a01b031633146108005760405162461bcd60e51b81526004016107f790612593565b60405180910390fd5b600a54600160a01b900460ff161561082a5760405162461bcd60e51b81526004016107f7906125ca565b5f34116108725760405162461bcd60e51b815260206004820152601660248201527553656e642045544820746f2062757920746f6b656e7360501b60448201526064016107f7565b6006805460ff191660011790555f606461088d600234612623565b610897919061263a565b90505f6108a48234612659565b90505f6108b082610e10565b90505f6108bd838361263a565b90505f346108c96117a0565b0361090d5750600c5481906108ea906b0295be96e640669720000000612659565b83111561090d57600c5461090a906b0295be96e640669720000000612659565b92505b82600c5f82825461091e919061266c565b90915550506001600160a01b0387165f908152601160205260408120805486929061094a90849061266c565b90915550505f8190036109a757858310156109a75760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520416d6f756e74205265737472696374696f6e000000000060448201526064016107f7565b5f600e541180156109c657506009546001600160a01b03888116911614155b15610a3c575f6064600e54856109dc9190612623565b6109e6919061263a565b90505f6109f38286612659565b905081601054610a03919061266c565b6010556001600160a01b0389165f9081526012602052604081208054839290610a2d90849061266c565b90915550909450610a69915050565b6001600160a01b0387165f9081526012602052604081208054859290610a6390849061266c565b90915550505b83600b5f828254610a7a919061266c565b90915550610a8b90503088856117d7565b6040515f9073cde357abbdf15da7cce4b51ce70a1d0f08dfb7829087908381818185875af1925050503d805f8114610ade576040519150601f19603f3d011682016040523d82523d5f602084013e610ae3565b606091505b50508091505080610b065760405162461bcd60e51b81526004016107f79061267f565b673782dace9d9000004710158015610b285750600a54600160a01b900460ff16155b15610b3d57610b35611ba1565b610b3d611d44565b5050505050505050565b5f33610b54818585611e8c565b60019150505b92915050565b5f33610b6d858285611faf565b610b788585856117d7565b506001949350505050565b5f33610b54818585610b958383611776565b610b9f919061266c565b611e8c565b6001600160a01b0382165f9081526012602052604081205482811015610c0c5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74207573657220746f6b656e2062616c616e63650060448201526064016107f7565b600a545f90600160a81b900460ff16610c57576001600160a01b0385165f908152601160205260409020548290610c44908690612623565b610c4e919061263a565b92505050610b5a565b600b546001600160a01b0386165f908152601160205260409020541015610cd6576001600160a01b0385165f90815260116020526040902054600b54610c9d9190612659565b9050610caa60058261263a565b6001600160a01b0386165f90815260116020526040902054909150610ccf908261266c565b9050610cdb565b50600b545b81610c448583612623565b600a546001600160a01b03163314610d105760405162461bcd60e51b81526004016107f790612593565b6009546001600160a01b03163214610d6a5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d707400000000000060448201526064016107f7565b5f600e819055600f55565b60088054610d829061255b565b80601f0160208091040260200160405190810160405280929190818152602001828054610dae9061255b565b8015610df95780601f10610dd057610100808354040283529160200191610df9565b820191905f5260205f20905b815481529060010190602001808311610ddc57829003601f168201915b505050505081565b60606004805461074c9061255b565b5f673782dace9d90000082600b54610e28919061266c565b1115610e725760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b60448201526064016107f7565b5f610e7b612027565b90505f673782dace9d900000610e9260068661263a565b600b54610e9f919061266c565b6064610ead6103e886612623565b610eb7919061263a565b610ec19190612623565b610ecb919061263a565b610ed5908361266c565b905080610eea85670de0b6b3a7640000612623565b610ef4919061263a565b949350505050565b5f3381610f098286611776565b905083811015610f695760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016107f7565b610b788286868403611e8c565b5f33610b548185856117d7565b600a546001600160a01b03163314610fad5760405162461bcd60e51b81526004016107f790612593565b6009546001600160a01b031632146110075760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d707400000000000060448201526064016107f7565b61101981670de0b6b3a7640000612623565b60055550565b600a546001600160a01b031633146110495760405162461bcd60e51b81526004016107f790612593565b600a54600160a01b900460ff16156110735760405162461bcd60e51b81526004016107f7906125ca565b5f81116110c25760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e203000000060448201526064016107f7565b6006805461ff0019166101001790555f6110dc8383610ba4565b90506b033b2e3c9fd0803ce80000008261110a306001600160a01b03165f9081526020819052604090205490565b611114919061266c565b0361114f5750600a544790600160a81b900460ff16611146576001600160a01b0383165f908152601160205260408120555b5f600b5561148d565b600a54600160a81b900460ff166111aa576001600160a01b0383165f9081526011602052604081208054839290611187908490612659565b9250508190555080600b5f82825461119f9190612659565b9091555061148d9050565b6001600160a01b0383165f90815260116020526040902054811115611476575f808311801561120857506001600160a01b0384165f908152601260205260409020546064906111fa906019612623565b611204919061263a565b8311155b15611244576001600160a01b0384165f90815260116020526040902054606490611233906019612623565b61123d919061263a565b905061141a565b6001600160a01b0384165f9081526012602052604090205460649061126a906019612623565b611274919061263a565b83101580156112b257506001600160a01b0384165f908152601260205260409020546064906112a4906032612623565b6112ae919061263a565b8311155b156112dd576001600160a01b0384165f90815260116020526040902054606490611233906032612623565b6001600160a01b0384165f90815260126020526040902054606490611303906032612623565b61130d919061263a565b831015801561134b57506001600160a01b0384165f9081526012602052604090205460649061133d90604b612623565b611347919061263a565b8311155b15611376576001600160a01b0384165f9081526011602052604090205460649061123390604b612623565b6001600160a01b0384165f9081526012602052604090205460649061139c90604b612623565b6113a6919061263a565b83101580156113e357506001600160a01b0384165f908152601260205260409020546064906113d59082612623565b6113df919061263a565b8311155b1561141a576001600160a01b0384165f9081526011602052604090205460649061140d9082612623565b611417919061263a565b90505b6001600160a01b0384165f9081526011602052604090205461143d908290612659565b6001600160a01b0385165f90815260116020526040812091909155600b805484929061146a908490612659565b9091555061148d915050565b80600b5f8282546114879190612659565b90915550505b5f606461149b600284612623565b6114a5919061263a565b90505f600f541180156114c657506009546001600160a01b03858116911614155b1561153e575f6064600f54856114dc9190612623565b6114e6919061263a565b90505f6114f38286612659565b6001600160a01b0387165f9081526012602052604081208054929350879290919061151f908490612659565b909155505060105461153290839061266c565b601055935061156b9050565b6001600160a01b0384165f9081526012602052604081208054859290611565908490612659565b90915550505b82600c5f82825461157c9190612659565b9091555061158d90508430856117d7565b5f6001600160a01b0385166115a28385612659565b6040515f81818185875af1925050503d805f81146115db576040519150601f19603f3d011682016040523d82523d5f602084013e6115e0565b606091505b505080915050806116035760405162461bcd60e51b81526004016107f79061267f565b60405173cde357abbdf15da7cce4b51ce70a1d0f08dfb7829083905f81818185875af1925050503d805f8114611654576040519150601f19603f3d011682016040523d82523d5f602084013e611659565b606091505b5050809150508061167c5760405162461bcd60e51b81526004016107f79061267f565b5050505050565b5f806064611692600286612623565b61169c919061263a565b90506116a88185612659565b93505f6116b485610e10565b600e54909150156116ea575f6064600e54836116d09190612623565b6116da919061263a565b90506116e68183612659565b9150505b60646116f68583612623565b611700919061263a565b935061170c8482612659565b95945050505050565b5f47673782dace9d900000116117695760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b60448201526064016107f7565b6117716117a0565b905090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b5f6117ad60026064612659565b600b546117c290673782dace9d900000612659565b6117cd906064612623565b611771919061263a565b5f80600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561182a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061184e91906126a8565b600a54909150600160a01b900460ff1615611a6257600754611879906001600160a01b031682612067565b5f600e5411801561189757506007546001600160a01b038681169116145b80156118b157506009546001600160a01b03858116911614155b15611900576064600e54846118c69190612623565b6118d0919061263a565b91505f6118dd8385612659565b9050826010546118ed919061266c565b6010559250826118fe8630856120fc565b505b5f600f5411801561191e57506007546001600160a01b038581169116145b801561193857506009546001600160a01b03868116911614155b15611987576064600f548461194d9190612623565b611957919061263a565b91505f6119648385612659565b905082601054611974919061266c565b6010559250826119858630856120fc565b505b6009546001600160a01b038581169116148015906119b357506007546001600160a01b03858116911614155b80156119ca57506001600160a01b03841661dead14155b15611a1957600d54836119f1866001600160a01b03165f9081526020819052604090205490565b6119fb919061266c565b1115611a195760405162461bcd60e51b81526004016107f7906126c3565b611a248585856120fc565b6007546001600160a01b03868116911614801590611a5057506007546001600160a01b03858116911614155b15611a5d57611a5d61229e565b61167c565b6001600160a01b03841630141580611a8357506001600160a01b0385163014155b15611b065760065460ff16151580611aa45750600654610100900460ff1615155b611afa5760405162461bcd60e51b815260206004820152602160248201527f5072652d6c697374696e67207472616e7366657273204e6f7420416c6c6f77656044820152601960fa1b60648201526084016107f7565b6006805461ffff191690555b6009546001600160a01b03858116911614801590611b2d57506001600160a01b0384163014155b8015611b4757506007546001600160a01b03858116911614155b15611b9657600d5483611b6e866001600160a01b03165f9081526020819052604090205490565b611b78919061266c565b1115611b965760405162461bcd60e51b81526004016107f7906126c3565b61167c8585856120fc565b600a8054600160a01b60ff60a01b1990911617905560065460405163f305d71960e01b815230600482018190526aa56fa5b99019a5c800000060248301525f60448301819052606483015260848201524260a4820152620100009091046001600160a01b03169063f305d71990479060c40160606040518083038185885af1158015611c2f573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611c549190612710565b50506007546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015611c9f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc3919061273b565b60075460405163a9059cbb60e01b815261dead6004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611d14573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d389190612752565b50611d4161229e565b50565b6010545f9015611dc0576010546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611d8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611daf919061273b565b611db99190612659565b9050611e21565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611dfa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1e919061273b565b90505b60405163a9059cbb60e01b815261dead600482015260248101829052309063a9059cbb906044016020604051808303815f875af1158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190612752565b5050565b6001600160a01b038316611eee5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107f7565b6001600160a01b038216611f4f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107f7565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611fba8484611776565b90505f19811461202157818110156120145760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016107f7565b6120218484848403611e8c565b50505050565b5f6101776120436103e86b0295be96e640669720000000612623565b61204d919061263a565b6117cd673782dace9d900000670de0b6b3a7640000612623565b5f19600d5403612075575050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa1580156120bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e0919061273b565b90506753444835ec58000081106120f7575f19600d555b505050565b6001600160a01b0383166121605760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107f7565b6001600160a01b0382166121c25760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107f7565b6001600160a01b0383165f90815260208190526040902054818110156122395760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016107f7565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612021565b60055460105410156122ac57565b6122b76010546122bd565b5f601055565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122f0576122f0612771565b60200260200101906001600160a01b031690816001600160a01b031681525050600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612361573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238591906126a8565b8160018151811061239857612398612771565b6001600160a01b03928316602091820292909201015260065460095460405163791ac94760e01b81526201000090920483169263791ac947926123e99287925f928892909116904290600401612785565b5f604051808303815f87803b158015612400575f80fd5b505af1158015612412573d5f803e3d5ffd5b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611d41575f80fd5b5f8060408385031215612474575f80fd5b823561247f8161244f565b946020939093013593505050565b5f805f6060848603121561249f575f80fd5b83356124aa8161244f565b925060208401356124ba8161244f565b929592945050506040919091013590565b5f602082840312156124db575f80fd5b81356124e68161244f565b9392505050565b5f602082840312156124fd575f80fd5b5035919050565b5f8060408385031215612515575f80fd5b50508035926020909101359150565b5f8060408385031215612535575f80fd5b82356125408161244f565b915060208301356125508161244f565b809150509250929050565b600181811c9082168061256f57607f821691505b60208210810361258d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526018908201527f556e617574686f72697a656420496e746572616374696f6e0000000000000000604082015260600190565b60208082526025908201527f4c697175696469747920697320616c726561647920616464656420746f20556e604082015264069737761760dc1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610b5a57610b5a61260f565b5f8261265457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610b5a57610b5a61260f565b80820180821115610b5a57610b5a61260f565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b5f602082840312156126b8575f80fd5b81516124e68161244f565b6020808252602d908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060408201526c1dd85b1b195d08185b5bdd5b9d609a1b606082015260800190565b5f805f60608486031215612722575f80fd5b5050815160208301516040909301519094929350919050565b5f6020828403121561274b575f80fd5b5051919050565b5f60208284031215612762575f80fd5b815180151581146124e6575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156127d55783516001600160a01b03168352602093840193909201916001016127ae565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122013f65ab7898602339d9cc4d631be7fd348dfed71a58403f6fb42dfc97a869f2064736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007322662ab50400b672c97821f999cbdb4c904a8b0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d00000000000000000000000047b7beeabb9dd0538c27ed9cfda6906998d3946f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000001c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064d6f6e6b6579000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034d4d470000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a68747470733a2f2f62632d626574612e62756c6c612e66756e2f75706c6f6164732f313732363030323133353838382d4d6f6e6b65795f4d616769635f4d656d655f4c6f676f2e6a706700000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _bullaDeployer (address): 0x7322662Ab50400b672C97821f999cbDb4c904a8b
Arg [1] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : _taxWallet (address): 0x47b7Beeabb9Dd0538C27ed9cfDa6906998D3946f
Arg [3] : _maxWalletAmount (uint256): 0
Arg [4] : _buyTax (uint256): 0
Arg [5] : _sellTax (uint256): 0
Arg [6] : _name (string): Monkey
Arg [7] : _ticker (string): MMG
Arg [8] : _picture (string): https://bc-beta.bulla.fun/uploads/1726002135888-Monkey_Magic_Meme_Logo.jpg
Arg [9] : _degen (bool): False
-----Encoded View---------------
18 Constructor Arguments found :
Arg [0] : 0000000000000000000000007322662ab50400b672c97821f999cbdb4c904a8b
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 00000000000000000000000047b7beeabb9dd0538c27ed9cfda6906998d3946f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [8] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [11] : 4d6f6e6b65790000000000000000000000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [13] : 4d4d470000000000000000000000000000000000000000000000000000000000
Arg [14] : 000000000000000000000000000000000000000000000000000000000000004a
Arg [15] : 68747470733a2f2f62632d626574612e62756c6c612e66756e2f75706c6f6164
Arg [16] : 732f313732363030323133353838382d4d6f6e6b65795f4d616769635f4d656d
Arg [17] : 655f4c6f676f2e6a706700000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
BASE | 100.00% | $3,453.31 | 0.00735 | $25.38 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.