ETH Price: $3,583.41 (+0.63%)
Gas: 10 Gwei

Contract

0x8fd3121013A07C57f0D69646E86E7a4880b467b7
 
Transaction Hash
Method
Block
From
To
Value
Fill187055952023-12-03 11:34:11199 days ago1701603251IN
AirSwap: Legacy
0 ETH0.0008071628.30275741
Fill164929332023-01-26 18:58:35510 days ago1674759515IN
AirSwap: Legacy
0 ETH0.0006677523.38492159
Fill164929222023-01-26 18:56:23510 days ago1674759383IN
AirSwap: Legacy
0 ETH0.0006861123.83740091
Fill159898092022-11-17 12:41:47580 days ago1668688907IN
AirSwap: Legacy
0 ETH0.0003462112.1193309
Fill110262742020-10-10 7:07:531348 days ago1602313673IN
AirSwap: Legacy
0 ETH0.0021319339
Fill110061182020-10-07 3:06:151352 days ago1602039975IN
AirSwap: Legacy
0 ETH0.0044928130
Fill110057092020-10-07 1:33:181352 days ago1602034398IN
AirSwap: Legacy
0 ETH0.003110490
Fill110051532020-10-06 23:24:081352 days ago1602026648IN
AirSwap: Legacy
0 ETH0.0020234659
Fill107148282020-08-23 6:03:421397 days ago1598162622IN
AirSwap: Legacy
0.02597976 ETH0.0027222476
Fill97881122020-04-01 20:16:231540 days ago1585772183IN
AirSwap: Legacy
0.11309043 ETH0.0003938711
Fill94113732020-02-03 19:02:441598 days ago1580756564IN
AirSwap: Legacy
0 ETH0.000785628
Fill93982712020-02-01 18:55:551600 days ago1580583355IN
AirSwap: Legacy
0.97126893 ETH0.000718418
Fill93606882020-01-27 0:19:231606 days ago1580084363IN
AirSwap: Legacy
0 ETH0.000679296
Fill93329602020-01-22 18:14:041610 days ago1579716844IN
AirSwap: Legacy
0.31094958 ETH0.000695628
Fill93324682020-01-22 16:22:231610 days ago1579710143IN
AirSwap: Legacy
0 ETH0.000905818
Fill93239982020-01-21 9:18:501611 days ago1579598330IN
AirSwap: Legacy
0 ETH0.00118573
Fill93239882020-01-21 9:17:131611 days ago1579598233IN
AirSwap: Legacy
0 ETH0.0039523510
Fill93238792020-01-21 8:50:141611 days ago1579596614IN
AirSwap: Legacy
0 ETH0.000790462
Fill93235932020-01-21 7:51:171611 days ago1579593077IN
AirSwap: Legacy
0 ETH0.000711421.8
Fill93235862020-01-21 7:49:551611 days ago1579592995IN
AirSwap: Legacy
0 ETH0.001976175
Fill93235692020-01-21 7:46:341611 days ago1579592794IN
AirSwap: Legacy
0 ETH0.000146975
Fill93235612020-01-21 7:43:561611 days ago1579592636IN
AirSwap: Legacy
0 ETH0.001976175
Fill93235502020-01-21 7:40:421611 days ago1579592442IN
AirSwap: Legacy
0 ETH0.001976175
Fill93235482020-01-21 7:40:131611 days ago1579592413IN
AirSwap: Legacy
0 ETH0.001976175
Fill93222172020-01-21 2:39:411612 days ago1579574381IN
AirSwap: Legacy
0 ETH0.000905728
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
107148282020-08-23 6:03:421397 days ago1598162622
AirSwap: Legacy
0.02597976 ETH
97881122020-04-01 20:16:231540 days ago1585772183
AirSwap: Legacy
0.11309043 ETH
93982712020-02-01 18:55:551600 days ago1580583355
AirSwap: Legacy
0.97126893 ETH
93329602020-01-22 18:14:041610 days ago1579716844
AirSwap: Legacy
0.31094958 ETH
93000172020-01-17 17:08:121615 days ago1579280892
AirSwap: Legacy
5.73792996 ETH
92984672020-01-17 11:28:081615 days ago1579260488
AirSwap: Legacy
0.00589991 ETH
92925972020-01-16 13:56:371616 days ago1579182997
AirSwap: Legacy
0.00015412 ETH
92718532020-01-13 9:40:191619 days ago1578908419
AirSwap: Legacy
1.40448971 ETH
92673302020-01-12 16:56:461620 days ago1578848206
AirSwap: Legacy
0.03851985 ETH
92672642020-01-12 16:41:291620 days ago1578847289
AirSwap: Legacy
0.07475337 ETH
92577742020-01-11 5:43:351622 days ago1578721415
AirSwap: Legacy
1.41844596 ETH
92562092020-01-11 0:01:471622 days ago1578700907
AirSwap: Legacy
14.39387841 ETH
92521602020-01-10 9:14:421622 days ago1578647682
AirSwap: Legacy
0.01312748 ETH
92305662020-01-07 1:43:021626 days ago1578361382
AirSwap: Legacy
0.21008466 ETH
92286162020-01-06 18:43:131626 days ago1578336193
AirSwap: Legacy
5 ETH
92285702020-01-06 18:31:381626 days ago1578335498
AirSwap: Legacy
0.77830982 ETH
92276382020-01-06 15:04:301626 days ago1578323070
AirSwap: Legacy
0.0004764 ETH
92220672020-01-05 18:37:491627 days ago1578249469
AirSwap: Legacy
0.54295702 ETH
92118752020-01-04 5:10:301629 days ago1578114630
AirSwap: Legacy
0.20644492 ETH
92040602020-01-03 0:28:441630 days ago1578011324
AirSwap: Legacy
0.0109608 ETH
92016382020-01-02 15:22:481630 days ago1577978568
AirSwap: Legacy
0.00318137 ETH
91935662020-01-01 1:26:551632 days ago1577842015
AirSwap: Legacy
3.6 ETH
91879952019-12-30 22:45:341633 days ago1577745934
AirSwap: Legacy
5 ETH
91623552019-12-25 20:13:291638 days ago1577304809
AirSwap: Legacy
0.23164529 ETH
91367842019-12-20 18:07:451643 days ago1576865265
AirSwap: Legacy
0.00385033 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AirSwapExchange

