Source Code
Overview
BNB Balance
BNB Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 415 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 92451599 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92451434 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92451297 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92451120 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450987 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450878 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450746 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450614 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450488 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450337 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450180 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92450031 | 2 hrs ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92449846 | 2 hrs ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92449692 | 2 hrs ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92449535 | 2 hrs ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92449343 | 2 hrs ago | IN | 0 BNB | 0.00000293 | ||||
| Approve | 92086122 | 47 hrs ago | IN | 0 BNB | 0.00000276 | ||||
| Transfer | 92065459 | 2 days ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92065178 | 2 days ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92064970 | 2 days ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92064634 | 2 days ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92064394 | 2 days ago | IN | 0 BNB | 0.00000293 | ||||
| Transfer | 92064192 | 2 days ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92063968 | 2 days ago | IN | 0 BNB | 0.00000208 | ||||
| Transfer | 92063754 | 2 days ago | IN | 0 BNB | 0.00000208 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TrustToken
Compiler Version
v0.8.33+commit.64118f21
Optimization Enabled:
Yes with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
/*
TrustToken — v4.7
Guarantees:
- Controlled DEX-only launch (7 days, directional whitelist)
- Auto-open trading after launch window (failsafe, deterministic)
- Sell-side tax with deterministic decay → 0%
- 30-day DEX protection window:
• Same-block buy→sell (DEX buyers only)
• Hold-time (DEX buyers only)
• Max-sell cap (ALL DEX sells, first 30 days only)
- Emergency sell halt (fail-closed, treasury exempt)
- No upgradeability, no external hooks, no admin backdoors
Notes:
- Ownable is set in a version-agnostic way via _transferOwnership(_treasury)
(works with OZ v4 and v5, avoids constructor-arg mismatch surprises)
*/
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
interface IEmergencyGuard {
function emergencyActive() external view returns (bool);
}
interface IUniswapV2Pair {
function getReserves()
external
view
returns (uint112 reserve0, uint112 reserve1, uint32);
function token0() external view returns (address);
function token1() external view returns (address);
}
contract TrustToken is ERC20, Ownable {
/*//////////////////////////////////////////////////////////////
CONSTANTS
//////////////////////////////////////////////////////////////*/
uint256 public constant BPS_DENOMINATOR = 10_000;
uint256 public constant HOLD_TIME = 300; // 5 minutes
uint256 public constant LAUNCH_WINDOW_DURATION = 7 hours;
uint256 public constant DEX_PROTECTION_DURATION = 30 days;
uint256 public constant MAX_SELL_BPS_FIRST_7D = 50; // 0.5%
uint256 public constant MAX_SELL_BPS_UNTIL_30D = 100; // 1%
/*//////////////////////////////////////////////////////////////
ADDRESSES
//////////////////////////////////////////////////////////////*/
address public immutable treasury;
address public immutable devWallet;
IEmergencyGuard public immutable emergencyGuard;
address public dexPair;
/*//////////////////////////////////////////////////////////////
LAUNCH / GOVERNANCE
//////////////////////////////////////////////////////////////*/
address public launchAdmin;
bool public tradingEnabled;
bool public whitelistMode = true;
mapping(address => bool) public whitelist;
uint256 public pairActivatedAt;
uint256 public tradingEnabledAt;
/*//////////////////////////////////////////////////////////////
ANTI-BOT STATE
//////////////////////////////////////////////////////////////*/
mapping(address => uint256) public lastDexBuyAt;
mapping(address => uint256) public lastDexBuyBlock;
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event DexPairSet(address pair);
event DexPairActivated(address pair, uint256 timestamp);
event TradingEnabled(uint256 timestamp);
event WhitelistUpdated(address indexed wallet, bool allowed);
event WhitelistDisabledForever();
event LaunchControlRenounced();
event SellTaxCollected(
address indexed seller,
uint256 grossAmount,
uint256 taxAmount,
uint256 treasuryShare,
uint256 devShare
);
/*//////////////////////////////////////////////////////////////
MODIFIERS
//////////////////////////////////////////////////////////////*/
modifier onlyLaunchAdminAnytime() {
require(msg.sender == launchAdmin, "Not launch admin");
_;
}
modifier onlyLaunchAdmin() {
require(msg.sender == launchAdmin, "Not launch admin");
require(_withinLaunchWindow(), "Launch expired");
_;
}
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
//////////////////////////////////////////////////////////////*/
constructor(
string memory name_,
string memory symbol_,
uint256 totalSupply_,
address _treasury,
address _devWallet,
address _launchAdmin,
address _emergencyGuard,
address _mintTo
) ERC20(name_, symbol_) {
require(_treasury != address(0), "Treasury zero");
require(_devWallet != address(0), "Dev zero");
require(_launchAdmin != address(0), "Launch admin zero");
require(_mintTo != address(0), "MintTo zero");
require(_emergencyGuard.code.length > 0, "Guard not contract");
treasury = _treasury;
devWallet = _devWallet;
launchAdmin = _launchAdmin;
emergencyGuard = IEmergencyGuard(_emergencyGuard);
// Version-agnostic owner assignment (OZ v4 + v5 compatible)
_transferOwnership(_treasury);
_mint(_mintTo, totalSupply_);
}
/*//////////////////////////////////////////////////////////////
LAUNCH WINDOW LOGIC
//////////////////////////////////////////////////////////////*/
function _withinLaunchWindow() internal view returns (bool) {
return
pairActivatedAt != 0 &&
block.timestamp <= pairActivatedAt + LAUNCH_WINDOW_DURATION;
}
/*//////////////////////////////////////////////////////////////
PAIR CONFIGURATION
//////////////////////////////////////////////////////////////*/
function setDexPair(address pair) external onlyOwner {
require(pair != address(0), "Pair zero");
require(pair != address(this), "Invalid pair");
require(pair.code.length > 0, "Not contract");
require(dexPair == address(0), "Pair already set");
require(pairActivatedAt == 0, "Already activated");
IUniswapV2Pair p = IUniswapV2Pair(pair);
require(
p.token0() == address(this) || p.token1() == address(this),
"Invalid pair"
);
dexPair = pair;
emit DexPairSet(pair);
}
function activatePair() external onlyOwner {
require(dexPair != address(0), "Pair not set");
require(pairActivatedAt == 0, "Already activated");
IUniswapV2Pair p = IUniswapV2Pair(dexPair);
(uint112 r0, uint112 r1, ) = p.getReserves();
uint256 tokenReserve = p.token0() == address(this)
? uint256(r0)
: uint256(r1);
uint256 otherReserve = p.token0() == address(this)
? uint256(r1)
: uint256(r0);
require(tokenReserve > 0 && otherReserve > 0, "No liquidity");
pairActivatedAt = block.timestamp;
emit DexPairActivated(dexPair, pairActivatedAt);
}
/*//////////////////////////////////////////////////////////////
WHITELIST / LAUNCH OPS
//////////////////////////////////////////////////////////////*/
function addToWhitelist(address wallet) external onlyLaunchAdminAnytime {
require(whitelistMode, "Whitelist disabled");
whitelist[wallet] = true;
emit WhitelistUpdated(wallet, true);
}
function removeFromWhitelist(
address wallet
) external onlyLaunchAdminAnytime {
require(whitelistMode, "Whitelist disabled");
whitelist[wallet] = false;
emit WhitelistUpdated(wallet, false);
}
function enableTrading() external onlyLaunchAdmin {
require(!tradingEnabled, "Already enabled");
require(pairActivatedAt != 0, "Pair not active");
tradingEnabled = true;
if (tradingEnabledAt == 0) {
tradingEnabledAt = block.timestamp;
}
emit TradingEnabled(tradingEnabledAt);
}
function disableWhitelistForever() external onlyLaunchAdmin {
require(whitelistMode, "Already disabled");
whitelistMode = false;
emit WhitelistDisabledForever();
}
function renounceLaunchControl() external onlyLaunchAdmin {
launchAdmin = address(0);
emit LaunchControlRenounced();
}
/*//////////////////////////////////////////////////////////////
TAX LOGIC
//////////////////////////////////////////////////////////////*/
function currentSellTaxBps() public view returns (uint256) {
if (tradingEnabledAt == 0) return 0;
uint256 elapsed = block.timestamp - tradingEnabledAt;
if (elapsed < 30 days) return 2000;
if (elapsed < 60 days) return 1000;
if (elapsed < 100 days) return 750;
if (elapsed < 180 days) return 500;
if (elapsed < 365 days) return 250;
return 0;
}
/*//////////////////////////////////////////////////////////////
TRANSFER
//////////////////////////////////////////////////////////////*/
function _transfer(
address from,
address to,
uint256 amount
) internal override {
uint256 sendAmount = amount;
// Treasury fully exempt
if (from != treasury && to != treasury) {
_autoStartTaxClockIfMissed();
_enforceLaunchRules(from, to);
// Track DEX buys
if (
pairActivatedAt != 0 &&
block.timestamp <= pairActivatedAt + DEX_PROTECTION_DURATION &&
from == dexPair
) {
lastDexBuyAt[to] = block.timestamp;
lastDexBuyBlock[to] = block.number;
}
// SELL
if (to == dexPair) {
_enforceEmergencyHalt();
if (
pairActivatedAt != 0 &&
block.timestamp <= pairActivatedAt + DEX_PROTECTION_DURATION
) {
_enforceDexBuyerProtections(from);
_enforceMaxSell(sendAmount);
}
sendAmount = _applySellTax(from, sendAmount);
}
}
super._transfer(from, to, sendAmount);
}
/*//////////////////////////////////////////////////////////////
LAUNCH ENFORCEMENT
//////////////////////////////////////////////////////////////*/
function _enforceLaunchRules(address from, address to) internal view {
if (!_withinLaunchWindow()) return;
if (!tradingEnabled) {
if (from == dexPair) {
require(whitelist[to], "Buy not whitelisted");
} else if (to == dexPair) {
require(whitelist[from], "Sell not whitelisted");
}
}
}
/*//////////////////////////////////////////////////////////////
EMERGENCY ENFORCEMENT
//////////////////////////////////////////////////////////////*/
function _enforceEmergencyHalt() internal view {
bool emergency;
try emergencyGuard.emergencyActive() returns (bool active) {
emergency = active;
} catch {
emergency = true;
}
require(!emergency, "Emergency: sells disabled");
}
/*//////////////////////////////////////////////////////////////
DEX BUYER-SPECIFIC PROTECTIONS
//////////////////////////////////////////////////////////////*/
function _enforceDexBuyerProtections(address seller) internal view {
uint256 boughtAt = lastDexBuyAt[seller];
if (boughtAt == 0) return;
require(
lastDexBuyBlock[seller] < block.number,
"No buy+sell same block"
);
require(block.timestamp >= boughtAt + HOLD_TIME, "Hold time active");
}
/*//////////////////////////////////////////////////////////////
MAX SELL CAP (GLOBAL)
//////////////////////////////////////////////////////////////*/
function _enforceMaxSell(uint256 amount) internal view {
if (pairActivatedAt == 0) return;
uint256 maxBps;
if (block.timestamp <= pairActivatedAt + 7 days) {
maxBps = MAX_SELL_BPS_FIRST_7D;
} else if (block.timestamp <= pairActivatedAt + 30 days) {
maxBps = MAX_SELL_BPS_UNTIL_30D;
} else {
return;
}
require(dexPair != address(0), "Pair not set");
IUniswapV2Pair p = IUniswapV2Pair(dexPair);
(uint112 r0, uint112 r1, ) = p.getReserves();
uint256 tokenReserve = p.token0() == address(this)
? uint256(r0)
: uint256(r1);
require(tokenReserve > 0, "No liquidity");
uint256 cap = (tokenReserve * maxBps) / BPS_DENOMINATOR;
require(amount <= cap, "Sell > max");
}
/*//////////////////////////////////////////////////////////////
TAX APPLICATION
//////////////////////////////////////////////////////////////*/
function _applySellTax(
address seller,
uint256 gross
) internal returns (uint256) {
uint256 taxBps = currentSellTaxBps();
if (taxBps == 0) return gross;
uint256 taxAmount = (gross * taxBps) / BPS_DENOMINATOR;
if (taxAmount == 0) return gross;
uint256 treasuryShare = (taxAmount * 8000) / BPS_DENOMINATOR;
uint256 devShare = taxAmount - treasuryShare;
super._transfer(seller, treasury, treasuryShare);
if (devShare > 0) {
super._transfer(seller, devWallet, devShare);
}
emit SellTaxCollected(
seller,
gross,
taxAmount,
treasuryShare,
devShare
);
return gross - taxAmount;
}
/*//////////////////////////////////////////////////////////////
TAX CLOCK FAILSAFE
//////////////////////////////////////////////////////////////*/
function _autoStartTaxClockIfMissed() internal {
if (
pairActivatedAt != 0 &&
tradingEnabledAt == 0 &&
block.timestamp > pairActivatedAt + LAUNCH_WINDOW_DURATION
) {
tradingEnabledAt = pairActivatedAt + LAUNCH_WINDOW_DURATION;
tradingEnabled = true;
emit TradingEnabled(tradingEnabledAt);
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the default value returned by this function, unless
* it's overridden.
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(address from, address to, uint256 amount) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(address owner, address spender, uint256 amount) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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 (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.4) (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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"forge-std/=lib/forge-std/src/",
"ds-test/=lib/openzeppelin-contracts/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/openzeppelin-contracts/contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": true
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"uint256","name":"totalSupply_","type":"uint256"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_devWallet","type":"address"},{"internalType":"address","name":"_launchAdmin","type":"address"},{"internalType":"address","name":"_emergencyGuard","type":"address"},{"internalType":"address","name":"_mintTo","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"DexPairActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"}],"name":"DexPairSet","type":"event"},{"anonymous":false,"inputs":[],"name":"LaunchControlRenounced","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":true,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"grossAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"taxAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"treasuryShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"devShare","type":"uint256"}],"name":"SellTaxCollected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","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"},{"anonymous":false,"inputs":[],"name":"WhitelistDisabledForever","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"bool","name":"allowed","type":"bool"}],"name":"WhitelistUpdated","type":"event"},{"inputs":[],"name":"BPS_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEX_PROTECTION_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HOLD_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LAUNCH_WINDOW_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_BPS_FIRST_7D","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SELL_BPS_UNTIL_30D","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentSellTaxBps","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":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableWhitelistForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyGuard","outputs":[{"internalType":"contract IEmergencyGuard","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"lastDexBuyAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastDexBuyBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"pairActivatedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceLaunchControl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setDexPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60e0604052346105ba576125ac80380380610019816105be565b928339810190610100818303126105ba5780516001600160401b0381116105ba57826100469183016105e3565b602082015190926001600160401b0382116105ba576100669183016105e3565b60408201519161007860608201610634565b9061008560808201610634565b9261009260a08301610634565b906100ab60e06100a460c08601610634565b9401610634565b875190976001600160401b0382116104b55760035490600182811c921680156105b0575b60208310146104975781601f84931161053a575b50602090601f83116001146104d4575f926104c9575b50508160011b915f199060031b1c1916176003555b8051906001600160401b0382116104b55760045490600182811c921680156104ab575b60208310146104975781601f849311610421575b50602090601f83116001146103bb575f926103b0575b50508160011b915f199060031b1c1916176004555b61017933610648565b600754906001600160a01b0384161561037b576001600160a01b0385161561034b576001600160a01b0316958615610312576001600160a01b03169586156102df57823b156102a557608084905260a094909452600161ff0160a01b03191692909217600160a81b176007556001600160a01b039190911660c0526101fd90610648565b600254908082018092116102915760207fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef915f9360025584845283825260408420818154019055604051908152a3604051611f1b90816106918239608051818181610dfc015281816116420152611cdf015260a0518181816109770152611d39015260c051818181610f2601526116eb0152f35b634e487b7160e01b5f52601160045260245ffd5b60405162461bcd60e51b815260206004820152601260248201527111dd585c99081b9bdd0818dbdb9d1c9858dd60721b6044820152606490fd5b60405162461bcd60e51b815260206004820152600b60248201526a4d696e74546f207a65726f60a81b6044820152606490fd5b60405162461bcd60e51b81526020600482015260116024820152704c61756e63682061646d696e207a65726f60781b6044820152606490fd5b60405162461bcd60e51b8152602060048201526008602482015267446576207a65726f60c01b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c5472656173757279207a65726f60981b6044820152606490fd5b015190505f8061015b565b60045f9081528281209350601f198516905b81811061040957509084600195949392106103f1575b505050811b01600455610170565b01515f1960f88460031b161c191690555f80806103e3565b929360206001819287860151815501950193016103cd565b828111156101455760045f52909150601f830160051c7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b6020851061048f575b849392601f0160051c82900391015f5b82811061047f575050610145565b5f81830155859450600101610471565b5f9150610461565b634e487b7160e01b5f52602260045260245ffd5b91607f1691610131565b634e487b7160e01b5f52604160045260245ffd5b015190505f806100f9565b60035f9081528281209350601f198516905b818110610522575090846001959493921061050a575b505050811b0160035561010e565b01515f1960f88460031b161c191690555f80806104fc565b929360206001819287860151815501950193016104e6565b828111156100e35760035f52909150601f830160051c7fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b602085106105a8575b849392601f0160051c82900391015f5b8281106105985750506100e3565b5f8183015585945060010161058a565b5f915061057a565b91607f16916100cf565b5f80fd5b6040519190601f01601f191682016001600160401b038111838210176104b557604052565b81601f820112156105ba578051906001600160401b0382116104b557610612601f8301601f19166020016105be565b92828452602083830101116105ba57815f9260208093018386015e8301015290565b51906001600160a01b03821682036105ba57565b600580546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a356fe6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde031461113257508063075e3a0e1461111657806307a8e8f5146110fb578063095ea7b3146110d557806318160ddd146110b857806323684d241461101257806323b872dd14610f555780632d7e557d14610f11578063313ce56714610ef65780633950935114610e9457806346ed6ccf14610e6c5780634ada218b14610e475780635aa9f0ec14610e2b57806361d027b314610de757806370a0823114610db057806370c757ec14610d8b578063715018a614610d305780638a3bc68314610d135780638a8c523c14610c0f5780638ab1d68114610b8e5780638d8e7a6a146109ce5780638da5cb5b146109a65780638ea5220f146109625780638fdb2bfe146108f857806395d89b41146107f45780639b19251a146107b75780639be3c85b146107955780639f15b18814610778578063a457c2d7146106d5578063a9059cbb146106a4578063ae36f5c814610467578063aef5eb2d1461042f578063c31fe80a14610412578063ca4d6028146103da578063d7434e22146103bf578063dd62ed3e1461036f578063e1a4521814610353578063e43252d7146102c7578063f242ab411461029f5763f2fde38b146101d4575f80fd5b3461029b57602036600319011261029b576101ed611214565b6101f56118e8565b6001600160a01b0316801561024757600580546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b5f80fd5b3461029b575f36600319011261029b576006546040516001600160a01b039091168152602090f35b3461029b57602036600319011261029b576102e0611214565b6007546103079060ff906102fe336001600160a01b03831614611276565b60a81c166112f2565b60018060a01b0316805f52600860205260405f20600160ff198254161790557ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d602060405160018152a2005b3461029b575f36600319011261029b5760206040516127108152f35b3461029b57604036600319011261029b57610388611214565b61039061122a565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b3461029b575f36600319011261029b57602060405160328152f35b3461029b57602036600319011261029b576001600160a01b036103fb611214565b165f52600b602052602060405f2054604051908152f35b3461029b575f36600319011261029b576020600a54604051908152f35b3461029b57602036600319011261029b576001600160a01b03610450611214565b165f52600c602052602060405f2054604051908152f35b3461029b57602036600319011261029b57610480611214565b6104886118e8565b6001600160a01b038116908115610673576104a5308314156114ce565b3b1561063f57600654906001600160a01b038216610607576104c96009541561136e565b604051630dfe168160e01b8152602081600481855afa9081156105dd575f916105e8575b506001600160a01b031630148015610546575b90807fc3cd203585fbc28dcc1692611d2ebc4190312a5b189047df793c69b157aa0d299361052f6020946114ce565b6001600160a01b03191617600655604051908152a1005b5060405163d21220a760e01b815290602082600481845afa80156105dd577fc3cd203585fbc28dcc1692611d2ebc4190312a5b189047df793c69b157aa0d299361052f83926020955f916105b0575b509195509193506001600160a01b0316301491506105009050565b6105d09150863d88116105d6575b6105c88183611240565b8101906113f8565b87610595565b503d6105be565b6040513d5f823e3d90fd5b610601915060203d6020116105d6576105c88183611240565b836104ed565b60405162461bcd60e51b815260206004820152601060248201526f14185a5c88185b1c9958591e481cd95d60821b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b139bdd0818dbdb9d1c9858dd60a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600960248201526850616972207a65726f60b81b6044820152606490fd5b3461029b57604036600319011261029b576106ca6106c0611214565b6024359033611631565b602060405160018152f35b3461029b57604036600319011261029b576106ee611214565b60243590335f52600160205260405f2060018060a01b0382165f5260205260405f205491808310610725576106ca92039033611509565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b3461029b575f36600319011261029b57602060405162278d008152f35b3461029b575f36600319011261029b5760206107af61145f565b604051908152f35b3461029b57602036600319011261029b576001600160a01b036107d8611214565b165f526008602052602060ff60405f2054166040519015158152f35b3461029b575f36600319011261029b576040515f6004548060011c906001811680156108ee575b6020831081146108da578285529081156108b65750600114610858575b6108548361084881850382611240565b604051918291826111ea565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b80821061089c57509091508101602001610848610838565b919260018160209254838588010152019101909291610884565b60ff191660208086019190915291151560051b840190910191506108489050610838565b634e487b7160e01b5f52602260045260245ffd5b91607f169161081b565b3461029b575f36600319011261029b5760075461091f336001600160a01b03831614611276565b61092f61092a61160d565b6112b5565b6001600160a01b0319166007557f3304a4eac4b1da51949262f91f8f924cd76c970f38971f658c21fce9613cdd9f5f80a1005b3461029b575f36600319011261029b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461029b575f36600319011261029b576005546040516001600160a01b039091168152602090f35b3461029b575f36600319011261029b576109e66118e8565b6006546001600160a01b03166109fd811515611333565b610a096009541561136e565b604051630240bc6b60e21b8152606081600481855afa9182156105dd575f915f93610b5a575b50604051630dfe168160e01b8152602081600481855afa9081156105dd575f91610b3b575b506001600160a01b03163003610b2c576001600160701b0382165b604051630dfe168160e01b815290602082600481865afa9182156105dd577e73c775b33e2d3383eb1bd6dc296dbde492c3a2800b77f08ba64d487c354c7195604095610ae8946001600160701b03935f91610b0d575b506001600160a01b03163003610b04575016905b15159081610afa575b50611417565b426009558151908152426020820152a1005b9050151585610ae2565b90501690610ad9565b610b26915060203d6020116105d6576105c88183611240565b89610ac5565b6001600160701b038316610a6f565b610b54915060203d6020116105d6576105c88183611240565b84610a54565b909250610b7f915060603d606011610b87575b610b778183611240565b8101906113c2565b509183610a2f565b503d610b6d565b3461029b57602036600319011261029b57610ba7611214565b600754610bc59060ff906102fe336001600160a01b03831614611276565b6001600160a01b03165f818152600860209081526040808320805460ff19169055519182527ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a2005b3461029b575f36600319011261029b57600754610c36336001600160a01b03831614611276565b610c4161092a61160d565b60ff8160a01c16610cdc5760095415610ca55760ff60a01b1916600160a01b17600755600a5415610c9c575b7fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9236020600a54604051908152a1005b42600a55610c6d565b60405162461bcd60e51b815260206004820152600f60248201526e50616972206e6f742061637469766560881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b3461029b575f36600319011261029b576020600954604051908152f35b3461029b575f36600319011261029b57610d486118e8565b600580546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461029b575f36600319011261029b57602060ff60075460a81c166040519015158152f35b3461029b57602036600319011261029b576001600160a01b03610dd1611214565b165f525f602052602060405f2054604051908152f35b3461029b575f36600319011261029b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461029b575f36600319011261029b57602060405161012c8152f35b3461029b575f36600319011261029b57602060ff60075460a01c166040519015158152f35b3461029b575f36600319011261029b576007546040516001600160a01b039091168152602090f35b3461029b57604036600319011261029b57610ead611214565b335f52600160205260405f2060018060a01b0382165f5260205260405f20546024358101809111610ee2576106ca9133611509565b634e487b7160e01b5f52601160045260245ffd5b3461029b575f36600319011261029b57602060405160128152f35b3461029b575f36600319011261029b576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461029b57606036600319011261029b57610f6e611214565b610f7661122a565b6001600160a01b0382165f908152600160208181526040808420338552909152909120549260443592918401610fb1575b6106ca9350611631565b828410610fcd57610fc8836106ca95033383611509565b610fa7565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b3461029b575f36600319011261029b57600754611039336001600160a01b03831614611276565b61104461092a61160d565b60ff8160a81c16156110805760ff60a81b19166007557f709efb522a4f233bb5eb68dce0aad3a8200badcf0a81efec1bd7b8f88d0886075f80a1005b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b6044820152606490fd5b3461029b575f36600319011261029b576020600254604051908152f35b3461029b57604036600319011261029b576106ca6110f1611214565b6024359033611509565b3461029b575f36600319011261029b57602060405160648152f35b3461029b575f36600319011261029b5760206040516162708152f35b3461029b575f36600319011261029b575f6003548060011c906001811680156111e0575b6020831081146108da578285529081156108b65750600114611182576108548361084881850382611240565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b8082106111c657509091508101602001610848610838565b9192600181602092548385880101520191019092916111ae565b91607f1691611156565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361029b57565b602435906001600160a01b038216820361029b57565b90601f8019910116810190811067ffffffffffffffff82111761126257604052565b634e487b7160e01b5f52604160045260245ffd5b1561127d57565b60405162461bcd60e51b815260206004820152601060248201526f2737ba103630bab731b41030b236b4b760811b6044820152606490fd5b156112bc57565b60405162461bcd60e51b815260206004820152600e60248201526d13185d5b98da08195e1c1a5c995960921b6044820152606490fd5b156112f957565b60405162461bcd60e51b815260206004820152601260248201527115da1a5d195b1a5cdd08191a5cd8589b195960721b6044820152606490fd5b1561133a57565b60405162461bcd60e51b815260206004820152600c60248201526b14185a5c881b9bdd081cd95d60a21b6044820152606490fd5b1561137557565b60405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481858dd1a5d985d1959607a1b6044820152606490fd5b51906001600160701b038216820361029b57565b9081606091031261029b576113d6816113ae565b9160406113e5602084016113ae565b92015163ffffffff8116810361029b5790565b9081602091031261029b57516001600160a01b038116810361029b5790565b1561141e57565b60405162461bcd60e51b815260206004820152600c60248201526b4e6f206c697175696469747960a01b6044820152606490fd5b91908203918211610ee257565b600a5480156114c9576114729042611452565b62278d0081106114c257624f1a0081106114bb576283d60081106114b45762ed4e0081106114ad576301e13380116114a8575f90565b60fa90565b506101f490565b506102ee90565b506103e890565b506107d090565b505f90565b156114d557565b60405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103830b4b960a11b6044820152606490fd5b6001600160a01b03169081156115bc576001600160a01b031691821561156c5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b600954801515908161161d575090565b90506162708101809111610ee25742111590565b8291906001600160a01b03808216907f0000000000000000000000000000000000000000000000000000000000000000168181141590816118d4575b50611680575b5061167e9350611d6f565b565b600954801515919082806118ca575b806118b6575b611861575b6116a48585611940565b82611847575b5081611832575b50611809575b6006546001600160a01b038381169116146116d3575b83611673565b60405163eddaa3ab60e01b81529092506020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa5f91816117cc575b506117c7575060015b611782576009548015159081611768575b5061167e9361174b91611751575b83611c6e565b916116cd565b61175a84611a3e565b61176381611b0c565b611745565b905062278d008101809111610ee25742111561167e611737565b60405162461bcd60e51b815260206004820152601960248201527f456d657267656e63793a2073656c6c732064697361626c6564000000000000006044820152606490fd5b611726565b9091506020813d602011611801575b816117e860209383611240565b8101031261029b5751801515810361029b57905f61171d565b3d91506117db565b60018060a01b038216805f52600b6020524260405f20555f52600c6020524360405f20556116b7565b6006546001600160a01b03161490505f6116b1565b90915062278d008101809111610ee257421115905f6116aa565b6162708101808211610ee257600a8190556007805460ff60a01b1916600160a01b1790556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390602090a161169a565b506162708101808211610ee2574211611695565b50600a541561168f565b6001600160a01b038516141590505f61166d565b6005546001600160a01b031633036118fc57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b61194861160d565b15611a3a5760ff60075460a01c161561195f575050565b6006546001600160a01b0391821691168181036119d45750506001600160a01b03165f9081526008602052604090205460ff161561199957565b60405162461bcd60e51b8152602060048201526013602482015272109d5e481b9bdd081dda1a5d195b1a5cdd1959606a1b6044820152606490fd5b90916001600160a01b0316146119e8575b50565b5f52600860205260ff60405f205416156119fe57565b60405162461bcd60e51b815260206004820152601460248201527314d95b1b081b9bdd081dda1a5d195b1a5cdd195960621b6044820152606490fd5b5050565b6001600160a01b03165f818152600b6020526040902054908115611a3a575f52600c60205260405f2054431115611abb5761012c8101809111610ee2574210611a8357565b60405162461bcd60e51b815260206004820152601060248201526f486f6c642074696d652061637469766560801b6044820152606490fd5b60405162461bcd60e51b81526020600482015260166024820152754e6f206275792b73656c6c2073616d6520626c6f636b60501b6044820152606490fd5b81810292918115918404141715610ee257565b6009548015611a3a5762093a808101808211610ee2574211611c54575060325b6006546001600160a01b031690611b44821515611333565b604051630240bc6b60e21b815290606082600481865afa9283156105dd575f925f94611c27575b50602060049160405192838092630dfe168160e01b82525afa9283156105dd5761271094611bc6946001600160701b03935f91611c08575b506001600160a01b03163003611c005750165b611bc1811515611417565b611af9565b0410611bce57565b60405162461bcd60e51b815260206004820152600a6024820152690a6cad8d8407c40dac2f60b31b6044820152606490fd5b905016611bb6565b611c21915060203d6020116105d6576105c88183611240565b5f611ba3565b600491945060209350611c489060603d606011610b8757610b778183611240565b50939093949150611b6b565b62278d008101809111610ee25742116119e5576064611b2c565b90611c7761145f565b8015611d6957611c8a6127109183611af9565b04908115611d6357611f40820292828404611f4003610ee2577f1177816916f9c1658850314999704de1236b4ce2f2ea904d8f508926ac32436f6080612710611d30960492611cd98487611452565b611d04857f000000000000000000000000000000000000000000000000000000000000000084611d6f565b80611d33575b604051948686528760208701526040860152606085015260018060a01b031692a2611452565b90565b611d5e817f000000000000000000000000000000000000000000000000000000000000000084611d6f565b611d0a565b91505090565b50905090565b6001600160a01b0316908115611e92576001600160a01b0316918215611e4157815f525f60205260405f2054818110611ded57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fdfea26469706673582212208e6fb12265a593b3839aaa3f6b313c3dc694bacf19250054aae6b3efb96922e464736f6c6343000821003300000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a869680000000000000000000000003183bd5eb7222cdc2a7bcc93747a85414447736b0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a8696800000000000000000000000089db62998c1edcb96d3341fd9761cbf27bd599ca0000000000000000000000002f2ae6786e418d3c5f2f64277f211a3a13107a39000000000000000000000000000000000000000000000000000000000000000e48656c69786f204e6574776f726b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003484c580000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde031461113257508063075e3a0e1461111657806307a8e8f5146110fb578063095ea7b3146110d557806318160ddd146110b857806323684d241461101257806323b872dd14610f555780632d7e557d14610f11578063313ce56714610ef65780633950935114610e9457806346ed6ccf14610e6c5780634ada218b14610e475780635aa9f0ec14610e2b57806361d027b314610de757806370a0823114610db057806370c757ec14610d8b578063715018a614610d305780638a3bc68314610d135780638a8c523c14610c0f5780638ab1d68114610b8e5780638d8e7a6a146109ce5780638da5cb5b146109a65780638ea5220f146109625780638fdb2bfe146108f857806395d89b41146107f45780639b19251a146107b75780639be3c85b146107955780639f15b18814610778578063a457c2d7146106d5578063a9059cbb146106a4578063ae36f5c814610467578063aef5eb2d1461042f578063c31fe80a14610412578063ca4d6028146103da578063d7434e22146103bf578063dd62ed3e1461036f578063e1a4521814610353578063e43252d7146102c7578063f242ab411461029f5763f2fde38b146101d4575f80fd5b3461029b57602036600319011261029b576101ed611214565b6101f56118e8565b6001600160a01b0316801561024757600580546001600160a01b0319811683179091556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3005b60405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608490fd5b5f80fd5b3461029b575f36600319011261029b576006546040516001600160a01b039091168152602090f35b3461029b57602036600319011261029b576102e0611214565b6007546103079060ff906102fe336001600160a01b03831614611276565b60a81c166112f2565b60018060a01b0316805f52600860205260405f20600160ff198254161790557ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d602060405160018152a2005b3461029b575f36600319011261029b5760206040516127108152f35b3461029b57604036600319011261029b57610388611214565b61039061122a565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b3461029b575f36600319011261029b57602060405160328152f35b3461029b57602036600319011261029b576001600160a01b036103fb611214565b165f52600b602052602060405f2054604051908152f35b3461029b575f36600319011261029b576020600a54604051908152f35b3461029b57602036600319011261029b576001600160a01b03610450611214565b165f52600c602052602060405f2054604051908152f35b3461029b57602036600319011261029b57610480611214565b6104886118e8565b6001600160a01b038116908115610673576104a5308314156114ce565b3b1561063f57600654906001600160a01b038216610607576104c96009541561136e565b604051630dfe168160e01b8152602081600481855afa9081156105dd575f916105e8575b506001600160a01b031630148015610546575b90807fc3cd203585fbc28dcc1692611d2ebc4190312a5b189047df793c69b157aa0d299361052f6020946114ce565b6001600160a01b03191617600655604051908152a1005b5060405163d21220a760e01b815290602082600481845afa80156105dd577fc3cd203585fbc28dcc1692611d2ebc4190312a5b189047df793c69b157aa0d299361052f83926020955f916105b0575b509195509193506001600160a01b0316301491506105009050565b6105d09150863d88116105d6575b6105c88183611240565b8101906113f8565b87610595565b503d6105be565b6040513d5f823e3d90fd5b610601915060203d6020116105d6576105c88183611240565b836104ed565b60405162461bcd60e51b815260206004820152601060248201526f14185a5c88185b1c9958591e481cd95d60821b6044820152606490fd5b60405162461bcd60e51b815260206004820152600c60248201526b139bdd0818dbdb9d1c9858dd60a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600960248201526850616972207a65726f60b81b6044820152606490fd5b3461029b57604036600319011261029b576106ca6106c0611214565b6024359033611631565b602060405160018152f35b3461029b57604036600319011261029b576106ee611214565b60243590335f52600160205260405f2060018060a01b0382165f5260205260405f205491808310610725576106ca92039033611509565b60405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608490fd5b3461029b575f36600319011261029b57602060405162278d008152f35b3461029b575f36600319011261029b5760206107af61145f565b604051908152f35b3461029b57602036600319011261029b576001600160a01b036107d8611214565b165f526008602052602060ff60405f2054166040519015158152f35b3461029b575f36600319011261029b576040515f6004548060011c906001811680156108ee575b6020831081146108da578285529081156108b65750600114610858575b6108548361084881850382611240565b604051918291826111ea565b0390f35b91905060045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b915f905b80821061089c57509091508101602001610848610838565b919260018160209254838588010152019101909291610884565b60ff191660208086019190915291151560051b840190910191506108489050610838565b634e487b7160e01b5f52602260045260245ffd5b91607f169161081b565b3461029b575f36600319011261029b5760075461091f336001600160a01b03831614611276565b61092f61092a61160d565b6112b5565b6001600160a01b0319166007557f3304a4eac4b1da51949262f91f8f924cd76c970f38971f658c21fce9613cdd9f5f80a1005b3461029b575f36600319011261029b576040517f0000000000000000000000003183bd5eb7222cdc2a7bcc93747a85414447736b6001600160a01b03168152602090f35b3461029b575f36600319011261029b576005546040516001600160a01b039091168152602090f35b3461029b575f36600319011261029b576109e66118e8565b6006546001600160a01b03166109fd811515611333565b610a096009541561136e565b604051630240bc6b60e21b8152606081600481855afa9182156105dd575f915f93610b5a575b50604051630dfe168160e01b8152602081600481855afa9081156105dd575f91610b3b575b506001600160a01b03163003610b2c576001600160701b0382165b604051630dfe168160e01b815290602082600481865afa9182156105dd577e73c775b33e2d3383eb1bd6dc296dbde492c3a2800b77f08ba64d487c354c7195604095610ae8946001600160701b03935f91610b0d575b506001600160a01b03163003610b04575016905b15159081610afa575b50611417565b426009558151908152426020820152a1005b9050151585610ae2565b90501690610ad9565b610b26915060203d6020116105d6576105c88183611240565b89610ac5565b6001600160701b038316610a6f565b610b54915060203d6020116105d6576105c88183611240565b84610a54565b909250610b7f915060603d606011610b87575b610b778183611240565b8101906113c2565b509183610a2f565b503d610b6d565b3461029b57602036600319011261029b57610ba7611214565b600754610bc59060ff906102fe336001600160a01b03831614611276565b6001600160a01b03165f818152600860209081526040808320805460ff19169055519182527ff93f9a76c1bf3444d22400a00cb9fe990e6abe9dbb333fda48859cfee864543d91a2005b3461029b575f36600319011261029b57600754610c36336001600160a01b03831614611276565b610c4161092a61160d565b60ff8160a01c16610cdc5760095415610ca55760ff60a01b1916600160a01b17600755600a5415610c9c575b7fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e9236020600a54604051908152a1005b42600a55610c6d565b60405162461bcd60e51b815260206004820152600f60248201526e50616972206e6f742061637469766560881b6044820152606490fd5b60405162461bcd60e51b815260206004820152600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b3461029b575f36600319011261029b576020600954604051908152f35b3461029b575f36600319011261029b57610d486118e8565b600580546001600160a01b031981169091555f906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461029b575f36600319011261029b57602060ff60075460a81c166040519015158152f35b3461029b57602036600319011261029b576001600160a01b03610dd1611214565b165f525f602052602060405f2054604051908152f35b3461029b575f36600319011261029b576040517f0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a869686001600160a01b03168152602090f35b3461029b575f36600319011261029b57602060405161012c8152f35b3461029b575f36600319011261029b57602060ff60075460a01c166040519015158152f35b3461029b575f36600319011261029b576007546040516001600160a01b039091168152602090f35b3461029b57604036600319011261029b57610ead611214565b335f52600160205260405f2060018060a01b0382165f5260205260405f20546024358101809111610ee2576106ca9133611509565b634e487b7160e01b5f52601160045260245ffd5b3461029b575f36600319011261029b57602060405160128152f35b3461029b575f36600319011261029b576040517f00000000000000000000000089db62998c1edcb96d3341fd9761cbf27bd599ca6001600160a01b03168152602090f35b3461029b57606036600319011261029b57610f6e611214565b610f7661122a565b6001600160a01b0382165f908152600160208181526040808420338552909152909120549260443592918401610fb1575b6106ca9350611631565b828410610fcd57610fc8836106ca95033383611509565b610fa7565b60405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606490fd5b3461029b575f36600319011261029b57600754611039336001600160a01b03831614611276565b61104461092a61160d565b60ff8160a81c16156110805760ff60a81b19166007557f709efb522a4f233bb5eb68dce0aad3a8200badcf0a81efec1bd7b8f88d0886075f80a1005b60405162461bcd60e51b815260206004820152601060248201526f105b1c9958591e48191a5cd8589b195960821b6044820152606490fd5b3461029b575f36600319011261029b576020600254604051908152f35b3461029b57604036600319011261029b576106ca6110f1611214565b6024359033611509565b3461029b575f36600319011261029b57602060405160648152f35b3461029b575f36600319011261029b5760206040516162708152f35b3461029b575f36600319011261029b575f6003548060011c906001811680156111e0575b6020831081146108da578285529081156108b65750600114611182576108548361084881850382611240565b91905060035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f905b8082106111c657509091508101602001610848610838565b9192600181602092548385880101520191019092916111ae565b91607f1691611156565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b038216820361029b57565b602435906001600160a01b038216820361029b57565b90601f8019910116810190811067ffffffffffffffff82111761126257604052565b634e487b7160e01b5f52604160045260245ffd5b1561127d57565b60405162461bcd60e51b815260206004820152601060248201526f2737ba103630bab731b41030b236b4b760811b6044820152606490fd5b156112bc57565b60405162461bcd60e51b815260206004820152600e60248201526d13185d5b98da08195e1c1a5c995960921b6044820152606490fd5b156112f957565b60405162461bcd60e51b815260206004820152601260248201527115da1a5d195b1a5cdd08191a5cd8589b195960721b6044820152606490fd5b1561133a57565b60405162461bcd60e51b815260206004820152600c60248201526b14185a5c881b9bdd081cd95d60a21b6044820152606490fd5b1561137557565b60405162461bcd60e51b8152602060048201526011602482015270105b1c9958591e481858dd1a5d985d1959607a1b6044820152606490fd5b51906001600160701b038216820361029b57565b9081606091031261029b576113d6816113ae565b9160406113e5602084016113ae565b92015163ffffffff8116810361029b5790565b9081602091031261029b57516001600160a01b038116810361029b5790565b1561141e57565b60405162461bcd60e51b815260206004820152600c60248201526b4e6f206c697175696469747960a01b6044820152606490fd5b91908203918211610ee257565b600a5480156114c9576114729042611452565b62278d0081106114c257624f1a0081106114bb576283d60081106114b45762ed4e0081106114ad576301e13380116114a8575f90565b60fa90565b506101f490565b506102ee90565b506103e890565b506107d090565b505f90565b156114d557565b60405162461bcd60e51b815260206004820152600c60248201526b24b73b30b634b2103830b4b960a11b6044820152606490fd5b6001600160a01b03169081156115bc576001600160a01b031691821561156c5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526001825260405f20855f5282528060405f2055604051908152a3565b60405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608490fd5b60405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608490fd5b600954801515908161161d575090565b90506162708101809111610ee25742111590565b8291906001600160a01b03808216907f0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a86968168181141590816118d4575b50611680575b5061167e9350611d6f565b565b600954801515919082806118ca575b806118b6575b611861575b6116a48585611940565b82611847575b5081611832575b50611809575b6006546001600160a01b038381169116146116d3575b83611673565b60405163eddaa3ab60e01b81529092506020816004817f00000000000000000000000089db62998c1edcb96d3341fd9761cbf27bd599ca6001600160a01b03165afa5f91816117cc575b506117c7575060015b611782576009548015159081611768575b5061167e9361174b91611751575b83611c6e565b916116cd565b61175a84611a3e565b61176381611b0c565b611745565b905062278d008101809111610ee25742111561167e611737565b60405162461bcd60e51b815260206004820152601960248201527f456d657267656e63793a2073656c6c732064697361626c6564000000000000006044820152606490fd5b611726565b9091506020813d602011611801575b816117e860209383611240565b8101031261029b5751801515810361029b57905f61171d565b3d91506117db565b60018060a01b038216805f52600b6020524260405f20555f52600c6020524360405f20556116b7565b6006546001600160a01b03161490505f6116b1565b90915062278d008101809111610ee257421115905f6116aa565b6162708101808211610ee257600a8190556007805460ff60a01b1916600160a01b1790556040519081527fb3da2db3dfc3778f99852546c6e9ab39ec253f9de7b0847afec61bd27878e92390602090a161169a565b506162708101808211610ee2574211611695565b50600a541561168f565b6001600160a01b038516141590505f61166d565b6005546001600160a01b031633036118fc57565b606460405162461bcd60e51b815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b61194861160d565b15611a3a5760ff60075460a01c161561195f575050565b6006546001600160a01b0391821691168181036119d45750506001600160a01b03165f9081526008602052604090205460ff161561199957565b60405162461bcd60e51b8152602060048201526013602482015272109d5e481b9bdd081dda1a5d195b1a5cdd1959606a1b6044820152606490fd5b90916001600160a01b0316146119e8575b50565b5f52600860205260ff60405f205416156119fe57565b60405162461bcd60e51b815260206004820152601460248201527314d95b1b081b9bdd081dda1a5d195b1a5cdd195960621b6044820152606490fd5b5050565b6001600160a01b03165f818152600b6020526040902054908115611a3a575f52600c60205260405f2054431115611abb5761012c8101809111610ee2574210611a8357565b60405162461bcd60e51b815260206004820152601060248201526f486f6c642074696d652061637469766560801b6044820152606490fd5b60405162461bcd60e51b81526020600482015260166024820152754e6f206275792b73656c6c2073616d6520626c6f636b60501b6044820152606490fd5b81810292918115918404141715610ee257565b6009548015611a3a5762093a808101808211610ee2574211611c54575060325b6006546001600160a01b031690611b44821515611333565b604051630240bc6b60e21b815290606082600481865afa9283156105dd575f925f94611c27575b50602060049160405192838092630dfe168160e01b82525afa9283156105dd5761271094611bc6946001600160701b03935f91611c08575b506001600160a01b03163003611c005750165b611bc1811515611417565b611af9565b0410611bce57565b60405162461bcd60e51b815260206004820152600a6024820152690a6cad8d8407c40dac2f60b31b6044820152606490fd5b905016611bb6565b611c21915060203d6020116105d6576105c88183611240565b5f611ba3565b600491945060209350611c489060603d606011610b8757610b778183611240565b50939093949150611b6b565b62278d008101809111610ee25742116119e5576064611b2c565b90611c7761145f565b8015611d6957611c8a6127109183611af9565b04908115611d6357611f40820292828404611f4003610ee2577f1177816916f9c1658850314999704de1236b4ce2f2ea904d8f508926ac32436f6080612710611d30960492611cd98487611452565b611d04857f0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a8696884611d6f565b80611d33575b604051948686528760208701526040860152606085015260018060a01b031692a2611452565b90565b611d5e817f0000000000000000000000003183bd5eb7222cdc2a7bcc93747a85414447736b84611d6f565b611d0a565b91505090565b50905090565b6001600160a01b0316908115611e92576001600160a01b0316918215611e4157815f525f60205260405f2054818110611ded57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b60405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608490fd5b60405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608490fdfea26469706673582212208e6fb12265a593b3839aaa3f6b313c3dc694bacf19250054aae6b3efb96922e464736f6c63430008210033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a869680000000000000000000000003183bd5eb7222cdc2a7bcc93747a85414447736b0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a8696800000000000000000000000089db62998c1edcb96d3341fd9761cbf27bd599ca0000000000000000000000002f2ae6786e418d3c5f2f64277f211a3a13107a39000000000000000000000000000000000000000000000000000000000000000e48656c69786f204e6574776f726b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003484c580000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): Helixo Network
Arg [1] : symbol_ (string): HLX
Arg [2] : totalSupply_ (uint256): 250000000000000000000000000
Arg [3] : _treasury (address): 0x8bB799FaEa17C6E5ed475CD31A956a75c4A86968
Arg [4] : _devWallet (address): 0x3183Bd5eb7222cDc2a7BCc93747A85414447736b
Arg [5] : _launchAdmin (address): 0x8bB799FaEa17C6E5ed475CD31A956a75c4A86968
Arg [6] : _emergencyGuard (address): 0x89db62998c1EDCB96d3341fD9761CBF27bd599Ca
Arg [7] : _mintTo (address): 0x2F2Ae6786e418D3c5F2F64277f211a3A13107A39
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [2] : 000000000000000000000000000000000000000000cecb8f27f4200f3a000000
Arg [3] : 0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a86968
Arg [4] : 0000000000000000000000003183bd5eb7222cdc2a7bcc93747a85414447736b
Arg [5] : 0000000000000000000000008bb799faea17c6e5ed475cd31a956a75c4a86968
Arg [6] : 00000000000000000000000089db62998c1edcb96d3341fd9761cbf27bd599ca
Arg [7] : 0000000000000000000000002f2ae6786e418d3c5f2f64277f211a3a13107a39
Arg [8] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [9] : 48656c69786f204e6574776f726b000000000000000000000000000000000000
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [11] : 484c580000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in BNB
Multichain Portfolio | 32 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.