More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 5,515 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Open | 21539382 | 21 days ago | IN | 0.0001 ETH | 0.00130606 | ||||
Open | 21539302 | 21 days ago | IN | 0.0001 ETH | 0.0013235 | ||||
Settle | 21537635 | 21 days ago | IN | 0 ETH | 0.00073407 | ||||
Start Settling | 21537619 | 21 days ago | IN | 0 ETH | 0.00087678 | ||||
Open | 21537599 | 21 days ago | IN | 0.0001 ETH | 0.00182842 | ||||
Claim | 9665217 | 1777 days ago | IN | 0 ETH | 0.00039658 | ||||
Open | 9633470 | 1782 days ago | IN | 0.01 ETH | 0.00090617 | ||||
Settle | 9508084 | 1801 days ago | IN | 0 ETH | 0.00029425 | ||||
Start Settling | 9470099 | 1807 days ago | IN | 0 ETH | 0.00011592 | ||||
Claim | 9469976 | 1807 days ago | IN | 0 ETH | 0.00029373 | ||||
Open | 9469961 | 1807 days ago | IN | 0.007 ETH | 0.00090617 | ||||
Claim | 9469934 | 1807 days ago | IN | 0 ETH | 0.00029381 | ||||
Open | 9469924 | 1807 days ago | IN | 0.37624814 ETH | 0.00090617 | ||||
Open | 9469920 | 1807 days ago | IN | 0.3763416 ETH | 0.00090617 | ||||
Claim | 9460119 | 1808 days ago | IN | 0 ETH | 0.0003209 | ||||
Open | 9454674 | 1809 days ago | IN | 0.005 ETH | 0.00090617 | ||||
Open | 8804196 | 1918 days ago | IN | 0.02 ETH | 0.00150326 | ||||
Claim | 8689117 | 1936 days ago | IN | 0 ETH | 0.00030076 | ||||
Open | 8689072 | 1936 days ago | IN | 0.4 ETH | 0.00092508 | ||||
Claim | 8610452 | 1948 days ago | IN | 0 ETH | 0.00102787 | ||||
Open | 8610101 | 1948 days ago | IN | 0.003 ETH | 0.00277526 | ||||
Open | 8506789 | 1964 days ago | IN | 0.01 ETH | 0.00095977 | ||||
Open | 8506788 | 1964 days ago | IN | 0.09329907 ETH | 0.00095977 | ||||
Open | 8454238 | 1973 days ago | IN | 0.01 ETH | 0.0003469 | ||||
Open | 8454237 | 1973 days ago | IN | 0.09329907 ETH | 0.0003469 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21538625 | 21 days ago | 0 ETH | ||||
21538611 | 21 days ago | 0 ETH | ||||
21538419 | 21 days ago | 0.0000001 ETH | ||||
21538373 | 21 days ago | 0.0000001 ETH | ||||
21538330 | 21 days ago | 0.0001 ETH | ||||
21538212 | 21 days ago | 0.0001 ETH | ||||
21538107 | 21 days ago | 0.001 ETH | ||||
21537800 | 21 days ago | 0.0001 ETH | ||||
21537730 | 21 days ago | 0.01 ETH | ||||
21537635 | 21 days ago | 0.0001 ETH | ||||
9665217 | 1777 days ago | 0.01 ETH | ||||
9508084 | 1801 days ago | 0.3763416 ETH | ||||
9469976 | 1807 days ago | 0.007 ETH | ||||
9469934 | 1807 days ago | 0.37624814 ETH | ||||
9460119 | 1808 days ago | 0.00454545 ETH | ||||
9460119 | 1808 days ago | 0.00045454 ETH | ||||
8689117 | 1936 days ago | 0.4 ETH | ||||
8610452 | 1948 days ago | 0.00255378 ETH | ||||
8610452 | 1948 days ago | 0.00044622 ETH | ||||
8317310 | 1994 days ago | 0.09329907 ETH | ||||
8249650 | 2004 days ago | 0.09329907 ETH | ||||
8249649 | 2004 days ago | 0.00009 ETH | ||||
8249649 | 2004 days ago | 0.00001 ETH | ||||
8249634 | 2004 days ago | 0.0001 ETH | ||||
8244802 | 2005 days ago | 0.09329907 ETH |
Loading...
Loading
This contract contains unverified libraries: ECRecovery
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Unidirectional
Compiler Version
v0.4.19+commit.c4cbbb05
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-04-04 */ pragma solidity ^0.4.19; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Eliptic curve signature operations * * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d */ library ECRecovery { /** * @dev Recover signer address from a message by using his signature * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address. * @param sig bytes signature, the signature is generated using web3.eth.sign() */ function recover(bytes32 hash, bytes sig) public pure returns (address) { bytes32 r; bytes32 s; uint8 v; //Check the signature length if (sig.length != 65) { return (address(0)); } // Divide the signature in r, s and v variables assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } // Version of signature should be 27 or 28, but 0 and 1 are also possible versions if (v < 27) { v += 27; } // If the version is correct return the signer address if (v != 27 && v != 28) { return (address(0)); } else { return ecrecover(hash, v, r, s); } } } /// @title Unidirectional Ether payment channels contract. contract Unidirectional { using SafeMath for uint256; struct PaymentChannel { address sender; address receiver; uint256 value; // Total amount of money deposited to the channel. uint32 settlingPeriod; // How many blocks to wait for the receiver to claim her funds, after sender starts settling. uint256 settlingUntil; // Starting with this block number, anyone can settle the channel. } mapping (bytes32 => PaymentChannel) public channels; event DidOpen(bytes32 indexed channelId, address indexed sender, address indexed receiver, uint256 value); event DidDeposit(bytes32 indexed channelId, uint256 deposit); event DidClaim(bytes32 indexed channelId); event DidStartSettling(bytes32 indexed channelId); event DidSettle(bytes32 indexed channelId); /*** ACTIONS AND CONSTRAINTS ***/ /// @notice Open a new channel between `msg.sender` and `receiver`, and do an initial deposit to the channel. /// @param channelId Unique identifier of the channel to be created. /// @param receiver Receiver of the funds, counter-party of `msg.sender`. /// @param settlingPeriod Number of blocks to wait for receiver to `claim` her funds after the sender starts settling period (see `startSettling`). /// After that period is over anyone could call `settle`, and move all the channel funds to the sender. function open(bytes32 channelId, address receiver, uint32 settlingPeriod) public payable { require(isAbsent(channelId)); channels[channelId] = PaymentChannel({ sender: msg.sender, receiver: receiver, value: msg.value, settlingPeriod: settlingPeriod, settlingUntil: 0 }); DidOpen(channelId, msg.sender, receiver, msg.value); } /// @notice Ensure `origin` address can deposit money into the channel identified by `channelId`. /// @dev Constraint `deposit` call. /// @param channelId Identifier of the channel. /// @param origin Caller of `deposit` function. function canDeposit(bytes32 channelId, address origin) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; bool isSender = channel.sender == origin; return isOpen(channelId) && isSender; } /// @notice Add more money to the contract. /// @param channelId Identifier of the channel. function deposit(bytes32 channelId) public payable { require(canDeposit(channelId, msg.sender)); channels[channelId].value += msg.value; DidDeposit(channelId, msg.value); } /// @notice Ensure `origin` address can start settling the channel identified by `channelId`. /// @dev Constraint `startSettling` call. /// @param channelId Identifier of the channel. /// @param origin Caller of `startSettling` function. function canStartSettling(bytes32 channelId, address origin) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; bool isSender = channel.sender == origin; return isOpen(channelId) && isSender; } /// @notice Sender initiates settling of the contract. /// @dev Actually set `settlingUntil` field of the PaymentChannel structure. /// @param channelId Identifier of the channel. function startSettling(bytes32 channelId) public { require(canStartSettling(channelId, msg.sender)); PaymentChannel storage channel = channels[channelId]; channel.settlingUntil = block.number + channel.settlingPeriod; DidStartSettling(channelId); } /// @notice Ensure one can settle the channel identified by `channelId`. /// @dev Check if settling period is over by comparing `settlingUntil` to a current block number. /// @param channelId Identifier of the channel. function canSettle(bytes32 channelId) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; bool isWaitingOver = isSettling(channelId) && block.number >= channel.settlingUntil; return isSettling(channelId) && isWaitingOver; } /// @notice Move the money to sender, and close the channel. /// After the settling period is over, and receiver has not claimed the funds, anyone could call that. /// @param channelId Identifier of the channel. function settle(bytes32 channelId) public { require(canSettle(channelId)); PaymentChannel storage channel = channels[channelId]; channel.sender.transfer(channel.value); delete channels[channelId]; DidSettle(channelId); } /// @notice Ensure `origin` address can claim `payment` amount on channel identified by `channelId`. /// @dev Check if `signature` is made by sender part of the channel, and is for payment promise (see `paymentDigest`). /// @param channelId Identifier of the channel. /// @param payment Amount claimed. /// @param origin Caller of `claim` function. /// @param signature Signature for the payment promise. function canClaim(bytes32 channelId, uint256 payment, address origin, bytes signature) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; bool isReceiver = origin == channel.receiver; bytes32 hash = recoveryPaymentDigest(channelId, payment); bool isSigned = channel.sender == ECRecovery.recover(hash, signature); return isReceiver && isSigned; } /// @notice Claim the funds, and close the channel. /// @dev Can be claimed by channel receiver only. Guarded by `canClaim`. /// @param channelId Identifier of the channel. /// @param payment Amount claimed. /// @param signature Signature for the payment promise. function claim(bytes32 channelId, uint256 payment, bytes signature) public { require(canClaim(channelId, payment, msg.sender, signature)); PaymentChannel memory channel = channels[channelId]; if (payment >= channel.value) { channel.receiver.transfer(channel.value); } else { channel.receiver.transfer(payment); channel.sender.transfer(channel.value.sub(payment)); } delete channels[channelId]; DidClaim(channelId); } /*** CHANNEL STATE ***/ /// @notice Check if the channel is present: in open or settling state. /// @param channelId Identifier of the channel. function isPresent(bytes32 channelId) public view returns(bool) { return !isAbsent(channelId); } /// @notice Check if the channel is not present. /// @param channelId Identifier of the channel. function isAbsent(bytes32 channelId) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; return channel.sender == 0; } /// @notice Check if the channel is in settling state: waits till the settling period is over. /// @dev It is settling, if `settlingUntil` is set to non-zero. /// @param channelId Identifier of the channel. function isSettling(bytes32 channelId) public view returns(bool) { PaymentChannel memory channel = channels[channelId]; return channel.settlingUntil != 0; } /// @notice Check if the channel is open: present and not settling. /// @param channelId Identifier of the channel. function isOpen(bytes32 channelId) public view returns(bool) { return isPresent(channelId) && !isSettling(channelId); } /*** PAYMENT DIGEST ***/ /// @return Hash of the payment promise to sign. /// @param channelId Identifier of the channel. /// @param payment Amount to send, and to claim later. function paymentDigest(bytes32 channelId, uint256 payment) public view returns(bytes32) { return keccak256(address(this), channelId, payment); } /// @return Actually signed hash of the payment promise, considering "Ethereum Signed Message" prefix. /// @param channelId Identifier of the channel. /// @param payment Amount to send, and to claim later. function recoveryPaymentDigest(bytes32 channelId, uint256 payment) internal view returns(bytes32) { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; return keccak256(prefix, paymentDigest(channelId, payment)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"isPresent","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"origin","type":"address"}],"name":"canDeposit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"payment","type":"uint256"}],"name":"paymentDigest","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"origin","type":"address"}],"name":"canStartSettling","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"isAbsent","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"isSettling","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"payment","type":"uint256"},{"name":"signature","type":"bytes"}],"name":"claim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"channels","outputs":[{"name":"sender","type":"address"},{"name":"receiver","type":"address"},{"name":"value","type":"uint256"},{"name":"settlingPeriod","type":"uint32"},{"name":"settlingUntil","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"isOpen","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"settle","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"canSettle","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"deposit","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"receiver","type":"address"},{"name":"settlingPeriod","type":"uint32"}],"name":"open","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"channelId","type":"bytes32"}],"name":"startSettling","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"channelId","type":"bytes32"},{"name":"payment","type":"uint256"},{"name":"origin","type":"address"},{"name":"signature","type":"bytes"}],"name":"canClaim","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"channelId","type":"bytes32"},{"indexed":true,"name":"sender","type":"address"},{"indexed":true,"name":"receiver","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"DidOpen","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"channelId","type":"bytes32"},{"indexed":false,"name":"deposit","type":"uint256"}],"name":"DidDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"channelId","type":"bytes32"}],"name":"DidClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"channelId","type":"bytes32"}],"name":"DidStartSettling","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"channelId","type":"bytes32"}],"name":"DidSettle","type":"event"}]
Contract Creation Code
6060604052341561000f57600080fd5b610d9e8061001e6000396000f3006060604052600436106100d95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662f31e7681146100de5780632f8f0c921461010857806341b6fcf71461012a5780634722361c1461010857806360546602146101555780636683f9ae1461016b5780637964ea87146101815780637a7ebd7b146101df5780637c35be7a14610235578063987757dd1461024b578063ad37908914610261578063b214faa514610277578063ba6cc6c314610282578063e62eea47146102a2578063ec8be5b9146102b8575b600080fd5b34156100e957600080fd5b6100f4600435610320565b604051901515815260200160405180910390f35b341561011357600080fd5b6100f4600435600160a060020a0360243516610332565b341561013557600080fd5b6101436004356024356103c7565b60405190815260200160405180910390f35b341561016057600080fd5b6100f460043561040c565b341561017657600080fd5b6100f4600435610486565b341561018c57600080fd5b6101dd600480359060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104fa95505050505050565b005b34156101ea57600080fd5b6101f56004356106c3565b604051600160a060020a03958616815293909416602084015260408084019290925263ffffffff166060830152608082019290925260a001905180910390f35b341561024057600080fd5b6100f4600435610705565b341561025657600080fd5b6101dd600435610726565b341561026c57600080fd5b6100f460043561080c565b6101dd6004356108a7565b6101dd600435600160a060020a036024351663ffffffff6044351661090f565b34156102ad57600080fd5b6101dd600435610a46565b34156102c357600080fd5b6100f460048035906024803591600160a060020a03604435169160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ab295505050505050565b600061032b8261040c565b1592915050565b600061033c610d32565b6000848152602081905260408082209060a0905190810160409081528254600160a060020a039081168352600184015481166020840152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152925084168251600160a060020a03161490506103b585610705565b80156103be5750805b95945050505050565b6000308383604051600160a060020a03939093166c01000000000000000000000000028352601483019190915260348201526054016040518091039020905092915050565b6000610416610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082015290508051600160a060020a0316159392505050565b6000610490610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082019081529091505115159392505050565b610502610d32565b61050e84843385610ab2565b151561051957600080fd5b600084815260208190526040908190209060a0905190810160409081528254600160a060020a03908116835260018401541660208301526002830154908201908152600383015463ffffffff166060830152600490920154608082015291505183106105bf578060200151600160a060020a03166108fc82604001519081150290604051600060405180830381858888f1935050505015156105ba57600080fd5b61063c565b8060200151600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156105f457600080fd5b8051600160a060020a03166108fc6106178584604001519063ffffffff610c6c16565b9081150290604051600060405180830381858888f19350505050151561063c57600080fd5b600084815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915584907f3de43c9e481138453c3cfea2781e18a609abb6448556669b257edc7de710fd64905160405180910390a250505050565b60006020819052908152604090208054600182015460028301546003840154600490940154600160a060020a03938416949290931692909163ffffffff169085565b600061071082610320565b8015610720575061032b82610486565b92915050565b60006107318261080c565b151561073c57600080fd5b5060008181526020819052604090819020805460028201549192600160a060020a039091169180156108fc029151600060405180830381858888f19350505050151561078757600080fd5b600082815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915582907f74fb75c3de2cff5e8a78cf9b1f49a5bea60126b42ed45bb4b2b25b7da03e4d1b905160405180910390a25050565b6000610816610d32565b6000838152602081905260408082209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff1660608201526004909101546080820152915061087b84610486565b801561088b575081608001514310155b905061089684610486565b801561089f5750805b949350505050565b6108b18133610332565b15156108bc57600080fd5b6000818152602081905260409081902060020180543490810190915582917f6f850cda6d6b2f5cca622bc2d4739e4ed917c12d29f9a92b9e6c127abe39842491905190815260200160405180910390a250565b6109188361040c565b151561092357600080fd5b60a06040519081016040908152600160a060020a0333811683528416602080840191909152348284015263ffffffff8416606084015260006080840181905286815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015160038201805463ffffffff191663ffffffff92909216919091179055608082015160049091015550600160a060020a03808316903316847f2f7cfc632227c054da7caaf75268353dba6206f53e9f7a547a193e66ab8c94dc3460405190815260200160405180910390a4505050565b6000610a528233610332565b1515610a5d57600080fd5b5060008181526020819052604090819020600381015463ffffffff16430160048201559082907fd6461a3a92fd600fe23f236b2e25c2fd0c197a66b2f990989f0b210d578f4617905160405180910390a25050565b6000610abc610d32565b600086815260208190526040808220829182919060a0905190810160409081528254600160a060020a03908116835260018401541660208301908152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152945051600160a060020a031687600160a060020a0316149250610b428989610c7e565b915073be7c52c9f88af54f3b29cd472c71a03c7863d1eb6319045a2583886000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815260048101838152604060248301908152909160440183818151815260200191508051906020019080838360005b83811015610bd9578082015183820152602001610bc1565b50505050905090810190601f168015610c065780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1515610c2357600080fd5b6102c65a03f41515610c3457600080fd5b5050506040518051600160a060020a031690508451600160a060020a0316149050828015610c5f5750805b9998505050505050505050565b600082821115610c7857fe5b50900390565b6000610c88610d60565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152905080610cc985856103c7565b6040518083805190602001908083835b60208310610cf85780518252601f199092019160209182019101610cd9565b6001836020036101000a03801982511681845116179092525050509190910192835250506020019050604051809103902091505092915050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b602060405190810160405260008152905600a165627a7a7230582054107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c460029
Deployed Bytecode
0x6060604052600436106100d95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662f31e7681146100de5780632f8f0c921461010857806341b6fcf71461012a5780634722361c1461010857806360546602146101555780636683f9ae1461016b5780637964ea87146101815780637a7ebd7b146101df5780637c35be7a14610235578063987757dd1461024b578063ad37908914610261578063b214faa514610277578063ba6cc6c314610282578063e62eea47146102a2578063ec8be5b9146102b8575b600080fd5b34156100e957600080fd5b6100f4600435610320565b604051901515815260200160405180910390f35b341561011357600080fd5b6100f4600435600160a060020a0360243516610332565b341561013557600080fd5b6101436004356024356103c7565b60405190815260200160405180910390f35b341561016057600080fd5b6100f460043561040c565b341561017657600080fd5b6100f4600435610486565b341561018c57600080fd5b6101dd600480359060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104fa95505050505050565b005b34156101ea57600080fd5b6101f56004356106c3565b604051600160a060020a03958616815293909416602084015260408084019290925263ffffffff166060830152608082019290925260a001905180910390f35b341561024057600080fd5b6100f4600435610705565b341561025657600080fd5b6101dd600435610726565b341561026c57600080fd5b6100f460043561080c565b6101dd6004356108a7565b6101dd600435600160a060020a036024351663ffffffff6044351661090f565b34156102ad57600080fd5b6101dd600435610a46565b34156102c357600080fd5b6100f460048035906024803591600160a060020a03604435169160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ab295505050505050565b600061032b8261040c565b1592915050565b600061033c610d32565b6000848152602081905260408082209060a0905190810160409081528254600160a060020a039081168352600184015481166020840152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152925084168251600160a060020a03161490506103b585610705565b80156103be5750805b95945050505050565b6000308383604051600160a060020a03939093166c01000000000000000000000000028352601483019190915260348201526054016040518091039020905092915050565b6000610416610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082015290508051600160a060020a0316159392505050565b6000610490610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082019081529091505115159392505050565b610502610d32565b61050e84843385610ab2565b151561051957600080fd5b600084815260208190526040908190209060a0905190810160409081528254600160a060020a03908116835260018401541660208301526002830154908201908152600383015463ffffffff166060830152600490920154608082015291505183106105bf578060200151600160a060020a03166108fc82604001519081150290604051600060405180830381858888f1935050505015156105ba57600080fd5b61063c565b8060200151600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156105f457600080fd5b8051600160a060020a03166108fc6106178584604001519063ffffffff610c6c16565b9081150290604051600060405180830381858888f19350505050151561063c57600080fd5b600084815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915584907f3de43c9e481138453c3cfea2781e18a609abb6448556669b257edc7de710fd64905160405180910390a250505050565b60006020819052908152604090208054600182015460028301546003840154600490940154600160a060020a03938416949290931692909163ffffffff169085565b600061071082610320565b8015610720575061032b82610486565b92915050565b60006107318261080c565b151561073c57600080fd5b5060008181526020819052604090819020805460028201549192600160a060020a039091169180156108fc029151600060405180830381858888f19350505050151561078757600080fd5b600082815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915582907f74fb75c3de2cff5e8a78cf9b1f49a5bea60126b42ed45bb4b2b25b7da03e4d1b905160405180910390a25050565b6000610816610d32565b6000838152602081905260408082209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff1660608201526004909101546080820152915061087b84610486565b801561088b575081608001514310155b905061089684610486565b801561089f5750805b949350505050565b6108b18133610332565b15156108bc57600080fd5b6000818152602081905260409081902060020180543490810190915582917f6f850cda6d6b2f5cca622bc2d4739e4ed917c12d29f9a92b9e6c127abe39842491905190815260200160405180910390a250565b6109188361040c565b151561092357600080fd5b60a06040519081016040908152600160a060020a0333811683528416602080840191909152348284015263ffffffff8416606084015260006080840181905286815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015160038201805463ffffffff191663ffffffff92909216919091179055608082015160049091015550600160a060020a03808316903316847f2f7cfc632227c054da7caaf75268353dba6206f53e9f7a547a193e66ab8c94dc3460405190815260200160405180910390a4505050565b6000610a528233610332565b1515610a5d57600080fd5b5060008181526020819052604090819020600381015463ffffffff16430160048201559082907fd6461a3a92fd600fe23f236b2e25c2fd0c197a66b2f990989f0b210d578f4617905160405180910390a25050565b6000610abc610d32565b600086815260208190526040808220829182919060a0905190810160409081528254600160a060020a03908116835260018401541660208301908152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152945051600160a060020a031687600160a060020a0316149250610b428989610c7e565b915073be7c52c9f88af54f3b29cd472c71a03c7863d1eb6319045a2583886000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815260048101838152604060248301908152909160440183818151815260200191508051906020019080838360005b83811015610bd9578082015183820152602001610bc1565b50505050905090810190601f168015610c065780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1515610c2357600080fd5b6102c65a03f41515610c3457600080fd5b5050506040518051600160a060020a031690508451600160a060020a0316149050828015610c5f5750805b9998505050505050505050565b600082821115610c7857fe5b50900390565b6000610c88610d60565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152905080610cc985856103c7565b6040518083805190602001908083835b60208310610cf85780518252601f199092019160209182019101610cd9565b6001836020036101000a03801982511681845116179092525050509190910192835250506020019050604051809103902091505092915050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b602060405190810160405260008152905600a165627a7a7230582054107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c460029
Swarm Source
bzzr://54107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c46
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,336.73 | 9.5699 | $31,932.27 |
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.