Compiler Version
v0.4.17+commit.bdeb9e52

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
/**
 *Submitted for verification at Etherscan.io on 2017-10-10
*/

pragma solidity ^0.4.11;

// See the Github at https://github.com/airswap/contracts

// Abstract contract for the full ERC 20 Token standard
// https://github.com/ethereum/EIPs/issues/20

contract Token {
    /* This is a slight change to the ERC20 base standard.
    function totalSupply() constant returns (uint256 supply);
    is replaced with:
    uint256 public totalSupply;
    This automatically creates a getter function for the totalSupply.
    This is moved to the base contract since public getter functions are not
    currently recognised as an implementation of the matching abstract
    function by the compiler.
    */
    /// total amount of tokens
    uint256 public totalSupply;

    /// @param _owner The address from which the balance will be retrieved
    /// @return The balance
    function balanceOf(address _owner) constant returns (uint256 balance);

    /// @notice send `_value` token to `_to` from `msg.sender`
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transfer(address _to, uint256 _value) returns (bool success);

    /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
    /// @param _from The address of the sender
    /// @param _to The address of the recipient
    /// @param _value The amount of token to be transferred
    /// @return Whether the transfer was successful or not
    function transferFrom(address _from, address _to, uint256 _value) returns (bool success);

    /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @param _value The amount of tokens to be approved for transfer
    /// @return Whether the approval was successful or not
    function approve(address _spender, uint256 _value) returns (bool success);

    /// @param _owner The address of the account owning tokens
    /// @param _spender The address of the account able to transfer the tokens
    /// @return Amount of remaining tokens allowed to spent
    function allowance(address _owner, address _spender) constant returns (uint256 remaining);

    event Transfer(address indexed _from, address indexed _to, uint256 _value);
    event Approval(address indexed _owner, address indexed _spender, uint256 _value);
}


/* Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 */

contract ERC20 is Token {

    function transfer(address _to, uint256 _value) returns (bool success) {
        require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]);
        balances[msg.sender] -= _value;
        balances[_to] += _value;
        Transfer(msg.sender, _to, _value);
        return true;
    }

    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {
        require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]);
        balances[_to] += _value;
        balances[_from] -= _value;
        allowed[_from][msg.sender] -= _value;
        Transfer(_from, _to, _value);
        return true;
    }

    function balanceOf(address _owner) constant returns (uint256 balance) {
        return balances[_owner];
    }

    function approve(address _spender, uint256 _value) returns (bool success) {
        allowed[msg.sender][_spender] = _value;
        Approval(msg.sender, _spender, _value);
        return true;
    }

    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {
      return allowed[_owner][_spender];
    }

    mapping (address => uint256) public balances; // *added public
    mapping (address => mapping (address => uint256)) public allowed; // *added public
}

/** @title AirSwap exchange contract.
  * Assumes makers and takers have approved this contract to access their balances.
  */
contract AirSwapExchange {

    // Mapping of order hash to bool (true = already filled).
    mapping (bytes32 => bool) public fills;

    // Events that are emitted in different scenarios.
    event Filled(address indexed makerAddress, uint makerAmount, address indexed makerToken, address takerAddress, uint takerAmount, address indexed takerToken, uint256 expiration, uint256 nonce);
    event Canceled(address indexed makerAddress, uint makerAmount, address indexed makerToken, address takerAddress, uint takerAmount, address indexed takerToken, uint256 expiration, uint256 nonce);

    /** Event thrown when a trade fails
      * Error codes:
      * 1 -> 'The makeAddress and takerAddress must be different',
      * 2 -> 'The order has expired',
      * 3 -> 'This order has already been filled',
      * 4 -> 'The ether sent with this transaction does not match takerAmount',
      * 5 -> 'No ether is required for a trade between tokens',
      * 6 -> 'The sender of this transaction must match the takerAddress',
      * 7 -> 'Order has already been cancelled or filled'
      */
    event Failed(uint code, address indexed makerAddress, uint makerAmount, address indexed makerToken, address takerAddress, uint takerAmount, address indexed takerToken, uint256 expiration, uint256 nonce);

    /** Fills an order by transferring tokens between (maker or escrow) and taker.
      * maker is given tokenA to taker,
      */
    function fill(address makerAddress, uint makerAmount, address makerToken,
                  address takerAddress, uint takerAmount, address takerToken,
                  uint256 expiration, uint256 nonce, uint8 v, bytes32 r, bytes32 s) payable {

        if (makerAddress == takerAddress) {
            msg.sender.transfer(msg.value);
            Failed(1,
            makerAddress, makerAmount, makerToken,
            takerAddress, takerAmount, takerToken,
            expiration, nonce);
            return;
        }

        // Check if this order has expired
        if (expiration < now) {
            msg.sender.transfer(msg.value);
            Failed(2,
                makerAddress, makerAmount, makerToken,
                takerAddress, takerAmount, takerToken,
                expiration, nonce);
            return;
        }

        // Validate the message by signature.
        bytes32 hash = validate(makerAddress, makerAmount, makerToken,
            takerAddress, takerAmount, takerToken,
            expiration, nonce, v, r, s);

        // Check if this order has already been filled
        if (fills[hash]) {
            msg.sender.transfer(msg.value);
            Failed(3,
                makerAddress, makerAmount, makerToken,
                takerAddress, takerAmount, takerToken,
                expiration, nonce);
            return;
        }

        // Check to see if this an order for ether.
        if (takerToken == address(0x0)) {

            // Check to make sure the message value is the order amount.
            if (msg.value == takerAmount) {

                // Mark order as filled to prevent reentrancy.
                fills[hash] = true;

                // Perform the trade between makerAddress and takerAddress.
                // The transfer will throw if there's a problem.
                assert(transfer(makerAddress, takerAddress, makerAmount, makerToken));

                // Transfer the ether received from sender to makerAddress.
                makerAddress.transfer(msg.value);

                // Log an event to indicate completion.
                Filled(makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);

            } else {
                msg.sender.transfer(msg.value);
                Failed(4,
                    makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);
            }

        } else {
            // This is an order trading two tokens
            // Check that no ether has been sent accidentally
            if (msg.value != 0) {
                msg.sender.transfer(msg.value);
                Failed(5,
                    makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);
                return;
            }

            if (takerAddress == msg.sender) {

                // Mark order as filled to prevent reentrancy.
                fills[hash] = true;

                // Perform the trade between makerAddress and takerAddress.
                // The transfer will throw if there's a problem.
                // Assert should never fail
                assert(trade(makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken));

                // Log an event to indicate completion.
                Filled(
                    makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);

            } else {
                Failed(6,
                    makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);
            }
        }
    }

    /** Cancels an order by refunding escrow and adding it to the fills mapping.
      * Will log an event if
      * - order has been cancelled or
      * - order has already been filled
      * and will do nothing if the maker of the order in question is not the
      * msg.sender
      */
    function cancel(address makerAddress, uint makerAmount, address makerToken,
                    address takerAddress, uint takerAmount, address takerToken,
                    uint256 expiration, uint256 nonce, uint8 v, bytes32 r, bytes32 s) {

        // Validate the message by signature.
        bytes32 hash = validate(makerAddress, makerAmount, makerToken,
            takerAddress, takerAmount, takerToken,
            expiration, nonce, v, r, s);

        // Only the maker can cancel an order
        if (msg.sender == makerAddress) {

            // Check that order has not already been filled/cancelled
            if (fills[hash] == false) {

                // Cancel the order by considering it filled.
                fills[hash] = true;

                // Broadcast an event to the blockchain.
                Canceled(makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);

            } else {
                Failed(7,
                    makerAddress, makerAmount, makerToken,
                    takerAddress, takerAmount, takerToken,
                    expiration, nonce);
            }
        }
    }

    /** Atomic trade of tokens between first party and second party.
      * Throws if one of the trades does not go through.
      */
    function trade(address makerAddress, uint makerAmount, address makerToken,
                   address takerAddress, uint takerAmount, address takerToken) private returns (bool) {
        return (transfer(makerAddress, takerAddress, makerAmount, makerToken) &&
        transfer(takerAddress, makerAddress, takerAmount, takerToken));
    }

    /** Transfers tokens from first party to second party.
      * Prior to a transfer being done by the contract, ensure that
      * tokenVal.approve(this, amount, {from : address}) has been called
      * throws if the transferFrom of the token returns false
      * returns true if, the transfer went through
      */
    function transfer(address from, address to, uint amount, address token) private returns (bool) {
        require(ERC20(token).transferFrom(from, to, amount));
        return true;
    }

    /** Validates order arguments for fill() and cancel() functions. */
    function validate(address makerAddress, uint makerAmount, address makerToken,
                      address takerAddress, uint takerAmount, address takerToken,
                      uint256 expiration, uint256 nonce, uint8 v, bytes32 r, bytes32 s) private returns (bytes32) {

        // Hash arguments to identify the order.
        bytes32 hashV = keccak256(makerAddress, makerAmount, makerToken,
            takerAddress, takerAmount, takerToken,
            expiration, nonce);

        bytes memory prefix = "\x19Ethereum Signed Message:\n32";
        bytes32 prefixedHash = sha3(prefix, hashV);

        require(ecrecover(prefixedHash, v, r, s) == makerAddress);

        return hashV;
    }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"makerAddress","type":"address"},{"name":"makerAmount","type":"uint256"},{"name":"makerToken","type":"address"},{"name":"takerAddress","type":"address"},{"name":"takerAmount","type":"uint256"},{"name":"takerToken","type":"address"},{"name":"expiration","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"fill","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"fills","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"makerAddress","type":"address"},{"name":"makerAmount","type":"uint256"},{"name":"makerToken","type":"address"},{"name":"takerAddress","type":"address"},{"name":"takerAmount","type":"uint256"},{"name":"takerToken","type":"address"},{"name":"expiration","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"v","type":"uint8"},{"name":"r","type":"bytes32"},{"name":"s","type":"bytes32"}],"name":"cancel","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"makerAddress","type":"address"},{"indexed":false,"name":"makerAmount","type":"uint256"},{"indexed":true,"name":"makerToken","type":"address"},{"indexed":false,"name":"takerAddress","type":"address"},{"indexed":false,"name":"takerAmount","type":"uint256"},{"indexed":true,"name":"takerToken","type":"address"},{"indexed":false,"name":"expiration","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"}],"name":"Filled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"makerAddress","type":"address"},{"indexed":false,"name":"makerAmount","type":"uint256"},{"indexed":true,"name":"makerToken","type":"address"},{"indexed":false,"name":"takerAddress","type":"address"},{"indexed":false,"name":"takerAmount","type":"uint256"},{"indexed":true,"name":"takerToken","type":"address"},{"indexed":false,"name":"expiration","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"}],"name":"Canceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"code","type":"uint256"},{"indexed":true,"name":"makerAddress","type":"address"},{"indexed":false,"name":"makerAmount","type":"uint256"},{"indexed":true,"name":"makerToken","type":"address"},{"indexed":false,"name":"takerAddress","type":"address"},{"indexed":false,"name":"takerAmount","type":"uint256"},{"indexed":true,"name":"takerToken","type":"address"},{"indexed":false,"name":"expiration","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"}],"name":"Failed","type":"event"}]

