Source Code
Latest 8 from a total of 8 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Hodl Deposit | 17228420 | 1037 days ago | IN | 0 ETH | 0.00977588 | ||||
| Withdraw | 12515779 | 1750 days ago | IN | 0 ETH | 0.00066249 | ||||
| Panic Withdraw | 12384800 | 1770 days ago | IN | 0 ETH | 0.00168031 | ||||
| Panic Withdraw | 12384759 | 1770 days ago | IN | 0 ETH | 0.00229527 | ||||
| Hodl Deposit | 12384754 | 1770 days ago | IN | 0 ETH | 0.00209699 | ||||
| Hodl Deposit | 12384746 | 1770 days ago | IN | 0 ETH | 0.00209699 | ||||
| Hodl Deposit | 12384724 | 1770 days ago | IN | 0 ETH | 0.0063684 | ||||
| Hodl Deposit | 12307928 | 1782 days ago | IN | 0 ETH | 0.00581234 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
TokenLocker
Compiler Version
v0.8.3+commit.8d00100c
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.3;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
contract TokenLocker {
address public owner;
constructor(address _owner) {
owner = _owner;
}
modifier onlyOwner {
require(msg.sender == owner, "Only available to the contract owner.");
_;
}
event Hodl(address indexed hodler, address token, uint256 amount, uint256 unlockTime, uint256 penaltyFeePercentage);
event PanicWithdraw(address indexed hodler, address token, uint256 amount, uint256 unlockTime);
event Withdrawal(address indexed hodler, address token, uint256 amount);
event FeesClaimed();
struct Hodler {
address hodlerAddress;
mapping(address => Token) tokens;
}
struct Token {
uint256 balance;
address tokenAddress;
uint256 unlockTime;
uint256 penaltyFeePercentage;
}
mapping(address => Hodler) public hodlers;
function hodlDeposit(
address token,
uint256 amount,
uint256 unlockTime,
uint256 penaltyFeePercentage
) public {
require(penaltyFeePercentage >= 10, "Minimal penalty fee is 10%.");
Hodler storage hodler = hodlers[msg.sender];
hodler.hodlerAddress = msg.sender;
Token storage lockedToken = hodlers[msg.sender].tokens[token];
if (lockedToken.balance > 0) {
lockedToken.balance += amount;
if (lockedToken.penaltyFeePercentage < penaltyFeePercentage) {
lockedToken.penaltyFeePercentage = penaltyFeePercentage;
}
if (lockedToken.unlockTime < unlockTime) {
lockedToken.unlockTime = unlockTime;
}
}
else {
hodlers[msg.sender].tokens[token] = Token(amount, token, unlockTime, penaltyFeePercentage);
}
ERC20(token).transferFrom(msg.sender, address(this), amount);
emit Hodl(msg.sender, token, amount, unlockTime, penaltyFeePercentage);
}
function withdraw(address token) public {
Hodler storage hodler = hodlers[msg.sender];
require(msg.sender == hodler.hodlerAddress, "Only available to the token owner.");
require(block.timestamp > hodler.tokens[token].unlockTime, "Unlock time not reached yet.");
uint256 amount = hodler.tokens[token].balance;
hodler.tokens[token].balance = 0;
ERC20(token).transfer(msg.sender, amount);
emit Withdrawal(msg.sender, token, amount);
}
function panicWithdraw(address token) public {
Hodler storage hodler = hodlers[msg.sender];
require(msg.sender == hodler.hodlerAddress, "Only available to the token owner.");
uint256 feeAmount = (hodler.tokens[token].balance / 100) * hodler.tokens[token].penaltyFeePercentage;
uint256 withdrawalAmount = hodler.tokens[token].balance - feeAmount;
hodler.tokens[token].balance = 0;
//Transfers fees to the contract administrator/owner
hodlers[address(owner)].tokens[token].balance = feeAmount;
ERC20(token).transfer(msg.sender, withdrawalAmount);
emit PanicWithdraw(msg.sender, token, withdrawalAmount, hodler.tokens[token].unlockTime);
}
function claimTokenListFees(address[] memory tokenList) public onlyOwner {
for (uint256 i = 0; i < tokenList.length; i++) {
uint256 amount = hodlers[owner].tokens[tokenList[i]].balance;
if (amount > 0) {
hodlers[owner].tokens[tokenList[i]].balance = 0;
ERC20(tokenList[i]).transfer(owner, amount);
}
}
emit FeesClaimed();
}
function claimTokenFees(address token) public onlyOwner {
uint256 amount = hodlers[owner].tokens[token].balance;
require(amount > 0, "No fees available for claiming.");
hodlers[owner].tokens[token].balance = 0;
ERC20(token).transfer(owner, amount);
emit FeesClaimed();
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin guidelines: 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.
*
* 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 {
mapping (address => uint256) private _balances;
mapping (address => mapping (address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The defaut value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* 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_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5,05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overloaded;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual returns (uint8) {
return 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:
*
* - `recipient` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
_approve(sender, _msgSender(), currentAllowance - amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
return true;
}
/**
* @dev 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);
uint256 senderBalance = _balances[sender];
require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
_balances[sender] = senderBalance - amount;
_balances[recipient] += 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");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += 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);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
_balances[account] = accountBalance - amount;
_totalSupply -= 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.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be to 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 { }
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @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);
/**
* @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);
}// SPDX-License-Identifier: MIT
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) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"FeesClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"hodler","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"penaltyFeePercentage","type":"uint256"}],"name":"Hodl","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"hodler","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"unlockTime","type":"uint256"}],"name":"PanicWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"hodler","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimTokenFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokenList","type":"address[]"}],"name":"claimTokenListFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"unlockTime","type":"uint256"},{"internalType":"uint256","name":"penaltyFeePercentage","type":"uint256"}],"name":"hodlDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hodlers","outputs":[{"internalType":"address","name":"hodlerAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"panicWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610d96380380610d9683398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610082565b600060208284031215610065578081fd5b81516001600160a01b038116811461007b578182fd5b9392505050565b610d05806100916000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100ef578063da9f373b14610102578063f8f91e7414610115578063fa773127146101285761007d565b80630949083b146100825780634a3f17e71461009757806351cff8d9146100dc575b600080fd5b610095610090366004610a53565b61013b565b005b6100c06100a5366004610a53565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100ea366004610a53565b6102fc565b6000546100c0906001600160a01b031681565b610095610110366004610aac565b610483565b610095610123366004610a53565b610693565b610095610136366004610a74565b61080b565b336000818152600160205260409020805490916001600160a01b039091161461017f5760405162461bcd60e51b815260040161017690610bd8565b60405180910390fd5b6001600160a01b03821660009081526001820160205260408120600381015490546101ac90606490610c32565b6101b69190610c52565b6001600160a01b0384166000908152600184016020526040812054919250906101e0908390610c71565b6001600160a01b038581166000818152600187810160209081526040808420849055835490951683528181528483208484529091019052829020859055905163a9059cbb60e01b8152336004820152602481018390529192509063a9059cbb90604401602060405180830381600087803b15801561025d57600080fd5b505af1158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610b73565b506001600160a01b03841660008181526001850160209081526040918290206002015482519384529083018490529082015233907f4ac88631be4f499653ed7b66b6f8e58dfc443de552029ad793891daf8ffc5ae79060600160405180910390a250505050565b336000818152600160205260409020805490916001600160a01b03909116146103375760405162461bcd60e51b815260040161017690610bd8565b6001600160a01b038216600090815260018201602052604090206002015442116103a35760405162461bcd60e51b815260206004820152601c60248201527f556e6c6f636b2074696d65206e6f742072656163686564207965742e000000006044820152606401610176565b6001600160a01b038216600081815260018301602052604080822080549290555163a9059cbb60e01b81523360048201526024810182905290919063a9059cbb90604401602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190610b73565b50604080516001600160a01b03851681526020810183905233917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a2505050565b6000546001600160a01b031633146104ad5760405162461bcd60e51b815260040161017690610b93565b60005b815181101561066657600080546001600160a01b031681526001602081905260408220845191019082908590859081106104fa57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001549050600081111561065357600080546001600160a01b0316815260016020819052604082208551910190829086908690811061057257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508282815181106105c157634e487b7160e01b600052603260045260246000fd5b602090810291909101015160005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106519190610b73565b505b508061065e81610c88565b9150506104b0565b506040517fd8f21fccc983db3b872d2dc4c2ac57ac1e5b96be117c48626cac718ee33ed9b990600090a150565b6000546001600160a01b031633146106bd5760405162461bcd60e51b815260040161017690610b93565b600080546001600160a01b0390811682526001602081815260408085209386168552929091019052902054806107355760405162461bcd60e51b815260206004820152601f60248201527f4e6f206665657320617661696c61626c6520666f7220636c61696d696e672e006044820152606401610176565b600080546001600160a01b03908116825260016020818152604080852087851680875293019091528084208490559254925163a9059cbb60e01b8152929091166004830152602482018390529063a9059cbb90604401602060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b73565b506040517fd8f21fccc983db3b872d2dc4c2ac57ac1e5b96be117c48626cac718ee33ed9b990600090a15050565b600a81101561085c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d616c2070656e616c747920666565206973203130252e00000000006044820152606401610176565b33600081815260016020818152604080842080546001600160a01b03191690951785556001600160a01b0389168452918401905290208054156108df57848160000160008282546108ad9190610c1a565b909155505060038101548311156108c657600381018390555b83816002015410156108da57600281018490555b610955565b604080516080810182528681526001600160a01b0388811660208084018281528486018a8152606086018a8152336000908152600180865289822096825295860190945296909220945185555191840180546001600160a01b031916929093169190911790915551600282015590516003909101555b6040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038716906323b872dd90606401602060405180830381600087803b1580156109a357600080fd5b505af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190610b73565b50604080516001600160a01b0388168152602081018790529081018590526060810184905233907f8e292bbb20ea0ff3a379c6aa7bf5c873d3894e36b8769432c354022b966af65b9060800160405180910390a2505050505050565b80356001600160a01b0381168114610a4e57600080fd5b919050565b600060208284031215610a64578081fd5b610a6d82610a37565b9392505050565b60008060008060808587031215610a89578283fd5b610a9285610a37565b966020860135965060408601359560600135945092505050565b60006020808385031215610abe578182fd5b823567ffffffffffffffff80821115610ad5578384fd5b818501915085601f830112610ae8578384fd5b813581811115610afa57610afa610cb9565b8060051b604051601f19603f83011681018181108582111715610b1f57610b1f610cb9565b604052828152858101935084860182860187018a1015610b3d578788fd5b8795505b83861015610b6657610b5281610a37565b855260019590950194938601938601610b41565b5098975050505050505050565b600060208284031215610b84578081fd5b81518015158114610a6d578182fd5b60208082526025908201527f4f6e6c7920617661696c61626c6520746f2074686520636f6e7472616374206f6040820152643bb732b91760d91b606082015260800190565b60208082526022908201527f4f6e6c7920617661696c61626c6520746f2074686520746f6b656e206f776e65604082015261391760f11b606082015260800190565b60008219821115610c2d57610c2d610ca3565b500190565b600082610c4d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615610c6c57610c6c610ca3565b500290565b600082821015610c8357610c83610ca3565b500390565b6000600019821415610c9c57610c9c610ca3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122078f847918dfadad5ae5b76c2f9505613e9084cd98f3b096d6e6eb5eed6aea92664736f6c63430008030033000000000000000000000000400fc9c7f01df3aa919659de434e0c584e68cb29
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100ef578063da9f373b14610102578063f8f91e7414610115578063fa773127146101285761007d565b80630949083b146100825780634a3f17e71461009757806351cff8d9146100dc575b600080fd5b610095610090366004610a53565b61013b565b005b6100c06100a5366004610a53565b6001602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100ea366004610a53565b6102fc565b6000546100c0906001600160a01b031681565b610095610110366004610aac565b610483565b610095610123366004610a53565b610693565b610095610136366004610a74565b61080b565b336000818152600160205260409020805490916001600160a01b039091161461017f5760405162461bcd60e51b815260040161017690610bd8565b60405180910390fd5b6001600160a01b03821660009081526001820160205260408120600381015490546101ac90606490610c32565b6101b69190610c52565b6001600160a01b0384166000908152600184016020526040812054919250906101e0908390610c71565b6001600160a01b038581166000818152600187810160209081526040808420849055835490951683528181528483208484529091019052829020859055905163a9059cbb60e01b8152336004820152602481018390529192509063a9059cbb90604401602060405180830381600087803b15801561025d57600080fd5b505af1158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610b73565b506001600160a01b03841660008181526001850160209081526040918290206002015482519384529083018490529082015233907f4ac88631be4f499653ed7b66b6f8e58dfc443de552029ad793891daf8ffc5ae79060600160405180910390a250505050565b336000818152600160205260409020805490916001600160a01b03909116146103375760405162461bcd60e51b815260040161017690610bd8565b6001600160a01b038216600090815260018201602052604090206002015442116103a35760405162461bcd60e51b815260206004820152601c60248201527f556e6c6f636b2074696d65206e6f742072656163686564207965742e000000006044820152606401610176565b6001600160a01b038216600081815260018301602052604080822080549290555163a9059cbb60e01b81523360048201526024810182905290919063a9059cbb90604401602060405180830381600087803b15801561040157600080fd5b505af1158015610415573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104399190610b73565b50604080516001600160a01b03851681526020810183905233917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a2505050565b6000546001600160a01b031633146104ad5760405162461bcd60e51b815260040161017690610b93565b60005b815181101561066657600080546001600160a01b031681526001602081905260408220845191019082908590859081106104fa57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001549050600081111561065357600080546001600160a01b0316815260016020819052604082208551910190829086908690811061057257634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600001819055508282815181106105c157634e487b7160e01b600052603260045260246000fd5b602090810291909101015160005460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b15801561061957600080fd5b505af115801561062d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106519190610b73565b505b508061065e81610c88565b9150506104b0565b506040517fd8f21fccc983db3b872d2dc4c2ac57ac1e5b96be117c48626cac718ee33ed9b990600090a150565b6000546001600160a01b031633146106bd5760405162461bcd60e51b815260040161017690610b93565b600080546001600160a01b0390811682526001602081815260408085209386168552929091019052902054806107355760405162461bcd60e51b815260206004820152601f60248201527f4e6f206665657320617661696c61626c6520666f7220636c61696d696e672e006044820152606401610176565b600080546001600160a01b03908116825260016020818152604080852087851680875293019091528084208490559254925163a9059cbb60e01b8152929091166004830152602482018390529063a9059cbb90604401602060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b73565b506040517fd8f21fccc983db3b872d2dc4c2ac57ac1e5b96be117c48626cac718ee33ed9b990600090a15050565b600a81101561085c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e696d616c2070656e616c747920666565206973203130252e00000000006044820152606401610176565b33600081815260016020818152604080842080546001600160a01b03191690951785556001600160a01b0389168452918401905290208054156108df57848160000160008282546108ad9190610c1a565b909155505060038101548311156108c657600381018390555b83816002015410156108da57600281018490555b610955565b604080516080810182528681526001600160a01b0388811660208084018281528486018a8152606086018a8152336000908152600180865289822096825295860190945296909220945185555191840180546001600160a01b031916929093169190911790915551600282015590516003909101555b6040516323b872dd60e01b8152336004820152306024820152604481018690526001600160a01b038716906323b872dd90606401602060405180830381600087803b1580156109a357600080fd5b505af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db9190610b73565b50604080516001600160a01b0388168152602081018790529081018590526060810184905233907f8e292bbb20ea0ff3a379c6aa7bf5c873d3894e36b8769432c354022b966af65b9060800160405180910390a2505050505050565b80356001600160a01b0381168114610a4e57600080fd5b919050565b600060208284031215610a64578081fd5b610a6d82610a37565b9392505050565b60008060008060808587031215610a89578283fd5b610a9285610a37565b966020860135965060408601359560600135945092505050565b60006020808385031215610abe578182fd5b823567ffffffffffffffff80821115610ad5578384fd5b818501915085601f830112610ae8578384fd5b813581811115610afa57610afa610cb9565b8060051b604051601f19603f83011681018181108582111715610b1f57610b1f610cb9565b604052828152858101935084860182860187018a1015610b3d578788fd5b8795505b83861015610b6657610b5281610a37565b855260019590950194938601938601610b41565b5098975050505050505050565b600060208284031215610b84578081fd5b81518015158114610a6d578182fd5b60208082526025908201527f4f6e6c7920617661696c61626c6520746f2074686520636f6e7472616374206f6040820152643bb732b91760d91b606082015260800190565b60208082526022908201527f4f6e6c7920617661696c61626c6520746f2074686520746f6b656e206f776e65604082015261391760f11b606082015260800190565b60008219821115610c2d57610c2d610ca3565b500190565b600082610c4d57634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615610c6c57610c6c610ca3565b500290565b600082821015610c8357610c83610ca3565b500390565b6000600019821415610c9c57610c9c610ca3565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfea264697066735822122078f847918dfadad5ae5b76c2f9505613e9084cd98f3b096d6e6eb5eed6aea92664736f6c63430008030033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000400fc9c7f01df3aa919659de434e0c584e68cb29
-----Decoded View---------------
Arg [0] : _owner (address): 0x400Fc9C7F01Df3aa919659De434E0c584e68CB29
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000400fc9c7f01df3aa919659de434e0c584e68cb29
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 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.