Polygon Sponsored slots available. Book your slot here!
Overview ERC-20
Price
$0.00 @ 0.000000 MATIC
Fully Diluted Market Cap
Total Supply:
10,000,457.335422 EGG
Holders:
101 addresses
Transfers:
-
Contract:
Decimals:
18
Official Site:
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
Multi-Chain DeFi Dashboard $ETH $MATIC $BSC $SOLANA $AVAX $FTM $VLX.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
EggToken
Compiler Version
v0.7.0+commit.9e61f92b
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "./ERC20Pausable.sol"; import "./ERC20Burnable.sol"; import "./ERC20Mintable.sol"; import "./ERC20Lockable.sol"; import "../interfaces/IBurning.sol"; import "../interfaces/IStaking.sol"; import "../libraries/SafeMathUint.sol"; /** * @dev EggToken is a {ERC20} implementation with various extensions * and custom functionality. */ contract EggToken is ERC20Burnable, ERC20Mintable, ERC20Pausable, ERC20Lockable { using SafeMathUint for uint256; IBurning _burning; IStaking _staking; mapping (address=>bool) private _allowedMinters; /** * @dev Sets the values for {name} and {symbol}, allocates the `initialTotalSupply`. */ constructor( string memory name, string memory symbol, uint256 initialTotalSupply ) ERC20(name, symbol) { _totalSupply = initialTotalSupply; _balances[_msgSender()] = _balances[_msgSender()].add(_totalSupply); emit Transfer(address(0), _msgSender(), _totalSupply); } /** * @dev Enables the burning, allocates the `burningBalance` to {IBurning} contract. */ function setBurningContract(IBurning burning, uint256 burningBalance) external onlyOwner { _burning = burning; // _totalSupply = _totalSupply.add(burningBalance); no need to do this , total supply remains fixed _balances[_msgSender()] = _balances[_msgSender()].sub(burningBalance); _balances[address(burning)] = _balances[address(burning)].add(burningBalance); emit Transfer(address(0), address(burning), burningBalance); } /** * @dev Enables the staking via {IStaking} contract. */ function setStakingContract(IStaking staking) external onlyOwner { _staking = staking; } /** * @dev Enables the token distribution with 'lock-in' period via {LockableDistribution} contract. * * See {ERC20Lockable}. */ function setLockableDistributionContract(address lockableDistribution) external onlyOwner { _lockableDistribution = lockableDistribution; } function setMinter(address _address, bool _role) external onlyOwner { _allowedMinters[_address] = _role; } function getMinterRole(address _address) external view returns (bool) { return _allowedMinters[_address]; } /** * @dev Moves each of `values` in tokens from the caller's account to the list of `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event per each transfer. */ function transferBatch(address[] calldata to, uint256[] calldata values) external returns (bool) { require( to.length == values.length && to.length > 0, "EggToken: to and values arrays should be equal in size and non-empty" ); uint256 i = 0; while (i < to.length) { require(to[i] != address(0), "EggToken: transfer to the zero address"); _beforeTokenTransfer(_msgSender(), to[i], values[i]); _balances[_msgSender()] = _balances[_msgSender()].sub( values[i], "EggToken: transfer amount exceeds balance" ); _balances[to[i]] = _balances[to[i]].add(values[i]); emit Transfer(_msgSender(), to[i], values[i]); i++; } return true; } /** * @dev Triggers token burn through the {IBurning} `_burning` contract. * * Requirements: * * - only contract owner can trigger the burning. */ function periodicBurn() external onlyOwner returns (bool success) { require(_burning.burn(), "Burning: not possible to perform the periodic token burn"); return true; } /** * @dev Enables withdrawal of {ERC20} tokens accidentally sent to this smart contract. * * Requirements: * * - only contract owner can transfer out {ERC20} tokens. */ function transferAnyERC20Token(address tokenAddress, uint256 tokens) external onlyOwner returns (bool success) { return IERC20(tokenAddress).transfer(_msgSender(), tokens); } /** * @dev See {ERC20-_beforeTokenTransfer}, * {ERC20Pausable-_beforeTokenTransfer}, {ERC20Lockable-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override(ERC20, ERC20Pausable, ERC20Lockable) { super._beforeTokenTransfer(from, to, amount); } /** * @dev Restricts token minting. * * Requirements: * * - only {IStaking} `_staking` contract can mint tokens (staking rewards). */ function _beforeMint() internal virtual override { require(_allowedMinters[_msgSender()], "Minting: only contracts with minter roles can mint tokens"); } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "./Context.sol"; import "./Ownable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context, Ownable { /** * @dev Emitted when the pause is triggered by `account`. */ event LogPaused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event LogUnpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function pause() external virtual whenNotPaused onlyOwner { _paused = true; emit LogPaused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function unpause() external virtual whenPaused onlyOwner { _paused = false; emit LogUnpaused(_msgSender()); } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "./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 { event LogOwnershipTransferred(address indexed previousOwner, address indexed newOwner); address private _owner; /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _owner = _msgSender(); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_msgSender() == _owner, "Ownable: only contract owner can call this function."); _; } /** * @dev Checks if transaction sender account is an owner. */ function isOwner() external view returns (bool) { return _msgSender() == _owner; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) external onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit LogOwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.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 GSN 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 virtual view returns (address payable) { return msg.sender; } function _msgData() internal virtual view returns (bytes memory) { this; return msg.data; } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "./ERC20.sol"; import "../utils/Pausable.sol"; /** * @dev Extension of {ERC20} with pausable token transfers, minting and burning. * * Useful for scenarios such as preventing trades until the end of an evaluation * period, or having an emergency switch for freezing all token transfers in the * event of a large bug. */ abstract contract ERC20Pausable is ERC20, Pausable { /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - the contract must not be paused. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); require(!paused(), "ERC20Pausable: token transfer while paused"); } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "../utils/Context.sol"; import "./ERC20.sol"; /** * @dev Extension of {ERC20} that allows new tokens to be created, * in a way that can be recognized off-chain (via event analysis). */ abstract contract ERC20Mintable is Context, ERC20 { /** * @dev Creates `amount` tokens for `account`. * * See {ERC20-_mint}. */ function mint(address account, uint256 amount) external virtual returns (bool success) { _mint(account, amount); return true; } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "../utils/Context.sol"; import "./ERC20Pausable.sol"; import "../libraries/SafeMathUint.sol"; /** * @dev Extension of {ERC20} that allows to set up a 'lock-in' period for tokens, * which means a percentage of tokens received through from {LockableDistribution} contract * will not be transferrable until the end of 'lock-in' period. */ abstract contract ERC20Lockable is Context, ERC20Pausable { using SafeMathUint for uint256; address _lockableDistribution; struct BalanceLock { uint256 lockedAmount; uint256 unlockTimestamp; } mapping(address => BalanceLock) internal _balanceLocks; /** * @dev Creates a 'lock-in' period for `lockAmount` tokens on `lockFor` address * that lasts until `unlockTimestamp` timestamp. */ function lock( address lockFor, uint256 lockAmount, uint256 unlockTimestamp ) external { require( _msgSender() == _lockableDistribution, "ERC20Lockable: only distribution contract can lock tokens" ); _balanceLocks[lockFor].lockedAmount = lockAmount; _balanceLocks[lockFor].unlockTimestamp = unlockTimestamp; } /** * @dev Returns a 'lock-in' period details for `account` address. */ function lockOf(address account) public view returns (uint256 lockedAmount, uint256 unlockTimestamp) { return (_balanceLocks[account].lockedAmount, _balanceLocks[account].unlockTimestamp); } /** * @dev Hook that restricts transfers according to the 'lock-in' period. * * See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - transferred amount should not include tokens that are 'locked-in'. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual override { super._beforeTokenTransfer(from, to, amount); uint256 lockedAmount; uint256 unlockTimestamp; (lockedAmount, unlockTimestamp) = lockOf(from); if (unlockTimestamp != 0 && block.timestamp < unlockTimestamp) { require( amount <= balanceOf(from).sub(lockedAmount), "ERC20Lockable: transfer amount exceeds the non-locked balance" ); } } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "../utils/Context.sol"; import "./ERC20.sol"; import "../libraries/SafeMathUint.sol"; /** * @dev Extension of {ERC20} that allows token holders to destroy both their own * tokens and those that they have an allowance for, in a way that can be * recognized off-chain (via event analysis). */ abstract contract ERC20Burnable is Context, ERC20 { using SafeMathUint for uint256; /** * @dev Destroys `amount` tokens from the caller. * * See {ERC20-_burn}. */ function burn(uint256 amount) external virtual returns (bool success) { _burn(_msgSender(), amount); return true; } /** * @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) external virtual returns (bool success) { uint256 decreasedAllowance = allowance(account, _msgSender()).sub( amount, "ERC20Burnable: burn amount exceeds allowance" ); _approve(account, _msgSender(), decreasedAllowance); _burn(account, amount); return true; } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; import "../utils/Context.sol"; import "../interfaces/IERC20.sol"; import "../libraries/SafeMathUint.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}. * * Functions revert instead of 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. * * 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 { using SafeMathUint for uint256; mapping(address => uint256) internal _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 internal _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor(string memory name, string memory symbol) { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view 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 {_setupDecimals} is * called. * * 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 returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public override view returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public override view returns (uint256) { return _balances[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 virtual override view 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); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance") ); 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].add(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) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } /** * @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"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, 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: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeMint(); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(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); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(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 Hook that is called before any transfer of tokens. This includes * minting and burning. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called before any token mint. */ function _beforeMint() internal virtual {} }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMathUint` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMathUint { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } /** * @dev Converts an unsigned integer to a signed integer, * Reverts when convertation overflows. * * Requirements: * * - Operation cannot overflow. */ function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0, "SafeMath: convertation overflow"); return b; } }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; /** * @dev Interface of the ERC900 standard with custom modifications. * * See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-900.md */ interface IStaking { /** * @dev Emitted when the `user` stakes an `amount` of tokens and * passes arbitrary `data`, therefore `total` is changed as well, * `personalStakeIndex`, `unlockedTimestamp` and `stakePercentageBasisPoints` are captured * according to the chosen stake option. */ event LogStaked( address indexed user, uint256 amount, uint256 personalStakeIndex, uint256 unlockedTimestamp, uint16 stakePercentageBasisPoints, uint256 total, bytes data ); /** * @dev Emitted when the `user` unstakes an `amount` of tokens and * passes arbitrary `data`, therefore `total` is changed as well, * `personalStakeIndex` and `stakeReward` are captured. */ event LogUnstaked( address indexed user, uint256 amount, uint256 personalStakeIndex, uint256 stakeReward, uint256 total, bytes data ); /** * @notice Stakes a certain amount of tokens, this MUST transfer the given amount from the user * @notice MUST trigger Staked event * @param stakeOptionIndex uint8 the chosen stake option * @param amount uint256 the amount of tokens to stake * @param data bytes optional data to include in the Stake event */ function stake( uint8 stakeOptionIndex, uint256 amount, bytes calldata data ) external; /** * @notice Stakes a certain amount of tokens, this MUST transfer the given amount from the caller * @notice MUST trigger Staked event * @param stakeOptionIndex uint8 the chosen stake option * @param user address the address the tokens are staked for * @param amount uint256 the amount of tokens to stake * @param data bytes optional data to include in the Stake event */ function stakeFor( uint8 stakeOptionIndex, address user, uint256 amount, bytes calldata data ) external; /** * @notice Unstakes tokens, this SHOULD return the given amount of tokens to the user, * if unstaking is currently not possible the function MUST revert * @notice MUST trigger Unstaked event * @dev Unstaking tokens is an atomic operation—either all of the tokens in a stake, or none of the tokens. * @dev Stake reward is minted if function is called after the stake's `unlockTimestamp`. * @param personalStakeIndex uint256 index of the stake to withdraw in the personalStakes mapping * @param data bytes optional data to include in the Unstake event */ function unstake(uint256 personalStakeIndex, bytes calldata data) external; /** * @notice Returns the current total of tokens staked for an address * @param addr address The address to query * @return uint256 The number of tokens staked for the given address */ function totalStakedFor(address addr) external view returns (uint256); /** * @notice Returns the current total of tokens staked * @return uint256 The number of tokens staked in the contract */ function totalStaked() external view returns (uint256); /** * @notice Address of the token being used by the staking interface * @return address The address of the ERC20 token used for staking */ function token() external view returns (address); /** * @notice MUST return true if the optional history functions are implemented, otherwise false * @dev Since we don't implement the optional interface, this always returns false * @return bool Whether or not the optional history functions are implemented */ function supportsHistory() external pure returns (bool); /** * @notice Sets the pairs of currently available staking options, * which will regulate the stake duration and reward percentage. * Stakes that were created through the old stake options will remain unchanged. * @param stakeDurations uint256[] array of stake option durations * @param stakePercentageBasisPoints uint16[] array of stake rewarding percentages (basis points) */ function setStakingOptions( uint256[] memory stakeDurations, uint16[] memory stakePercentageBasisPoints ) external; /** * @notice Returns the pairs of currently available staking options, * so that staker can choose a suitable combination of * stake duration and reward percentage. * @return stakeOptionIndexes uint256[] array of the stake option indexes used in other functions of this contract * @return stakeDurations uint256[] array of stake option durations * @return stakePercentageBasisPoints uint16[] array of stake rewarding percentages (basis points) */ function getStakingOptions() external view returns ( uint256[] memory stakeOptionIndexes, uint256[] memory stakeDurations, uint16[] memory stakePercentageBasisPoints ); /** * @dev Returns the stake indexes for * the last `amountToRetrieve` (with `offset` for pagination) * personal stakes created by `user`. * @param user address The address to query * @param amountToRetrieve uint256 Configures the amount of stakes to gather data for * @param offset uint256 Configures the offset for results pagination * @return uint256[] stake indexes array */ function getPersonalStakeIndexes( address user, uint256 amountToRetrieve, uint256 offset ) external view returns (uint256[] memory); /** * @dev Returns the stake unlock timestamps for * the last `amountToRetrieve` (with `offset` for pagination) * personal stakes created by `user`. * @param user address The address to query * @param amountToRetrieve uint256 Configures the amount of stakes to gather data for * @param offset uint256 Configures the offset for results pagination * @return uint256[] stake unlock timestamps array */ function getPersonalStakeUnlockedTimestamps( address user, uint256 amountToRetrieve, uint256 offset ) external view returns (uint256[] memory); /** * @dev Returns the stake values of * the last `amountToRetrieve` (with `offset` for pagination) * the personal stakes created by `user`. * @param user address The address to query * @param amountToRetrieve uint256 Configures the amount of stakes to gather data for * @param offset uint256 Configures the offset for results pagination * @return uint256[] stake values array */ function getPersonalStakeActualAmounts( address user, uint256 amountToRetrieve, uint256 offset ) external view returns (uint256[] memory); /** * @dev Returns the adresses of stake owners of * the last `amountToRetrieve` (with `offset` for pagination) * personal stakes created by `user`. * @param user address The address to query * @param amountToRetrieve uint256 Configures the amount of stakes to gather data for * @param offset uint256 Configures the offset for results pagination * @return address[] addresses of stake owners array */ function getPersonalStakeForAddresses( address user, uint256 amountToRetrieve, uint256 offset ) external view returns (address[] memory); /** * @dev Returns the stake rewards percentage (basis points) of * the last `amountToRetrieve` (with `offset` for pagination) * personal stakes created by `user`. * @param user address The address to query * @param amountToRetrieve uint256 Configures the amount of stakes to gather data for * @param offset uint256 Configures the offset for results pagination * @return uint256[] stake rewards percentage (basis points) array */ function getPersonalStakePercentageBasisPoints( address user, uint256 amountToRetrieve, uint256 offset ) external view returns (uint256[] memory); }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: Apache license 2.0 pragma solidity ^0.7.0; /** * @dev Interface of the smart contract that configures rules * and executes burning of the passed {ERC20Burnable} token. */ interface IBurning { /** * @dev Emitted when `value` tokens are burned via `burningContract`. */ event LogPeriodicTokenBurn(address indexed burningContract, uint256 value); /** * @dev Attempts to burn tokens. */ function burn() external returns (bool); /** * @dev Returns a total amount of tokens that were already burned. */ function burned() external view returns (uint256); /** * @dev Returns a total maximum amount of tokens to be burnt. */ function burnLimit() external view returns (uint256); /** * @dev Returns a one-time amount to be burned upon each request. */ function singleBurnAmount() external view returns (uint256); }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": {}, "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":"uint256","name":"initialTotalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"LogOwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"LogPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"LogUnpaused","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":[{"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":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_address","type":"address"}],"name":"getMinterRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lockFor","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"lockOf","outputs":[{"internalType":"uint256","name":"lockedAmount","type":"uint256"},{"internalType":"uint256","name":"unlockTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"periodicBurn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IBurning","name":"burning","type":"address"},{"internalType":"uint256","name":"burningBalance","type":"uint256"}],"name":"setBurningContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lockableDistribution","type":"address"}],"name":"setLockableDistributionContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_role","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IStaking","name":"staking","type":"address"}],"name":"setStakingContract","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":[{"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":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"transferAnyERC20Token","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"transferBatch","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":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620039d5380380620039d5833981810160405260608110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b838201915060208201858111156200006f57600080fd5b82518660018202830111640100000000821117156200008d57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000c3578082015181840152602081019050620000a6565b50505050905090810190601f168015620000f15780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200011557600080fd5b838201915060208201858111156200012c57600080fd5b82518660018202830111640100000000821117156200014a57600080fd5b8083526020830192505050908051906020019080838360005b838110156200018057808201518184015260208101905062000163565b50505050905090810190601f168015620001ae5780820380516001836020036101000a031916815260200191505b506040526020018051906020019092919050505082828160039080519060200190620001dc92919062000451565b508060049080519060200190620001f592919062000451565b506012600560006101000a81548160ff021916908360ff160217905550505062000224620003c060201b60201c565b600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560156101000a81548160ff02191690831515021790555080600281905550620002ef600254600080620002a0620003c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620003c860201b620025681790919060201c565b60008062000302620003c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000350620003c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6002546040518082815260200191505060405180910390a3505050620004f7565b600033905090565b60008082840190508381101562000447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200049457805160ff1916838001178555620004c5565b82800160010185558215620004c5579182015b82811115620004c4578251825591602001919060010190620004a7565b5b509050620004d49190620004d8565b5090565b5b80821115620004f3576000816000905550600101620004d9565b5090565b6134ce80620005076000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80637103864211610104578063a457c2d7116100a2578063dc39d06d11610071578063dc39d06d14610a07578063dd62ed3e14610a6b578063e2ab691d14610ae3578063f2fde38b14610b3b576101da565b8063a457c2d7146108ab578063a9059cbb1461090f578063ca825f2b14610973578063cf456ae7146109b7576101da565b80638da5cb5b116100de5780638da5cb5b146107905780638f32d59b146107c457806395d89b41146107e45780639dd373b914610867576101da565b806371038642146106d457806379cc6790146107225780638456cb5914610786576101da565b80633b3e672f1161017c57806358dda8981161014b57806358dda898146105a35780635a46d3b5146105fd5780635c975abb1461065c57806370a082311461067c576101da565b80633b3e672f1461040d5780633f4ba83a146104f157806340c10f19146104fb57806342966c681461055f576101da565b806323b872dd116101b857806323b872dd146102e457806329a01b4d14610368578063313ce5671461038857806339509351146103a9576101da565b806306fdde03146101df578063095ea7b31461026257806318160ddd146102c6575b600080fd5b6101e7610b7f565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561022757808201518184015260208101905061020c565b50505050905090810190601f1680156102545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102ae6004803603604081101561027857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c21565b60405180821515815260200191505060405180910390f35b6102ce610c3f565b6040518082815260200191505060405180910390f35b610350600480360360608110156102fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c49565b60405180821515815260200191505060405180910390f35b610370610d22565b60405180821515815260200191505060405180910390f35b610390610ed2565b604051808260ff16815260200191505060405180910390f35b6103f5600480360360408110156103bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ee9565b60405180821515815260200191505060405180910390f35b6104d96004803603604081101561042357600080fd5b810190808035906020019064010000000081111561044057600080fd5b82018360208201111561045257600080fd5b8035906020019184602083028401116401000000008311171561047457600080fd5b90919293919293908035906020019064010000000081111561049557600080fd5b8201836020820111156104a757600080fd5b803590602001918460208302840111640100000000831117156104c957600080fd5b9091929391929390505050610f9c565b60405180821515815260200191505060405180910390f35b6104f9611395565b005b6105476004803603604081101561051157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611535565b60405180821515815260200191505060405180910390f35b61058b6004803603602081101561057557600080fd5b810190808035906020019092919050505061154b565b60405180821515815260200191505060405180910390f35b6105e5600480360360208110156105b957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611567565b60405180821515815260200191505060405180910390f35b61063f6004803603602081101561061357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115bd565b604051808381526020018281526020019250505060405180910390f35b61066461164f565b60405180821515815260200191505060405180910390f35b6106be6004803603602081101561069257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611666565b6040518082815260200191505060405180910390f35b610720600480360360408110156106ea57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116ae565b005b61076e6004803603604081101561073857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061193a565b60405180821515815260200191505060405180910390f35b61078e6119a3565b005b610798611b44565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107cc611b6e565b60405180821515815260200191505060405180910390f35b6107ec611bcd565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561082c578082015181840152602081019050610811565b50505050905090810190601f1680156108595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108a96004803603602081101561087d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c6f565b005b6108f7600480360360408110156108c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d60565b60405180821515815260200191505060405180910390f35b61095b6004803603604081101561092557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611e2d565b60405180821515815260200191505060405180910390f35b6109b56004803603602081101561098957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4b565b005b610a05600480360360408110156109cd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611f3c565b005b610a5360048036036040811015610a1d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612044565b60405180821515815260200191505060405180910390f35b610acd60048036036040811015610a8157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121ae565b6040518082815260200191505060405180910390f35b610b3960048036036060811015610af957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612235565b005b610b7d60048036036020811015610b5157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612375565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c175780601f10610bec57610100808354040283529160200191610c17565b820191906000526020600020905b815481529060010190602001808311610bfa57829003601f168201915b5050505050905090565b6000610c35610c2e6125f0565b84846125f8565b6001905092915050565b6000600254905090565b6000610c568484846127ef565b610d1784610c626125f0565b610d12856040518060600160405280602881526020016132dc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cc86125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab09092919063ffffffff16565b6125f8565b600190509392505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d656125f0565b73ffffffffffffffffffffffffffffffffffffffff1614610dd1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344df8e706040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610e3b57600080fd5b505af1158015610e4f573d6000803e3d6000fd5b505050506040513d6020811015610e6557600080fd5b8101908080519060200190929190505050610ecb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260388152602001806133046038913960400191505060405180910390fd5b6001905090565b6000600560009054906101000a900460ff16905090565b6000610f92610ef66125f0565b84610f8d8560016000610f076125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256890919063ffffffff16565b6125f8565b6001905092915050565b60008282905085859050148015610fb65750600085859050115b61100b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260448152602001806134066044913960600191505060405180910390fd5b60005b8585905081101561138857600073ffffffffffffffffffffffffffffffffffffffff1686868381811061103d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806131e16026913960400191505060405180910390fd5b6111136110d26125f0565b8787848181106110de57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1686868581811061110757fe5b90506020020135612b70565b61119784848381811061112257fe5b9050602002013560405180606001604052806029815260200161312b6029913960008061114d6125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab09092919063ffffffff16565b6000806111a26125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061126b8484838181106111ef57fe5b9050602002013560008089898681811061120557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256890919063ffffffff16565b60008088888581811061127a57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508585828181106112e157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661131c6125f0565b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86868581811061135f57fe5b905060200201356040518082815260200191505060405180910390a3808060010191505061100e565b6001915050949350505050565b600560159054906101000a900460ff16611417576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114586125f0565b73ffffffffffffffffffffffffffffffffffffffff16146114c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b6000600560156101000a81548160ff0219169083151502179055507ff779549bb18027d8b598371be0088b09fcca4a91e09288bc6fc485e0865b52d66115086125f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006115418383612b80565b6001905092915050565b600061155e6115586125f0565b83612d4f565b60019050919050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015491509150915091565b6000600560159054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166116ef6125f0565b73ffffffffffffffffffffffffffffffffffffffff161461175b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b81600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117f4816000806117ab6125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f1390919063ffffffff16565b6000806117ff6125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061188e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008061197a836040518060600160405280602c81526020016133da602c913961196b876119666125f0565b6121ae565b612ab09092919063ffffffff16565b905061198e846119886125f0565b836125f8565b6119988484612d4f565b600191505092915050565b600560159054906101000a900460ff1615611a26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a676125f0565b73ffffffffffffffffffffffffffffffffffffffff1614611ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b6001600560156101000a81548160ff0219169083151502179055507fce3af5a3fdaee3c4327c1c434ea1d2186d7a9495f005d2a876dca182bd145714611b176125f0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611bb16125f0565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b606060048054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611c655780601f10611c3a57610100808354040283529160200191611c65565b820191906000526020600020905b815481529060010190602001808311611c4857829003601f168201915b5050505050905090565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611cb06125f0565b73ffffffffffffffffffffffffffffffffffffffff1614611d1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611e23611d6d6125f0565b84611e1e8560405180606001604052806025815260200161344a6025913960016000611d976125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab09092919063ffffffff16565b6125f8565b6001905092915050565b6000611e41611e3a6125f0565b84846127ef565b6001905092915050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e8c6125f0565b73ffffffffffffffffffffffffffffffffffffffff1614611ef8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f7d6125f0565b73ffffffffffffffffffffffffffffffffffffffff1614611fe9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166120876125f0565b73ffffffffffffffffffffffffffffffffffffffff16146120f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6121176125f0565b846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561216b57600080fd5b505af115801561217f573d6000803e3d6000fd5b505050506040513d602081101561219557600080fd5b8101908080519060200190929190505050905092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122766125f0565b73ffffffffffffffffffffffffffffffffffffffff16146122e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603981526020018061326a6039913960400191505060405180910390fd5b81600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555080600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505050565b600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123b66125f0565b73ffffffffffffffffffffffffffffffffffffffff1614612422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603481526020018061333c6034913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156124a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806131996026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fdb6d05f3295cede580affa301a1eb5297528f3b3f6a56b075887ce6f61c45f2160405160405180910390a380600560016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000808284019050838110156125e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561267e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806133b66024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806131bf6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612875576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806133916025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806131546023913960400191505060405180910390fd5b612906838383612b70565b61297181604051806060016040528060268152602001613207602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a04816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000838311158290612b5d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b22578082015181840152602081019050612b07565b50505050905090810190601f168015612b4f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b612b7b838383612f5d565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b612c2b61300c565b612c3760008383612b70565b612c4c8160025461256890919063ffffffff16565b600281905550612ca3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461256890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dd5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806133706021913960400191505060405180910390fd5b612de182600083612b70565b612e4c81604051806060016040528060228152602001613177602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ab09092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ea381600254612f1390919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000612f5583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ab0565b905092915050565b612f688383836130b7565b600080612f74856115bd565b809250819350505060008114158015612f8c57508042105b1561300557612fac82612f9e87611666565b612f1390919063ffffffff16565b831115613004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018061322d603d913960400191505060405180910390fd5b5b5050505050565b600a60006130186125f0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806132a36039913960400191505060405180910390fd5b565b6130c2838383613125565b6130ca61164f565b15613120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061346f602a913960400191505060405180910390fd5b505050565b50505056fe456767546f6b656e3a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373456767546f6b656e3a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332304c6f636b61626c653a207472616e7366657220616d6f756e74206578636565647320746865206e6f6e2d6c6f636b65642062616c616e636545524332304c6f636b61626c653a206f6e6c7920646973747269627574696f6e20636f6e74726163742063616e206c6f636b20746f6b656e734d696e74696e673a206f6e6c7920636f6e7472616374732077697468206d696e74657220726f6c65732063616e206d696e7420746f6b656e7345524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654275726e696e673a206e6f7420706f737369626c6520746f20706572666f726d2074686520706572696f64696320746f6b656e206275726e4f776e61626c653a206f6e6c7920636f6e7472616374206f776e65722063616e2063616c6c20746869732066756e6374696f6e2e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332304275726e61626c653a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365456767546f6b656e3a20746f20616e642076616c756573206172726179732073686f756c6420626520657175616c20696e2073697a6520616e64206e6f6e2d656d70747945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726f45524332305061757361626c653a20746f6b656e207472616e73666572207768696c6520706175736564a26469706673582212207122d4ee6e6000ac778c8fefd8b3c364b4fa9d06df8472dba6420fafb089ea1864736f6c63430007000033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000000c4547472050726f746f636f6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000084595161401484a000000000000000000000000000000000000000000000000000000000000000000000c4547472050726f746f636f6c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034547470000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name (string): EGG Protocol
Arg [1] : symbol (string): EGG
Arg [2] : initialTotalSupply (uint256): 10000000000000000000000000
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 000000000000000000000000000000000000000000084595161401484a000000
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000c
Arg [4] : 4547472050726f746f636f6c0000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 4547470000000000000000000000000000000000000000000000000000000000