ETH Price: $2,922.92 (-6.83%)
Gas: 8.32 Gwei
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Advanced mode:
Parent Transaction Hash Block
From
To
107473962020-08-28 5:52:221619 days ago1598593942  Contract Creation0 ETH
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x6eB6c1A9...5002296AC
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
WalletV3

Compiler Version
v0.4.24+commit.e67f0147

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-12-01
*/

/**
 *Submitted for verification at Etherscan.io on 2019-08-06
*/

// File: contracts/utils/LoggingErrors.sol

pragma solidity ^0.4.11;

/**
 * @title Log Various Error Types
 * @author Adam Lemmon <[email protected]>
 * @dev Inherit this contract and your may now log errors easily
 * To support various error types, params, etc.
 */
contract LoggingErrors {
  /**
  * Events
  */
  event LogErrorString(string errorString);

  /**
  * Error cases
  */

  /**
   * @dev Default error to simply log the error message and return
   * @param _errorMessage The error message to log
   * @return ALWAYS false
   */
  function error(string _errorMessage) internal returns(bool) {
    emit LogErrorString(_errorMessage);
    return false;
  }
}

// File: contracts/wallet/WalletConnector.sol

pragma solidity ^0.4.15;


/**
 * @title Wallet Connector
 * @dev Connect the wallet contract to the correct Wallet Logic version
 */
contract WalletConnector is LoggingErrors {
  /**
   * Storage
   */
  address public owner_;
  address public latestLogic_;
  uint256 public latestVersion_;
  mapping(uint256 => address) public logicVersions_;
  uint256 public birthBlock_;

  /**
   * Events
   */
  event LogLogicVersionAdded(uint256 version);
  event LogLogicVersionRemoved(uint256 version);

  /**
   * @dev Constructor to set the latest logic address
   * @param _latestVersion Latest version of the wallet logic
   * @param _latestLogic Latest address of the wallet logic contract
   */
  function WalletConnector (
    uint256 _latestVersion,
    address _latestLogic
  ) public {
    owner_ = msg.sender;
    latestLogic_ = _latestLogic;
    latestVersion_ = _latestVersion;
    logicVersions_[_latestVersion] = _latestLogic;
    birthBlock_ = block.number;
  }

  /**
   * Add a new version of the logic contract
   * @param _version The version to be associated with the new contract.
   * @param _logic New logic contract.
   * @return Success of the transaction.
   */
  function addLogicVersion (
    uint256 _version,
    address _logic
  ) external
    returns(bool)
  {
    if (msg.sender != owner_)
      return error('msg.sender != owner, WalletConnector.addLogicVersion()');

    if (logicVersions_[_version] != 0)
      return error('Version already exists, WalletConnector.addLogicVersion()');

    // Update latest if this is the latest version
    if (_version > latestVersion_) {
      latestLogic_ = _logic;
      latestVersion_ = _version;
    }

    logicVersions_[_version] = _logic;
    LogLogicVersionAdded(_version);

    return true;
  }

  /**
   * @dev Remove a version. Cannot remove the latest version.
   * @param  _version The version to remove.
   */
  function removeLogicVersion(uint256 _version) external {
    require(msg.sender == owner_);
    require(_version != latestVersion_);
    delete logicVersions_[_version];
    LogLogicVersionRemoved(_version);
  }

  /**
   * Constants
   */

  /**
   * Called from user wallets in order to upgrade their logic.
   * @param _version The version to upgrade to. NOTE pass in 0 to upgrade to latest.
   * @return The address of the logic contract to upgrade to.
   */
  function getLogic(uint256 _version)
    external
    constant
    returns(address)
  {
    if (_version == 0)
      return latestLogic_;
    else
      return logicVersions_[_version];
  }
}

// File: contracts/wallet/WalletBuilderInterface.sol

pragma solidity ^0.4.15;



/**
 * @title Wallet to hold and trade ERC20 tokens and ether
 */
interface WalletBuilderInterface {

  /**
   * @dev build a new trading wallet and returns its address
   * @param _owner user EOA of the created trading wallet
   * @param _exchange exchange address
   */
  function buildWallet(address _owner, address _exchange) external returns(address);
}

// File: contracts/token/ERC20Interface.sol

pragma solidity ^0.4.11;

interface Token {
  /// @return total amount of tokens
  function totalSupply() external constant returns (uint256 supply);

