More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Renounce Ownersh... | 55010332 | 253 days ago | IN | 0 POL | 0.00070988 | ||||
Approve | 55009863 | 253 days ago | IN | 0 POL | 0.00139075 | ||||
Vesting_Team_Inv... | 55009453 | 253 days ago | IN | 0 POL | 0.00496092 | ||||
Vesting_Airdrop_... | 55009427 | 253 days ago | IN | 0 POL | 0.00598554 | ||||
Enable Reward | 55009389 | 253 days ago | IN | 0 POL | 0.00113408 | ||||
Enable Auto Burn | 55009370 | 253 days ago | IN | 0 POL | 0.00164578 |
Loading...
Loading
Contract Name:
FEMYFIToken
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
london EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@openzeppelin/contracts/utils/Context.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; /* For lines that are marked ERC20 Token Standard, learn more at https://eips.ethereum.org/EIPS/eip-20. */ contract FEMYFIToken is Context, IERC20, Ownable, ReentrancyGuard { // Keeps track of balances for address that are included in receiving reward. mapping (address => uint256) private _reflectionBalances; // Keeps track of balances for address that are excluded from receiving reward. mapping (address => uint256) private _tokenBalances; // Keeps track of which address are excluded from fee. mapping (address => bool) private _isExcludedFromFee; // Keeps track of which address are excluded from reward. mapping (address => bool) private _isExcludedFromReward; // An array of addresses that are excluded from reward. address[] private _excludedFromReward; // ERC20 Token Standard mapping (address => mapping (address => uint256)) private _allowances; // Where burnt tokens are sent to. This is an address that no one can have accesses to. address private constant burnAccount = 0x000000000000000000000000000000000000dEaD; address private constant timeLockBeneficiaryAccount = 0xa3c1C72dad58fF757023E06Ac3917Cfaa904342D; address private constant airDropMarketingAccount = 0x4e05593B314cd9b3240689b89020b345978aa050; /* Tax rate = (_taxXXX / 10**_tax_XXXDecimals) percent. For example: if _taxBurn is 1 and _taxBurnDecimals is 2. Tax rate = 0.01% If you want tax rate for burn to be 5% for example, set _taxBurn to 5 and _taxBurnDecimals to 0. 5 * (10 ** 0) = 5 */ // Decimals of taxBurn. Used for have tax less than 1%. uint8 private _taxBurnDecimals; // Decimals of taxReward. Used for have tax less than 1%. uint8 private _taxRewardDecimals; // This percent of a transaction will be burnt. uint8 private _taxBurn; // This percent of a transaction will be redistribute to all holders. uint8 private _taxReward; // ERC20 Token Standard uint8 private _decimals; // ERC20 Token Standard uint256 private _totalSupply; // Current supply:= total supply - burnt tokens uint256 private _currentSupply; // A number that helps distributing fees to all holders respectively. uint256 private _reflectionTotal; // Total amount of tokens rewarded / distributing. uint256 private _totalRewarded; // Total amount of tokens burnt. uint256 private _totalBurnt; // Total amount of tokens investing. uint256 private _vestingTeamSupply; uint256 private _vestingAirdropSupply; uint256 private _vestingTotal; // ERC20 Token Standard string private _name; // ERC20 Token Standard string private _symbol; bool private _autoBurnEnabled; bool private _rewardEnabled; // Return values of _getValues function. struct ValuesFromAmount { // Amount of tokens for to transfer. uint256 amount; // Amount tokens charged for burning. uint256 tBurnFee; // Amount tokens charged to reward. uint256 tRewardFee; // Amount tokens after fees. uint256 tTransferAmount; // Reflection of amount. uint256 rAmount; // Reflection of burn fee. uint256 rBurnFee; // Reflection of reward fee. uint256 rRewardFee; // Reflection of transfer amount. uint256 rTransferAmount; } struct Timelock { uint256 amount; address beneficiary; uint256 releaseTime; } uint256 constant TEAM_LOCK_DURATION = 365 days; uint256 constant MARKETING_LOCK_DURATION = 180 days; /* Events */ event Burn(address from, uint256 amount); event TaxBurnUpdate(uint8 previousTax, uint8 previousDecimals, uint8 currentTax, uint8 currentDecimal); event TaxRewardUpdate(uint8 previousTax, uint8 previousDecimals, uint8 currentTax, uint8 currentDecimal); event MinTokensBeforeSwapUpdated(uint256 previous, uint256 current); event ExcludeAccountFromReward(address account); event IncludeAccountInReward(address account); event ExcludeAccountFromFee(address account); event IncludeAccountInFee(address account); event EnabledAutoBurn(); event EnabledReward(); event DisabledAutoBurn(); event DisabledReward(); event Airdrop(uint256 amount); mapping(address => Timelock) private timelocks; constructor (string memory name_, string memory symbol_, uint8 decimals_, uint256 tokenSupply_) { // Sets the values for `name`, `symbol`, `totalSupply`, `currentSupply`, and `rTotal`. _name = name_; _symbol = symbol_; _decimals = decimals_; _totalSupply = tokenSupply_ * (10 ** decimals_); _currentSupply = _totalSupply; _vestingTeamSupply = (_totalSupply * 10 )/ 100; _vestingAirdropSupply = (_totalSupply * 10 )/ 100; _reflectionTotal = (~uint256(0) - (~uint256(0) % _totalSupply)); // Mint _reflectionBalances[_msgSender()] = _reflectionTotal; // exclude owner and this contract from fee. excludeAccountFromFee(owner()); excludeAccountFromFee(address(this)); excludeAccountFromFee(burnAccount); excludeAccountFromFee(timeLockBeneficiaryAccount); excludeAccountFromFee(airDropMarketingAccount); // exclude owner, burnAccount, and this contract from receiving rewards. _excludeAccountFromReward(owner()); _excludeAccountFromReward(burnAccount); _excludeAccountFromReward(address(this)); _excludeAccountFromReward(timeLockBeneficiaryAccount); _excludeAccountFromReward(airDropMarketingAccount); emit Transfer(address(0), _msgSender(), _totalSupply); } // allow the contract to receive ETH receive() external payable {} function vesting_Team_Investors(address _beneficiary) public onlyOwner { uint256 releaseTime = block.timestamp + TEAM_LOCK_DURATION; _transfer(_msgSender(), address(this), _vestingTeamSupply); // transfert les jetons vers le contrat de vesting timelocks[_beneficiary] = Timelock(_vestingTeamSupply, _beneficiary, releaseTime); } function vesting_Airdrop_Marketing(address _beneficiary) public onlyOwner { uint256 releaseTime = block.timestamp + MARKETING_LOCK_DURATION; _transfer(_msgSender(), address(this), _vestingAirdropSupply); // transfert les jetons vers le contrat de vesting timelocks[_beneficiary] = Timelock(_vestingAirdropSupply, _beneficiary, releaseTime); } function releaseTokens() public nonReentrant() { Timelock storage timelock = timelocks[msg.sender]; require(timelock.beneficiary == msg.sender, "You don't have any timelocked tokens"); require(block.timestamp >= timelock.releaseTime, "Timelock not expired yet"); _transfer(address(this), msg.sender, timelock.amount); delete timelocks[msg.sender]; } function getRemainingTime(address account) public view returns (uint256) { Timelock storage timelock = timelocks[account]; require(timelock.beneficiary == account, "No timelock found for this account"); if (block.timestamp >= timelock.releaseTime) { return 0; // Verrouillage expiré } else { return timelock.releaseTime - block.timestamp; } } function checkRemainingTime() public view returns (uint256) { return getRemainingTime(msg.sender); } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual 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`). * * 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 returns (uint8) { return _decimals; } /** * @dev Returns the current burn tax. */ function taxBurn() public view virtual returns (uint8) { return _taxBurn; } /** * @dev Returns the current reward tax. */ function taxReward() public view virtual returns (uint8) { return _taxReward; } /** * @dev Returns the current burn tax decimals. */ function taxBurnDecimals() public view virtual returns (uint8) { return _taxBurnDecimals; } /** * @dev Returns the current reward tax decimals. */ function taxRewardDecimals() public view virtual returns (uint8) { return _taxRewardDecimals; } /** * @dev Returns true if auto burn feature is enabled. */ function autoBurnEnabled() public view virtual returns (bool) { return _autoBurnEnabled; } /** * @dev Returns true if reward feature is enabled. */ function rewardEnabled() public view virtual returns (bool) { return _rewardEnabled; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() external view virtual override returns (uint256) { return _totalSupply; } /** * @dev Returns current supply of the token. * (currentSupply := totalSupply - totalBurnt) */ function currentSupply() external view virtual returns (uint256) { return _currentSupply; } /** * @dev Returns the total number of tokens burnt. */ function totalBurnt() external view virtual returns (uint256) { return _totalBurnt; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { if (_isExcludedFromReward[account]) return _tokenBalances[account]; return tokenFromReflection(_reflectionBalances[account]); } /** * @dev Returns whether an account is excluded from reward. */ function isExcludedFromReward(address account) external view returns (bool) { return _isExcludedFromReward[account]; } /** * @dev Returns whether an account is excluded from fee. */ function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, 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}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), 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}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); require(_allowances[sender][_msgSender()] >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - 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) { _approve(_msgSender(), spender, _allowances[_msgSender()][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) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Burn} event indicating the amount burnt. * Emits a {Transfer} event with `to` set to the burn 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 != burnAccount, "ERC20: burn from the burn address"); uint256 accountBalance = balanceOf(account); require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); uint256 rAmount = _getRAmount(amount); // Transfer from account to the burnAccount if (_isExcludedFromReward[account]) { _tokenBalances[account] -= amount; } _reflectionBalances[account] -= rAmount; _tokenBalances[burnAccount] += amount; _reflectionBalances[burnAccount] += rAmount; _currentSupply -= amount; _totalBurnt += amount; emit Burn(account, amount); emit Transfer(account, burnAccount, amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is 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 Moves tokens `amount` from `sender` to `recipient`. * * This is 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: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); ValuesFromAmount memory values = _getValues(amount, _isExcludedFromFee[sender]); if (_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) { _transferFromExcluded(sender, recipient, values); } else if (!_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferToExcluded(sender, recipient, values); } else if (!_isExcludedFromReward[sender] && !_isExcludedFromReward[recipient]) { _transferStandard(sender, recipient, values); } else if (_isExcludedFromReward[sender] && _isExcludedFromReward[recipient]) { _transferBothExcluded(sender, recipient, values); } else { _transferStandard(sender, recipient, values); } emit Transfer(sender, recipient, values.tTransferAmount); if (!_isExcludedFromFee[sender]) { _afterTokenTransfer(values); } } /** * @dev Performs all the functionalities that are enabled. */ function _afterTokenTransfer(ValuesFromAmount memory values) internal virtual { // Burn if (_autoBurnEnabled) { _tokenBalances[address(this)] += values.tBurnFee; _reflectionBalances[address(this)] += values.rBurnFee; _approve(address(this), _msgSender(), values.tBurnFee); burnFrom(address(this), values.tBurnFee); } // Reflect if (_rewardEnabled) { _distributeFee(values.rRewardFee, values.tRewardFee); } } /** * @dev Performs transfer between two accounts that are both included in receiving reward. */ function _transferStandard(address sender, address recipient, ValuesFromAmount memory values) private { _reflectionBalances[sender] = _reflectionBalances[sender] - values.rAmount; _reflectionBalances[recipient] = _reflectionBalances[recipient] + values.rTransferAmount; } /** * @dev Performs transfer from an included account to an excluded account. * (included and excluded from receiving reward.) */ function _transferToExcluded(address sender, address recipient, ValuesFromAmount memory values) private { _reflectionBalances[sender] = _reflectionBalances[sender] - values.rAmount; _tokenBalances[recipient] = _tokenBalances[recipient] + values.tTransferAmount; _reflectionBalances[recipient] = _reflectionBalances[recipient] + values.rTransferAmount; } /** * @dev Performs transfer from an excluded account to an included account. * (included and excluded from receiving reward.) */ function _transferFromExcluded(address sender, address recipient, ValuesFromAmount memory values) private { _tokenBalances[sender] = _tokenBalances[sender] - values.amount; _reflectionBalances[sender] = _reflectionBalances[sender] - values.rAmount; _reflectionBalances[recipient] = _reflectionBalances[recipient] + values.rTransferAmount; } /** * @dev Performs transfer between two accounts that are both excluded in receiving reward. */ function _transferBothExcluded(address sender, address recipient, ValuesFromAmount memory values) private { _tokenBalances[sender] = _tokenBalances[sender] - values.amount; _reflectionBalances[sender] = _reflectionBalances[sender] - values.rAmount; _tokenBalances[recipient] = _tokenBalances[recipient] + values.tTransferAmount; _reflectionBalances[recipient] = _reflectionBalances[recipient] + values.rTransferAmount; } /** * @dev Destroys `amount` tokens from the caller. * */ function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } /** * @dev Destroys `amount` tokens from `account`, deducting from the caller's * allowance. * * See {ERC20-_burn} and {ERC20-allowance}. * * Requirements: * * - the caller must have allowance for ``accounts``'s tokens of at least * `amount`. */ function burnFrom(address account, uint256 amount) public virtual { uint256 currentAllowance = allowance(account, _msgSender()); require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance"); _approve(account, _msgSender(), currentAllowance - amount); _burn(account, amount); } /** * @dev Excludes an account from receiving reward. * * Emits a {ExcludeAccountFromReward} event. * * Requirements: * * - `account` is included in receiving reward. */ function _excludeAccountFromReward(address account) internal { require(!_isExcludedFromReward[account], "Account is already excluded."); if(_reflectionBalances[account] > 0) { _tokenBalances[account] = tokenFromReflection(_reflectionBalances[account]); } _isExcludedFromReward[account] = true; _excludedFromReward.push(account); emit ExcludeAccountFromReward(account); } /** * @dev Includes an account from receiving reward. * * Emits a {IncludeAccountInReward} event. * * Requirements: * * - `account` is excluded in receiving reward. */ function _includeAccountInReward(address account) internal { require(_isExcludedFromReward[account], "Account is already included."); for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_excludedFromReward[i] == account) { _excludedFromReward[i] = _excludedFromReward[_excludedFromReward.length - 1]; _tokenBalances[account] = 0; _isExcludedFromReward[account] = false; _excludedFromReward.pop(); break; } } emit IncludeAccountInReward(account); } /** * @dev Excludes an account from fee. * * Emits a {ExcludeAccountFromFee} event. * * Requirements: * * - `account` is included in fee. */ function excludeAccountFromFee(address account) internal { require(!_isExcludedFromFee[account], "Account is already excluded."); _isExcludedFromFee[account] = true; emit ExcludeAccountFromFee(account); } /** * @dev Includes an account from fee. * * Emits a {IncludeAccountFromFee} event. * * Requirements: * * - `account` is excluded in fee. */ function includeAccountInFee(address account) internal { require(_isExcludedFromFee[account], "Account is already included."); _isExcludedFromFee[account] = false; emit IncludeAccountInFee(account); } /** * @dev Returns the reflected amount of a token. * Requirements: * - `amount` must be less than total supply. */ function reflectionFromToken(uint256 amount, bool deductTransferFee) internal view returns(uint256) { require(amount <= _totalSupply, "Amount must be less than supply"); ValuesFromAmount memory values = _getValues(amount, deductTransferFee); return values.rTransferAmount; } /** * @dev Used to figure out the balance after reflection. * Requirements: * - `rAmount` must be less than reflectTotal. */ function tokenFromReflection(uint256 rAmount) internal view returns(uint256) { require(rAmount <= _reflectionTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount / currentRate; } /** * @dev Distribute the `tRewardFee` tokens to all holders that are included in receiving reward. * amount received is based on how many token one owns. */ function _distributeFee(uint256 rRewardFee, uint256 tRewardFee) private { // This would decrease rate, thus increase amount reward receive based on one's balance. _reflectionTotal = _reflectionTotal - rRewardFee; _totalRewarded += tRewardFee; } /** * @dev Returns the total number of tokens rewarded. */ function totalRewarded() external view virtual returns (uint256) { return _totalRewarded; } /** * @dev Returns fees and transfer amount in both tokens and reflections. * tXXXX stands for tokenXXXX * rXXXX stands for reflectionXXXX * More details can be found at comments for ValuesForAmount Struct. */ function _getValues(uint256 amount, bool deductTransferFee) private view returns (ValuesFromAmount memory) { ValuesFromAmount memory values; values.amount = amount; _getTValues(values, deductTransferFee); _getRValues(values, deductTransferFee); return values; } /** * @dev Adds fees and transfer amount in tokens to `values`. * tXXXX stands for tokenXXXX * More details can be found at comments for ValuesForAmount Struct. */ function _getTValues(ValuesFromAmount memory values, bool deductTransferFee) view private { if (deductTransferFee) { values.tTransferAmount = values.amount; } else { // calculate fee values.tBurnFee = _calculateTax(values.amount, _taxBurn, _taxBurnDecimals); values.tRewardFee = _calculateTax(values.amount, _taxReward, _taxRewardDecimals); // amount after fee values.tTransferAmount = values.amount - values.tBurnFee - values.tRewardFee; } } /** * @dev Adds fees and transfer amount in reflection to `values`. * rXXXX stands for reflectionXXXX * More details can be found at comments for ValuesForAmount Struct. */ function _getRValues(ValuesFromAmount memory values, bool deductTransferFee) view private { uint256 currentRate = _getRate(); values.rAmount = values.amount * currentRate; if (deductTransferFee) { values.rTransferAmount = values.rAmount; } else { values.rAmount = values.amount * currentRate; values.rBurnFee = values.tBurnFee * currentRate; values.rRewardFee = values.tRewardFee * currentRate; values.rTransferAmount = values.rAmount - values.rBurnFee - values.rRewardFee; } } /** * @dev Returns `amount` in reflection. */ function _getRAmount(uint256 amount) private view returns (uint256) { uint256 currentRate = _getRate(); return amount * currentRate; } /** * @dev Returns the current reflection rate. */ function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply / tSupply; } /** * @dev Returns the current reflection supply and token supply. */ function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _reflectionTotal; uint256 tSupply = _totalSupply; for (uint256 i = 0; i < _excludedFromReward.length; i++) { if (_reflectionBalances[_excludedFromReward[i]] > rSupply || _tokenBalances[_excludedFromReward[i]] > tSupply) return (_reflectionTotal, _totalSupply); rSupply = rSupply - _reflectionBalances[_excludedFromReward[i]]; tSupply = tSupply - _tokenBalances[_excludedFromReward[i]]; } if (rSupply < _reflectionTotal / _totalSupply) return (_reflectionTotal, _totalSupply); return (rSupply, tSupply); } /** * @dev Returns fee based on `amount` and `taxRate` */ function _calculateTax(uint256 amount, uint8 tax, uint8 taxDecimals_) private pure returns (uint256) { return amount * tax / (10 ** taxDecimals_) / (10 ** 2); } /* Owner functions */ /** * @dev Enables the auto burn feature. * Burn transaction amount * `taxBurn_` amount of tokens each transaction when enabled. * * Emits a {EnabledAutoBurn} event. * * Requirements: * * - auto burn feature mush be disabled. * - tax must be greater than 0. * - tax decimals + 2 must be less than token decimals. * (because tax rate is in percentage) */ function enableAutoBurn(uint8 taxBurn_, uint8 taxBurnDecimals_) public onlyOwner { require(!_autoBurnEnabled, "Auto burn feature is already enabled."); require(taxBurn_ > 0, "Tax must be greater than 0."); require(taxBurnDecimals_ + 2 <= decimals(), "Tax decimals must be less than token decimals - 2"); _autoBurnEnabled = true; setTaxBurn(taxBurn_, taxBurnDecimals_); emit EnabledAutoBurn(); } /** * @dev Enables the reward feature. * Distribute transaction amount * `taxReward_` amount of tokens each transaction when enabled. * * Emits a {EnabledReward} event. * * Requirements: * * - reward feature mush be disabled. * - tax must be greater than 0. * - tax decimals + 2 must be less than token decimals. * (because tax rate is in percentage) */ function enableReward(uint8 taxReward_, uint8 taxRewardDecimals_) public onlyOwner { require(!_rewardEnabled, "Reward feature is already enabled."); require(taxReward_ > 0, "Tax must be greater than 0."); require(taxRewardDecimals_ + 2 <= decimals(), "Tax decimals must be less than token decimals - 2"); _rewardEnabled = true; setTaxReward(taxReward_, taxRewardDecimals_); emit EnabledReward(); } /** * @dev Disables the auto burn feature. * * Emits a {DisabledAutoBurn} event. * * Requirements: * * - auto burn feature mush be enabled. */ function disableAutoBurn() public onlyOwner { require(_autoBurnEnabled, "Auto burn feature is already disabled."); setTaxBurn(0, 0); _autoBurnEnabled = false; emit DisabledAutoBurn(); } /** * @dev Disables the reward feature. * * Emits a {DisabledReward} event. * * Requirements: * * - reward feature mush be enabled. */ function disableReward() public onlyOwner { require(_rewardEnabled, "Reward feature is already disabled."); setTaxReward(0, 0); _rewardEnabled = false; emit DisabledReward(); } /** * @dev Updates taxBurn * * Emits a {TaxBurnUpdate} event. * * Requirements: * * - auto burn feature must be enabled. * - total tax rate must be less than 100%. */ function setTaxBurn(uint8 taxBurn_, uint8 taxBurnDecimals_) public onlyOwner { require(_autoBurnEnabled, "Auto burn feature must be enabled. Try the EnableAutoBurn function."); require(taxBurn_ + _taxReward < 100, "Tax fee too high."); uint8 previousTax = _taxBurn; uint8 previousDecimals = _taxBurnDecimals; _taxBurn = taxBurn_; _taxBurnDecimals = taxBurnDecimals_; emit TaxBurnUpdate(previousTax, previousDecimals, taxBurn_, taxBurnDecimals_); } /** * @dev Updates taxReward * Emits a {TaxRewardUpdate} event. * Requirements: * - reward feature must be enabled. * - total tax rate must be less than 100%. */ function setTaxReward(uint8 taxReward_, uint8 taxRewardDecimals_) public onlyOwner { require(_rewardEnabled, "Reward feature must be enabled. Try the EnableReward function."); require(_taxBurn + taxReward_ < 100, "Tax fee too high."); uint8 previousTax = _taxReward; uint8 previousDecimals = _taxRewardDecimals; _taxReward = taxReward_; _taxRewardDecimals = taxRewardDecimals_; emit TaxRewardUpdate(previousTax, previousDecimals, taxReward_, taxRewardDecimals_); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; import "./IERC20.sol"; import "./extensions/IERC20Metadata.sol"; import "../../utils/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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * 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}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * 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 value {ERC20} uses, unless this function is * 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; } _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; _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; } _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 // OpenZeppelin Contracts (last updated v4.6.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); }
// 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 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "evmVersion": "london", "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint8","name":"decimals_","type":"uint8"},{"internalType":"uint256","name":"tokenSupply_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"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":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledAutoBurn","type":"event"},{"anonymous":false,"inputs":[],"name":"DisabledReward","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledAutoBurn","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeAccountFromReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"IncludeAccountInReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"previous","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"current","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"previousTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"previousDecimals","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"currentTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"currentDecimal","type":"uint8"}],"name":"TaxBurnUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"previousTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"previousDecimals","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"currentTax","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"currentDecimal","type":"uint8"}],"name":"TaxRewardUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkRemainingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSupply","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":"disableAutoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxBurn_","type":"uint8"},{"internalType":"uint8","name":"taxBurnDecimals_","type":"uint8"}],"name":"enableAutoBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxReward_","type":"uint8"},{"internalType":"uint8","name":"taxRewardDecimals_","type":"uint8"}],"name":"enableReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getRemainingTime","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"releaseTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxBurn_","type":"uint8"},{"internalType":"uint8","name":"taxBurnDecimals_","type":"uint8"}],"name":"setTaxBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"taxReward_","type":"uint8"},{"internalType":"uint8","name":"taxRewardDecimals_","type":"uint8"}],"name":"setTaxReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBurn","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxBurnDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReward","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRewardDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRewarded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"vesting_Airdrop_Marketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"vesting_Team_Investors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620031cc380380620031cc8339810160408190526200003491620007c0565b6200003f3362000236565b600180556011620000518582620008da565b506012620000608482620008da565b506008805460ff60201b191664010000000060ff8516021790556200008782600a62000abb565b62000093908262000acc565b6009819055600a818155606491620000ab9162000acc565b620000b7919062000afc565b600e55600954606490620000cd90600a62000acc565b620000d9919062000afc565b600f55600954620000ed9060001962000b13565b620000fb9060001962000b2a565b600b819055336000908152600260205260408120919091555462000128906001600160a01b031662000286565b620001333062000286565b6200014061dead62000286565b6200015f73a3c1c72dad58ff757023e06ac3917cfaa904342d62000286565b6200017e734e05593b314cd9b3240689b89020b345978aa05062000286565b6200019b620001956000546001600160a01b031690565b62000350565b620001a861dead62000350565b620001b33062000350565b620001d273a3c1c72dad58ff757023e06ac3917cfaa904342d62000350565b620001f1734e05593b314cd9b3240689b89020b345978aa05062000350565b60095460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050505062000b72565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811660009081526004602052604090205460ff1615620002f55760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e0000000060448201526064015b60405180910390fd5b6001600160a01b038116600081815260046020908152604091829020805460ff1916600117905590519182527f7e35d6b74d35c333860340884eeca4e63b18cb9d73ce17a147a1952654365b5e91015b60405180910390a150565b6001600160a01b03811660009081526005602052604090205460ff1615620003bb5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401620002ec565b6001600160a01b0381166000908152600260205260409020541562000418576001600160a01b038116600090815260026020526040902054620003fe90620004af565b6001600160a01b0382166000908152600360205260409020555b6001600160a01b0381166000818152600560209081526040808320805460ff191660019081179091556006805491820181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90920180546001600160a01b0319168417905590519182527fd29a806ac7ba79249e665eb27435d70121361773ea7475dfedd53faf9537782f910162000345565b6000600b54821115620005185760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401620002ec565b60006200052462000539565b905062000532818462000afc565b9392505050565b60008080620005476200055f565b909250905062000558818362000afc565b9250505090565b600b546009546000918291825b600654811015620006c75782600260006006848154811062000592576200059262000b40565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180620006015750816003600060068481548110620005da57620005da62000b40565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156200061857600b54600954945094505050509091565b600260006006838154811062000632576200063262000b40565b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000663908462000b2a565b925060036000600683815481106200067f576200067f62000b40565b60009182526020808320909101546001600160a01b03168352820192909252604001902054620006b0908362000b2a565b915080620006be8162000b56565b9150506200056c565b50600954600b54620006da919062000afc565b821015620006f257600b546009549350935050509091565b90939092509050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200072357600080fd5b81516001600160401b0380821115620007405762000740620006fb565b604051601f8301601f19908116603f011681019082821181831017156200076b576200076b620006fb565b816040528381526020925086838588010111156200078857600080fd5b600091505b83821015620007ac57858201830151818301840152908201906200078d565b600093810190920192909252949350505050565b60008060008060808587031215620007d757600080fd5b84516001600160401b0380821115620007ef57600080fd5b620007fd8883890162000711565b955060208701519150808211156200081457600080fd5b50620008238782880162000711565b935050604085015160ff811681146200083b57600080fd5b6060959095015193969295505050565b600181811c908216806200086057607f821691505b6020821081036200088157634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620008d557600081815260208120601f850160051c81016020861015620008b05750805b601f850160051c820191505b81811015620008d157828155600101620008bc565b5050505b505050565b81516001600160401b03811115620008f657620008f6620006fb565b6200090e816200090784546200084b565b8462000887565b602080601f8311600181146200094657600084156200092d5750858301515b600019600386901b1c1916600185901b178555620008d1565b600085815260208120601f198616915b82811015620009775788860151825594840194600190910190840162000956565b5085821015620009965787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620009fd578160001904821115620009e157620009e1620009a6565b80851615620009ef57918102915b93841c9390800290620009c1565b509250929050565b60008262000a165750600162000ab5565b8162000a255750600062000ab5565b816001811462000a3e576002811462000a495762000a69565b600191505062000ab5565b60ff84111562000a5d5762000a5d620009a6565b50506001821b62000ab5565b5060208310610133831016604e8410600b841016171562000a8e575081810a62000ab5565b62000a9a8383620009bc565b806000190482111562000ab15762000ab1620009a6565b0290505b92915050565b60006200053260ff84168362000a05565b808202811582820484141762000ab55762000ab5620009a6565b634e487b7160e01b600052601260045260246000fd5b60008262000b0e5762000b0e62000ae6565b500490565b60008262000b255762000b2562000ae6565b500690565b8181038181111562000ab55762000ab5620009a6565b634e487b7160e01b600052603260045260246000fd5b60006001820162000b6b5762000b6b620009a6565b5060010190565b61264a8062000b826000396000f3fe6080604052600436106102295760003560e01c806379cc679011610123578063a457c2d7116100ab578063d42ac3771161006f578063d42ac37714610646578063dd62ed3e14610665578063f2fde38b146106ab578063fa6e3f54146106cb578063fbfa089c146106eb57600080fd5b8063a457c2d7146105bf578063a9059cbb146105df578063a96f8668146105ff578063ad8e91dd14610614578063aed29d071461063157600080fd5b806395de632a116100f257806395de632a1461053d578063966ff6501461055d578063998acc0e146105725780639dd255da14610592578063a443fbc4146105aa57600080fd5b806379cc6790146104a757806388f82020146104c75780638da5cb5b1461050057806395d89b411461052857600080fd5b806339509351116101b1578063681bdc9911610175578063681bdc991461042857806370a0823114610448578063715018a6146104685780637656e1461461047d578063771282f61461049257600080fd5b8063395093511461037a57806342966c681461039a578063470d5cbd146103ba5780634895c3e6146103cf5780635342acb4146103ef57600080fd5b806317ee6995116101f857806317ee6995146102e657806318160ddd146103035780632275b4741461031857806323b872dd1461033a578063313ce5671461035a57600080fd5b806301b715311461023557806306fdde0314610266578063095ea7b3146102885780630e85117a146102b857600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5060085462010000900460ff165b60405160ff90911681526020015b60405180910390f35b34801561027257600080fd5b5061027b610703565b60405161025d919061226d565b34801561029457600080fd5b506102a86102a33660046122d7565b610795565b604051901515815260200161025d565b3480156102c457600080fd5b506102d86102d3366004612301565b6107ac565b60405190815260200161025d565b3480156102f257600080fd5b50601354610100900460ff166102a8565b34801561030f57600080fd5b506009546102d8565b34801561032457600080fd5b50610338610333366004612301565b61085e565b005b34801561034657600080fd5b506102a861035536600461231c565b6108e1565b34801561036657600080fd5b50600854640100000000900460ff1661024f565b34801561038657600080fd5b506102a86103953660046122d7565b6109b7565b3480156103a657600080fd5b506103386103b5366004612358565b6109ee565b3480156103c657600080fd5b506103386109fb565b3480156103db57600080fd5b506103386103ea366004612382565b610aa7565b3480156103fb57600080fd5b506102a861040a366004612301565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561043457600080fd5b50610338610443366004612382565b610be1565b34801561045457600080fd5b506102d8610463366004612301565b610d4a565b34801561047457600080fd5b50610338610da9565b34801561048957600080fd5b50610338610dbd565b34801561049e57600080fd5b50600a546102d8565b3480156104b357600080fd5b506103386104c23660046122d7565b610e66565b3480156104d357600080fd5b506102a86104e2366004612301565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050c57600080fd5b506000546040516001600160a01b03909116815260200161025d565b34801561053457600080fd5b5061027b610eee565b34801561054957600080fd5b50610338610558366004612301565b610efd565b34801561056957600080fd5b50600d546102d8565b34801561057e57600080fd5b5061033861058d366004612382565b610f7f565b34801561059e57600080fd5b5060135460ff166102a8565b3480156105b657600080fd5b506102d86110bd565b3480156105cb57600080fd5b506102a86105da3660046122d7565b6110cd565b3480156105eb57600080fd5b506102a86105fa3660046122d7565b61115e565b34801561060b57600080fd5b5061033861116b565b34801561062057600080fd5b50600854610100900460ff1661024f565b34801561063d57600080fd5b50600c546102d8565b34801561065257600080fd5b506008546301000000900460ff1661024f565b34801561067157600080fd5b506102d86106803660046123b5565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156106b757600080fd5b506103386106c6366004612301565b6112cf565b3480156106d757600080fd5b506103386106e6366004612382565b611345565b3480156106f757600080fd5b5060085460ff1661024f565b606060118054610712906123df565b80601f016020809104026020016040519081016040528092919081815260200182805461073e906123df565b801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b5050505050905090565b60006107a23384846114ab565b5060015b92915050565b6001600160a01b03808216600081815260146020526040812060018101549193909291161461082d5760405162461bcd60e51b815260206004820152602260248201527f4e6f2074696d656c6f636b20666f756e6420666f722074686973206163636f756044820152611b9d60f21b60648201526084015b60405180910390fd5b806002015442106108415750600092915050565b4281600201546108519190612429565b9392505050565b50919050565b6108666115cf565b60006108766301e133804261243c565b90506108853330600e54611629565b60408051606081018252600e5481526001600160a01b039384166020808301828152838501958652600092835260149091529290209051815590516001820180546001600160a01b031916919094161790925551600290910155565b60006108ee848484611629565b6001600160a01b03841660009081526007602090815260408083203384529091529020548211156109725760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610824565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546109ad9186916109a8908690612429565b6114ab565b5060019392505050565b3360008181526007602090815260408083206001600160a01b038716845290915281205490916107a29185906109a890869061243c565b6109f833826118ed565b50565b610a036115cf565b601354610100900460ff16610a665760405162461bcd60e51b815260206004820152602360248201527f526577617264206665617475726520697320616c72656164792064697361626c60448201526232b21760e91b6064820152608401610824565b610a71600080611345565b6013805461ff00191690556040517f9843194c3ceed34b5019222853f7806a15e8658437ee2a92d9497af23775eb1c90600090a1565b610aaf6115cf565b60135460ff1615610b105760405162461bcd60e51b815260206004820152602560248201527f4175746f206275726e206665617475726520697320616c726561647920656e61604482015264313632b21760d91b6064820152608401610824565b60008260ff1611610b635760405162461bcd60e51b815260206004820152601b60248201527f546178206d7573742062652067726561746572207468616e20302e00000000006044820152606401610824565b600854640100000000900460ff16610b7c82600261244f565b60ff161115610b9d5760405162461bcd60e51b815260040161082490612468565b6013805460ff19166001179055610bb48282610be1565b6040517f1ae0c73021a2d0e597101e249754f53e8496443b3820ba2128b562a9873ad0b190600090a15050565b610be96115cf565b60135460ff16610c6d5760405162461bcd60e51b815260206004820152604360248201527f4175746f206275726e2066656174757265206d75737420626520656e61626c6560448201527f642e205472792074686520456e61626c654175746f4275726e2066756e63746960648201526237b71760e91b608482015260a401610824565b600854606490610c87906301000000900460ff168461244f565b60ff1610610ccb5760405162461bcd60e51b81526020600482015260116024820152702a30bc103332b2903a37b7903434b3b41760791b6044820152606401610824565b6008805460ff83811660ff19868316620100008181029290921662ff00ff1986161783179095556040805191850484168083529390941660208201819052938101949094526060840152917f7934aea8452d2868336870fe7e0784562b6cf5cf909818ca893be463a9c676ff906080015b60405180910390a150505050565b6001600160a01b03811660009081526005602052604081205460ff1615610d8757506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546107a690611b86565b610db16115cf565b610dbb6000611c03565b565b610dc56115cf565b60135460ff16610e265760405162461bcd60e51b815260206004820152602660248201527f4175746f206275726e206665617475726520697320616c72656164792064697360448201526530b13632b21760d11b6064820152608401610824565b610e31600080610be1565b6013805460ff191690556040517f6d4de23ebf419282b51fea4d5ebe9d980cf43df3f9e8ddde137786adfc2c5d6a90600090a1565b6000610e728333610680565b905081811015610ed05760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610824565b610edf83336109a88585612429565b610ee983836118ed565b505050565b606060128054610712906123df565b610f056115cf565b6000610f1462ed4e004261243c565b9050610f233330600f54611629565b60408051606081018252600f5481526001600160a01b039384166020808301828152838501958652600092835260149091529290209051815590516001820180546001600160a01b031916919094161790925551600290910155565b610f876115cf565b601354610100900460ff1615610fea5760405162461bcd60e51b815260206004820152602260248201527f526577617264206665617475726520697320616c726561647920656e61626c65604482015261321760f11b6064820152608401610824565b60008260ff161161103d5760405162461bcd60e51b815260206004820152601b60248201527f546178206d7573742062652067726561746572207468616e20302e00000000006044820152606401610824565b600854640100000000900460ff1661105682600261244f565b60ff1611156110775760405162461bcd60e51b815260040161082490612468565b6013805461ff0019166101001790556110908282611345565b6040517fba4445e1bffa6a2c7f9686f9082addd1cbaf92d402889b0c26dcc2aa101f658e90600090a15050565b60006110c8336107ac565b905090565b3360009081526007602090815260408083206001600160a01b03861684529091528120548281101561114f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610824565b6109ad33856109a88685612429565b60006107a2338484611629565b6002600154036111bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610824565b60026001908155336000818152601460205260409020918201546001600160a01b0316146112395760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e2774206861766520616e792074696d656c6f636b656420746f6044820152636b656e7360e01b6064820152608401610824565b806002015442101561128d5760405162461bcd60e51b815260206004820152601860248201527f54696d656c6f636b206e6f7420657870697265642079657400000000000000006044820152606401610824565b61129c30338360000154611629565b50336000908152601460205260408120818155600180820180546001600160a01b03191690556002909101919091558055565b6112d76115cf565b6001600160a01b03811661133c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610824565b6109f881611c03565b61134d6115cf565b601354610100900460ff166113ca5760405162461bcd60e51b815260206004820152603e60248201527f5265776172642066656174757265206d75737420626520656e61626c65642e2060448201527f5472792074686520456e61626c655265776172642066756e6374696f6e2e00006064820152608401610824565b6008546064906113e490849062010000900460ff1661244f565b60ff16106114285760405162461bcd60e51b81526020600482015260116024820152702a30bc103332b2903a37b7903434b3b41760791b6044820152606401610824565b6008805460ff83811661010081810261ff001988851663010000008181029290921663ff00ff0019881617929092179096556040805196860485168088529290950490931660208601819052938501929092526060840152917f6c039e29b159adea5dd8b7d9d918df95d17403688c82bbb43cee50f0de301fc090608001610d3c565b6001600160a01b03831661150d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610824565b6001600160a01b03821661156e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610824565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610824565b6001600160a01b03831661168d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610824565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610824565b6001600160a01b03831660009081526004602052604081205461171690839060ff16611c53565b6001600160a01b03851660009081526005602052604090205490915060ff16801561175a57506001600160a01b03831660009081526005602052604090205460ff16155b1561176f5761176a848483611c7a565b61186d565b6001600160a01b03841660009081526005602052604090205460ff161580156117b057506001600160a01b03831660009081526005602052604090205460ff165b156117c05761176a848483611d2e565b6001600160a01b03841660009081526005602052604090205460ff1615801561180257506001600160a01b03831660009081526005602052604090205460ff16155b156118125761176a848483611dca565b6001600160a01b03841660009081526005602052604090205460ff16801561185257506001600160a01b03831660009081526005602052604090205460ff165b156118625761176a848483611df2565b61186d848483611dca565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83606001516040516118b691815260200190565b60405180910390a36001600160a01b03841660009081526004602052604090205460ff166118e7576118e781611e4e565b50505050565b61deac196001600160a01b038316016119525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610824565b600061195d83610d4a565b9050818110156119ba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610824565b60006119c583611eed565b6001600160a01b03851660009081526005602052604090205490915060ff1615611a17576001600160a01b03841660009081526003602052604081208054859290611a11908490612429565b90915550505b6001600160a01b03841660009081526002602052604081208054839290611a3f908490612429565b909155505061dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c8054859290611a8290849061243c565b909155505061dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290611ac590849061243c565b9250508190555082600a6000828254611ade9190612429565b9250508190555082600d6000828254611af7919061243c565b9091555050604080516001600160a01b0386168152602081018590527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a160405183815261dead906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000600b54821115611bed5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610824565b6000611bf7611f04565b905061085181846124b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c5b612228565b611c63612228565b838152611c708184611f27565b6108518184611fa4565b80516001600160a01b038416600090815260036020526040902054611c9f9190612429565b6001600160a01b0384166000908152600360209081526040808320939093556080840151600290915291902054611cd69190612429565b6001600160a01b038085166000908152600260205260408082209390935560e084015191851681529190912054611d0d919061243c565b6001600160a01b039092166000908152600260205260409020919091555050565b60808101516001600160a01b038416600090815260026020526040902054611d569190612429565b6001600160a01b0380851660009081526002602090815260408083209490945560608501519286168252600390529190912054611d93919061243c565b6001600160a01b03831660009081526003602090815260408083209390935560e0840151600290915291902054611d0d919061243c565b60808101516001600160a01b038416600090815260026020526040902054611cd69190612429565b80516001600160a01b038416600090815260036020526040902054611e179190612429565b6001600160a01b0384166000908152600360209081526040808320939093556080840151600290915291902054611d569190612429565b60135460ff1615611ecb57602080820151306000908152600390925260408220805491929091611e7f90849061243c565b909155505060a08101513060009081526002602052604081208054909190611ea890849061243c565b90915550611ebd9050303383602001516114ab565b611ecb308260200151610e66565b601354610100900460ff16156109f8576109f88160c00151826040015161203e565b600080611ef8611f04565b905061085181846124db565b6000806000611f1161206d565b9092509050611f2081836124b9565b9250505090565b8015611f3857815160608301525050565b8151600854611f53919060ff620100008204811691166121f0565b60208301528151600854611f79919060ff630100000082048116916101009004166121f0565b6040830181905260208301518351611f919190612429565b611f9b9190612429565b60608301525050565b6000611fae611f04565b8351909150611fbe9082906124db565b60808401528115611fd857608083015160e0840152505050565b8251611fe59082906124db565b60808401526020830151611ffa9082906124db565b60a0840152604083015161200f9082906124db565b60c0840181905260a0840151608085015161202a9190612429565b6120349190612429565b60e0840152505050565b81600b5461204c9190612429565b600b8190555080600c6000828254612064919061243c565b90915550505050565b600b546009546000918291825b6006548110156121bf5782600260006006848154811061209c5761209c6124f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210757508160036000600684815481106120e0576120e06124f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561211d57600b54600954945094505050509091565b6002600060068381548110612134576121346124f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121639084612429565b9250600360006006838154811061217c5761217c6124f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121ab9083612429565b9150806121b781612508565b91505061207a565b50600954600b546121d091906124b9565b8210156121e757600b546009549350935050509091565b90939092509050565b600060646121ff83600a612605565b61220c60ff8616876124db565b61221691906124b9565b61222091906124b9565b949350505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561229a5785810183015185820160400152820161227e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146122d257600080fd5b919050565b600080604083850312156122ea57600080fd5b6122f3836122bb565b946020939093013593505050565b60006020828403121561231357600080fd5b610851826122bb565b60008060006060848603121561233157600080fd5b61233a846122bb565b9250612348602085016122bb565b9150604084013590509250925092565b60006020828403121561236a57600080fd5b5035919050565b803560ff811681146122d257600080fd5b6000806040838503121561239557600080fd5b61239e83612371565b91506123ac60208401612371565b90509250929050565b600080604083850312156123c857600080fd5b6123d1836122bb565b91506123ac602084016122bb565b600181811c908216806123f357607f821691505b60208210810361085857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156107a6576107a6612413565b808201808211156107a6576107a6612413565b60ff81811683821601908111156107a6576107a6612413565b60208082526031908201527f54617820646563696d616c73206d757374206265206c657373207468616e207460408201527037b5b2b7103232b1b4b6b0b6399016901960791b606082015260800190565b6000826124d657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176107a6576107a6612413565b634e487b7160e01b600052603260045260246000fd5b60006001820161251a5761251a612413565b5060010190565b600181815b8085111561255c57816000190482111561254257612542612413565b8085161561254f57918102915b93841c9390800290612526565b509250929050565b600082612573575060016107a6565b81612580575060006107a6565b816001811461259657600281146125a0576125bc565b60019150506107a6565b60ff8411156125b1576125b1612413565b50506001821b6107a6565b5060208310610133831016604e8410600b84101617156125df575081810a6107a6565b6125e98383612521565b80600019048211156125fd576125fd612413565b029392505050565b600061085160ff84168361256456fea2646970667358221220c9281022484dea75efcd76dcde15bb2220f90c43d2100cdcb352805c02139ae864736f6c63430008110033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000c46656564204d7920466973680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646454d5946490000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102295760003560e01c806379cc679011610123578063a457c2d7116100ab578063d42ac3771161006f578063d42ac37714610646578063dd62ed3e14610665578063f2fde38b146106ab578063fa6e3f54146106cb578063fbfa089c146106eb57600080fd5b8063a457c2d7146105bf578063a9059cbb146105df578063a96f8668146105ff578063ad8e91dd14610614578063aed29d071461063157600080fd5b806395de632a116100f257806395de632a1461053d578063966ff6501461055d578063998acc0e146105725780639dd255da14610592578063a443fbc4146105aa57600080fd5b806379cc6790146104a757806388f82020146104c75780638da5cb5b1461050057806395d89b411461052857600080fd5b806339509351116101b1578063681bdc9911610175578063681bdc991461042857806370a0823114610448578063715018a6146104685780637656e1461461047d578063771282f61461049257600080fd5b8063395093511461037a57806342966c681461039a578063470d5cbd146103ba5780634895c3e6146103cf5780635342acb4146103ef57600080fd5b806317ee6995116101f857806317ee6995146102e657806318160ddd146103035780632275b4741461031857806323b872dd1461033a578063313ce5671461035a57600080fd5b806301b715311461023557806306fdde0314610266578063095ea7b3146102885780630e85117a146102b857600080fd5b3661023057005b600080fd5b34801561024157600080fd5b5060085462010000900460ff165b60405160ff90911681526020015b60405180910390f35b34801561027257600080fd5b5061027b610703565b60405161025d919061226d565b34801561029457600080fd5b506102a86102a33660046122d7565b610795565b604051901515815260200161025d565b3480156102c457600080fd5b506102d86102d3366004612301565b6107ac565b60405190815260200161025d565b3480156102f257600080fd5b50601354610100900460ff166102a8565b34801561030f57600080fd5b506009546102d8565b34801561032457600080fd5b50610338610333366004612301565b61085e565b005b34801561034657600080fd5b506102a861035536600461231c565b6108e1565b34801561036657600080fd5b50600854640100000000900460ff1661024f565b34801561038657600080fd5b506102a86103953660046122d7565b6109b7565b3480156103a657600080fd5b506103386103b5366004612358565b6109ee565b3480156103c657600080fd5b506103386109fb565b3480156103db57600080fd5b506103386103ea366004612382565b610aa7565b3480156103fb57600080fd5b506102a861040a366004612301565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561043457600080fd5b50610338610443366004612382565b610be1565b34801561045457600080fd5b506102d8610463366004612301565b610d4a565b34801561047457600080fd5b50610338610da9565b34801561048957600080fd5b50610338610dbd565b34801561049e57600080fd5b50600a546102d8565b3480156104b357600080fd5b506103386104c23660046122d7565b610e66565b3480156104d357600080fd5b506102a86104e2366004612301565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561050c57600080fd5b506000546040516001600160a01b03909116815260200161025d565b34801561053457600080fd5b5061027b610eee565b34801561054957600080fd5b50610338610558366004612301565b610efd565b34801561056957600080fd5b50600d546102d8565b34801561057e57600080fd5b5061033861058d366004612382565b610f7f565b34801561059e57600080fd5b5060135460ff166102a8565b3480156105b657600080fd5b506102d86110bd565b3480156105cb57600080fd5b506102a86105da3660046122d7565b6110cd565b3480156105eb57600080fd5b506102a86105fa3660046122d7565b61115e565b34801561060b57600080fd5b5061033861116b565b34801561062057600080fd5b50600854610100900460ff1661024f565b34801561063d57600080fd5b50600c546102d8565b34801561065257600080fd5b506008546301000000900460ff1661024f565b34801561067157600080fd5b506102d86106803660046123b5565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205490565b3480156106b757600080fd5b506103386106c6366004612301565b6112cf565b3480156106d757600080fd5b506103386106e6366004612382565b611345565b3480156106f757600080fd5b5060085460ff1661024f565b606060118054610712906123df565b80601f016020809104026020016040519081016040528092919081815260200182805461073e906123df565b801561078b5780601f106107605761010080835404028352916020019161078b565b820191906000526020600020905b81548152906001019060200180831161076e57829003601f168201915b5050505050905090565b60006107a23384846114ab565b5060015b92915050565b6001600160a01b03808216600081815260146020526040812060018101549193909291161461082d5760405162461bcd60e51b815260206004820152602260248201527f4e6f2074696d656c6f636b20666f756e6420666f722074686973206163636f756044820152611b9d60f21b60648201526084015b60405180910390fd5b806002015442106108415750600092915050565b4281600201546108519190612429565b9392505050565b50919050565b6108666115cf565b60006108766301e133804261243c565b90506108853330600e54611629565b60408051606081018252600e5481526001600160a01b039384166020808301828152838501958652600092835260149091529290209051815590516001820180546001600160a01b031916919094161790925551600290910155565b60006108ee848484611629565b6001600160a01b03841660009081526007602090815260408083203384529091529020548211156109725760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610824565b6001600160a01b0384166000908152600760209081526040808320338085529252909120546109ad9186916109a8908690612429565b6114ab565b5060019392505050565b3360008181526007602090815260408083206001600160a01b038716845290915281205490916107a29185906109a890869061243c565b6109f833826118ed565b50565b610a036115cf565b601354610100900460ff16610a665760405162461bcd60e51b815260206004820152602360248201527f526577617264206665617475726520697320616c72656164792064697361626c60448201526232b21760e91b6064820152608401610824565b610a71600080611345565b6013805461ff00191690556040517f9843194c3ceed34b5019222853f7806a15e8658437ee2a92d9497af23775eb1c90600090a1565b610aaf6115cf565b60135460ff1615610b105760405162461bcd60e51b815260206004820152602560248201527f4175746f206275726e206665617475726520697320616c726561647920656e61604482015264313632b21760d91b6064820152608401610824565b60008260ff1611610b635760405162461bcd60e51b815260206004820152601b60248201527f546178206d7573742062652067726561746572207468616e20302e00000000006044820152606401610824565b600854640100000000900460ff16610b7c82600261244f565b60ff161115610b9d5760405162461bcd60e51b815260040161082490612468565b6013805460ff19166001179055610bb48282610be1565b6040517f1ae0c73021a2d0e597101e249754f53e8496443b3820ba2128b562a9873ad0b190600090a15050565b610be96115cf565b60135460ff16610c6d5760405162461bcd60e51b815260206004820152604360248201527f4175746f206275726e2066656174757265206d75737420626520656e61626c6560448201527f642e205472792074686520456e61626c654175746f4275726e2066756e63746960648201526237b71760e91b608482015260a401610824565b600854606490610c87906301000000900460ff168461244f565b60ff1610610ccb5760405162461bcd60e51b81526020600482015260116024820152702a30bc103332b2903a37b7903434b3b41760791b6044820152606401610824565b6008805460ff83811660ff19868316620100008181029290921662ff00ff1986161783179095556040805191850484168083529390941660208201819052938101949094526060840152917f7934aea8452d2868336870fe7e0784562b6cf5cf909818ca893be463a9c676ff906080015b60405180910390a150505050565b6001600160a01b03811660009081526005602052604081205460ff1615610d8757506001600160a01b031660009081526003602052604090205490565b6001600160a01b0382166000908152600260205260409020546107a690611b86565b610db16115cf565b610dbb6000611c03565b565b610dc56115cf565b60135460ff16610e265760405162461bcd60e51b815260206004820152602660248201527f4175746f206275726e206665617475726520697320616c72656164792064697360448201526530b13632b21760d11b6064820152608401610824565b610e31600080610be1565b6013805460ff191690556040517f6d4de23ebf419282b51fea4d5ebe9d980cf43df3f9e8ddde137786adfc2c5d6a90600090a1565b6000610e728333610680565b905081811015610ed05760405162461bcd60e51b8152602060048201526024808201527f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f77604482015263616e636560e01b6064820152608401610824565b610edf83336109a88585612429565b610ee983836118ed565b505050565b606060128054610712906123df565b610f056115cf565b6000610f1462ed4e004261243c565b9050610f233330600f54611629565b60408051606081018252600f5481526001600160a01b039384166020808301828152838501958652600092835260149091529290209051815590516001820180546001600160a01b031916919094161790925551600290910155565b610f876115cf565b601354610100900460ff1615610fea5760405162461bcd60e51b815260206004820152602260248201527f526577617264206665617475726520697320616c726561647920656e61626c65604482015261321760f11b6064820152608401610824565b60008260ff161161103d5760405162461bcd60e51b815260206004820152601b60248201527f546178206d7573742062652067726561746572207468616e20302e00000000006044820152606401610824565b600854640100000000900460ff1661105682600261244f565b60ff1611156110775760405162461bcd60e51b815260040161082490612468565b6013805461ff0019166101001790556110908282611345565b6040517fba4445e1bffa6a2c7f9686f9082addd1cbaf92d402889b0c26dcc2aa101f658e90600090a15050565b60006110c8336107ac565b905090565b3360009081526007602090815260408083206001600160a01b03861684529091528120548281101561114f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610824565b6109ad33856109a88685612429565b60006107a2338484611629565b6002600154036111bd5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610824565b60026001908155336000818152601460205260409020918201546001600160a01b0316146112395760405162461bcd60e51b8152602060048201526024808201527f596f7520646f6e2774206861766520616e792074696d656c6f636b656420746f6044820152636b656e7360e01b6064820152608401610824565b806002015442101561128d5760405162461bcd60e51b815260206004820152601860248201527f54696d656c6f636b206e6f7420657870697265642079657400000000000000006044820152606401610824565b61129c30338360000154611629565b50336000908152601460205260408120818155600180820180546001600160a01b03191690556002909101919091558055565b6112d76115cf565b6001600160a01b03811661133c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610824565b6109f881611c03565b61134d6115cf565b601354610100900460ff166113ca5760405162461bcd60e51b815260206004820152603e60248201527f5265776172642066656174757265206d75737420626520656e61626c65642e2060448201527f5472792074686520456e61626c655265776172642066756e6374696f6e2e00006064820152608401610824565b6008546064906113e490849062010000900460ff1661244f565b60ff16106114285760405162461bcd60e51b81526020600482015260116024820152702a30bc103332b2903a37b7903434b3b41760791b6044820152606401610824565b6008805460ff83811661010081810261ff001988851663010000008181029290921663ff00ff0019881617929092179096556040805196860485168088529290950490931660208601819052938501929092526060840152917f6c039e29b159adea5dd8b7d9d918df95d17403688c82bbb43cee50f0de301fc090608001610d3c565b6001600160a01b03831661150d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610824565b6001600160a01b03821661156e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610824565b6001600160a01b0383811660008181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000546001600160a01b03163314610dbb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610824565b6001600160a01b03831661168d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610824565b6001600160a01b0382166116ef5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610824565b6001600160a01b03831660009081526004602052604081205461171690839060ff16611c53565b6001600160a01b03851660009081526005602052604090205490915060ff16801561175a57506001600160a01b03831660009081526005602052604090205460ff16155b1561176f5761176a848483611c7a565b61186d565b6001600160a01b03841660009081526005602052604090205460ff161580156117b057506001600160a01b03831660009081526005602052604090205460ff165b156117c05761176a848483611d2e565b6001600160a01b03841660009081526005602052604090205460ff1615801561180257506001600160a01b03831660009081526005602052604090205460ff16155b156118125761176a848483611dca565b6001600160a01b03841660009081526005602052604090205460ff16801561185257506001600160a01b03831660009081526005602052604090205460ff165b156118625761176a848483611df2565b61186d848483611dca565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83606001516040516118b691815260200190565b60405180910390a36001600160a01b03841660009081526004602052604090205460ff166118e7576118e781611e4e565b50505050565b61deac196001600160a01b038316016119525760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b6064820152608401610824565b600061195d83610d4a565b9050818110156119ba5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610824565b60006119c583611eed565b6001600160a01b03851660009081526005602052604090205490915060ff1615611a17576001600160a01b03841660009081526003602052604081208054859290611a11908490612429565b90915550505b6001600160a01b03841660009081526002602052604081208054839290611a3f908490612429565b909155505061dead600090815260036020527f262bb27bbdd95c1cdc8e16957e36e38579ea44f7f6413dd7a9c75939def06b2c8054859290611a8290849061243c565b909155505061dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290611ac590849061243c565b9250508190555082600a6000828254611ade9190612429565b9250508190555082600d6000828254611af7919061243c565b9091555050604080516001600160a01b0386168152602081018590527fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5910160405180910390a160405183815261dead906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b6000600b54821115611bed5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610824565b6000611bf7611f04565b905061085181846124b9565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c5b612228565b611c63612228565b838152611c708184611f27565b6108518184611fa4565b80516001600160a01b038416600090815260036020526040902054611c9f9190612429565b6001600160a01b0384166000908152600360209081526040808320939093556080840151600290915291902054611cd69190612429565b6001600160a01b038085166000908152600260205260408082209390935560e084015191851681529190912054611d0d919061243c565b6001600160a01b039092166000908152600260205260409020919091555050565b60808101516001600160a01b038416600090815260026020526040902054611d569190612429565b6001600160a01b0380851660009081526002602090815260408083209490945560608501519286168252600390529190912054611d93919061243c565b6001600160a01b03831660009081526003602090815260408083209390935560e0840151600290915291902054611d0d919061243c565b60808101516001600160a01b038416600090815260026020526040902054611cd69190612429565b80516001600160a01b038416600090815260036020526040902054611e179190612429565b6001600160a01b0384166000908152600360209081526040808320939093556080840151600290915291902054611d569190612429565b60135460ff1615611ecb57602080820151306000908152600390925260408220805491929091611e7f90849061243c565b909155505060a08101513060009081526002602052604081208054909190611ea890849061243c565b90915550611ebd9050303383602001516114ab565b611ecb308260200151610e66565b601354610100900460ff16156109f8576109f88160c00151826040015161203e565b600080611ef8611f04565b905061085181846124db565b6000806000611f1161206d565b9092509050611f2081836124b9565b9250505090565b8015611f3857815160608301525050565b8151600854611f53919060ff620100008204811691166121f0565b60208301528151600854611f79919060ff630100000082048116916101009004166121f0565b6040830181905260208301518351611f919190612429565b611f9b9190612429565b60608301525050565b6000611fae611f04565b8351909150611fbe9082906124db565b60808401528115611fd857608083015160e0840152505050565b8251611fe59082906124db565b60808401526020830151611ffa9082906124db565b60a0840152604083015161200f9082906124db565b60c0840181905260a0840151608085015161202a9190612429565b6120349190612429565b60e0840152505050565b81600b5461204c9190612429565b600b8190555080600c6000828254612064919061243c565b90915550505050565b600b546009546000918291825b6006548110156121bf5782600260006006848154811061209c5761209c6124f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061210757508160036000600684815481106120e0576120e06124f2565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561211d57600b54600954945094505050509091565b6002600060068381548110612134576121346124f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121639084612429565b9250600360006006838154811061217c5761217c6124f2565b60009182526020808320909101546001600160a01b031683528201929092526040019020546121ab9083612429565b9150806121b781612508565b91505061207a565b50600954600b546121d091906124b9565b8210156121e757600b546009549350935050509091565b90939092509050565b600060646121ff83600a612605565b61220c60ff8616876124db565b61221691906124b9565b61222091906124b9565b949350505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600060208083528351808285015260005b8181101561229a5785810183015185820160400152820161227e565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b03811681146122d257600080fd5b919050565b600080604083850312156122ea57600080fd5b6122f3836122bb565b946020939093013593505050565b60006020828403121561231357600080fd5b610851826122bb565b60008060006060848603121561233157600080fd5b61233a846122bb565b9250612348602085016122bb565b9150604084013590509250925092565b60006020828403121561236a57600080fd5b5035919050565b803560ff811681146122d257600080fd5b6000806040838503121561239557600080fd5b61239e83612371565b91506123ac60208401612371565b90509250929050565b600080604083850312156123c857600080fd5b6123d1836122bb565b91506123ac602084016122bb565b600181811c908216806123f357607f821691505b60208210810361085857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156107a6576107a6612413565b808201808211156107a6576107a6612413565b60ff81811683821601908111156107a6576107a6612413565b60208082526031908201527f54617820646563696d616c73206d757374206265206c657373207468616e207460408201527037b5b2b7103232b1b4b6b0b6399016901960791b606082015260800190565b6000826124d657634e487b7160e01b600052601260045260246000fd5b500490565b80820281158282048414176107a6576107a6612413565b634e487b7160e01b600052603260045260246000fd5b60006001820161251a5761251a612413565b5060010190565b600181815b8085111561255c57816000190482111561254257612542612413565b8085161561254f57918102915b93841c9390800290612526565b509250929050565b600082612573575060016107a6565b81612580575060006107a6565b816001811461259657600281146125a0576125bc565b60019150506107a6565b60ff8411156125b1576125b1612413565b50506001821b6107a6565b5060208310610133831016604e8410600b84101617156125df575081810a6107a6565b6125e98383612521565b80600019048211156125fd576125fd612413565b029392505050565b600061085160ff84168361256456fea2646970667358221220c9281022484dea75efcd76dcde15bb2220f90c43d2100cdcb352805c02139ae864736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000c46656564204d7920466973680000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000646454d5946490000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Feed My Fish
Arg [1] : symbol_ (string): FEMYFI
Arg [2] : decimals_ (uint8): 18
Arg [3] : tokenSupply_ (uint256): 1000000000
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [5] : 46656564204d7920466973680000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [7] : 46454d5946490000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.