Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0x1b75B90e60070d37CfA9d87AFfD124bB345bf70a
Balance 0 ETH
Nonce 3261
Code Size 4893 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

4893 bytes
0x608060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806315f2e2f71461007d57806339621466146100a85780638cf0cb55146100d35780638f183183146100fe578063911fab441461019f578063a40d306014610255575b600080fd5b34801561008957600080fd5b506100926102e7565b6040518082815260200191505060405180910390f35b3480156100b457600080fd5b506100bd6102ed565b6040518082815260200191505060405180910390f35b3480156100df57600080fd5b506100e86102f3565b6040518082815260200191505060405180910390f35b34801561010a57600080fd5b5061015d6004803603604081101561012157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291905050506102fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156101ab57600080fd5b50610253600480360360608110156101c257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803563ffffffff1690602001909291908035906020019064010000000081111561020f57600080fd5b82018360208201111561022157600080fd5b8035906020019184600183028401116401000000008311171561024357600080fd5b9091929391929390505050610e32565b005b6102e56004803603606081101561026b57600080fd5b81019080803560ff1690602001909291908035906020019064010000000081111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111640100000000831117156102c957600080fd5b9091929391929390803515159060200190929190505050610fe1565b005b60005481565b60015481565b62794a0081565b6000808263ffffffff1614156104c45760d67f01000000000000000000000000000000000000000000000000000000000000000260947f0100000000000000000000000000000000000000000000000000000000000000028460807f01000000000000000000000000000000000000000000000000000000000000000260405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401827effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260010194505050505060405160208183030381529060405280519060200120600190049050610e2c565b607f8263ffffffff1611151561064f5760d67f01000000000000000000000000000000000000000000000000000000000000000260947f010000000000000000000000000000000000000000000000000000000000000002848460405160200180857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101847effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018260ff1660ff167f010000000000000000000000000000000000000000000000000000000000000002815260010194505050505060405160208183030381529060405280519060200120600190049050610e2c565b60ff8263ffffffff161115156108495760d77f01000000000000000000000000000000000000000000000000000000000000000260947f0100000000000000000000000000000000000000000000000000000000000000028460817f0100000000000000000000000000000000000000000000000000000000000000028560405160200180867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018260ff1660ff167f01000000000000000000000000000000000000000000000000000000000000000281526001019550505050505060405160208183030381529060405280519060200120600190049050610e2c565b61ffff8263ffffffff16111515610a455760d87f01000000000000000000000000000000000000000000000000000000000000000260947f0100000000000000000000000000000000000000000000000000000000000000028460827f0100000000000000000000000000000000000000000000000000000000000000028560405160200180867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018261ffff1661ffff167e010000000000000000000000000000000000000000000000000000000000000281526002019550505050505060405160208183030381529060405280519060200120600190049050610e2c565b62ffffff8263ffffffff16111515610c435760d97f01000000000000000000000000000000000000000000000000000000000000000260947f0100000000000000000000000000000000000000000000000000000000000000028460837f0100000000000000000000000000000000000000000000000000000000000000028560405160200180867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018262ffffff1662ffffff167d0100000000000000000000000000000000000000000000000000000000000281526003019550505050505060405160208183030381529060405280519060200120600190049050610e2c565b60da7f01000000000000000000000000000000000000000000000000000000000000000260947f0100000000000000000000000000000000000000000000000000000000000000028460847f0100000000000000000000000000000000000000000000000000000000000000028560405160200180867effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152600101857effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401837effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526001018263ffffffff1663ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040195505050505050604051602081830303815290604052805190602001206001900490505b92915050565b6000544210151515610e4357600080fd5b6001544211151515610e5457600080fd5b8333848173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f12578673ffffffffffffffffffffffffffffffffffffffff167f0211c2ecb6e4a6502e0a459e097b88a8a9e09e651e50930a9a791cc031543b1586864260405180806020018381526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a2610fd8565b610f1c82826102fa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515610f5557600080fd5b8673ffffffffffffffffffffffffffffffffffffffff167f0211c2ecb6e4a6502e0a459e097b88a8a9e09e651e50930a9a791cc031543b1586864260405180806020018381526020018281038252858582818152602001925080828437600081840152601f19601f82011690508083019250505094505050505060405180910390a25b50505050505050565b6000544210151515610ff257600080fd5b600154421115151561100357600080fd5b60003490506000339050600061101887611190565b9050600083838361102761121f565b808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001828152602001925050506040518091039082f08015801561107f573d6000803e3d6000fd5b5090509050348173ffffffffffffffffffffffffffffffffffffffff16311415156110a657fe5b8273ffffffffffffffffffffffffffffffffffffffff167f8f81b4492eef21096ee0e1bc48a7200f9db32806ea6730354516e05e9856139985838b8b8b8b42604051808881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200186600281111561112d57fe5b60ff16815260200180602001841515151581526020018381526020018281038252868682818152602001925080828437600081840152601f19601f8201169050808301925050509850505050505050505060405180910390a25050505050505050565b600080600281111561119e57fe5b8260028111156111aa57fe5b14156111bd5762794a004201905061121a565b600160028111156111ca57fe5b8260028111156111d657fe5b14156111e95762f142804201905061121a565b6002808111156111f557fe5b82600281111561120157fe5b1415611215576301e133804201905061121a565b600080fd5b919050565b60405160c38061122f8339019056fe60806040526040516040806100c383398101806040526040811015602257600080fd5b81019080805190602001909291908051906020019092919050505081600055806001555050606e806100556000396000f3fe6080604052600154421160008114601b5760018114602057603f565b600080fd5b60008060008030316000545af160008114603857603d565b600080fd5b505b5000fea165627a7a72305820b5edeabbc6e4f0d85c2d38f992d6b57edeecf157907c62de2831885f78a11b530029a165627a7a72305820868fd64e7d9a1209f19723fa336e20eebc0effcbbd6c498584f06d85f9379a090029