6060604052341561000f57600080fd5b6112c98061001e6000396000f30060606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631d4d691d1461005357806320158c441461012857806366a264191461016757600080fd5b610126600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050610247565b005b341561013357600080fd5b61014d600480803560001916906020019091905050610bfd565b604051808215151515815260200191505060405180910390f35b341561017257600080fd5b610245600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050610c1d565b005b60008873ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415610393573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156102bd57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60018f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b428610156104b1573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156103db57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60028f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b6104c48c8c8c8c8c8c8c8c8c8c8c610e7d565b9050600080826000191660001916815260200190815260200160002060009054906101000a900460ff1615610609573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561053357600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60038f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156108b1578734141561079a576001600080836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506106858c8a8d8d611148565b151561068d57fe5b8b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156106cd57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fe59c5e56d85b2124f5e7f82cb5fcc6d28a4a241a9bdd732704ac9d3b6bfc98ab8e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a46108ac565b3373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156107da57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60048f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b610bee565b6000341415156109d1573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156108fb57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60058f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610b1b576001600080836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550610a468c8c8c8c8c8c61125b565b1515610a4e57fe5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fe59c5e56d85b2124f5e7f82cb5fcc6d28a4a241a9bdd732704ac9d3b6bfc98ab8e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a4610bed565b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60068f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b5b5b505050505050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b6000610c328c8c8c8c8c8c8c8c8c8c8c610e7d565b90508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610e6f5760001515600080836000191660001916815260200190815260200160002060009054906101000a900460ff1615151415610d9c576001600080836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8ce0bae8f3488649f2f29762dfc77af336a695060bc787b9c813c6fdd79fdf258e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a4610e6e565b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60078f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b5b505050505050505050505050565b600080610e88611289565b60008e8e8e8e8e8e8e8e604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200198505050505050505050604051809103902092506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250915081836040518083805190602001908083835b6020831015156110355780518252602082019150602081019050602083039250611010565b6001836020036101000a038019825116818451168082178552505050505050905001826000191660001916815260200192505050604051809103902090508e73ffffffffffffffffffffffffffffffffffffffff16600182898989604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561110857600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561113357600080fd5b8293505050509b9a5050505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561122957600080fd5b6102c65a03f1151561123a57600080fd5b50505060405180519050151561124f57600080fd5b60019050949350505050565b600061126987858888611148565b801561127d575061127c84888585611148565b5b90509695505050505050565b6020604051908101604052806000815250905600a165627a7a72305820894fbedb45377cc944ff04fe9af7fca8f5ff2d6ff06934c223d8c8c836bd21a00029

