Address Contract Partially Verified
Address
0x1b75B90e60070d37CfA9d87AFfD124bB345bf70a
Balance
0 ETH
Nonce
3261
Code Size
4893 bytes
Creator
0xfAC0DD47...4e08 at tx 0x77198bfc...30e038
Indexed Transactions
0
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