  /// @param _owner The address from which the balance will be retrieved
  /// @return The balance
  function balanceOf(address _owner) external 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) external 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) external returns (bool success);

  /// @notice `msg.sender` approves `_addr` to spend `_value` tokens
  /// @param _spender The address of the account able to transfer the tokens
  /// @param _value The amount of wei to be approved for transfer
  /// @return Whether the approval was successful or not
  function approve(address _spender, uint256 _value) external 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) external constant returns (uint256 remaining);

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

  function decimals() external constant returns(uint);
  function name() external constant returns(string);
}

// File: contracts/wallet/WalletV3.sol

pragma solidity ^0.4.15;




/**
 * @title Wallet to hold and trade ERC20 tokens and ether
 * @dev User wallet to interact with the exchange.
 * all tokens and ether held in this wallet, 1 to 1 mapping to user EOAs.
 */
contract WalletV3 is LoggingErrors {
  /**
   * Storage
   */
  // Vars included in wallet logic "lib", the order must match between Wallet and Logic
  address public owner_;
  address public exchange_;
  mapping(address => uint256) public tokenBalances_;

  address public logic_; // storage location 0x3 loaded for delegatecalls so this var must remain at index 3
  uint256 public birthBlock_;

  WalletConnector private connector_;

  /**
   * Events
   */
  event LogDeposit(address token, uint256 amount, uint256 balance);
  event LogWithdrawal(address token, uint256 amount, uint256 balance);

  /**
   * @dev Contract constructor. Set user as owner and connector address.
   * @param _owner The address of the user's EOA, wallets created from the exchange
   * so must past in the owner address, msg.sender == exchange.
   * @param _connector The wallet connector to be used to retrieve the wallet logic
   */
  constructor(address _owner, address _connector, address _exchange) public {
    owner_ = _owner;
    connector_ = WalletConnector(_connector);
    exchange_ = _exchange;
    logic_ = connector_.latestLogic_();
    birthBlock_ = block.number;
  }

  function () external payable {}

  /**
  * External
  */

  /**
   * @dev Deposit ether into this wallet, default to address 0 for consistent token lookup.
   */
  function depositEther()
    external
    payable
  {
    require(
      logic_.delegatecall(abi.encodeWithSignature('deposit(address,uint256)', 0, msg.value)),
      "depositEther() failed"
    );
  }

  /**
   * @dev Deposit any ERC20 token into this wallet.
   * @param _token The address of the existing token contract.
   * @param _amount The amount of tokens to deposit.
   * @return Bool if the deposit was successful.
   */
  function depositERC20Token (
    address _token,
    uint256 _amount
  ) external
    returns(bool)
  {
    // ether
    if (_token == 0)
      return error('Cannot deposit ether via depositERC20, Wallet.depositERC20Token()');

    require(
      logic_.delegatecall(abi.encodeWithSignature('deposit(address,uint256)', _token, _amount)),
      "depositERC20Token() failed"
    );
    return true;
  }

  /**
   * @dev The result of an order, update the balance of this wallet.
   * param _token The address of the token balance to update.
   * param _amount The amount to update the balance by.
   * param _subtractionFlag If true then subtract the token amount else add.
   * @return Bool if the update was successful.
   */
  function updateBalance (
    address /*_token*/,
    uint256 /*_amount*/,
    bool /*_subtractionFlag*/
  ) external
    returns(bool)
  {
    assembly {
      calldatacopy(0x40, 0, calldatasize)
      delegatecall(gas, sload(0x3), 0x40, calldatasize, 0, 32)
      return(0, 32)
      pop
    }
  }

  /**
   * User may update to the latest version of the exchange contract.
   * Note that multiple versions are NOT supported at this time and therefore if a
   * user does not wish to update they will no longer be able to use the exchange.
   * @param _exchange The new exchange.
   * @return Success of this transaction.
   */
  function updateExchange(address _exchange)
    external
    returns(bool)
  {
    if (msg.sender != owner_)
      return error('msg.sender != owner_, Wallet.updateExchange()');

    // If subsequent messages are not sent from this address all orders will fail
    exchange_ = _exchange;

    return true;
  }

  /**
   * User may update to a new or older version of the logic contract.
   * @param _version The versin to update to.
   * @return Success of this transaction.
   */
  function updateLogic(uint256 _version)
    external
    returns(bool)
  {
    if (msg.sender != owner_)
      return error('msg.sender != owner_, Wallet.updateLogic()');

    address newVersion = connector_.getLogic(_version);

    // Invalid version as defined by connector
    if (newVersion == 0)
      return error('Invalid version, Wallet.updateLogic()');

    logic_ = newVersion;
    return true;
  }

  /**
   * @dev Verify an order that the Exchange has received involving this wallet.
   * Internal checks and then authorize the exchange to move the tokens.
   * If sending ether will transfer to the exchange to broker the trade.
   * param _token The address of the token contract being sold.
   * param _amount The amount of tokens the order is for.
   * param _fee The fee for the current trade.
   * param _feeToken The token of which the fee is to be paid in.
   * @return If the order was verified or not.
   */
  function verifyOrder (
    address /*_token*/,
    uint256 /*_amount*/,
    uint256 /*_fee*/,
    address /*_feeToken*/
  ) external
    returns(bool)
  {
    assembly {
      calldatacopy(0x40, 0, calldatasize)
      delegatecall(gas, sload(0x3), 0x40, calldatasize, 0, 32)
      return(0, 32)
      pop
    }
  }

  /**
   * @dev Withdraw any token, including ether from this wallet to an EOA.
   * param _token The address of the token to withdraw.
   * param _amount The amount to withdraw.
   * @return Success of the withdrawal.
   */
  function withdraw(address /*_token*/, uint256 /*_amount*/)
    external
    returns(bool)
  {
    if(msg.sender != owner_)
      return error('msg.sender != owner, Wallet.withdraw()');

    assembly {
      calldatacopy(0x40, 0, calldatasize)
      delegatecall(gas, sload(0x3), 0x40, calldatasize, 0, 32)
      return(0, 32)
      pop
    }
  }

  /**
   * Constants
   */

  /**
   * @dev Get the balance for a specific token.
   * @param _token The address of the token contract to retrieve the balance of.
   * @return The current balance within this contract.
   */
  function balanceOf(address _token)
    public
    view
    returns(uint)
  {
    if (_token == address(0)) {
      return address(this).balance;
    } else {
      return Token(_token).balanceOf(this);
    }
  }

  function walletVersion() external pure returns(uint){
    return 3;
  }
}