Deployed Bytecode

0x60606040526000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680631d4d691d1461005357806320158c441461012857806366a264191461016757600080fd5b610126600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050610247565b005b341561013357600080fd5b61014d600480803560001916906020019091905050610bfd565b604051808215151515815260200191505060405180910390f35b341561017257600080fd5b610245600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190803590602001909190803560ff169060200190919080356000191690602001909190803560001916906020019091905050610c1d565b005b60008873ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415610393573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156102bd57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60018f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b428610156104b1573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156103db57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60028f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b6104c48c8c8c8c8c8c8c8c8c8c8c610e7d565b9050600080826000191660001916815260200190815260200160002060009054906101000a900460ff1615610609573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050151561053357600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60038f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614156108b1578734141561079a576001600080836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055506106858c8a8d8d611148565b151561068d57fe5b8b73ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156106cd57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fe59c5e56d85b2124f5e7f82cb5fcc6d28a4a241a9bdd732704ac9d3b6bfc98ab8e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a46108ac565b3373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156107da57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60048f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b610bee565b6000341415156109d1573373ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f1935050505015156108fb57600080fd5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60058f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a4610bef565b3373ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610b1b576001600080836000191660001916815260200190815260200160002060006101000a81548160ff021916908315150217905550610a468c8c8c8c8c8c61125b565b1515610a4e57fe5b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167fe59c5e56d85b2124f5e7f82cb5fcc6d28a4a241a9bdd732704ac9d3b6bfc98ab8e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a4610bed565b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60068f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b5b5b505050505050505050505050565b60006020528060005260406000206000915054906101000a900460ff1681565b6000610c328c8c8c8c8c8c8c8c8c8c8c610e7d565b90508b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610e6f5760001515600080836000191660001916815260200190815260200160002060009054906101000a900460ff1615151415610d9c576001600080836000191660001916815260200190815260200160002060006101000a81548160ff0219169083151502179055508673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8ce0bae8f3488649f2f29762dfc77af336a695060bc787b9c813c6fdd79fdf258e8d8d8c8c604051808681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018381526020018281526020019550505050505060405180910390a4610e6e565b8673ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168d73ffffffffffffffffffffffffffffffffffffffff167f8e49dd3f283d9a844668a6f422edaa50c4c22987511ec284cebec288ca54f37a60078f8e8e8d8d604051808781526020018681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001965050505050505060405180910390a45b5b505050505050505050505050565b600080610e88611289565b60008e8e8e8e8e8e8e8e604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018881526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140183815260200182815260200198505050505050505050604051809103902092506040805190810160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250915081836040518083805190602001908083835b6020831015156110355780518252602082019150602081019050602083039250611010565b6001836020036101000a038019825116818451168082178552505050505050905001826000191660001916815260200192505050604051809103902090508e73ffffffffffffffffffffffffffffffffffffffff16600182898989604051600081526020016040526000604051602001526040518085600019166000191681526020018460ff1660ff16815260200183600019166000191681526020018260001916600019168152602001945050505050602060405160208103908084039060008661646e5a03f1151561110857600080fd5b50506020604051035173ffffffffffffffffffffffffffffffffffffffff1614151561113357600080fd5b8293505050509b9a5050505050505050505050565b60008173ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866000604051602001526040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b151561122957600080fd5b6102c65a03f1151561123a57600080fd5b50505060405180519050151561124f57600080fd5b60019050949350505050565b600061126987858888611148565b801561127d575061127c84888585611148565b5b90509695505050505050565b6020604051908101604052806000815250905600a165627a7a72305820894fbedb45377cc944ff04fe9af7fca8f5ff2d6ff06934c223d8c8c836bd21a00029

Swarm Source

bzzr://894fbedb45377cc944ff04fe9af7fca8f5ff2d6ff06934c223d8c8c836bd21a0

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.