Verified Source Code Partial Match

Compiler: v0.5.0+commit.1d4f565a EVM: byzantium Optimization: No
Lockdrop.sol 137 lines
pragma solidity ^0.5.0;

contract Lock {
    // address owner; slot #0
    // address unlockTime; slot #1
    constructor (address owner, uint256 unlockTime) public payable {
        assembly {
            sstore(0x00, owner)
            sstore(0x01, unlockTime)
        }
    }
    
    /**
     * @dev        Withdraw function once timestamp has passed unlock time
     */
    function () external payable { // payable so solidity doesn't add unnecessary logic
        assembly {
            switch gt(timestamp, sload(0x01))
            case 0 { revert(0, 0) }
            case 1 {
                switch call(gas, sload(0x00), balance(address), 0, 0, 0, 0)
                case 0 { revert(0, 0) }
            }
        }
    }
}

contract Lockdrop {
    enum Term {
        ThreeMo,
        SixMo,
        TwelveMo
    }
    // Time constants
    uint256 constant public LOCK_DROP_PERIOD = 1 days * 92; // 3 months
    uint256 public LOCK_START_TIME;
    uint256 public LOCK_END_TIME;
    // ETH locking events
    event Locked(address indexed owner, uint256 eth, Lock lockAddr, Term term, bytes edgewareAddr, bool isValidator, uint time);
    event Signaled(address indexed contractAddr, bytes edgewareAddr, uint time);
    
    constructor(uint startTime) public {
        LOCK_START_TIME = startTime;
        LOCK_END_TIME = startTime + LOCK_DROP_PERIOD;
    }

    /**
     * @dev        Locks up the value sent to contract in a new Lock
     * @param      term         The length of the lock up
     * @param      edgewareAddr The bytes representation of the target edgeware key
     * @param      isValidator  Indicates if sender wishes to be a validator
     */
    function lock(Term term, bytes calldata edgewareAddr, bool isValidator)
        external
        payable
        didStart
        didNotEnd
    {
        uint256 eth = msg.value;
        address owner = msg.sender;
        uint256 unlockTime = unlockTimeForTerm(term);
        // Create ETH lock contract
        Lock lockAddr = (new Lock).value(eth)(owner, unlockTime);
        // ensure lock contract has all ETH, or fail
        assert(address(lockAddr).balance == msg.value);
        emit Locked(owner, eth, lockAddr, term, edgewareAddr, isValidator, now);
    }

    /**
     * @dev        Signals a contract's (or address's) balance decided after lock period
     * @param      contractAddr  The contract address from which to signal the balance of
     * @param      nonce         The transaction nonce of the creator of the contract
     * @param      edgewareAddr   The bytes representation of the target edgeware key
     */
    function signal(address contractAddr, uint32 nonce, bytes calldata edgewareAddr)
        external
        didStart
        didNotEnd
        didCreate(contractAddr, msg.sender, nonce)
    {
        emit Signaled(contractAddr, edgewareAddr, now);
    }

    function unlockTimeForTerm(Term term) internal view returns (uint256) {
        if (term == Term.ThreeMo) return now + 92 days;
        if (term == Term.SixMo) return now + 183 days;
        if (term == Term.TwelveMo) return now + 365 days;
        
        revert();
    }

    /**
     * @dev        Ensures the lockdrop has started
     */
    modifier didStart() {
        require(now >= LOCK_START_TIME);
        _;
    }

    /**
     * @dev        Ensures the lockdrop has not ended
     */
    modifier didNotEnd() {
        require(now <= LOCK_END_TIME);
        _;
    }

    /**
     * @dev        Rebuilds the contract address from a normal address and transaction nonce
     * @param      _origin  The non-contract address derived from a user's public key
     * @param      _nonce   The transaction nonce from which to generate a contract address
     */
    function addressFrom(address _origin, uint32 _nonce) public pure returns (address) {
        if(_nonce == 0x00)     return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xd6), byte(0x94), _origin, byte(0x80))))));
        if(_nonce <= 0x7f)     return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xd6), byte(0x94), _origin, uint8(_nonce))))));
        if(_nonce <= 0xff)     return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xd7), byte(0x94), _origin, byte(0x81), uint8(_nonce))))));
        if(_nonce <= 0xffff)   return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xd8), byte(0x94), _origin, byte(0x82), uint16(_nonce))))));
        if(_nonce <= 0xffffff) return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xd9), byte(0x94), _origin, byte(0x83), uint24(_nonce))))));
        return address(uint160(uint256(keccak256(abi.encodePacked(byte(0xda), byte(0x94), _origin, byte(0x84), uint32(_nonce)))))); // more than 2^32 nonces not realistic
    }

    /**
     * @dev        Ensures the target address was created by a parent at some nonce
     * @param      target  The target contract address (or trivially the parent)
     * @param      parent  The creator of the alleged contract address
     * @param      nonce   The creator's tx nonce at the time of the contract creation
     */
    modifier didCreate(address target, address parent, uint32 nonce) {
        // Trivially let senders "create" themselves
        if (target == parent) {
            _;
        } else {
            require(target == addressFrom(parent, nonce));
            _;
        }
    }
}

Read Contract

LOCK_DROP_PERIOD 0x8cf0cb55 → uint256
LOCK_END_TIME 0x39621466 → uint256
LOCK_START_TIME 0x15f2e2f7 → uint256
addressFrom 0x8f183183 → address

Write Contract 2 functions

These functions modify contract state and require a wallet transaction to execute.

lock 0xa40d3060
uint8 term
bytes edgewareAddr
bool isValidator
signal 0x911fab44
address contractAddr
uint32 nonce
bytes edgewareAddr

Recent Transactions

No transactions found for this address