// File: contracts/wallet/WalletV3Builder.sol

pragma solidity ^0.4.15;



/**
 * @title Wallet to hold and trade ERC20 tokens and ether
 * @dev User wallet to interact with the exchange.
 * all tokens and ether held in this wallet, 1 to 1 mapping to user EOAs.
 */
contract WalletV3Builder is WalletBuilderInterface {

  address public connector;

  /**
   * @dev Contract constructor. Set user as owner and connector address.
   * @param _connector The wallet connector to be used to retrieve the wallet logic
   */
  constructor (address _connector) public {
    connector = _connector;
  }

  /**
   * @dev build a new trading wallet and returns its address
   * @param _owner user EOA of the created trading wallet
   * @param _exchange exchange address
   */
  function buildWallet(address _owner, address _exchange) external returns(address) {
    return new WalletV3(_owner, connector, _exchange);
  }
}

Contract Security Audit

Contract ABI

[{"constant":false,"inputs":[{"name":"_token","type":"address"},{"name":"_amount","type":"uint256"}],"name":"depositERC20Token","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"logic_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"name":"updateBalance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"verifyOrder","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_exchange","type":"address"}],"name":"updateExchange","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"birthBlock_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_token","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"walletVersion","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"exchange_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_version","type":"uint256"}],"name":"updateLogic","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner_","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"withdraw","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"tokenBalances_","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_connector","type":"address"},{"name":"_exchange","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"token","type":"address"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"balance","type":"uint256"}],"name":"LogWithdrawal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"errorString","type":"string"}],"name":"LogErrorString","type":"event"}]

Deployed Bytecode

