ETH Price: $3,336.73 (+2.94%)
 

Overview

ETH Balance

9.569940257059267443 ETH

Eth Value

$31,932.27 (@ $3,336.73/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Open215393822025-01-02 21:09:2321 days ago1735852163IN
0x08e4f701...686247df4
0.0001 ETH0.0013060611.20122477
Open215393022025-01-02 20:53:1121 days ago1735851191IN
0x08e4f701...686247df4
0.0001 ETH0.001323511.34494753
Settle215376352025-01-02 15:18:4721 days ago1735831127IN
0x08e4f701...686247df4
0 ETH0.0007340715.78249786
Start Settling215376192025-01-02 15:15:3521 days ago1735830935IN
0x08e4f701...686247df4
0 ETH0.0008767815.53507718
Open215375992025-01-02 15:11:3521 days ago1735830695IN
0x08e4f701...686247df4
0.0001 ETH0.0018284215.67468356
Claim96652172020-03-13 20:22:461777 days ago1584130966IN
0x08e4f701...686247df4
0 ETH0.0003965810.8
Open96334702020-03-08 22:20:451782 days ago1583706045IN
0x08e4f701...686247df4
0.01 ETH0.000906178
Settle95080842020-02-18 16:06:001801 days ago1582041960IN
0x08e4f701...686247df4
0 ETH0.000294258
Start Settling94700992020-02-12 19:36:451807 days ago1581536205IN
0x08e4f701...686247df4
0 ETH0.000115922
Claim94699762020-02-12 19:06:071807 days ago1581534367IN
0x08e4f701...686247df4
0 ETH0.000293738
Open94699612020-02-12 19:03:381807 days ago1581534218IN
0x08e4f701...686247df4
0.007 ETH0.000906178
Claim94699342020-02-12 18:58:191807 days ago1581533899IN
0x08e4f701...686247df4
0 ETH0.000293818
Open94699242020-02-12 18:56:411807 days ago1581533801IN
0x08e4f701...686247df4
0.37624814 ETH0.000906178
Open94699202020-02-12 18:55:421807 days ago1581533742IN
0x08e4f701...686247df4
0.3763416 ETH0.000906178
Claim94601192020-02-11 6:44:391808 days ago1581403479IN
0x08e4f701...686247df4
0 ETH0.00032098
Open94546742020-02-10 10:52:321809 days ago1581331952IN
0x08e4f701...686247df4
0.005 ETH0.000906178
Open88041962019-10-24 17:13:421918 days ago1571937222IN
0x08e4f701...686247df4
0.02 ETH0.0015032613
Claim86891172019-10-06 14:46:041936 days ago1570373164IN
0x08e4f701...686247df4
0 ETH0.000300768
Open86890722019-10-06 14:36:541936 days ago1570372614IN
0x08e4f701...686247df4
0.4 ETH0.000925088
Claim86104522019-09-24 7:31:481948 days ago1569310308IN
0x08e4f701...686247df4
0 ETH0.0010278725
Open86101012019-09-24 6:08:201948 days ago1569305300IN
0x08e4f701...686247df4
0.003 ETH0.0027752624
Open85067892019-09-08 3:10:291964 days ago1567912229IN
0x08e4f701...686247df4
0.01 ETH0.000959778.3
Open85067882019-09-08 3:10:091964 days ago1567912209IN
0x08e4f701...686247df4
0.09329907 ETH0.000959778.3
Open84542382019-08-30 22:37:201973 days ago1567204640IN
0x08e4f701...686247df4
0.01 ETH0.00034693
Open84542372019-08-30 22:36:551973 days ago1567204615IN
0x08e4f701...686247df4
0.09329907 ETH0.00034693
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
215386252025-01-02 18:37:1121 days ago1735843031
0x08e4f701...686247df4
0 ETH
215386112025-01-02 18:34:2321 days ago1735842863
0x08e4f701...686247df4
0 ETH
215384192025-01-02 17:55:5921 days ago1735840559
0x08e4f701...686247df4
0.0000001 ETH
215383732025-01-02 17:46:4721 days ago1735840007
0x08e4f701...686247df4
0.0000001 ETH
215383302025-01-02 17:37:5921 days ago1735839479
0x08e4f701...686247df4
0.0001 ETH
215382122025-01-02 17:14:2321 days ago1735838063
0x08e4f701...686247df4
0.0001 ETH
215381072025-01-02 16:53:1121 days ago1735836791
0x08e4f701...686247df4
0.001 ETH
215378002025-01-02 15:51:4721 days ago1735833107
0x08e4f701...686247df4
0.0001 ETH
215377302025-01-02 15:37:4721 days ago1735832267
0x08e4f701...686247df4
0.01 ETH
215376352025-01-02 15:18:4721 days ago1735831127
0x08e4f701...686247df4
0.0001 ETH
96652172020-03-13 20:22:461777 days ago1584130966
0x08e4f701...686247df4
0.01 ETH
95080842020-02-18 16:06:001801 days ago1582041960
0x08e4f701...686247df4
0.3763416 ETH
94699762020-02-12 19:06:071807 days ago1581534367
0x08e4f701...686247df4
0.007 ETH
94699342020-02-12 18:58:191807 days ago1581533899
0x08e4f701...686247df4
0.37624814 ETH
94601192020-02-11 6:44:391808 days ago1581403479
0x08e4f701...686247df4
0.00454545 ETH
94601192020-02-11 6:44:391808 days ago1581403479
0x08e4f701...686247df4
0.00045454 ETH
86891172019-10-06 14:46:041936 days ago1570373164
0x08e4f701...686247df4
0.4 ETH
86104522019-09-24 7:31:481948 days ago1569310308
0x08e4f701...686247df4
0.00255378 ETH
86104522019-09-24 7:31:481948 days ago1569310308
0x08e4f701...686247df4
0.00044622 ETH
83173102019-08-09 15:56:551994 days ago1565366215
0x08e4f701...686247df4
0.09329907 ETH
82496502019-07-30 3:53:552004 days ago1564458835
0x08e4f701...686247df4
0.09329907 ETH
82496492019-07-30 3:53:502004 days ago1564458830
0x08e4f701...686247df4
0.00009 ETH
82496492019-07-30 3:53:502004 days ago1564458830
0x08e4f701...686247df4
0.00001 ETH
82496342019-07-30 3:51:302004 days ago1564458690
0x08e4f701...686247df4
0.0001 ETH
82448022019-07-29 9:39:232005 days ago1564393163
0x08e4f701...686247df4
0.09329907 ETH
View All Internal Transactions
Loading...
Loading

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
/**
 *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

Contract ABI

[{"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"}]

6060604052341561000f57600080fd5b610d9e8061001e6000396000f3006060604052600436106100d95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662f31e7681146100de5780632f8f0c921461010857806341b6fcf71461012a5780634722361c1461010857806360546602146101555780636683f9ae1461016b5780637964ea87146101815780637a7ebd7b146101df5780637c35be7a14610235578063987757dd1461024b578063ad37908914610261578063b214faa514610277578063ba6cc6c314610282578063e62eea47146102a2578063ec8be5b9146102b8575b600080fd5b34156100e957600080fd5b6100f4600435610320565b604051901515815260200160405180910390f35b341561011357600080fd5b6100f4600435600160a060020a0360243516610332565b341561013557600080fd5b6101436004356024356103c7565b60405190815260200160405180910390f35b341561016057600080fd5b6100f460043561040c565b341561017657600080fd5b6100f4600435610486565b341561018c57600080fd5b6101dd600480359060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104fa95505050505050565b005b34156101ea57600080fd5b6101f56004356106c3565b604051600160a060020a03958616815293909416602084015260408084019290925263ffffffff166060830152608082019290925260a001905180910390f35b341561024057600080fd5b6100f4600435610705565b341561025657600080fd5b6101dd600435610726565b341561026c57600080fd5b6100f460043561080c565b6101dd6004356108a7565b6101dd600435600160a060020a036024351663ffffffff6044351661090f565b34156102ad57600080fd5b6101dd600435610a46565b34156102c357600080fd5b6100f460048035906024803591600160a060020a03604435169160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ab295505050505050565b600061032b8261040c565b1592915050565b600061033c610d32565b6000848152602081905260408082209060a0905190810160409081528254600160a060020a039081168352600184015481166020840152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152925084168251600160a060020a03161490506103b585610705565b80156103be5750805b95945050505050565b6000308383604051600160a060020a03939093166c01000000000000000000000000028352601483019190915260348201526054016040518091039020905092915050565b6000610416610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082015290508051600160a060020a0316159392505050565b6000610490610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082019081529091505115159392505050565b610502610d32565b61050e84843385610ab2565b151561051957600080fd5b600084815260208190526040908190209060a0905190810160409081528254600160a060020a03908116835260018401541660208301526002830154908201908152600383015463ffffffff166060830152600490920154608082015291505183106105bf578060200151600160a060020a03166108fc82604001519081150290604051600060405180830381858888f1935050505015156105ba57600080fd5b61063c565b8060200151600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156105f457600080fd5b8051600160a060020a03166108fc6106178584604001519063ffffffff610c6c16565b9081150290604051600060405180830381858888f19350505050151561063c57600080fd5b600084815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915584907f3de43c9e481138453c3cfea2781e18a609abb6448556669b257edc7de710fd64905160405180910390a250505050565b60006020819052908152604090208054600182015460028301546003840154600490940154600160a060020a03938416949290931692909163ffffffff169085565b600061071082610320565b8015610720575061032b82610486565b92915050565b60006107318261080c565b151561073c57600080fd5b5060008181526020819052604090819020805460028201549192600160a060020a039091169180156108fc029151600060405180830381858888f19350505050151561078757600080fd5b600082815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915582907f74fb75c3de2cff5e8a78cf9b1f49a5bea60126b42ed45bb4b2b25b7da03e4d1b905160405180910390a25050565b6000610816610d32565b6000838152602081905260408082209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff1660608201526004909101546080820152915061087b84610486565b801561088b575081608001514310155b905061089684610486565b801561089f5750805b949350505050565b6108b18133610332565b15156108bc57600080fd5b6000818152602081905260409081902060020180543490810190915582917f6f850cda6d6b2f5cca622bc2d4739e4ed917c12d29f9a92b9e6c127abe39842491905190815260200160405180910390a250565b6109188361040c565b151561092357600080fd5b60a06040519081016040908152600160a060020a0333811683528416602080840191909152348284015263ffffffff8416606084015260006080840181905286815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015160038201805463ffffffff191663ffffffff92909216919091179055608082015160049091015550600160a060020a03808316903316847f2f7cfc632227c054da7caaf75268353dba6206f53e9f7a547a193e66ab8c94dc3460405190815260200160405180910390a4505050565b6000610a528233610332565b1515610a5d57600080fd5b5060008181526020819052604090819020600381015463ffffffff16430160048201559082907fd6461a3a92fd600fe23f236b2e25c2fd0c197a66b2f990989f0b210d578f4617905160405180910390a25050565b6000610abc610d32565b600086815260208190526040808220829182919060a0905190810160409081528254600160a060020a03908116835260018401541660208301908152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152945051600160a060020a031687600160a060020a0316149250610b428989610c7e565b915073be7c52c9f88af54f3b29cd472c71a03c7863d1eb6319045a2583886000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815260048101838152604060248301908152909160440183818151815260200191508051906020019080838360005b83811015610bd9578082015183820152602001610bc1565b50505050905090810190601f168015610c065780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1515610c2357600080fd5b6102c65a03f41515610c3457600080fd5b5050506040518051600160a060020a031690508451600160a060020a0316149050828015610c5f5750805b9998505050505050505050565b600082821115610c7857fe5b50900390565b6000610c88610d60565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152905080610cc985856103c7565b6040518083805190602001908083835b60208310610cf85780518252601f199092019160209182019101610cd9565b6001836020036101000a03801982511681845116179092525050509190910192835250506020019050604051809103902091505092915050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b602060405190810160405260008152905600a165627a7a7230582054107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c460029

Deployed Bytecode

0x6060604052600436106100d95763ffffffff7c0100000000000000000000000000000000000000000000000000000000600035041662f31e7681146100de5780632f8f0c921461010857806341b6fcf71461012a5780634722361c1461010857806360546602146101555780636683f9ae1461016b5780637964ea87146101815780637a7ebd7b146101df5780637c35be7a14610235578063987757dd1461024b578063ad37908914610261578063b214faa514610277578063ba6cc6c314610282578063e62eea47146102a2578063ec8be5b9146102b8575b600080fd5b34156100e957600080fd5b6100f4600435610320565b604051901515815260200160405180910390f35b341561011357600080fd5b6100f4600435600160a060020a0360243516610332565b341561013557600080fd5b6101436004356024356103c7565b60405190815260200160405180910390f35b341561016057600080fd5b6100f460043561040c565b341561017657600080fd5b6100f4600435610486565b341561018c57600080fd5b6101dd600480359060248035919060649060443590810190830135806020601f820181900481020160405190810160405281815292919060208401838380828437509496506104fa95505050505050565b005b34156101ea57600080fd5b6101f56004356106c3565b604051600160a060020a03958616815293909416602084015260408084019290925263ffffffff166060830152608082019290925260a001905180910390f35b341561024057600080fd5b6100f4600435610705565b341561025657600080fd5b6101dd600435610726565b341561026c57600080fd5b6100f460043561080c565b6101dd6004356108a7565b6101dd600435600160a060020a036024351663ffffffff6044351661090f565b34156102ad57600080fd5b6101dd600435610a46565b34156102c357600080fd5b6100f460048035906024803591600160a060020a03604435169160849060643590810190830135806020601f82018190048102016040519081016040528181529291906020840183838082843750949650610ab295505050505050565b600061032b8261040c565b1592915050565b600061033c610d32565b6000848152602081905260408082209060a0905190810160409081528254600160a060020a039081168352600184015481166020840152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152925084168251600160a060020a03161490506103b585610705565b80156103be5750805b95945050505050565b6000308383604051600160a060020a03939093166c01000000000000000000000000028352601483019190915260348201526054016040518091039020905092915050565b6000610416610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082015290508051600160a060020a0316159392505050565b6000610490610d32565b600083815260208190526040908190209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff166060820152600490910154608082019081529091505115159392505050565b610502610d32565b61050e84843385610ab2565b151561051957600080fd5b600084815260208190526040908190209060a0905190810160409081528254600160a060020a03908116835260018401541660208301526002830154908201908152600383015463ffffffff166060830152600490920154608082015291505183106105bf578060200151600160a060020a03166108fc82604001519081150290604051600060405180830381858888f1935050505015156105ba57600080fd5b61063c565b8060200151600160a060020a031683156108fc0284604051600060405180830381858888f1935050505015156105f457600080fd5b8051600160a060020a03166108fc6106178584604001519063ffffffff610c6c16565b9081150290604051600060405180830381858888f19350505050151561063c57600080fd5b600084815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915584907f3de43c9e481138453c3cfea2781e18a609abb6448556669b257edc7de710fd64905160405180910390a250505050565b60006020819052908152604090208054600182015460028301546003840154600490940154600160a060020a03938416949290931692909163ffffffff169085565b600061071082610320565b8015610720575061032b82610486565b92915050565b60006107318261080c565b151561073c57600080fd5b5060008181526020819052604090819020805460028201549192600160a060020a039091169180156108fc029151600060405180830381858888f19350505050151561078757600080fd5b600082815260208190526040808220805473ffffffffffffffffffffffffffffffffffffffff19908116825560018201805490911690556002810183905560038101805463ffffffff191690556004019190915582907f74fb75c3de2cff5e8a78cf9b1f49a5bea60126b42ed45bb4b2b25b7da03e4d1b905160405180910390a25050565b6000610816610d32565b6000838152602081905260408082209060a0905190810160409081528254600160a060020a0390811683526001840154166020830152600283015490820152600382015463ffffffff1660608201526004909101546080820152915061087b84610486565b801561088b575081608001514310155b905061089684610486565b801561089f5750805b949350505050565b6108b18133610332565b15156108bc57600080fd5b6000818152602081905260409081902060020180543490810190915582917f6f850cda6d6b2f5cca622bc2d4739e4ed917c12d29f9a92b9e6c127abe39842491905190815260200160405180910390a250565b6109188361040c565b151561092357600080fd5b60a06040519081016040908152600160a060020a0333811683528416602080840191909152348284015263ffffffff8416606084015260006080840181905286815290819052208151815473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0391909116178155602082015160018201805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039290921691909117905560408201518160020155606082015160038201805463ffffffff191663ffffffff92909216919091179055608082015160049091015550600160a060020a03808316903316847f2f7cfc632227c054da7caaf75268353dba6206f53e9f7a547a193e66ab8c94dc3460405190815260200160405180910390a4505050565b6000610a528233610332565b1515610a5d57600080fd5b5060008181526020819052604090819020600381015463ffffffff16430160048201559082907fd6461a3a92fd600fe23f236b2e25c2fd0c197a66b2f990989f0b210d578f4617905160405180910390a25050565b6000610abc610d32565b600086815260208190526040808220829182919060a0905190810160409081528254600160a060020a03908116835260018401541660208301908152600284015491830191909152600383015463ffffffff1660608301526004909201546080820152945051600160a060020a031687600160a060020a0316149250610b428989610c7e565b915073be7c52c9f88af54f3b29cd472c71a03c7863d1eb6319045a2583886000604051602001526040517c010000000000000000000000000000000000000000000000000000000063ffffffff851602815260048101838152604060248301908152909160440183818151815260200191508051906020019080838360005b83811015610bd9578082015183820152602001610bc1565b50505050905090810190601f168015610c065780820380516001836020036101000a031916815260200191505b50935050505060206040518083038186803b1515610c2357600080fd5b6102c65a03f41515610c3457600080fd5b5050506040518051600160a060020a031690508451600160a060020a0316149050828015610c5f5750805b9998505050505050505050565b600082821115610c7857fe5b50900390565b6000610c88610d60565b60408051908101604052601c81527f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152905080610cc985856103c7565b6040518083805190602001908083835b60208310610cf85780518252601f199092019160209182019101610cd9565b6001836020036101000a03801982511681845116179092525050509190910192835250506020019050604051809103902091505092915050565b60a0604051908101604090815260008083526020830181905290820181905260608201819052608082015290565b602060405190810160405260008152905600a165627a7a7230582054107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c460029

Libraries Used


Swarm Source

bzzr://54107390e3abdedc00b3ae8b66039c130a5995a3ce03c1875e71bb0084435c46

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.