Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
20908686 | 131 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BullaFunDeployer
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.26; import "./Memecoin.sol"; contract BullaFunDeployer { uint256 public constant FEE_PERCENTAGE = 2; // Fee percentage address internal constant UNISWAP_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Uniswap address address internal constant BULLA_ROUTER = 0x65dAbC3936739020E56273624b859f2Ad8B33CD4; // Bulla Router address uint64 public tokenCount;//uint tracking number of tokens deployed //Modifier allowing only BULLA_ROUTER to execute specified functions modifier onlyRouter() { require(msg.sender == BULLA_ROUTER,"Unauthorized Interaction"); _; } // @notice allows a user deploy a memecoin and buy the same in the same transaction. // @dev make sure ETHER is sent with this call if _buy is true. // @param _name this is the name of the deployed memecoin. // @param _ticker this is the symbol of the deployed memecoin. // @param _picture this is the location(typically a link) of the deployed memecoin picture. // @param _maxWalletAmount this is the maxAmount a wallet can hold. // @param _buyTax this is amount set for buyTax. // @param _sellTax this is amount set for sellTax. // @param _tokenId this is the id to keep tarct of each token deployed. // @param _buy this is a boolean set to true is the user wants to buy on deployement or false if otherwise. // @param_degen this is a boolean set to true is the user wants to deploye a degen type of memecoin or false if otherwise. function bullaDeploy( address _creator, string memory _name, string memory _ticker, string memory _picture, uint256 _maxWalletAmount, uint256 _buyTax, uint256 _sellTax, bool _degen ) external payable onlyRouter returns (address) { address tokenAddress = address(new MemeCoin( UNISWAP_ROUTER, _creator, _maxWalletAmount, _buyTax, _sellTax, _name, _ticker, _picture, _degen )); return tokenAddress; } }
// SPDX-License-Identifier: MIT pragma solidity 0.8.26; 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 address payable public constant REVENUE_ACCOUNT = payable(0xCDE357ABBdf15Da7CCE4B51CE70a1d0F08DfB782); // Fee collection address ETH uint256 public sanityTokenAmount = 100 * 10 ** 18; //Minimum amount of tokens require to be swapped 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; //uniswapRouter address address public lpAddress; //Uniswpa v2 Pair address [address(this), WETH] string public picture; // URL of memecoin image address public taxWallet; //wallet address that receives all tax bool public listed; //Bool indicating if token has been listed bool public degen; //Bool indicating is token is a Degen Memecoin or Regular Memecoin 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; //Token buy tax uint256 public sellTax;//Token sell tax 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 //Event emitted for token buys event TokenBuy( address indexed buyerAddress, address indexed tokenAddress, uint256 indexed ethAmountAfterFee, uint256 tokenAmountReceived, bool listedStatus ); //Event emitted for token sells event TokenSell( address indexed sellerAddress, address indexed tokenAddress, uint256 indexed ethAmountBeforeFee, uint256 ethAmountReceived, uint256 tokenAmountSent ); //Event emitted for MaxWalletAmount Update event MaxWalletAmountUpdated(uint256 indexed timeOfUpdate); //Event emitted for snaityAmount update event SanityAmountUpdate( uint256 indexed sanityTokenAmount, uint256 indexed timeUpdated ); //Event emitted for tax removal event TaxRemoved( uint256 indexed timeUpdated ); constructor( address _router, address _taxWallet, uint256 _maxWalletAmount, uint256 _buyTax, uint256 _sellTax, string memory _name, string memory _ticker, string memory _picture, bool _degen ) ERC20(_name, _ticker) { 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; if(_buyTax == 0 && _sellTax == 0){ taxWallet = address(0); }else { 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 allowinh only tax wallet to execute specified functions modifier onlyTaxWallet() { require(msg.sender == taxWallet,"Unauthorized Reset Attempt"); _; } // @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 slippageAmount this is the minimum amount allowed by user to be received during the purchase. function buyTokens(uint256 slippageAmount) external payable { 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[msg.sender] += ethAmount; if(finalprice == 0){ require(tokenAmount >= slippageAmount, "Slippage Amount Restriction"); } uint256 tokensReceived; if(buyTax > 0 && msg.sender != taxWallet){ uint256 tax = tokenAmount * buyTax / 100; uint256 buyerTokens = tokenAmount - tax; devTaxTokens = devTaxTokens + tax; tokens[msg.sender] += buyerTokens; tokenAmount = buyerTokens; tokensReceived = buyerTokens; }else{ tokens[msg.sender] += tokenAmount; tokensReceived = tokenAmount; } totalETHBought += ethAmount; _transfer(address(this), msg.sender, tokenAmount); bool success; (success, ) = REVENUE_ACCOUNT.call{value: fee}(""); require(success, "Transfer failed"); if (address(this).balance >= TARGET_LIQUIDITY && !listed) { _addLiquidity(); _burnRemainingTokens(); } emit TokenBuy(msg.sender,address(this),ethAmount,tokensReceived,listed); } // @notice allows a user sell a memecoin. // @param tokenAmount this is the amount of tokens a user wants to sell. function sellTokens(uint256 tokenAmount) external { require(!listed, "Liquidity is already added to Uniswap"); require(tokenAmount > 0, "Amount must be greater than 0"); selling = 1; uint256 ethAmount = calculateEthAmount(msg.sender,tokenAmount); if ((balanceOf(address(this)) + tokenAmount) == TOTAL_SUPPLY) { ethAmount = address(this).balance; if(!degen){ contributions[msg.sender] = 0; } totalETHBought = 0; } else { if(!degen){ contributions[msg.sender] -= ethAmount; totalETHBought -= ethAmount; }else{ if(contributions[msg.sender] < ethAmount){ uint subAmount; if(tokenAmount > 0 && tokenAmount <= (tokens[msg.sender] * 25 / 100)){ subAmount = contributions[msg.sender] * 25 / 100; } else if (tokenAmount >= (tokens[msg.sender] * 25 / 100) && tokenAmount <= (tokens[msg.sender] * 50 / 100)){ subAmount = contributions[msg.sender] * 50 / 100; } else if (tokenAmount >= (tokens[msg.sender] * 50 / 100) && tokenAmount <= (tokens[msg.sender] * 75 / 100)){ subAmount = contributions[msg.sender] * 75 / 100; } else if (tokenAmount >= (tokens[msg.sender] * 75 / 100) && tokenAmount <= (tokens[msg.sender] * 100 / 100)){ subAmount = contributions[msg.sender] * 100 / 100; } contributions[msg.sender] = contributions[msg.sender] - subAmount; totalETHBought -= ethAmount; }else{ totalETHBought -= ethAmount; } } } uint256 fee = ethAmount * uint256(FEE_PERCENTAGE) / 100; uint256 tokenAmountSent; if(sellTax > 0 && msg.sender != taxWallet){ uint256 tax = tokenAmount * sellTax / 100; uint256 sellerTokens = tokenAmount - tax; tokens[msg.sender] -= tokenAmount; devTaxTokens = devTaxTokens + tax; tokenAmount = sellerTokens; tokenAmountSent = sellerTokens; }else{ tokens[msg.sender] -= tokenAmount; tokenAmountSent = tokenAmount; } totalTokensBought -= tokenAmount; _transfer(msg.sender, address(this), tokenAmountSent); bool success; (success, ) = msg.sender.call{value: ethAmount - fee}(""); require(success, "Transfer failed"); (success, ) = REVENUE_ACCOUNT.call{value: fee}(""); require(success, "Transfer failed"); emit TokenSell(msg.sender,address(this),ethAmount,(ethAmount - fee),tokenAmountSent); } // @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) { require(slippageAllowance <= 20,'Slippage cannot be greater than 20%'); 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 onlyTaxWallet { sanityTokenAmount = newValue * 10 ** 18; emit SanityAmountUpdate(sanityTokenAmount,block.timestamp); } // @notice allows the creator of a memecoin tax from the token. function removeTaxFees() external onlyTaxWallet { buyTax = 0; sellTax = 0; emit TaxRemoved(block.timestamp); } // @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; } emit MaxWalletAmountUpdated(block.timestamp); } // @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":[],"name":"FEE_PERCENTAGE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_creator","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_ticker","type":"string"},{"internalType":"string","name":"_picture","type":"string"},{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"},{"internalType":"uint256","name":"_buyTax","type":"uint256"},{"internalType":"uint256","name":"_sellTax","type":"uint256"},{"internalType":"bool","name":"_degen","type":"bool"}],"name":"bullaDeploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052348015600e575f80fd5b506134d38061001c5f395ff3fe608060405260043610610032575f3560e01c80620b46f8146100365780639f181b5e1461005d578063ed617de014610095575b5f80fd5b348015610041575f80fd5b5061004a600281565b6040519081526020015b60405180910390f35b348015610068575f80fd5b505f5461007c9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610054565b6100a86100a3366004610262565b6100c0565b6040516001600160a01b039091168152602001610054565b5f337365dabc3936739020e56273624b859f2ad8b33cd4146101285760405162461bcd60e51b815260206004820152601860248201527f556e617574686f72697a656420496e746572616374696f6e0000000000000000604482015260640160405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d8a8787878d8d8d8a6040516101529061018c565b6101649998979695949392919061035b565b604051809103905ff08015801561017d573d5f803e3d5ffd5b509a9950505050505050505050565b6130c1806103dd83390190565b80356001600160a01b03811681146101af575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101d7575f80fd5b813567ffffffffffffffff8111156101f1576101f16101b4565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610220576102206101b4565b604052818152838201602001851015610237575f80fd5b816020850160208301375f918101602001919091529392505050565b803580151581146101af575f80fd5b5f805f805f805f80610100898b03121561027a575f80fd5b61028389610199565b9750602089013567ffffffffffffffff81111561029e575f80fd5b6102aa8b828c016101c8565b975050604089013567ffffffffffffffff8111156102c6575f80fd5b6102d28b828c016101c8565b965050606089013567ffffffffffffffff8111156102ee575f80fd5b6102fa8b828c016101c8565b9550506080890135935060a0890135925060c0890135915061031e60e08a01610253565b90509295985092959890939650565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038a811682528916602082015260408101889052606081018790526080810186905261012060a082018190525f9061039c9083018761032d565b82810360c08401526103ae818761032d565b905082810360e08401526103c2818661032d565b9150508215156101008301529a995050505050505050505056fe608060405268056bc75e2d6310000060055534801561001c575f80fd5b506040516130c13803806130c183398101604081905261003b9161063b565b83836003610049838261079c565b506004610056828261079c565b50506006805462010000600160b01b031916620100006001600160a01b038d1602179055505f87900361008d575f19600c556100f0565b866001036100c1576103e86100af6b033b2e3c9fd0803ce8000000600561086a565b6100b99190610887565b600c556100f0565b866002036100f05760646100e26b033b2e3c9fd0803ce8000000600161086a565b6100ec9190610887565b600c555b8615806100fd5750866001145b806101085750866002145b6101595760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204d61782057616c6c657420416d6f756e740000000000000060448201526064015b60405180910390fd5b6008610165838261079c565b5085158015610172575084155b1561018c57600980546001600160a01b03191690556101a8565b600980546001600160a01b0319166001600160a01b038a161790555b600d869055600e8590556009805461ffff60a01b1916600160a81b8315150260ff60a01b19161790555f600a556006546040805163c45a015560e01b81529051620100009092046001600160a01b03169163c45a0155916004818101926020929091908290030181865afa158015610222573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024691906108a6565b6001600160a01b031663c9c6539630600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ca91906108a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610314573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033891906108a6565b600780546001600160a01b0319166001600160a01b0392831617905560065461036b913091620100009004165f1961038f565b610381306b033b2e3c9fd0803ce80000006104b2565b5050505050505050506108d9565b6001600160a01b0383166103f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610150565b6001600160a01b0382166104525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610150565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166105085760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610150565b8060025f82825461051991906108c6565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b038116811461058a575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126105b2575f80fd5b81516001600160401b038111156105cb576105cb61058f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105f9576105f961058f565b604052818152838201602001851015610610575f80fd5b8160208501602083015e5f918101602001919091529392505050565b8051801515811461058a575f80fd5b5f805f805f805f805f6101208a8c031215610654575f80fd5b61065d8a610574565b985061066b60208b01610574565b60408b015160608c015160808d015160a08e0151939b50919950975095506001600160401b0381111561069c575f80fd5b6106a88c828d016105a3565b60c08c015190955090506001600160401b038111156106c5575f80fd5b6106d18c828d016105a3565b60e08c015190945090506001600160401b038111156106ee575f80fd5b6106fa8c828d016105a3565b92505061070a6101008b0161062c565b90509295985092959850929598565b600181811c9082168061072d57607f821691505b60208210810361074b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561056f57805f5260205f20601f840160051c810160208510156107765750805b601f840160051c820191505b81811015610795575f8155600101610782565b5050505050565b81516001600160401b038111156107b5576107b561058f565b6107c9816107c38454610719565b84610751565b6020601f8211600181146107fb575f83156107e45750848201515b5f19600385901b1c1916600184901b178455610795565b5f84815260208120601f198516915b8281101561082a578785015182556020948501946001909201910161080a565b508482101561084757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761088157610881610856565b92915050565b5f826108a157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156108b6575f80fd5b6108bf82610574565b9392505050565b8082018082111561088157610881610856565b6127db806108e65f395ff3fe60806040526004361061023d575f3560e01c806372e1a09a11610134578063aa4bde28116100b3578063cf602ebc11610078578063cf602ebc14610663578063d89738c114610682578063dabaae1114610697578063dd62ed3e146106ab578063e4860339146106ca578063ee662922146106f5575f80fd5b8063aa4bde28146105e6578063b198155d146105fb578063baa9e5311461061a578063be7ed9471461062f578063cc1776d31461064e575f80fd5b806395d89b41116100f957806395d89b41146105565780639b4dc8cc1461056a578063a24bcf4614610589578063a457c2d7146105a8578063a9059cbb146105c7575f80fd5b806372e1a09a146104d5578063735de9f7146104ea5780637900692a1461050f5780637b1e9cf814610523578063902d55a514610537575f80fd5b80633610724e116101c05780634f7041a5116101855780634f7041a51461043d5780635c95eb52146104525780636c11bcd31461046d5780636fc505261461048c57806370a08231146104a1575f80fd5b80633610724e146103aa57806339509351146103bf5780633fccbdff146103de57806342e94c90146103fd5780634ed4926914610428575f80fd5b806318160ddd1161020657806318160ddd1461031b5780631ae947f71461033957806323b872dd146103595780632dc0562d14610378578063313ce56714610397575f80fd5b80620b46f81461024157806306fdde031461026c57806308f59fbc1461028d578063095ea7b3146102cc5780631747a57b146102fb575b5f80fd5b34801561024c575f80fd5b50610255600281565b60405160ff90911681526020015b60405180910390f35b348015610277575f80fd5b50610280610713565b6040516102639190612401565b348015610298575f80fd5b506102b473cde357abbdf15da7cce4b51ce70a1d0f08dfb78281565b6040516001600160a01b039091168152602001610263565b3480156102d7575f80fd5b506102eb6102e636600461244a565b6107a3565b6040519015158152602001610263565b348015610306575f80fd5b506009546102eb90600160a01b900460ff1681565b348015610326575f80fd5b506002545b604051908152602001610263565b348015610344575f80fd5b506009546102eb90600160a81b900460ff1681565b348015610364575f80fd5b506102eb610373366004612474565b6107bc565b348015610383575f80fd5b506009546102b4906001600160a01b031681565b3480156103a2575f80fd5b506012610255565b6103bd6103b83660046124b2565b6107df565b005b3480156103ca575f80fd5b506102eb6103d936600461244a565b610b65565b3480156103e9575f80fd5b5061032b6103f836600461244a565b610b86565b348015610408575f80fd5b5061032b6104173660046124c9565b60106020525f908152604090205481565b348015610433575f80fd5b5061032b600f5481565b348015610448575f80fd5b5061032b600d5481565b34801561045d575f80fd5b5061032b673782dace9d90000081565b348015610478575f80fd5b506103bd6104873660046124b2565b610cc8565b348015610497575f80fd5b5061032b6103e881565b3480156104ac575f80fd5b5061032b6104bb3660046124c9565b6001600160a01b03165f9081526020819052604090205490565b3480156104e0575f80fd5b5061032b600a5481565b3480156104f5575f80fd5b506006546102b4906201000090046001600160a01b031681565b34801561051a575f80fd5b506103bd6112a0565b34801561052e575f80fd5b5061028061132f565b348015610542575f80fd5b5061032b6b033b2e3c9fd0803ce800000081565b348015610561575f80fd5b506102806113bb565b348015610575575f80fd5b506007546102b4906001600160a01b031681565b348015610594575f80fd5b5061032b6105a33660046124b2565b6113ca565b3480156105b3575f80fd5b506102eb6105c236600461244a565b6114b6565b3480156105d2575f80fd5b506102eb6105e136600461244a565b611530565b3480156105f1575f80fd5b5061032b600c5481565b348015610606575f80fd5b5061032b6b0295be96e64066972000000081565b348015610625575f80fd5b5061032b600b5481565b34801561063a575f80fd5b506103bd6106493660046124b2565b61153d565b348015610659575f80fd5b5061032b600e5481565b34801561066e575f80fd5b5061032b61067d3660046124eb565b6115dc565b34801561068d575f80fd5b5061032b60055481565b3480156106a2575f80fd5b5061032b6116cb565b3480156106b6575f80fd5b5061032b6106c536600461250b565b61172c565b3480156106d5575f80fd5b5061032b6106e43660046124c9565b60116020525f908152604090205481565b348015610700575f80fd5b5061032b6aa56fa5b99019a5c800000081565b60606003805461072290612542565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612542565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f336107b0818585611756565b60019150505b92915050565b5f336107c9858285611879565b6107d48585856118f1565b506001949350505050565b600954600160a01b900460ff16156108125760405162461bcd60e51b81526004016108099061257a565b60405180910390fd5b5f341161085a5760405162461bcd60e51b815260206004820152601660248201527553656e642045544820746f2062757920746f6b656e7360501b6044820152606401610809565b6006805460ff191660011790555f60646108756002346125d3565b61087f91906125ea565b90505f61088c8234612609565b90505f610898826113ca565b90505f6108a583836125ea565b90505f346108b1611cc2565b036108f55750600b5481906108d2906b0295be96e640669720000000612609565b8311156108f557600b546108f2906b0295be96e640669720000000612609565b92505b82600b5f828254610906919061261c565b9091555050335f908152601060205260408120805486929061092990849061261c565b90915550505f81900361098657858310156109865760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520416d6f756e74205265737472696374696f6e00000000006044820152606401610809565b5f80600d541180156109a357506009546001600160a01b03163314155b15610a13575f6064600d54866109b991906125d3565b6109c391906125ea565b90505f6109d08287612609565b905081600f546109e0919061261c565b600f55335f9081526011602052604081208054839290610a0190849061261c565b90915550909550859250610a3a915050565b335f9081526011602052604081208054869290610a3190849061261c565b90915550849150505b84600a5f828254610a4b919061261c565b90915550610a5c90503033866118f1565b6040515f9073cde357abbdf15da7cce4b51ce70a1d0f08dfb7829088908381818185875af1925050503d805f8114610aaf576040519150601f19603f3d011682016040523d82523d5f602084013e610ab4565b606091505b50508091505080610ad75760405162461bcd60e51b81526004016108099061262f565b673782dace9d9000004710158015610af95750600954600160a01b900460ff16155b15610b0e57610b06611cf9565b610b0e611e9c565b60095460408051848152600160a01b90920460ff16151560208301528791309133917f5a0af774ee3d8ed76925c1f5ef3b3d0965aa7469b7a1a2078d02ffb36adab956910160405180910390a45050505050505050565b5f336107b0818585610b77838361172c565b610b81919061261c565b611756565b6001600160a01b0382165f9081526011602052604081205482811015610bee5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74207573657220746f6b656e2062616c616e6365006044820152606401610809565b6009545f90600160a81b900460ff16610c39576001600160a01b0385165f908152601060205260409020548290610c269086906125d3565b610c3091906125ea565b925050506107b6565b600a546001600160a01b0386165f908152601060205260409020541015610cb8576001600160a01b0385165f90815260106020526040902054600a54610c7f9190612609565b9050610c8c6005826125ea565b6001600160a01b0386165f90815260106020526040902054909150610cb1908261261c565b9050610cbd565b50600a545b81610c2685836125d3565b600954600160a01b900460ff1615610cf25760405162461bcd60e51b81526004016108099061257a565b5f8111610d415760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610809565b6006805461ff0019166101001790555f610d5b3383610b86565b90506b033b2e3c9fd0803ce800000082610d89306001600160a01b03165f9081526020819052604090205490565b610d93919061261c565b03610dc557506009544790600160a81b900460ff16610dbc57335f908152601060205260408120555b5f600a5561107c565b600954600160a81b900460ff16610e1757335f9081526010602052604081208054839290610df4908490612609565b9250508190555080600a5f828254610e0c9190612609565b9091555061107c9050565b335f90815260106020526040902054811115611065575f8083118015610e635750335f90815260116020526040902054606490610e559060196125d3565b610e5f91906125ea565b8311155b15610e9657335f90815260106020526040902054606490610e859060196125d3565b610e8f91906125ea565b905061101b565b335f90815260116020526040902054606490610eb39060196125d3565b610ebd91906125ea565b8310158015610ef25750335f90815260116020526040902054606490610ee49060326125d3565b610eee91906125ea565b8311155b15610f1457335f90815260106020526040902054606490610e859060326125d3565b335f90815260116020526040902054606490610f319060326125d3565b610f3b91906125ea565b8310158015610f705750335f90815260116020526040902054606490610f6290604b6125d3565b610f6c91906125ea565b8311155b15610f9257335f90815260106020526040902054606490610e8590604b6125d3565b335f90815260116020526040902054606490610faf90604b6125d3565b610fb991906125ea565b8310158015610fed5750335f90815260116020526040902054606490610fdf90826125d3565b610fe991906125ea565b8311155b1561101b57335f9081526010602052604090205460649061100e90826125d3565b61101891906125ea565b90505b335f90815260106020526040902054611035908290612609565b335f90815260106020526040812091909155600a8054849290611059908490612609565b9091555061107c915050565b80600a5f8282546110769190612609565b90915550505b5f606461108a6002846125d3565b61109491906125ea565b90505f80600e541180156110b357506009546001600160a01b03163314155b15611125575f6064600e54866110c991906125d3565b6110d391906125ea565b90505f6110e08287612609565b335f90815260116020526040812080549293508892909190611103908490612609565b9091555050600f5461111690839061261c565b600f55945084915061114c9050565b335f9081526011602052604081208054869290611143908490612609565b90915550849150505b83600b5f82825461115d9190612609565b9091555061116e90503330836118f1565b5f3361117a8486612609565b6040515f81818185875af1925050503d805f81146111b3576040519150601f19603f3d011682016040523d82523d5f602084013e6111b8565b606091505b505080915050806111db5760405162461bcd60e51b81526004016108099061262f565b60405173cde357abbdf15da7cce4b51ce70a1d0f08dfb7829084905f81818185875af1925050503d805f811461122c576040519150601f19603f3d011682016040523d82523d5f602084013e611231565b606091505b505080915050806112545760405162461bcd60e51b81526004016108099061262f565b8330337f8f9e1c6f80a0fd25dc246f3b0a51422fce2a5f211d4f9877c7ec20b6499c939f6112828785612609565b60408051918252602082018890520160405180910390a45050505050565b6009546001600160a01b031633146112fa5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d70740000000000006044820152606401610809565b5f600d819055600e81905560405142917fe152e1da2b9dec2b9e74f5d2a9c960dc8b7ed13dba2f3cfa44c037ad64f17c8c91a2565b6008805461133c90612542565b80601f016020809104026020016040519081016040528092919081815260200182805461136890612542565b80156113b35780601f1061138a576101008083540402835291602001916113b3565b820191905f5260205f20905b81548152906001019060200180831161139657829003601f168201915b505050505081565b60606004805461072290612542565b5f673782dace9d90000082600a546113e2919061261c565b111561142c5760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b6044820152606401610809565b5f611435611fe4565b90505f673782dace9d90000061144c6006866125ea565b600a54611459919061261c565b60646114676103e8866125d3565b61147191906125ea565b61147b91906125d3565b61148591906125ea565b61148f908361261c565b9050806114a485670de0b6b3a76400006125d3565b6114ae91906125ea565b949350505050565b5f33816114c3828661172c565b9050838110156115235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610809565b6107d48286868403611756565b5f336107b08185856118f1565b6009546001600160a01b031633146115975760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d70740000000000006044820152606401610809565b6115a981670de0b6b3a76400006125d3565b60058190556040514291907f29f615861084a72d9d58ab3b0a97b796c5111de38ade89b11aefca1e3be7974b905f90a350565b5f601482111561163a5760405162461bcd60e51b815260206004820152602360248201527f536c6970706167652063616e6e6f742062652067726561746572207468616e2060448201526232302560e81b6064820152608401610809565b5f60646116486002866125d3565b61165291906125ea565b905061165e8185612609565b93505f61166a856113ca565b600d54909150156116a0575f6064600d548361168691906125d3565b61169091906125ea565b905061169c8183612609565b9150505b60646116ac85836125d3565b6116b691906125ea565b93506116c28482612609565b95945050505050565b5f47673782dace9d9000001161171f5760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b6044820152606401610809565b611727611cc2565b905090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166117b85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610809565b6001600160a01b0382166118195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610809565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611884848461172c565b90505f1981146118eb57818110156118de5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610809565b6118eb8484848403611756565b50505050565b5f80600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611944573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119689190612658565b600954909150600160a01b900460ff1615611b7c57600754611993906001600160a01b031682612024565b5f600d541180156119b157506007546001600160a01b038681169116145b80156119cb57506009546001600160a01b03858116911614155b15611a1a576064600d54846119e091906125d3565b6119ea91906125ea565b91505f6119f78385612609565b905082600f54611a07919061261c565b600f55925082611a188630856120e3565b505b5f600e54118015611a3857506007546001600160a01b038581169116145b8015611a5257506009546001600160a01b03868116911614155b15611aa1576064600e5484611a6791906125d3565b611a7191906125ea565b91505f611a7e8385612609565b905082600f54611a8e919061261c565b600f55925082611a9f8630856120e3565b505b6009546001600160a01b03858116911614801590611acd57506007546001600160a01b03858116911614155b8015611ae457506001600160a01b03841661dead14155b15611b3357600c5483611b0b866001600160a01b03165f9081526020819052604090205490565b611b15919061261c565b1115611b335760405162461bcd60e51b815260040161080990612673565b611b3e8585856120e3565b6007546001600160a01b03868116911614801590611b6a57506007546001600160a01b03858116911614155b15611b7757611b77612285565b611cbb565b6001600160a01b03841630141580611b9d57506001600160a01b0385163014155b15611c205760065460ff16151580611bbe5750600654610100900460ff1615155b611c145760405162461bcd60e51b815260206004820152602160248201527f5072652d6c697374696e67207472616e7366657273204e6f7420416c6c6f77656044820152601960fa1b6064820152608401610809565b6006805461ffff191690555b6009546001600160a01b03858116911614801590611c4757506001600160a01b0384163014155b8015611c6157506007546001600160a01b03858116911614155b15611cb057600c5483611c88866001600160a01b03165f9081526020819052604090205490565b611c92919061261c565b1115611cb05760405162461bcd60e51b815260040161080990612673565b611cbb8585856120e3565b5050505050565b5f611ccf60026064612609565b600a54611ce490673782dace9d900000612609565b611cef9060646125d3565b61172791906125ea565b60098054600160a01b60ff60a01b1990911617905560065460405163f305d71960e01b815230600482018190526aa56fa5b99019a5c800000060248301525f60448301819052606483015260848201524260a4820152620100009091046001600160a01b03169063f305d71990479060c40160606040518083038185885af1158015611d87573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611dac91906126c0565b50506007546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015611df7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1b91906126eb565b60075460405163a9059cbb60e01b815261dead6004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e909190612702565b50611e99612285565b50565b600f545f9015611f1857600f546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0791906126eb565b611f119190612609565b9050611f79565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611f52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7691906126eb565b90505b60405163a9059cbb60e01b815261dead600482015260248101829052309063a9059cbb906044016020604051808303815f875af1158015611fbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe09190612702565b5050565b5f6101776120006103e86b0295be96e6406697200000006125d3565b61200a91906125ea565b611cef673782dace9d900000670de0b6b3a76400006125d3565b5f19600c5403612032575050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa158015612079573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209d91906126eb565b90506753444835ec58000081106120b4575f19600c555b60405142907f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001905f90a2505050565b6001600160a01b0383166121475760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610809565b6001600160a01b0382166121a95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610809565b6001600160a01b0383165f90815260208190526040902054818110156122205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610809565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36118eb565b600554600f54101561229357565b61229e600f546122a4565b5f600f55565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122d7576122d7612721565b60200260200101906001600160a01b031690816001600160a01b031681525050600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236c9190612658565b8160018151811061237f5761237f612721565b6001600160a01b03928316602091820292909201015260065460095460405163791ac94760e01b81526201000090920483169263791ac947926123d09287925f928892909116904290600401612735565b5f604051808303815f87803b1580156123e7575f80fd5b505af11580156123f9573d5f803e3d5ffd5b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611e99575f80fd5b5f806040838503121561245b575f80fd5b823561246681612436565b946020939093013593505050565b5f805f60608486031215612486575f80fd5b833561249181612436565b925060208401356124a181612436565b929592945050506040919091013590565b5f602082840312156124c2575f80fd5b5035919050565b5f602082840312156124d9575f80fd5b81356124e481612436565b9392505050565b5f80604083850312156124fc575f80fd5b50508035926020909101359150565b5f806040838503121561251c575f80fd5b823561252781612436565b9150602083013561253781612436565b809150509250929050565b600181811c9082168061255657607f821691505b60208210810361257457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526025908201527f4c697175696469747920697320616c726561647920616464656420746f20556e604082015264069737761760dc1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107b6576107b66125bf565b5f8261260457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107b6576107b66125bf565b808201808211156107b6576107b66125bf565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b5f60208284031215612668575f80fd5b81516124e481612436565b6020808252602d908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060408201526c1dd85b1b195d08185b5bdd5b9d609a1b606082015260800190565b5f805f606084860312156126d2575f80fd5b5050815160208301516040909301519094929350919050565b5f602082840312156126fb575f80fd5b5051919050565b5f60208284031215612712575f80fd5b815180151581146124e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156127855783516001600160a01b031683526020938401939092019160010161275e565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122041d91b542b1c4efacd5f81aede31e12fae41802a9c74da65609a5b0226a0e25364736f6c634300081a0033a264697066735822122003d064539e6cbb9c1fa81a4cd31ad3ee61768ad345a819e57a6ebf3d319c8dd364736f6c634300081a0033
Deployed Bytecode
0x608060405260043610610032575f3560e01c80620b46f8146100365780639f181b5e1461005d578063ed617de014610095575b5f80fd5b348015610041575f80fd5b5061004a600281565b6040519081526020015b60405180910390f35b348015610068575f80fd5b505f5461007c9067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610054565b6100a86100a3366004610262565b6100c0565b6040516001600160a01b039091168152602001610054565b5f337365dabc3936739020e56273624b859f2ad8b33cd4146101285760405162461bcd60e51b815260206004820152601860248201527f556e617574686f72697a656420496e746572616374696f6e0000000000000000604482015260640160405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d8a8787878d8d8d8a6040516101529061018c565b6101649998979695949392919061035b565b604051809103905ff08015801561017d573d5f803e3d5ffd5b509a9950505050505050505050565b6130c1806103dd83390190565b80356001600160a01b03811681146101af575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126101d7575f80fd5b813567ffffffffffffffff8111156101f1576101f16101b4565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610220576102206101b4565b604052818152838201602001851015610237575f80fd5b816020850160208301375f918101602001919091529392505050565b803580151581146101af575f80fd5b5f805f805f805f80610100898b03121561027a575f80fd5b61028389610199565b9750602089013567ffffffffffffffff81111561029e575f80fd5b6102aa8b828c016101c8565b975050604089013567ffffffffffffffff8111156102c6575f80fd5b6102d28b828c016101c8565b965050606089013567ffffffffffffffff8111156102ee575f80fd5b6102fa8b828c016101c8565b9550506080890135935060a0890135925060c0890135915061031e60e08a01610253565b90509295985092959890939650565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b038a811682528916602082015260408101889052606081018790526080810186905261012060a082018190525f9061039c9083018761032d565b82810360c08401526103ae818761032d565b905082810360e08401526103c2818661032d565b9150508215156101008301529a995050505050505050505056fe608060405268056bc75e2d6310000060055534801561001c575f80fd5b506040516130c13803806130c183398101604081905261003b9161063b565b83836003610049838261079c565b506004610056828261079c565b50506006805462010000600160b01b031916620100006001600160a01b038d1602179055505f87900361008d575f19600c556100f0565b866001036100c1576103e86100af6b033b2e3c9fd0803ce8000000600561086a565b6100b99190610887565b600c556100f0565b866002036100f05760646100e26b033b2e3c9fd0803ce8000000600161086a565b6100ec9190610887565b600c555b8615806100fd5750866001145b806101085750866002145b6101595760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964204d61782057616c6c657420416d6f756e740000000000000060448201526064015b60405180910390fd5b6008610165838261079c565b5085158015610172575084155b1561018c57600980546001600160a01b03191690556101a8565b600980546001600160a01b0319166001600160a01b038a161790555b600d869055600e8590556009805461ffff60a01b1916600160a81b8315150260ff60a01b19161790555f600a556006546040805163c45a015560e01b81529051620100009092046001600160a01b03169163c45a0155916004818101926020929091908290030181865afa158015610222573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061024691906108a6565b6001600160a01b031663c9c6539630600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102ca91906108a6565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015610314573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061033891906108a6565b600780546001600160a01b0319166001600160a01b0392831617905560065461036b913091620100009004165f1961038f565b610381306b033b2e3c9fd0803ce80000006104b2565b5050505050505050506108d9565b6001600160a01b0383166103f15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610150565b6001600160a01b0382166104525760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610150565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0382166105085760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610150565b8060025f82825461051991906108c6565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b80516001600160a01b038116811461058a575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126105b2575f80fd5b81516001600160401b038111156105cb576105cb61058f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156105f9576105f961058f565b604052818152838201602001851015610610575f80fd5b8160208501602083015e5f918101602001919091529392505050565b8051801515811461058a575f80fd5b5f805f805f805f805f6101208a8c031215610654575f80fd5b61065d8a610574565b985061066b60208b01610574565b60408b015160608c015160808d015160a08e0151939b50919950975095506001600160401b0381111561069c575f80fd5b6106a88c828d016105a3565b60c08c015190955090506001600160401b038111156106c5575f80fd5b6106d18c828d016105a3565b60e08c015190945090506001600160401b038111156106ee575f80fd5b6106fa8c828d016105a3565b92505061070a6101008b0161062c565b90509295985092959850929598565b600181811c9082168061072d57607f821691505b60208210810361074b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561056f57805f5260205f20601f840160051c810160208510156107765750805b601f840160051c820191505b81811015610795575f8155600101610782565b5050505050565b81516001600160401b038111156107b5576107b561058f565b6107c9816107c38454610719565b84610751565b6020601f8211600181146107fb575f83156107e45750848201515b5f19600385901b1c1916600184901b178455610795565b5f84815260208120601f198516915b8281101561082a578785015182556020948501946001909201910161080a565b508482101561084757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761088157610881610856565b92915050565b5f826108a157634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156108b6575f80fd5b6108bf82610574565b9392505050565b8082018082111561088157610881610856565b6127db806108e65f395ff3fe60806040526004361061023d575f3560e01c806372e1a09a11610134578063aa4bde28116100b3578063cf602ebc11610078578063cf602ebc14610663578063d89738c114610682578063dabaae1114610697578063dd62ed3e146106ab578063e4860339146106ca578063ee662922146106f5575f80fd5b8063aa4bde28146105e6578063b198155d146105fb578063baa9e5311461061a578063be7ed9471461062f578063cc1776d31461064e575f80fd5b806395d89b41116100f957806395d89b41146105565780639b4dc8cc1461056a578063a24bcf4614610589578063a457c2d7146105a8578063a9059cbb146105c7575f80fd5b806372e1a09a146104d5578063735de9f7146104ea5780637900692a1461050f5780637b1e9cf814610523578063902d55a514610537575f80fd5b80633610724e116101c05780634f7041a5116101855780634f7041a51461043d5780635c95eb52146104525780636c11bcd31461046d5780636fc505261461048c57806370a08231146104a1575f80fd5b80633610724e146103aa57806339509351146103bf5780633fccbdff146103de57806342e94c90146103fd5780634ed4926914610428575f80fd5b806318160ddd1161020657806318160ddd1461031b5780631ae947f71461033957806323b872dd146103595780632dc0562d14610378578063313ce56714610397575f80fd5b80620b46f81461024157806306fdde031461026c57806308f59fbc1461028d578063095ea7b3146102cc5780631747a57b146102fb575b5f80fd5b34801561024c575f80fd5b50610255600281565b60405160ff90911681526020015b60405180910390f35b348015610277575f80fd5b50610280610713565b6040516102639190612401565b348015610298575f80fd5b506102b473cde357abbdf15da7cce4b51ce70a1d0f08dfb78281565b6040516001600160a01b039091168152602001610263565b3480156102d7575f80fd5b506102eb6102e636600461244a565b6107a3565b6040519015158152602001610263565b348015610306575f80fd5b506009546102eb90600160a01b900460ff1681565b348015610326575f80fd5b506002545b604051908152602001610263565b348015610344575f80fd5b506009546102eb90600160a81b900460ff1681565b348015610364575f80fd5b506102eb610373366004612474565b6107bc565b348015610383575f80fd5b506009546102b4906001600160a01b031681565b3480156103a2575f80fd5b506012610255565b6103bd6103b83660046124b2565b6107df565b005b3480156103ca575f80fd5b506102eb6103d936600461244a565b610b65565b3480156103e9575f80fd5b5061032b6103f836600461244a565b610b86565b348015610408575f80fd5b5061032b6104173660046124c9565b60106020525f908152604090205481565b348015610433575f80fd5b5061032b600f5481565b348015610448575f80fd5b5061032b600d5481565b34801561045d575f80fd5b5061032b673782dace9d90000081565b348015610478575f80fd5b506103bd6104873660046124b2565b610cc8565b348015610497575f80fd5b5061032b6103e881565b3480156104ac575f80fd5b5061032b6104bb3660046124c9565b6001600160a01b03165f9081526020819052604090205490565b3480156104e0575f80fd5b5061032b600a5481565b3480156104f5575f80fd5b506006546102b4906201000090046001600160a01b031681565b34801561051a575f80fd5b506103bd6112a0565b34801561052e575f80fd5b5061028061132f565b348015610542575f80fd5b5061032b6b033b2e3c9fd0803ce800000081565b348015610561575f80fd5b506102806113bb565b348015610575575f80fd5b506007546102b4906001600160a01b031681565b348015610594575f80fd5b5061032b6105a33660046124b2565b6113ca565b3480156105b3575f80fd5b506102eb6105c236600461244a565b6114b6565b3480156105d2575f80fd5b506102eb6105e136600461244a565b611530565b3480156105f1575f80fd5b5061032b600c5481565b348015610606575f80fd5b5061032b6b0295be96e64066972000000081565b348015610625575f80fd5b5061032b600b5481565b34801561063a575f80fd5b506103bd6106493660046124b2565b61153d565b348015610659575f80fd5b5061032b600e5481565b34801561066e575f80fd5b5061032b61067d3660046124eb565b6115dc565b34801561068d575f80fd5b5061032b60055481565b3480156106a2575f80fd5b5061032b6116cb565b3480156106b6575f80fd5b5061032b6106c536600461250b565b61172c565b3480156106d5575f80fd5b5061032b6106e43660046124c9565b60116020525f908152604090205481565b348015610700575f80fd5b5061032b6aa56fa5b99019a5c800000081565b60606003805461072290612542565b80601f016020809104026020016040519081016040528092919081815260200182805461074e90612542565b80156107995780601f1061077057610100808354040283529160200191610799565b820191905f5260205f20905b81548152906001019060200180831161077c57829003601f168201915b5050505050905090565b5f336107b0818585611756565b60019150505b92915050565b5f336107c9858285611879565b6107d48585856118f1565b506001949350505050565b600954600160a01b900460ff16156108125760405162461bcd60e51b81526004016108099061257a565b60405180910390fd5b5f341161085a5760405162461bcd60e51b815260206004820152601660248201527553656e642045544820746f2062757920746f6b656e7360501b6044820152606401610809565b6006805460ff191660011790555f60646108756002346125d3565b61087f91906125ea565b90505f61088c8234612609565b90505f610898826113ca565b90505f6108a583836125ea565b90505f346108b1611cc2565b036108f55750600b5481906108d2906b0295be96e640669720000000612609565b8311156108f557600b546108f2906b0295be96e640669720000000612609565b92505b82600b5f828254610906919061261c565b9091555050335f908152601060205260408120805486929061092990849061261c565b90915550505f81900361098657858310156109865760405162461bcd60e51b815260206004820152601b60248201527f536c69707061676520416d6f756e74205265737472696374696f6e00000000006044820152606401610809565b5f80600d541180156109a357506009546001600160a01b03163314155b15610a13575f6064600d54866109b991906125d3565b6109c391906125ea565b90505f6109d08287612609565b905081600f546109e0919061261c565b600f55335f9081526011602052604081208054839290610a0190849061261c565b90915550909550859250610a3a915050565b335f9081526011602052604081208054869290610a3190849061261c565b90915550849150505b84600a5f828254610a4b919061261c565b90915550610a5c90503033866118f1565b6040515f9073cde357abbdf15da7cce4b51ce70a1d0f08dfb7829088908381818185875af1925050503d805f8114610aaf576040519150601f19603f3d011682016040523d82523d5f602084013e610ab4565b606091505b50508091505080610ad75760405162461bcd60e51b81526004016108099061262f565b673782dace9d9000004710158015610af95750600954600160a01b900460ff16155b15610b0e57610b06611cf9565b610b0e611e9c565b60095460408051848152600160a01b90920460ff16151560208301528791309133917f5a0af774ee3d8ed76925c1f5ef3b3d0965aa7469b7a1a2078d02ffb36adab956910160405180910390a45050505050505050565b5f336107b0818585610b77838361172c565b610b81919061261c565b611756565b6001600160a01b0382165f9081526011602052604081205482811015610bee5760405162461bcd60e51b815260206004820152601f60248201527f496e73756666696369656e74207573657220746f6b656e2062616c616e6365006044820152606401610809565b6009545f90600160a81b900460ff16610c39576001600160a01b0385165f908152601060205260409020548290610c269086906125d3565b610c3091906125ea565b925050506107b6565b600a546001600160a01b0386165f908152601060205260409020541015610cb8576001600160a01b0385165f90815260106020526040902054600a54610c7f9190612609565b9050610c8c6005826125ea565b6001600160a01b0386165f90815260106020526040902054909150610cb1908261261c565b9050610cbd565b50600a545b81610c2685836125d3565b600954600160a01b900460ff1615610cf25760405162461bcd60e51b81526004016108099061257a565b5f8111610d415760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610809565b6006805461ff0019166101001790555f610d5b3383610b86565b90506b033b2e3c9fd0803ce800000082610d89306001600160a01b03165f9081526020819052604090205490565b610d93919061261c565b03610dc557506009544790600160a81b900460ff16610dbc57335f908152601060205260408120555b5f600a5561107c565b600954600160a81b900460ff16610e1757335f9081526010602052604081208054839290610df4908490612609565b9250508190555080600a5f828254610e0c9190612609565b9091555061107c9050565b335f90815260106020526040902054811115611065575f8083118015610e635750335f90815260116020526040902054606490610e559060196125d3565b610e5f91906125ea565b8311155b15610e9657335f90815260106020526040902054606490610e859060196125d3565b610e8f91906125ea565b905061101b565b335f90815260116020526040902054606490610eb39060196125d3565b610ebd91906125ea565b8310158015610ef25750335f90815260116020526040902054606490610ee49060326125d3565b610eee91906125ea565b8311155b15610f1457335f90815260106020526040902054606490610e859060326125d3565b335f90815260116020526040902054606490610f319060326125d3565b610f3b91906125ea565b8310158015610f705750335f90815260116020526040902054606490610f6290604b6125d3565b610f6c91906125ea565b8311155b15610f9257335f90815260106020526040902054606490610e8590604b6125d3565b335f90815260116020526040902054606490610faf90604b6125d3565b610fb991906125ea565b8310158015610fed5750335f90815260116020526040902054606490610fdf90826125d3565b610fe991906125ea565b8311155b1561101b57335f9081526010602052604090205460649061100e90826125d3565b61101891906125ea565b90505b335f90815260106020526040902054611035908290612609565b335f90815260106020526040812091909155600a8054849290611059908490612609565b9091555061107c915050565b80600a5f8282546110769190612609565b90915550505b5f606461108a6002846125d3565b61109491906125ea565b90505f80600e541180156110b357506009546001600160a01b03163314155b15611125575f6064600e54866110c991906125d3565b6110d391906125ea565b90505f6110e08287612609565b335f90815260116020526040812080549293508892909190611103908490612609565b9091555050600f5461111690839061261c565b600f55945084915061114c9050565b335f9081526011602052604081208054869290611143908490612609565b90915550849150505b83600b5f82825461115d9190612609565b9091555061116e90503330836118f1565b5f3361117a8486612609565b6040515f81818185875af1925050503d805f81146111b3576040519150601f19603f3d011682016040523d82523d5f602084013e6111b8565b606091505b505080915050806111db5760405162461bcd60e51b81526004016108099061262f565b60405173cde357abbdf15da7cce4b51ce70a1d0f08dfb7829084905f81818185875af1925050503d805f811461122c576040519150601f19603f3d011682016040523d82523d5f602084013e611231565b606091505b505080915050806112545760405162461bcd60e51b81526004016108099061262f565b8330337f8f9e1c6f80a0fd25dc246f3b0a51422fce2a5f211d4f9877c7ec20b6499c939f6112828785612609565b60408051918252602082018890520160405180910390a45050505050565b6009546001600160a01b031633146112fa5760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d70740000000000006044820152606401610809565b5f600d819055600e81905560405142917fe152e1da2b9dec2b9e74f5d2a9c960dc8b7ed13dba2f3cfa44c037ad64f17c8c91a2565b6008805461133c90612542565b80601f016020809104026020016040519081016040528092919081815260200182805461136890612542565b80156113b35780601f1061138a576101008083540402835291602001916113b3565b820191905f5260205f20905b81548152906001019060200180831161139657829003601f168201915b505050505081565b60606004805461072290612542565b5f673782dace9d90000082600a546113e2919061261c565b111561142c5760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b6044820152606401610809565b5f611435611fe4565b90505f673782dace9d90000061144c6006866125ea565b600a54611459919061261c565b60646114676103e8866125d3565b61147191906125ea565b61147b91906125d3565b61148591906125ea565b61148f908361261c565b9050806114a485670de0b6b3a76400006125d3565b6114ae91906125ea565b949350505050565b5f33816114c3828661172c565b9050838110156115235760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610809565b6107d48286868403611756565b5f336107b08185856118f1565b6009546001600160a01b031633146115975760405162461bcd60e51b815260206004820152601a60248201527f556e617574686f72697a656420526573657420417474656d70740000000000006044820152606401610809565b6115a981670de0b6b3a76400006125d3565b60058190556040514291907f29f615861084a72d9d58ab3b0a97b796c5111de38ade89b11aefca1e3be7974b905f90a350565b5f601482111561163a5760405162461bcd60e51b815260206004820152602360248201527f536c6970706167652063616e6e6f742062652067726561746572207468616e2060448201526232302560e81b6064820152608401610809565b5f60646116486002866125d3565b61165291906125ea565b905061165e8185612609565b93505f61166a856113ca565b600d54909150156116a0575f6064600d548361168691906125d3565b61169091906125ea565b905061169c8183612609565b9150505b60646116ac85836125d3565b6116b691906125ea565b93506116c28482612609565b95945050505050565b5f47673782dace9d9000001161171f5760405162461bcd60e51b8152602060048201526019602482015278131a5c5d5a591a5d1e481d185c99d95d08195e18d959591959603a1b6044820152606401610809565b611727611cc2565b905090565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166117b85760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610809565b6001600160a01b0382166118195760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610809565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611884848461172c565b90505f1981146118eb57818110156118de5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610809565b6118eb8484848403611756565b50505050565b5f80600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611944573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119689190612658565b600954909150600160a01b900460ff1615611b7c57600754611993906001600160a01b031682612024565b5f600d541180156119b157506007546001600160a01b038681169116145b80156119cb57506009546001600160a01b03858116911614155b15611a1a576064600d54846119e091906125d3565b6119ea91906125ea565b91505f6119f78385612609565b905082600f54611a07919061261c565b600f55925082611a188630856120e3565b505b5f600e54118015611a3857506007546001600160a01b038581169116145b8015611a5257506009546001600160a01b03868116911614155b15611aa1576064600e5484611a6791906125d3565b611a7191906125ea565b91505f611a7e8385612609565b905082600f54611a8e919061261c565b600f55925082611a9f8630856120e3565b505b6009546001600160a01b03858116911614801590611acd57506007546001600160a01b03858116911614155b8015611ae457506001600160a01b03841661dead14155b15611b3357600c5483611b0b866001600160a01b03165f9081526020819052604090205490565b611b15919061261c565b1115611b335760405162461bcd60e51b815260040161080990612673565b611b3e8585856120e3565b6007546001600160a01b03868116911614801590611b6a57506007546001600160a01b03858116911614155b15611b7757611b77612285565b611cbb565b6001600160a01b03841630141580611b9d57506001600160a01b0385163014155b15611c205760065460ff16151580611bbe5750600654610100900460ff1615155b611c145760405162461bcd60e51b815260206004820152602160248201527f5072652d6c697374696e67207472616e7366657273204e6f7420416c6c6f77656044820152601960fa1b6064820152608401610809565b6006805461ffff191690555b6009546001600160a01b03858116911614801590611c4757506001600160a01b0384163014155b8015611c6157506007546001600160a01b03858116911614155b15611cb057600c5483611c88866001600160a01b03165f9081526020819052604090205490565b611c92919061261c565b1115611cb05760405162461bcd60e51b815260040161080990612673565b611cbb8585856120e3565b5050505050565b5f611ccf60026064612609565b600a54611ce490673782dace9d900000612609565b611cef9060646125d3565b61172791906125ea565b60098054600160a01b60ff60a01b1990911617905560065460405163f305d71960e01b815230600482018190526aa56fa5b99019a5c800000060248301525f60448301819052606483015260848201524260a4820152620100009091046001600160a01b03169063f305d71990479060c40160606040518083038185885af1158015611d87573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611dac91906126c0565b50506007546040516370a0823160e01b81523060048201525f92506001600160a01b03909116906370a0823190602401602060405180830381865afa158015611df7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e1b91906126eb565b60075460405163a9059cbb60e01b815261dead6004820152602481018390529192506001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611e6c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e909190612702565b50611e99612285565b50565b600f545f9015611f1857600f546040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611ee3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f0791906126eb565b611f119190612609565b9050611f79565b6040516370a0823160e01b81523060048201819052906370a0823190602401602060405180830381865afa158015611f52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f7691906126eb565b90505b60405163a9059cbb60e01b815261dead600482015260248101829052309063a9059cbb906044016020604051808303815f875af1158015611fbc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe09190612702565b5050565b5f6101776120006103e86b0295be96e6406697200000006125d3565b61200a91906125ea565b611cef673782dace9d900000670de0b6b3a76400006125d3565b5f19600c5403612032575050565b6040516370a0823160e01b81526001600160a01b0383811660048301525f91908316906370a0823190602401602060405180830381865afa158015612079573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209d91906126eb565b90506753444835ec58000081106120b4575f19600c555b60405142907f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001905f90a2505050565b6001600160a01b0383166121475760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610809565b6001600160a01b0382166121a95760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610809565b6001600160a01b0383165f90815260208190526040902054818110156122205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610809565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36118eb565b600554600f54101561229357565b61229e600f546122a4565b5f600f55565b6040805160028082526060820183525f9260208301908036833701905050905030815f815181106122d7576122d7612721565b60200260200101906001600160a01b031690816001600160a01b031681525050600660029054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612348573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236c9190612658565b8160018151811061237f5761237f612721565b6001600160a01b03928316602091820292909201015260065460095460405163791ac94760e01b81526201000090920483169263791ac947926123d09287925f928892909116904290600401612735565b5f604051808303815f87803b1580156123e7575f80fd5b505af11580156123f9573d5f803e3d5ffd5b505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b0381168114611e99575f80fd5b5f806040838503121561245b575f80fd5b823561246681612436565b946020939093013593505050565b5f805f60608486031215612486575f80fd5b833561249181612436565b925060208401356124a181612436565b929592945050506040919091013590565b5f602082840312156124c2575f80fd5b5035919050565b5f602082840312156124d9575f80fd5b81356124e481612436565b9392505050565b5f80604083850312156124fc575f80fd5b50508035926020909101359150565b5f806040838503121561251c575f80fd5b823561252781612436565b9150602083013561253781612436565b809150509250929050565b600181811c9082168061255657607f821691505b60208210810361257457634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526025908201527f4c697175696469747920697320616c726561647920616464656420746f20556e604082015264069737761760dc1b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107b6576107b66125bf565b5f8261260457634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156107b6576107b66125bf565b808201808211156107b6576107b66125bf565b6020808252600f908201526e151c985b9cd9995c8819985a5b1959608a1b604082015260600190565b5f60208284031215612668575f80fd5b81516124e481612436565b6020808252602d908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61782060408201526c1dd85b1b195d08185b5bdd5b9d609a1b606082015260800190565b5f805f606084860312156126d2575f80fd5b5050815160208301516040909301519094929350919050565b5f602082840312156126fb575f80fd5b5051919050565b5f60208284031215612712575f80fd5b815180151581146124e4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b818110156127855783516001600160a01b031683526020938401939092019160010161275e565b50506001600160a01b03959095166060840152505060800152939250505056fea264697066735822122041d91b542b1c4efacd5f81aede31e12fae41802a9c74da65609a5b0226a0e25364736f6c634300081a0033a264697066735822122003d064539e6cbb9c1fa81a4cd31ad3ee61768ad345a819e57a6ebf3d319c8dd364736f6c634300081a0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.