0x6080604052600436106100cf5763ffffffff7c01000000000000000000000000000000000000000000000000000000006000350416632039d9fd81146100d157806322d40b1314610109578063412288031461013a5780634e7343ea14610163578063648a0c911461019257806369820a80146101b357806370a08231146101da57806398ea5fca146101fb578063bc51713114610203578063c066817914610218578063d767ee4d1461022d578063e766307914610245578063f3fef3a31461025a578063f6b1b18b1461027e575b005b3480156100dd57600080fd5b506100f5600160a060020a036004351660243561029f565b604080519115158252519081900360200190f35b34801561011557600080fd5b5061011e61049d565b60408051600160a060020a039092168252519081900360200190f35b34801561014657600080fd5b506100f5600160a060020a036004351660243560443515156104ac565b34801561016f57600080fd5b506100f5600160a060020a036004358116906024359060443590606435166104ac565b34801561019e57600080fd5b506100f5600160a060020a03600435166104c6565b3480156101bf57600080fd5b506101c8610574565b60408051918252519081900360200190f35b3480156101e657600080fd5b506101c8600160a060020a036004351661057a565b6100cf610628565b34801561020f57600080fd5b506101c861077f565b34801561022457600080fd5b5061011e610784565b34801561023957600080fd5b506100f5600435610793565b34801561025157600080fd5b5061011e610951565b34801561026657600080fd5b506100f5600160a060020a0360043516602435610960565b34801561028a57600080fd5b506101c8600160a060020a03600435166109f0565b6000600160a060020a03831615156103435761033c608060405190810160405280604181526020017f43616e6e6f74206465706f73697420657468657220766961206465706f73697481526020017f45524332302c2057616c6c65742e6465706f7369744552433230546f6b656e2881526020017f2900000000000000000000000000000000000000000000000000000000000000815250610a02565b9050610497565b60035460408051600160a060020a038681166024830152604480830187905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47e7ef24000000000000000000000000000000000000000000000000000000001781529251825191909416939192829180838360005b838110156103e65781810151838201526020016103ce565b50505050905090810190601f1680156104135780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561049357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6465706f7369744552433230546f6b656e2829206661696c6564000000000000604482015290519081900360640190fd5b5060015b92915050565b600354600160a060020a031681565b6000366000604037602060003660406003545af460206000f35b60008054600160a060020a031633146105455761053e606060405190810160405280602d81526020017f6d73672e73656e64657220213d206f776e65725f2c2057616c6c65742e75706481526020017f61746545786368616e6765282900000000000000000000000000000000000000815250610a02565b905061056f565b506001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161781555b919050565b60045481565b6000600160a060020a03821615156105945750303161056f565b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600160a060020a038416916370a082319160248083019260209291908290030181600087803b1580156105f557600080fd5b505af1158015610609573d6000803e3d6000fd5b505050506040513d602081101561061f57600080fd5b5051905061056f565b600354604080516000602482018190523460448084019190915283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f47e7ef240000000000000000000000000000000000000000000000000000000017815292518251600160a060020a03909516949293909283928190849084905b838110156106d05781810151838201526020016106b8565b50505050905090810190601f1680156106fd5780820380516001836020036101000a031916815260200191505b50915050600060405180830381855af4915050151561077d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f6465706f73697445746865722829206661696c65640000000000000000000000604482015290519081900360640190fd5b565b600390565b600154600160a060020a031681565b600080548190600160a060020a031633146108145761080d606060405190810160405280602a81526020017f6d73672e73656e64657220213d206f776e65725f2c2057616c6c65742e75706481526020017f6174654c6f676963282900000000000000000000000000000000000000000000815250610a02565b915061094b565b600554604080517fd526d332000000000000000000000000000000000000000000000000000000008152600481018690529051600160a060020a039092169163d526d332916024808201926020929091908290030181600087803b15801561087b57600080fd5b505af115801561088f573d6000803e3d6000fd5b505050506040513d60208110156108a557600080fd5b50519050600160a060020a038116151561091e5761080d606060405190810160405280602581526020017f496e76616c69642076657273696f6e2c2057616c6c65742e7570646174654c6f81526020017f6769632829000000000000000000000000000000000000000000000000000000815250610a02565b6003805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038316179055600191505b50919050565b600054600160a060020a031681565b60008054600160a060020a031633146109d85761033c606060405190810160405280602681526020017f6d73672e73656e64657220213d206f776e65722c2057616c6c65742e7769746881526020017f6472617728290000000000000000000000000000000000000000000000000000815250610a02565b366000604037602060003660406003545af460206000f35b60026020526000908152604090205481565b60007f551303dd5f39cbfe6daba6b3e27754b8a7d72f519756a2cde2b92c2bbde159a7826040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a63578181015183820152602001610a4b565b50505050905090810190601f168015610a905780820380516001836020036101000a031916815260200191505b509250505060405180910390a15060009190505600a165627a7a723058204ddb185cd98efe930cfa8de5cabb456db5fab579527b769a5d5660a922e134d20029

Deployed Bytecode Sourcemap

