More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 186 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Tokens | 17555476 | 495 days ago | IN | 0 ETH | 0.00099388 | ||||
Claim Tokens | 17553195 | 496 days ago | IN | 0 ETH | 0.00056338 | ||||
Claim Tokens | 17553186 | 496 days ago | IN | 0 ETH | 0.00080988 | ||||
Claim Tokens | 17552768 | 496 days ago | IN | 0 ETH | 0.00080407 | ||||
Claim Tokens | 17552705 | 496 days ago | IN | 0 ETH | 0.00078591 | ||||
Claim Tokens | 17552494 | 496 days ago | IN | 0 ETH | 0.0008703 | ||||
Claim Tokens | 17552405 | 496 days ago | IN | 0 ETH | 0.00079624 | ||||
Claim Tokens | 17552338 | 496 days ago | IN | 0 ETH | 0.00054199 | ||||
Claim Tokens | 17552328 | 496 days ago | IN | 0 ETH | 0.00051661 | ||||
Claim Tokens | 17552317 | 496 days ago | IN | 0 ETH | 0.00074488 | ||||
Claim Tokens | 17552313 | 496 days ago | IN | 0 ETH | 0.0004982 | ||||
Claim Tokens | 17551532 | 496 days ago | IN | 0 ETH | 0.00086221 | ||||
Claim Tokens | 17540729 | 497 days ago | IN | 0 ETH | 0.00077248 | ||||
Claim Tokens | 17538286 | 498 days ago | IN | 0 ETH | 0.0012327 | ||||
Claim Tokens | 17538239 | 498 days ago | IN | 0 ETH | 0.00095188 | ||||
Claim Tokens | 17537808 | 498 days ago | IN | 0 ETH | 0.00107316 | ||||
Claim Tokens | 17536897 | 498 days ago | IN | 0 ETH | 0.00086 | ||||
Claim Tokens | 17536714 | 498 days ago | IN | 0 ETH | 0.00117381 | ||||
Claim Tokens | 17536495 | 498 days ago | IN | 0 ETH | 0.00124314 | ||||
Claim Tokens | 17535184 | 498 days ago | IN | 0 ETH | 0.0009494 | ||||
Claim Tokens | 17534577 | 498 days ago | IN | 0 ETH | 0.00090948 | ||||
Claim Tokens | 17533684 | 498 days ago | IN | 0 ETH | 0.00090482 | ||||
Claim Tokens | 17533677 | 498 days ago | IN | 0 ETH | 0.00079268 | ||||
Claim Tokens | 17533036 | 498 days ago | IN | 0 ETH | 0.00105941 | ||||
Claim Tokens | 17533006 | 498 days ago | IN | 0 ETH | 0.00101747 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
17531038 | 499 days ago | 17.77005562 ETH |
Loading...
Loading
Contract Name:
Sale
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Multiple files format)
pragma solidity ^0.8.13; import "./ERC20.sol"; import "./Owned.sol"; contract Sale is Owned { /*///////////////////////////////////////////////// EVENTS /////////////////////////////////////////////////*/ event SaleEntered(address indexed user, uint256 amount); event SaleClaimed(address indexed user, uint256 amount); event TokensSupplied(uint256 amount); event ProceedsWithdrawn(uint256 amount); /*///////////////////////////////////////////////// STATE /////////////////////////////////////////////////*/ /// @notice token being sold off ERC20 public immutable token; /// @notice start time of sale (starts upon deployment) uint256 public immutable startTime; /// @notice duration of sale uint256 public immutable SALE_TIME; /// @notice buffer time post sale to provide liquidity uint256 public immutable POST_SALE; /// @notice max amount per address to mint. Zyzz says don't sybil uint256 public constant MAX_SALE = 777000000000000000; // .777 ether /// @notice maximum amount of total ether accepted for sale uint256 public constant HARDCAP = 44400000000000000000; // 44.4 ether /// @notice internal accounting of tokens supplied to sale, can be upped before sale ends uint256 public suppliedTokens; /// @notice internal accounting of total deposits /// @dev lp may be filled before everyone has claimed, so this maintains eth proceeds accounting uint256 public totalDeposits; /// @notice total eth deposits for each address, cannot exceed MAX_SALE mapping(address => uint256) public deposits; constructor( ERC20 token_, address owner_, uint256 SALE_TIME_, uint256 POST_SALE_ ) Owned(owner_) { token = token_; startTime = block.timestamp; SALE_TIME = SALE_TIME_; POST_SALE = POST_SALE_; } receive() external payable { if (!saleLive()) revert("sale ended"); if (deposits[msg.sender] + msg.value > MAX_SALE) revert("max sale amount"); // The total supply of ether will never overflow unchecked { deposits[msg.sender] += msg.value; totalDeposits += msg.value; } emit SaleEntered(msg.sender, msg.value); } function claimTokens() external { if (!claimLive()) revert("sale or post sale period live"); uint256 share = getCurrentShare(msg.sender); delete deposits[msg.sender]; token.transfer(msg.sender, share); emit SaleClaimed(msg.sender, share); } function getCurrentShare(address account) public view returns (uint256) { return (suppliedTokens * deposits[account]) / totalDeposits; } function withdrawProceeds() external onlyOwner { if (saleLive()) revert("sale live"); emit ProceedsWithdrawn(address(this).balance); payable(owner).transfer(address(this).balance); } function supplyTokens() external onlyOwner { if (!saleLive()) revert("sale ended"); suppliedTokens = token.balanceOf(address(this)); emit TokensSupplied(token.balanceOf(address(this))); } function saleLive() internal view returns (bool) { return block.timestamp <= startTime + SALE_TIME && block.timestamp >= startTime; } function claimLive() internal view returns (bool) { return block.timestamp >= startTime + SALE_TIME + POST_SALE; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; /// @notice Simple ERC20 + EIP-2612 implementation. /// @author Solady (https://github.com/vectorized/solady/blob/main/src/tokens/ERC20.sol) /// @author Modified from Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from OpenZeppelin (https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/ERC20.sol) /// Note: /// The ERC20 standard allows minting and transferring to and from the zero address, /// minting and transferring zero tokens, as well as self-approvals. /// For performance, this implementation WILL NOT revert for such actions. /// Please add any checks with overrides if desired. abstract contract ERC20 { /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* CUSTOM ERRORS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev The total supply has overflowed. error TotalSupplyOverflow(); /// @dev The allowance has overflowed. error AllowanceOverflow(); /// @dev The allowance has underflowed. error AllowanceUnderflow(); /// @dev Insufficient balance. error InsufficientBalance(); /// @dev Insufficient allowance. error InsufficientAllowance(); /// @dev The permit is invalid. error InvalidPermit(); /// @dev The permit has expired. error PermitExpired(); /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* EVENTS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Emitted when `amount` tokens is transferred from `from` to `to`. event Transfer(address indexed from, address indexed to, uint256 amount); /// @dev Emitted when `amount` tokens is approved by `owner` to be used by `spender`. event Approval( address indexed owner, address indexed spender, uint256 amount ); /// @dev `keccak256(bytes("Transfer(address,address,uint256)"))`. uint256 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; /// @dev `keccak256(bytes("Approval(address,address,uint256)"))`. uint256 private constant _APPROVAL_EVENT_SIGNATURE = 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925; /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* STORAGE */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev The storage slot for the total supply. uint256 private constant _TOTAL_SUPPLY_SLOT = 0x05345cdf77eb68f44c; /// @dev The balance slot of `owner` is given by: /// ``` /// mstore(0x0c, _BALANCE_SLOT_SEED) /// mstore(0x00, owner) /// let balanceSlot := keccak256(0x0c, 0x20) /// ``` uint256 private constant _BALANCE_SLOT_SEED = 0x87a211a2; /// @dev The allowance slot of (`owner`, `spender`) is given by: /// ``` /// mstore(0x20, spender) /// mstore(0x0c, _ALLOWANCE_SLOT_SEED) /// mstore(0x00, owner) /// let allowanceSlot := keccak256(0x0c, 0x34) /// ``` uint256 private constant _ALLOWANCE_SLOT_SEED = 0x7f5e9f20; /// @dev The nonce slot of `owner` is given by: /// ``` /// mstore(0x0c, _NONCES_SLOT_SEED) /// mstore(0x00, owner) /// let nonceSlot := keccak256(0x0c, 0x20) /// ``` uint256 private constant _NONCES_SLOT_SEED = 0x38377508; /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* ERC20 METADATA */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Returns the name of the token. function name() public view virtual returns (string memory); /// @dev Returns the symbol of the token. function symbol() public view virtual returns (string memory); /// @dev Returns the decimals places of the token. function decimals() public view virtual returns (uint8) { return 18; } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* ERC20 */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Returns the amount of tokens in existence. function totalSupply() public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { result := sload(_TOTAL_SUPPLY_SLOT) } } /// @dev Returns the amount of tokens owned by `owner`. function balanceOf( address owner ) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { mstore(0x0c, _BALANCE_SLOT_SEED) mstore(0x00, owner) result := sload(keccak256(0x0c, 0x20)) } } /// @dev Returns the amount of tokens that `spender` can spend on behalf of `owner`. function allowance( address owner, address spender ) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { mstore(0x20, spender) mstore(0x0c, _ALLOWANCE_SLOT_SEED) mstore(0x00, owner) result := sload(keccak256(0x0c, 0x34)) } } /// @dev Sets `amount` as the allowance of `spender` over the caller's tokens. /// /// Emits a {Approval} event. function approve( address spender, uint256 amount ) public virtual returns (bool) { /// @solidity memory-safe-assembly assembly { // Compute the allowance slot and store the amount. mstore(0x20, spender) mstore(0x0c, _ALLOWANCE_SLOT_SEED) mstore(0x00, caller()) sstore(keccak256(0x0c, 0x34), amount) // Emit the {Approval} event. mstore(0x00, amount) log3( 0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)) ) } return true; } /// @dev Atomically increases the allowance granted to `spender` by the caller. /// /// Emits a {Approval} event. function increaseAllowance( address spender, uint256 difference ) public virtual returns (bool) { /// @solidity memory-safe-assembly assembly { // Compute the allowance slot and load its value. mstore(0x20, spender) mstore(0x0c, _ALLOWANCE_SLOT_SEED) mstore(0x00, caller()) let allowanceSlot := keccak256(0x0c, 0x34) let allowanceBefore := sload(allowanceSlot) // Add to the allowance. let allowanceAfter := add(allowanceBefore, difference) // Revert upon overflow. if lt(allowanceAfter, allowanceBefore) { mstore(0x00, 0xf9067066) // `AllowanceOverflow()`. revert(0x1c, 0x04) } // Store the updated allowance. sstore(allowanceSlot, allowanceAfter) // Emit the {Approval} event. mstore(0x00, allowanceAfter) log3( 0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)) ) } return true; } /// @dev Atomically decreases the allowance granted to `spender` by the caller. /// /// Emits a {Approval} event. function decreaseAllowance( address spender, uint256 difference ) public virtual returns (bool) { /// @solidity memory-safe-assembly assembly { // Compute the allowance slot and load its value. mstore(0x20, spender) mstore(0x0c, _ALLOWANCE_SLOT_SEED) mstore(0x00, caller()) let allowanceSlot := keccak256(0x0c, 0x34) let allowanceBefore := sload(allowanceSlot) // Revert if will underflow. if lt(allowanceBefore, difference) { mstore(0x00, 0x8301ab38) // `AllowanceUnderflow()`. revert(0x1c, 0x04) } // Subtract and store the updated allowance. let allowanceAfter := sub(allowanceBefore, difference) sstore(allowanceSlot, allowanceAfter) // Emit the {Approval} event. mstore(0x00, allowanceAfter) log3( 0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, caller(), shr(96, mload(0x2c)) ) } return true; } /// @dev Transfer `amount` tokens from the caller to `to`. /// /// Requirements: /// - `from` must at least have `amount`. /// /// Emits a {Transfer} event. function transfer( address to, uint256 amount ) public virtual returns (bool) { _beforeTokenTransfer(msg.sender, to, amount); /// @solidity memory-safe-assembly assembly { // Compute the balance slot and load its value. mstore(0x0c, _BALANCE_SLOT_SEED) mstore(0x00, caller()) let fromBalanceSlot := keccak256(0x0c, 0x20) let fromBalance := sload(fromBalanceSlot) // Revert if insufficient balance. if gt(amount, fromBalance) { mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`. revert(0x1c, 0x04) } // Subtract and store the updated balance. sstore(fromBalanceSlot, sub(fromBalance, amount)) // Compute the balance slot of `to`. mstore(0x00, to) let toBalanceSlot := keccak256(0x0c, 0x20) // Add and store the updated balance of `to`. // Will not overflow because the sum of all user balances // cannot exceed the maximum uint256 value. sstore(toBalanceSlot, add(sload(toBalanceSlot), amount)) // Emit the {Transfer} event. mstore(0x20, amount) log3( 0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, caller(), shr(96, mload(0x0c)) ) } _afterTokenTransfer(msg.sender, to, amount); return true; } /// @dev Transfers `amount` tokens from `from` to `to`. /// /// Note: does not update the allowance if it is the maximum uint256 value. /// /// Requirements: /// - `from` must at least have `amount`. /// - The caller must have at least `amount` of allowance to transfer the tokens of `from`. /// /// Emits a {Transfer} event. function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { _beforeTokenTransfer(from, to, amount); /// @solidity memory-safe-assembly assembly { let from_ := shl(96, from) // Compute the allowance slot and load its value. mstore(0x20, caller()) mstore(0x0c, or(from_, _ALLOWANCE_SLOT_SEED)) let allowanceSlot := keccak256(0x0c, 0x34) let allowance_ := sload(allowanceSlot) // If the allowance is not the maximum uint256 value. if iszero(eq(allowance_, not(0))) { // Revert if the amount to be transferred exceeds the allowance. if gt(amount, allowance_) { mstore(0x00, 0x13be252b) // `InsufficientAllowance()`. revert(0x1c, 0x04) } // Subtract and store the updated allowance. sstore(allowanceSlot, sub(allowance_, amount)) } // Compute the balance slot and load its value. mstore(0x0c, or(from_, _BALANCE_SLOT_SEED)) let fromBalanceSlot := keccak256(0x0c, 0x20) let fromBalance := sload(fromBalanceSlot) // Revert if insufficient balance. if gt(amount, fromBalance) { mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`. revert(0x1c, 0x04) } // Subtract and store the updated balance. sstore(fromBalanceSlot, sub(fromBalance, amount)) // Compute the balance slot of `to`. mstore(0x00, to) let toBalanceSlot := keccak256(0x0c, 0x20) // Add and store the updated balance of `to`. // Will not overflow because the sum of all user balances // cannot exceed the maximum uint256 value. sstore(toBalanceSlot, add(sload(toBalanceSlot), amount)) // Emit the {Transfer} event. mstore(0x20, amount) log3( 0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)) ) } _afterTokenTransfer(from, to, amount); return true; } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* EIP-2612 */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Returns the current nonce for `owner`. /// This value is used to compute the signature for EIP-2612 permit. function nonces( address owner ) public view virtual returns (uint256 result) { /// @solidity memory-safe-assembly assembly { // Compute the nonce slot and load its value. mstore(0x0c, _NONCES_SLOT_SEED) mstore(0x00, owner) result := sload(keccak256(0x0c, 0x20)) } } /// @dev Sets `value` as the allowance of `spender` over the tokens of `owner`, /// authorized by a signed approval by `owner`. /// /// Emits a {Approval} event. function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { bytes32 domainSeparator = DOMAIN_SEPARATOR(); /// @solidity memory-safe-assembly assembly { // Grab the free memory pointer. let m := mload(0x40) // Revert if the block timestamp greater than `deadline`. if gt(timestamp(), deadline) { mstore(0x00, 0x1a15a3cc) // `PermitExpired()`. revert(0x1c, 0x04) } // Clean the upper 96 bits. owner := shr(96, shl(96, owner)) spender := shr(96, shl(96, spender)) // Compute the nonce slot and load its value. mstore(0x0c, _NONCES_SLOT_SEED) mstore(0x00, owner) let nonceSlot := keccak256(0x0c, 0x20) let nonceValue := sload(nonceSlot) // Increment and store the updated nonce. sstore(nonceSlot, add(nonceValue, 1)) // Prepare the inner hash. // `keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)")`. // forgefmt: disable-next-item mstore( m, 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9 ) mstore(add(m, 0x20), owner) mstore(add(m, 0x40), spender) mstore(add(m, 0x60), value) mstore(add(m, 0x80), nonceValue) mstore(add(m, 0xa0), deadline) // Prepare the outer hash. mstore(0, 0x1901) mstore(0x20, domainSeparator) mstore(0x40, keccak256(m, 0xc0)) // Prepare the ecrecover calldata. mstore(0, keccak256(0x1e, 0x42)) mstore(0x20, and(0xff, v)) mstore(0x40, r) mstore(0x60, s) pop(staticcall(gas(), 1, 0, 0x80, 0x20, 0x20)) // If the ecrecover fails, the returndatasize will be 0x00, // `owner` will be be checked if it equals the hash at 0x00, // which evaluates to false (i.e. 0), and we will revert. // If the ecrecover succeeds, the returndatasize will be 0x20, // `owner` will be compared against the returned address at 0x20. if iszero(eq(mload(returndatasize()), owner)) { mstore(0x00, 0xddafbaef) // `InvalidPermit()`. revert(0x1c, 0x04) } // Compute the allowance slot and store the value. // The `owner` is already at slot 0x20. mstore(0x40, or(shl(160, _ALLOWANCE_SLOT_SEED), spender)) sstore(keccak256(0x2c, 0x34), value) // Emit the {Approval} event. log3(add(m, 0x60), 0x20, _APPROVAL_EVENT_SIGNATURE, owner, spender) mstore(0x40, m) // Restore the free memory pointer. mstore(0x60, 0) // Restore the zero pointer. } } /// @dev Returns the EIP-2612 domains separator. function DOMAIN_SEPARATOR() public view virtual returns (bytes32 result) { /// @solidity memory-safe-assembly assembly { result := mload(0x40) // Grab the free memory pointer. } // We simply calculate it on-the-fly to allow for cases where the `name` may change. bytes32 nameHash = keccak256(bytes(name())); /// @solidity memory-safe-assembly assembly { let m := result // `keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)")`. // forgefmt: disable-next-item mstore( m, 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f ) mstore(add(m, 0x20), nameHash) // `keccak256("1")`. // forgefmt: disable-next-item mstore( add(m, 0x40), 0xc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6 ) mstore(add(m, 0x60), chainid()) mstore(add(m, 0x80), address()) result := keccak256(m, 0xa0) } } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* INTERNAL MINT FUNCTIONS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Mints `amount` tokens to `to`, increasing the total supply. /// /// Emits a {Transfer} event. function _mint(address to, uint256 amount) internal virtual { _beforeTokenTransfer(address(0), to, amount); /// @solidity memory-safe-assembly assembly { let totalSupplyBefore := sload(_TOTAL_SUPPLY_SLOT) let totalSupplyAfter := add(totalSupplyBefore, amount) // Revert if the total supply overflows. if lt(totalSupplyAfter, totalSupplyBefore) { mstore(0x00, 0xe5cfe957) // `TotalSupplyOverflow()`. revert(0x1c, 0x04) } // Store the updated total supply. sstore(_TOTAL_SUPPLY_SLOT, totalSupplyAfter) // Compute the balance slot and load its value. mstore(0x0c, _BALANCE_SLOT_SEED) mstore(0x00, to) let toBalanceSlot := keccak256(0x0c, 0x20) // Add and store the updated balance. sstore(toBalanceSlot, add(sload(toBalanceSlot), amount)) // Emit the {Transfer} event. mstore(0x20, amount) log3(0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, 0, shr(96, mload(0x0c))) } _afterTokenTransfer(address(0), to, amount); } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* INTERNAL BURN FUNCTIONS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Burns `amount` tokens from `from`, reducing the total supply. /// /// Emits a {Transfer} event. function _burn(address from, uint256 amount) internal virtual { _beforeTokenTransfer(from, address(0), amount); /// @solidity memory-safe-assembly assembly { // Compute the balance slot and load its value. mstore(0x0c, _BALANCE_SLOT_SEED) mstore(0x00, from) let fromBalanceSlot := keccak256(0x0c, 0x20) let fromBalance := sload(fromBalanceSlot) // Revert if insufficient balance. if gt(amount, fromBalance) { mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`. revert(0x1c, 0x04) } // Subtract and store the updated balance. sstore(fromBalanceSlot, sub(fromBalance, amount)) // Subtract and store the updated total supply. sstore(_TOTAL_SUPPLY_SLOT, sub(sload(_TOTAL_SUPPLY_SLOT), amount)) // Emit the {Transfer} event. mstore(0x00, amount) log3( 0x00, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, shl(96, from)), 0 ) } _afterTokenTransfer(from, address(0), amount); } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* INTERNAL TRANSFER FUNCTIONS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Moves `amount` of tokens from `from` to `to`. function _transfer( address from, address to, uint256 amount ) internal virtual { _beforeTokenTransfer(from, to, amount); /// @solidity memory-safe-assembly assembly { let from_ := shl(96, from) // Compute the balance slot and load its value. mstore(0x0c, or(from_, _BALANCE_SLOT_SEED)) let fromBalanceSlot := keccak256(0x0c, 0x20) let fromBalance := sload(fromBalanceSlot) // Revert if insufficient balance. if gt(amount, fromBalance) { mstore(0x00, 0xf4d678b8) // `InsufficientBalance()`. revert(0x1c, 0x04) } // Subtract and store the updated balance. sstore(fromBalanceSlot, sub(fromBalance, amount)) // Compute the balance slot of `to`. mstore(0x00, to) let toBalanceSlot := keccak256(0x0c, 0x20) // Add and store the updated balance of `to`. // Will not overflow because the sum of all user balances // cannot exceed the maximum uint256 value. sstore(toBalanceSlot, add(sload(toBalanceSlot), amount)) // Emit the {Transfer} event. mstore(0x20, amount) log3( 0x20, 0x20, _TRANSFER_EVENT_SIGNATURE, shr(96, from_), shr(96, mload(0x0c)) ) } _afterTokenTransfer(from, to, amount); } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* INTERNAL ALLOWANCE FUNCTIONS */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @dev Updates the allowance of `owner` for `spender` based on spent `amount`. function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { /// @solidity memory-safe-assembly assembly { // Compute the allowance slot and load its value. mstore(0x20, spender) mstore(0x0c, _ALLOWANCE_SLOT_SEED) mstore(0x00, owner) let allowanceSlot := keccak256(0x0c, 0x34) let allowance_ := sload(allowanceSlot) // If the allowance is not the maximum uint256 value. if iszero(eq(allowance_, not(0))) { // Revert if the amount to be transferred exceeds the allowance. if gt(amount, allowance_) { mstore(0x00, 0x13be252b) // `InsufficientAllowance()`. revert(0x1c, 0x04) } // Subtract and store the updated allowance. sstore(allowanceSlot, sub(allowance_, amount)) } } } /// @dev Sets `amount` as the allowance of `spender` over the tokens of `owner`. /// /// Emits a {Approval} event. function _approve( address owner, address spender, uint256 amount ) internal virtual { /// @solidity memory-safe-assembly assembly { let owner_ := shl(96, owner) // Compute the allowance slot and store the amount. mstore(0x20, spender) mstore(0x0c, or(owner_, _ALLOWANCE_SLOT_SEED)) sstore(keccak256(0x0c, 0x34), amount) // Emit the {Approval} event. mstore(0x00, amount) log3( 0x00, 0x20, _APPROVAL_EVENT_SIGNATURE, shr(96, owner_), shr(96, mload(0x2c)) ) } } /*´:°â€¢.°+.*•´.*:Ëš.°*.˚•´.°:°â€¢.°â€¢.*•´.*:Ëš.°*.˚•´.°:°â€¢.°+.*•´.*:*/ /* HOOKS TO OVERRIDE */ /*.•°:°.´+Ëš.*°.Ëš:*.´â€¢*.+°.•°:´*.´â€¢*.•°.•°:°.´:•˚°.*°.Ëš:*.´+°.•*/ /// @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 after any transfer of tokens. /// This includes minting and burning. function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} }
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// @notice Simple single owner authorization mixin. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol) abstract contract Owned { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event OwnershipTransferred(address indexed user, address indexed newOwner); /*////////////////////////////////////////////////////////////// OWNERSHIP STORAGE //////////////////////////////////////////////////////////////*/ address public owner; modifier onlyOwner() virtual { require(msg.sender == owner, "UNAUTHORIZED"); _; } /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor(address _owner) { owner = _owner; emit OwnershipTransferred(address(0), _owner); } /*////////////////////////////////////////////////////////////// OWNERSHIP LOGIC //////////////////////////////////////////////////////////////*/ function transferOwnership(address newOwner) public virtual onlyOwner { owner = newOwner; emit OwnershipTransferred(msg.sender, newOwner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract ERC20","name":"token_","type":"address"},{"internalType":"address","name":"owner_","type":"address"},{"internalType":"uint256","name":"SALE_TIME_","type":"uint256"},{"internalType":"uint256","name":"POST_SALE_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProceedsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SaleClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SaleEntered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensSupplied","type":"event"},{"inputs":[],"name":"HARDCAP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"POST_SALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_TIME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"deposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"suppliedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supplyTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract ERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawProceeds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040523480156200001257600080fd5b506040516200166638038062001666833981810160405281019062000038919062000215565b82806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3508373ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250504260a081815250508160c081815250508060e081815250505050505062000287565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200015d8262000130565b9050919050565b6000620001718262000150565b9050919050565b620001838162000164565b81146200018f57600080fd5b50565b600081519050620001a38162000178565b92915050565b620001b48162000150565b8114620001c057600080fd5b50565b600081519050620001d481620001a9565b92915050565b6000819050919050565b620001ef81620001da565b8114620001fb57600080fd5b50565b6000815190506200020f81620001e4565b92915050565b600080600080608085870312156200023257620002316200012b565b5b6000620002428782880162000192565b94505060206200025587828801620001c3565b93505060406200026887828801620001fe565b92505060606200027b87828801620001fe565b91505092959194509250565b60805160a05160c05160e0516113666200030060003960008181610b9f0152610d320152600081816104ee0152818161070e0152610d5301526000818161050f01528181610544015281816107320152610d7401526000818161061e015281816109ca01528181610a8b0152610cf401526113666000f3fe6080604052600436106100ec5760003560e01c80639038e6931161008a578063e8dda51a11610059578063e8dda51a1461042e578063f2fde38b14610459578063fc0c546a14610482578063fc7e286d146104ad5761027a565b80639038e6931461039857806392925c3b146103af578063b2cb3a9b146103c6578063dddec650146104035761027a565b806370578d32116100c657806370578d32146102ec57806378e97925146103175780637d882097146103425780638da5cb5b1461036d5761027a565b8063136f3cfc1461027f5780633bd74880146102aa57806348c54b9d146102d55761027a565b3661027a576100f96104ea565b610138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012f90610e0c565b60405180910390fd5b670ac875621e7a800034600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461018c9190610e65565b11156101cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c490610ee5565b60405180910390fd5b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550346002600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1167c754441e88a212955ede9c41605458e3bfcf355e0e7aab7b9a9adbdf55f3346040516102709190610f14565b60405180910390a2005b600080fd5b34801561028b57600080fd5b5061029461056c565b6040516102a19190610f14565b60405180910390f35b3480156102b657600080fd5b506102bf610578565b6040516102cc9190610f14565b60405180910390f35b3480156102e157600080fd5b506102ea610585565b005b3480156102f857600080fd5b5061030161070c565b60405161030e9190610f14565b60405180910390f35b34801561032357600080fd5b5061032c610730565b6040516103399190610f14565b60405180910390f35b34801561034e57600080fd5b50610357610754565b6040516103649190610f14565b60405180910390f35b34801561037957600080fd5b5061038261075a565b60405161038f9190610f70565b60405180910390f35b3480156103a457600080fd5b506103ad61077e565b005b3480156103bb57600080fd5b506103c46108f3565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190610fbc565b610b3a565b6040516103fa9190610f14565b60405180910390f35b34801561040f57600080fd5b50610418610b9d565b6040516104259190610f14565b60405180910390f35b34801561043a57600080fd5b50610443610bc1565b6040516104509190610f14565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190610fbc565b610bc7565b005b34801561048e57600080fd5b50610497610cf2565b6040516104a49190611048565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190610fbc565b610d16565b6040516104e19190610f14565b60405180910390f35b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006105389190610e65565b421115801561056757507f00000000000000000000000000000000000000000000000000000000000000004210155b905090565b670ac875621e7a800081565b6802682c7cc23b58000081565b61058d610d2e565b6105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c3906110af565b60405180910390fd5b60006105d733610b3a565b9050600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106779291906110cf565b6020604051808303816000875af1158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190611130565b503373ffffffffffffffffffffffffffffffffffffffff167f4b8d188a88126c55c5715b63f23b66134d881f891d43cb4cbca332e0520c9a72826040516107019190610f14565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60025481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610803906111a9565b60405180910390fd5b6108146104ea565b15610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611215565b60405180910390fd5b7e85f56592462784083e828817207817f9a8413860eb3c60e01ba90ce6f925d9476040516108829190610f14565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108f0573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610978906111a9565b60405180910390fd5b6109896104ea565b6109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90610e0c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a219190610f70565b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190611261565b6001819055507fac3d9837a679b12a12c0a3b0d0c20e8bf132403b05d76f80de8f4aec36297ed37f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae29190610f70565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b239190611261565b604051610b309190610f14565b60405180910390a1565b6000600254600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600154610b8c919061128e565b610b9691906112ff565b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c906111a9565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020528060005260406000206000915090505481565b60007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000610d9d9190610e65565b610da79190610e65565b421015905090565b600082825260208201905092915050565b7f73616c6520656e64656400000000000000000000000000000000000000000000600082015250565b6000610df6600a83610daf565b9150610e0182610dc0565b602082019050919050565b60006020820190508181036000830152610e2581610de9565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7082610e2c565b9150610e7b83610e2c565b9250828201905080821115610e9357610e92610e36565b5b92915050565b7f6d61782073616c6520616d6f756e740000000000000000000000000000000000600082015250565b6000610ecf600f83610daf565b9150610eda82610e99565b602082019050919050565b60006020820190508181036000830152610efe81610ec2565b9050919050565b610f0e81610e2c565b82525050565b6000602082019050610f296000830184610f05565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f5a82610f2f565b9050919050565b610f6a81610f4f565b82525050565b6000602082019050610f856000830184610f61565b92915050565b600080fd5b610f9981610f4f565b8114610fa457600080fd5b50565b600081359050610fb681610f90565b92915050565b600060208284031215610fd257610fd1610f8b565b5b6000610fe084828501610fa7565b91505092915050565b6000819050919050565b600061100e61100961100484610f2f565b610fe9565b610f2f565b9050919050565b600061102082610ff3565b9050919050565b600061103282611015565b9050919050565b61104281611027565b82525050565b600060208201905061105d6000830184611039565b92915050565b7f73616c65206f7220706f73742073616c6520706572696f64206c697665000000600082015250565b6000611099601d83610daf565b91506110a482611063565b602082019050919050565b600060208201905081810360008301526110c88161108c565b9050919050565b60006040820190506110e46000830185610f61565b6110f16020830184610f05565b9392505050565b60008115159050919050565b61110d816110f8565b811461111857600080fd5b50565b60008151905061112a81611104565b92915050565b60006020828403121561114657611145610f8b565b5b60006111548482850161111b565b91505092915050565b7f554e415554484f52495a45440000000000000000000000000000000000000000600082015250565b6000611193600c83610daf565b915061119e8261115d565b602082019050919050565b600060208201905081810360008301526111c281611186565b9050919050565b7f73616c65206c6976650000000000000000000000000000000000000000000000600082015250565b60006111ff600983610daf565b915061120a826111c9565b602082019050919050565b6000602082019050818103600083015261122e816111f2565b9050919050565b61123e81610e2c565b811461124957600080fd5b50565b60008151905061125b81611235565b92915050565b60006020828403121561127757611276610f8b565b5b60006112858482850161124c565b91505092915050565b600061129982610e2c565b91506112a483610e2c565b92508282026112b281610e2c565b915082820484148315176112c9576112c8610e36565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130a82610e2c565b915061131583610e2c565b925082611325576113246112d0565b5b82820490509291505056fea2646970667358221220e7800f444f6492fe478a90096ff7f423be975c511dafda8b5d5674a0205d949064736f6c63430008120033000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc793264000000000000000000000000de28cb8da93c5db79cbf27829a944fef16067bd2000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000001c20
Deployed Bytecode
0x6080604052600436106100ec5760003560e01c80639038e6931161008a578063e8dda51a11610059578063e8dda51a1461042e578063f2fde38b14610459578063fc0c546a14610482578063fc7e286d146104ad5761027a565b80639038e6931461039857806392925c3b146103af578063b2cb3a9b146103c6578063dddec650146104035761027a565b806370578d32116100c657806370578d32146102ec57806378e97925146103175780637d882097146103425780638da5cb5b1461036d5761027a565b8063136f3cfc1461027f5780633bd74880146102aa57806348c54b9d146102d55761027a565b3661027a576100f96104ea565b610138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161012f90610e0c565b60405180910390fd5b670ac875621e7a800034600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461018c9190610e65565b11156101cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101c490610ee5565b60405180910390fd5b34600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550346002600082825401925050819055503373ffffffffffffffffffffffffffffffffffffffff167f1167c754441e88a212955ede9c41605458e3bfcf355e0e7aab7b9a9adbdf55f3346040516102709190610f14565b60405180910390a2005b600080fd5b34801561028b57600080fd5b5061029461056c565b6040516102a19190610f14565b60405180910390f35b3480156102b657600080fd5b506102bf610578565b6040516102cc9190610f14565b60405180910390f35b3480156102e157600080fd5b506102ea610585565b005b3480156102f857600080fd5b5061030161070c565b60405161030e9190610f14565b60405180910390f35b34801561032357600080fd5b5061032c610730565b6040516103399190610f14565b60405180910390f35b34801561034e57600080fd5b50610357610754565b6040516103649190610f14565b60405180910390f35b34801561037957600080fd5b5061038261075a565b60405161038f9190610f70565b60405180910390f35b3480156103a457600080fd5b506103ad61077e565b005b3480156103bb57600080fd5b506103c46108f3565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190610fbc565b610b3a565b6040516103fa9190610f14565b60405180910390f35b34801561040f57600080fd5b50610418610b9d565b6040516104259190610f14565b60405180910390f35b34801561043a57600080fd5b50610443610bc1565b6040516104509190610f14565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190610fbc565b610bc7565b005b34801561048e57600080fd5b50610497610cf2565b6040516104a49190611048565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190610fbc565b610d16565b6040516104e19190610f14565b60405180910390f35b60007f000000000000000000000000000000000000000000000000000000000002a3007f000000000000000000000000000000000000000000000000000000006490d69f6105389190610e65565b421115801561056757507f000000000000000000000000000000000000000000000000000000006490d69f4210155b905090565b670ac875621e7a800081565b6802682c7cc23b58000081565b61058d610d2e565b6105cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c3906110af565b60405180910390fd5b60006105d733610b3a565b9050600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600090557f000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc79326473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106779291906110cf565b6020604051808303816000875af1158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190611130565b503373ffffffffffffffffffffffffffffffffffffffff167f4b8d188a88126c55c5715b63f23b66134d881f891d43cb4cbca332e0520c9a72826040516107019190610f14565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000002a30081565b7f000000000000000000000000000000000000000000000000000000006490d69f81565b60025481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610803906111a9565b60405180910390fd5b6108146104ea565b15610854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084b90611215565b60405180910390fd5b7e85f56592462784083e828817207817f9a8413860eb3c60e01ba90ce6f925d9476040516108829190610f14565b60405180910390a160008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108f0573d6000803e3d6000fd5b50565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610978906111a9565b60405180910390fd5b6109896104ea565b6109c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109bf90610e0c565b60405180910390fd5b7f000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc79326473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a219190610f70565b602060405180830381865afa158015610a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a629190611261565b6001819055507fac3d9837a679b12a12c0a3b0d0c20e8bf132403b05d76f80de8f4aec36297ed37f000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc79326473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ae29190610f70565b602060405180830381865afa158015610aff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b239190611261565b604051610b309190610f14565b60405180910390a1565b6000600254600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600154610b8c919061128e565b610b9691906112ff565b9050919050565b7f0000000000000000000000000000000000000000000000000000000000001c2081565b60015481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4c906111a9565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b7f000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc79326481565b60036020528060005260406000206000915090505481565b60007f0000000000000000000000000000000000000000000000000000000000001c207f000000000000000000000000000000000000000000000000000000000002a3007f000000000000000000000000000000000000000000000000000000006490d69f610d9d9190610e65565b610da79190610e65565b421015905090565b600082825260208201905092915050565b7f73616c6520656e64656400000000000000000000000000000000000000000000600082015250565b6000610df6600a83610daf565b9150610e0182610dc0565b602082019050919050565b60006020820190508181036000830152610e2581610de9565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610e7082610e2c565b9150610e7b83610e2c565b9250828201905080821115610e9357610e92610e36565b5b92915050565b7f6d61782073616c6520616d6f756e740000000000000000000000000000000000600082015250565b6000610ecf600f83610daf565b9150610eda82610e99565b602082019050919050565b60006020820190508181036000830152610efe81610ec2565b9050919050565b610f0e81610e2c565b82525050565b6000602082019050610f296000830184610f05565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610f5a82610f2f565b9050919050565b610f6a81610f4f565b82525050565b6000602082019050610f856000830184610f61565b92915050565b600080fd5b610f9981610f4f565b8114610fa457600080fd5b50565b600081359050610fb681610f90565b92915050565b600060208284031215610fd257610fd1610f8b565b5b6000610fe084828501610fa7565b91505092915050565b6000819050919050565b600061100e61100961100484610f2f565b610fe9565b610f2f565b9050919050565b600061102082610ff3565b9050919050565b600061103282611015565b9050919050565b61104281611027565b82525050565b600060208201905061105d6000830184611039565b92915050565b7f73616c65206f7220706f73742073616c6520706572696f64206c697665000000600082015250565b6000611099601d83610daf565b91506110a482611063565b602082019050919050565b600060208201905081810360008301526110c88161108c565b9050919050565b60006040820190506110e46000830185610f61565b6110f16020830184610f05565b9392505050565b60008115159050919050565b61110d816110f8565b811461111857600080fd5b50565b60008151905061112a81611104565b92915050565b60006020828403121561114657611145610f8b565b5b60006111548482850161111b565b91505092915050565b7f554e415554484f52495a45440000000000000000000000000000000000000000600082015250565b6000611193600c83610daf565b915061119e8261115d565b602082019050919050565b600060208201905081810360008301526111c281611186565b9050919050565b7f73616c65206c6976650000000000000000000000000000000000000000000000600082015250565b60006111ff600983610daf565b915061120a826111c9565b602082019050919050565b6000602082019050818103600083015261122e816111f2565b9050919050565b61123e81610e2c565b811461124957600080fd5b50565b60008151905061125b81611235565b92915050565b60006020828403121561127757611276610f8b565b5b60006112858482850161124c565b91505092915050565b600061129982610e2c565b91506112a483610e2c565b92508282026112b281610e2c565b915082820484148315176112c9576112c8610e36565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061130a82610e2c565b915061131583610e2c565b925082611325576113246112d0565b5b82820490509291505056fea2646970667358221220e7800f444f6492fe478a90096ff7f423be975c511dafda8b5d5674a0205d949064736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc793264000000000000000000000000de28cb8da93c5db79cbf27829a944fef16067bd2000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000000000000000000000000000000000000001c20
-----Decoded View---------------
Arg [0] : token_ (address): 0xc1b79331b31cf5c40150Da4A0a864Af0fc793264
Arg [1] : owner_ (address): 0xDE28CB8Da93c5db79cBf27829a944FEF16067BD2
Arg [2] : SALE_TIME_ (uint256): 172800
Arg [3] : POST_SALE_ (uint256): 7200
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c1b79331b31cf5c40150da4a0a864af0fc793264
Arg [1] : 000000000000000000000000de28cb8da93c5db79cbf27829a944fef16067bd2
Arg [2] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [3] : 0000000000000000000000000000000000000000000000000000000000001c20
Deployed Bytecode Sourcemap
71:3478:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1994:10;:8;:10::i;:::-;1989:37;;2006:20;;;;;;;;;;:::i;:::-;;;;;;;;1989:37;1056:18;2064:9;2041:8;:20;2050:10;2041:20;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;:43;2037:86;;;2098:25;;;;;;;;;;:::i;:::-;;;;;;;;2037:86;2239:9;2215:8;:20;2224:10;2215:20;;;;;;;;;;;;;;;;:33;;;;;;;;;;;2279:9;2262:13;;:26;;;;;;;;;;;2326:10;2314:34;;;2338:9;2314:34;;;;;;:::i;:::-;;;;;;;;71:3478;;;;;1021:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2361:286;;;;;;;;;;;;;:::i;:::-;;810:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;736;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1519:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;690:20:1;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2807:211:2;;;;;;;;;;;;;:::i;:::-;;3024:216;;;;;;;;;;;;;:::i;:::-;;2653:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;910:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1328:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1312:161:1;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;641:28:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1630:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3246:169;3289:4;3355:9;3343;:21;;;;:::i;:::-;3324:15;:40;;:84;;;;;3399:9;3380:15;:28;;3324:84;3305:103;;3246:169;:::o;1021:53::-;1056:18;1021:53;:::o;1159:54::-;1193:20;1159:54;:::o;2361:286::-;2408:11;:9;:11::i;:::-;2403:57;;2421:39;;;;;;;;;;:::i;:::-;;;;;;;;2403:57;2471:13;2487:27;2503:10;2487:15;:27::i;:::-;2471:43;;2531:8;:20;2540:10;2531:20;;;;;;;;;;;;;;;2524:27;;;2562:5;:14;;;2577:10;2589:5;2562:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2622:10;2610:30;;;2634:5;2610:30;;;;;;:::i;:::-;;;;;;;;2393:254;2361:286::o;810:34::-;;;:::o;736:::-;;;:::o;1519:28::-;;;;:::o;690:20:1:-;;;;;;;;;;;;:::o;2807:211:2:-;778:5:1;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;2868:10:2::1;:8;:10::i;:::-;2864:35;;;2880:19;;;;;;;;;;:::i;:::-;;;;;;;;2864:35;2915:40;2933:21;2915:40;;;;;;:::i;:::-;;;;;;;;2973:5;::::0;::::1;;;;;;;;2965:23;;:46;2989:21;2965:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2807:211::o:0;3024:216::-;778:5:1;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;3082:10:2::1;:8;:10::i;:::-;3077:37;;3094:20;;;;;;;;;;:::i;:::-;;;;;;;;3077:37;3141:5;:15;;;3165:4;3141:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3124:14;:47;;;;3187:46;3202:5;:15;;;3226:4;3202:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3187:46;;;;;;:::i;:::-;;;;;;;;3024:216::o:0;2653:148::-;2716:7;2781:13;;2760:8;:17;2769:7;2760:17;;;;;;;;;;;;;;;;2743:14;;:34;;;;:::i;:::-;2742:52;;;;:::i;:::-;2735:59;;2653:148;;;:::o;910:34::-;;;:::o;1328:29::-;;;;:::o;1312:161:1:-;778:5;;;;;;;;;;764:19;;:10;:19;;;756:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;1400:8:::1;1392:5;::::0;:16:::1;;;;;;;;;;;;;;;;;;1457:8;1424:42;;1445:10;1424:42;;;;;;;;;;;;1312:161:::0;:::o;641:28:2:-;;;:::o;1630:43::-;;;;;;;;;;;;;;;;;:::o;3421:126::-;3465:4;3531:9;3519;3507;:21;;;;:::i;:::-;:33;;;;:::i;:::-;3488:15;:52;;3481:59;;3421:126;:::o;7:169:3:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:160::-;322:12;318:1;310:6;306:14;299:36;182:160;:::o;348:366::-;490:3;511:67;575:2;570:3;511:67;:::i;:::-;504:74;;587:93;676:3;587:93;:::i;:::-;705:2;700:3;696:12;689:19;;348:366;;;:::o;720:419::-;886:4;924:2;913:9;909:18;901:26;;973:9;967:4;963:20;959:1;948:9;944:17;937:47;1001:131;1127:4;1001:131;:::i;:::-;993:139;;720:419;;;:::o;1145:77::-;1182:7;1211:5;1200:16;;1145:77;;;:::o;1228:180::-;1276:77;1273:1;1266:88;1373:4;1370:1;1363:15;1397:4;1394:1;1387:15;1414:191;1454:3;1473:20;1491:1;1473:20;:::i;:::-;1468:25;;1507:20;1525:1;1507:20;:::i;:::-;1502:25;;1550:1;1547;1543:9;1536:16;;1571:3;1568:1;1565:10;1562:36;;;1578:18;;:::i;:::-;1562:36;1414:191;;;;:::o;1611:165::-;1751:17;1747:1;1739:6;1735:14;1728:41;1611:165;:::o;1782:366::-;1924:3;1945:67;2009:2;2004:3;1945:67;:::i;:::-;1938:74;;2021:93;2110:3;2021:93;:::i;:::-;2139:2;2134:3;2130:12;2123:19;;1782:366;;;:::o;2154:419::-;2320:4;2358:2;2347:9;2343:18;2335:26;;2407:9;2401:4;2397:20;2393:1;2382:9;2378:17;2371:47;2435:131;2561:4;2435:131;:::i;:::-;2427:139;;2154:419;;;:::o;2579:118::-;2666:24;2684:5;2666:24;:::i;:::-;2661:3;2654:37;2579:118;;:::o;2703:222::-;2796:4;2834:2;2823:9;2819:18;2811:26;;2847:71;2915:1;2904:9;2900:17;2891:6;2847:71;:::i;:::-;2703:222;;;;:::o;2931:126::-;2968:7;3008:42;3001:5;2997:54;2986:65;;2931:126;;;:::o;3063:96::-;3100:7;3129:24;3147:5;3129:24;:::i;:::-;3118:35;;3063:96;;;:::o;3165:118::-;3252:24;3270:5;3252:24;:::i;:::-;3247:3;3240:37;3165:118;;:::o;3289:222::-;3382:4;3420:2;3409:9;3405:18;3397:26;;3433:71;3501:1;3490:9;3486:17;3477:6;3433:71;:::i;:::-;3289:222;;;;:::o;3598:117::-;3707:1;3704;3697:12;3844:122;3917:24;3935:5;3917:24;:::i;:::-;3910:5;3907:35;3897:63;;3956:1;3953;3946:12;3897:63;3844:122;:::o;3972:139::-;4018:5;4056:6;4043:20;4034:29;;4072:33;4099:5;4072:33;:::i;:::-;3972:139;;;;:::o;4117:329::-;4176:6;4225:2;4213:9;4204:7;4200:23;4196:32;4193:119;;;4231:79;;:::i;:::-;4193:119;4351:1;4376:53;4421:7;4412:6;4401:9;4397:22;4376:53;:::i;:::-;4366:63;;4322:117;4117:329;;;;:::o;4452:60::-;4480:3;4501:5;4494:12;;4452:60;;;:::o;4518:142::-;4568:9;4601:53;4619:34;4628:24;4646:5;4628:24;:::i;:::-;4619:34;:::i;:::-;4601:53;:::i;:::-;4588:66;;4518:142;;;:::o;4666:126::-;4716:9;4749:37;4780:5;4749:37;:::i;:::-;4736:50;;4666:126;;;:::o;4798:139::-;4861:9;4894:37;4925:5;4894:37;:::i;:::-;4881:50;;4798:139;;;:::o;4943:157::-;5043:50;5087:5;5043:50;:::i;:::-;5038:3;5031:63;4943:157;;:::o;5106:248::-;5212:4;5250:2;5239:9;5235:18;5227:26;;5263:84;5344:1;5333:9;5329:17;5320:6;5263:84;:::i;:::-;5106:248;;;;:::o;5360:179::-;5500:31;5496:1;5488:6;5484:14;5477:55;5360:179;:::o;5545:366::-;5687:3;5708:67;5772:2;5767:3;5708:67;:::i;:::-;5701:74;;5784:93;5873:3;5784:93;:::i;:::-;5902:2;5897:3;5893:12;5886:19;;5545:366;;;:::o;5917:419::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6170:9;6164:4;6160:20;6156:1;6145:9;6141:17;6134:47;6198:131;6324:4;6198:131;:::i;:::-;6190:139;;5917:419;;;:::o;6342:332::-;6463:4;6501:2;6490:9;6486:18;6478:26;;6514:71;6582:1;6571:9;6567:17;6558:6;6514:71;:::i;:::-;6595:72;6663:2;6652:9;6648:18;6639:6;6595:72;:::i;:::-;6342:332;;;;;:::o;6680:90::-;6714:7;6757:5;6750:13;6743:21;6732:32;;6680:90;;;:::o;6776:116::-;6846:21;6861:5;6846:21;:::i;:::-;6839:5;6836:32;6826:60;;6882:1;6879;6872:12;6826:60;6776:116;:::o;6898:137::-;6952:5;6983:6;6977:13;6968:22;;6999:30;7023:5;6999:30;:::i;:::-;6898:137;;;;:::o;7041:345::-;7108:6;7157:2;7145:9;7136:7;7132:23;7128:32;7125:119;;;7163:79;;:::i;:::-;7125:119;7283:1;7308:61;7361:7;7352:6;7341:9;7337:22;7308:61;:::i;:::-;7298:71;;7254:125;7041:345;;;;:::o;7392:162::-;7532:14;7528:1;7520:6;7516:14;7509:38;7392:162;:::o;7560:366::-;7702:3;7723:67;7787:2;7782:3;7723:67;:::i;:::-;7716:74;;7799:93;7888:3;7799:93;:::i;:::-;7917:2;7912:3;7908:12;7901:19;;7560:366;;;:::o;7932:419::-;8098:4;8136:2;8125:9;8121:18;8113:26;;8185:9;8179:4;8175:20;8171:1;8160:9;8156:17;8149:47;8213:131;8339:4;8213:131;:::i;:::-;8205:139;;7932:419;;;:::o;8357:159::-;8497:11;8493:1;8485:6;8481:14;8474:35;8357:159;:::o;8522:365::-;8664:3;8685:66;8749:1;8744:3;8685:66;:::i;:::-;8678:73;;8760:93;8849:3;8760:93;:::i;:::-;8878:2;8873:3;8869:12;8862:19;;8522:365;;;:::o;8893:419::-;9059:4;9097:2;9086:9;9082:18;9074:26;;9146:9;9140:4;9136:20;9132:1;9121:9;9117:17;9110:47;9174:131;9300:4;9174:131;:::i;:::-;9166:139;;8893:419;;;:::o;9318:122::-;9391:24;9409:5;9391:24;:::i;:::-;9384:5;9381:35;9371:63;;9430:1;9427;9420:12;9371:63;9318:122;:::o;9446:143::-;9503:5;9534:6;9528:13;9519:22;;9550:33;9577:5;9550:33;:::i;:::-;9446:143;;;;:::o;9595:351::-;9665:6;9714:2;9702:9;9693:7;9689:23;9685:32;9682:119;;;9720:79;;:::i;:::-;9682:119;9840:1;9865:64;9921:7;9912:6;9901:9;9897:22;9865:64;:::i;:::-;9855:74;;9811:128;9595:351;;;;:::o;9952:410::-;9992:7;10015:20;10033:1;10015:20;:::i;:::-;10010:25;;10049:20;10067:1;10049:20;:::i;:::-;10044:25;;10104:1;10101;10097:9;10126:30;10144:11;10126:30;:::i;:::-;10115:41;;10305:1;10296:7;10292:15;10289:1;10286:22;10266:1;10259:9;10239:83;10216:139;;10335:18;;:::i;:::-;10216:139;10000:362;9952:410;;;;:::o;10368:180::-;10416:77;10413:1;10406:88;10513:4;10510:1;10503:15;10537:4;10534:1;10527:15;10554:185;10594:1;10611:20;10629:1;10611:20;:::i;:::-;10606:25;;10645:20;10663:1;10645:20;:::i;:::-;10640:25;;10684:1;10674:35;;10689:18;;:::i;:::-;10674:35;10731:1;10728;10724:9;10719:14;;10554:185;;;;:::o
Swarm Source
ipfs://e7800f444f6492fe478a90096ff7f423be975c511dafda8b5d5674a0205d9490
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.