6269:6152:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8093:415;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8093:415:0;;;-1:-1:-1;;;;;8093:415:0;;;;;;;;;;;;;;;;;;;;;;;6537:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6537:21:0;;;;;;;;-1:-1:-1;;;;;6537:21:0;;;;;;;;;;;;;;8845:311;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;8845:311:0;;;-1:-1:-1;;;;;8845:311:0;;;;;;;;;10956:328;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;10956:328:0;-1:-1:-1;;;;;10956:328:0;;;;;;;;;;;;;;;;9498:319;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9498:319:0;;;-1:-1:-1;;;;;9498:319:0;;;6647:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6647:26:0;;;;;;;;;;;;;;;;;;;;12118:221;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;12118:221:0;;;-1:-1:-1;;;;;12118:221:0;;;7644:208;;;;12345:73;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12345:73:0;;;;6452:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6452:24:0;;;;9998:422;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;9998:422:0;;;;;6426:21;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6426:21:0;;;;11521:358;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;11521:358:0;;;-1:-1:-1;;;;;11521:358:0;;;;;6481:49;;8:9:-1;5:2;;;30:1;27;20:12;5:2;-1:-1;6481:49:0;;;-1:-1:-1;;;;;6481:49:0;;;8093:415;8191:4;-1:-1:-1;;;;;8225:11:0;;;8221:105;;;8252:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:5;:74::i;:::-;8245:81;;;;8221:105;8351:6;;8371:68;;;-1:-1:-1;;;;;8371:68:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;8371:68:0;;;;;;;25:18:-1;;61:17;;8371:68:0;182:15:-1;8371:68:0;179:29:-1;160:49;;8351:89:0;;;;:6;;;;;8371:68;;8351:89;;;;25:18:-1;-1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8351:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8335:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8498:4:0;8093:415;;;;;:::o;6537:21::-;;;-1:-1:-1;;;;;6537:21:0;;:::o;8845:311::-;8979:4;9035:12;9032:1;9026:4;9013:35;9109:2;9106:1;9092:12;9086:4;9080:3;9074:10;9069:3;9056:56;9130:2;9127:1;9120:13;9498:319;9568:4;9602:6;;-1:-1:-1;;;;;9602:6:0;9588:10;:20;9584:94;;9624:54;;;;;;;;;;;;;;;;;;;;;;;;:5;:54::i;:::-;9617:61;;;;9584:94;-1:-1:-1;9770:9:0;:21;;-1:-1:-1;;9770:21:0;-1:-1:-1;;;;;9770:21:0;;;;;9498:319;;;;:::o;6647:26::-;;;;:::o;12118:221::-;12188:4;-1:-1:-1;;;;;12208:20:0;;;12204:130;;;-1:-1:-1;12254:4:0;12246:21;12239:28;;12204:130;12297:29;;;;;;12321:4;12297:29;;;;;;-1:-1:-1;;;;;12297:23:0;;;;;:29;;;;;;;;;;;;;;-1:-1:-1;12297:23:0;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;12297:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12297:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12297:29:0;;-1:-1:-1;12290:36:0;;7644:208;7721:6;;7741:65;;;7721:6;7741:65;;;;;;7796:9;7741:65;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7741:65:0;;;;;;;25:18:-1;;61:17;;7741:65:0;182:15:-1;7741:65:0;179:29:-1;160:49;;7721:86:0;;;;-1:-1:-1;;;;;7721:6:0;;;;7741:65;;7721:86;;;;;;;;25:18:-1;;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;7721:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7705:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7644:208::o;12345:73::-;12411:1;12345:73;:::o;6452:24::-;;;-1:-1:-1;;;;;6452:24:0;;:::o;9998:422::-;10064:4;10098:6;;10064:4;;-1:-1:-1;;;;;10098:6:0;10084:10;:20;10080:91;;10120:51;;;;;;;;;;;;;;;;;;;;;;;;:5;:51::i;:::-;10113:58;;;;10080:91;10201:10;;:29;;;;;;;;;;;;;;-1:-1:-1;;;;;10201:10:0;;;;:19;;:29;;;;;;;;;;;;;;;-1:-1:-1;10201:10:0;:29;;;5:2:-1;;;;30:1;27;20:12;5:2;10201:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10201:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10201:29:0;;-1:-1:-1;;;;;;10291:15:0;;;10287:81;;;10322:46;;;;;;;;;;;;;;;;;;;;;;;;:5;:46::i;10287:81::-;10377:6;:19;;-1:-1:-1;;10377:19:0;-1:-1:-1;;;;;10377:19:0;;;;;-1:-1:-1;;;9998:422:0;;;;;:::o;6426:21::-;;;-1:-1:-1;;;;;6426:21:0;;:::o;11521:358::-;11607:4;11640:6;;-1:-1:-1;;;;;11640:6:0;11626:10;:20;11623:86;;11662:47;;;;;;;;;;;;;;;;;;;;;;;;:5;:47::i;11623:86::-;11758:12;11755:1;11749:4;11736:35;11832:2;11829:1;11815:12;11809:4;11803:3;11797:10;11792:3;11779:56;11853:2;11850:1;11843:13;6481:49;;;;;;;;;;;;;:::o;641:126::-;695:4;713:29;728:13;713:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;713:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;756:5:0;641:126;;;:::o

Swarm Source

bzzr://4ddb185cd98efe930cfa8de5cabb456db5fab579527b769a5d5660a922e134d2

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  ]

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.