ETH Price: $3,286.36 (-5.13%)

Contract

0xf8F12fE1B51D1398019C4faCd4D00aDAb5fEF746
 
Transaction Hash
Method
Block
From
To
Unlock212634402024-11-25 8:00:2335 hrs ago1732521623IN
Portto: USDT Teleport Custody
0 ETH0.000962679.41352277
Lock212548982024-11-24 3:24:112 days ago1732418651IN
Portto: USDT Teleport Custody
0 ETH0.000542749.47362004
Unlock212540602024-11-24 0:36:232 days ago1732408583IN
Portto: USDT Teleport Custody
0 ETH0.0012612612.33329329
Lock212481492024-11-23 4:48:353 days ago1732337315IN
Portto: USDT Teleport Custody
0 ETH0.0005919810.33528665
Lock212420242024-11-22 8:17:354 days ago1732263455IN
Portto: USDT Teleport Custody
0 ETH0.00050098.743357
Unlock212390982024-11-21 22:29:234 days ago1732228163IN
Portto: USDT Teleport Custody
0 ETH0.00169516.57848631
Unlock212242902024-11-19 20:52:236 days ago1732049543IN
Portto: USDT Teleport Custody
0 ETH0.0023577223.05505253
Unlock212148682024-11-18 13:21:238 days ago1731936083IN
Portto: USDT Teleport Custody
0 ETH0.0012095214.20211636
Lock212128562024-11-18 6:37:238 days ago1731911843IN
Portto: USDT Teleport Custody
0 ETH0.00054899.5831773
Unlock212011832024-11-16 15:34:2310 days ago1731771263IN
Portto: USDT Teleport Custody
0 ETH0.0018966818.54894025
Unlock211857992024-11-14 12:01:2312 days ago1731585683IN
Portto: USDT Teleport Custody
0 ETH0.0024654828.95354154
Unlock211716052024-11-12 12:29:1114 days ago1731414551IN
Portto: USDT Teleport Custody
0 ETH0.0023230127.28053726
Unlock211647832024-11-11 13:36:5915 days ago1731332219IN
Portto: USDT Teleport Custody
0 ETH0.0022216421.72441789
Lock211577842024-11-10 14:11:4716 days ago1731247907IN
Portto: USDT Teleport Custody
0 ETH0.0007631613.32116774
Unlock211280982024-11-06 10:45:2320 days ago1730889923IN
Portto: USDT Teleport Custody
0 ETH0.0013116215.40097071
Unlock211171672024-11-04 22:07:2321 days ago1730758043IN
Portto: USDT Teleport Custody
0 ETH0.0018598618.18668389
Unlock210484572024-10-26 7:58:3531 days ago1729929515IN
Portto: USDT Teleport Custody
0 ETH0.000483365.67727859
Unlock210118312024-10-21 5:21:5936 days ago1729488119IN
Portto: USDT Teleport Custody
0 ETH0.000710416.94759133
Lock210108862024-10-21 2:12:1136 days ago1729476731IN
Portto: USDT Teleport Custody
0 ETH0.000400876.99735502
Lock209917542024-10-18 10:08:5939 days ago1729246139IN
Portto: USDT Teleport Custody
0 ETH0.0011745220.50138103
Unlock209874722024-10-17 19:47:5940 days ago1729194479IN
Portto: USDT Teleport Custody
0 ETH0.0023386722.8687922
Unlock209834102024-10-17 6:11:4740 days ago1729145507IN
Portto: USDT Teleport Custody
0 ETH0.0008702310.22114008
Unlock209597452024-10-13 22:50:3543 days ago1728859835IN
Portto: USDT Teleport Custody
0 ETH0.0009116710.70477068
Unlock209596952024-10-13 22:40:3543 days ago1728859235IN
Portto: USDT Teleport Custody
0 ETH0.0013046312.75741957
Unlock209251922024-10-09 2:57:5948 days ago1728442679IN
Portto: USDT Teleport Custody
0 ETH0.0015279617.94380826
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TeleportCustody

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 1000 runs

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

// File: @openzeppelin/contracts/GSN/Context.sol

pragma solidity ^0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol

pragma solidity ^0.6.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: contracts/teleport/ethereum/TeleportAdmin.sol

pragma solidity 0.6.12;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there are multiple accounts (admins) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `consumeAuthorization`, which can be applied to your functions to restrict
 * their use to the admins.
 */
contract TeleportAdmin is Ownable {
  // Marks that the contract is frozen or unfrozen (safety kill-switch)
  bool private _isFrozen;

  mapping(address => uint256) private _allowedAmount;

  event AdminUpdated(address indexed account, uint256 allowedAmount);

  // Modifiers

  /**
    * @dev Throw if contract is currently frozen.
    */
  modifier notFrozen() {
    require(
      !_isFrozen,
      "TeleportAdmin: contract is frozen by owner"
    );

    _;
  }

  /**
    * @dev Throw if caller does not have sufficient authorized amount.
    */
  modifier consumeAuthorization(uint256 amount) {
    address sender = _msgSender();
    require(
      allowedAmount(sender) >= amount,
      "TeleportAdmin: caller does not have sufficient authorization"
    );

    _;

    // reduce authorization amount. Underflow cannot occur because we have
    // already checked that admin has sufficient allowed amount.
    _allowedAmount[sender] -= amount;
    emit AdminUpdated(sender, _allowedAmount[sender]);
  }

  /**
    * @dev Checks the authorized amount of an admin account.
    */
  function allowedAmount(address account)
    public
    view
    returns (uint256)
  {
    return _allowedAmount[account];
  }

  /**
    * @dev Returns if the contract is currently frozen.
    */
  function isFrozen()
    public
    view
    returns (bool)
  {
    return _isFrozen;
  }

  /**
    * @dev Owner freezes the contract.
    */
  function freeze()
    public
    onlyOwner
  {
    _isFrozen = true;
  }

  /**
    * @dev Owner unfreezes the contract.
    */
  function unfreeze()
    public
    onlyOwner
  {
    _isFrozen = false;
  }

  /**
    * @dev Updates the admin status of an account.
    * Can only be called by the current owner.
    */
  function updateAdmin(address account, uint256 newAllowedAmount)
    public
    virtual
    onlyOwner
  {
    emit AdminUpdated(account, newAllowedAmount);
    _allowedAmount[account] = newAllowedAmount;
  }

  /**
    * @dev Overrides the inherited method from Ownable.
    * Disable ownership resounce.
    */
  function renounceOwnership()
    public
    override
    onlyOwner
  {
    revert("TeleportAdmin: ownership cannot be renounced");
  }
}

// File: contracts/teleport/ethereum/TetherToken.sol

pragma solidity 0.6.12;

/**
 * @dev Method signature contract for Tether (USDT) because it's not a standard
 * ERC-20 contract and have different method signatures.
 */
interface TetherToken {
  function transfer(address _to, uint _value) external;
  function transferFrom(address _from, address _to, uint _value) external;
}

// File: contracts/teleport/ethereum/TeleportCustody.sol

// SPDX-License-Identifier: MIT

pragma solidity 0.6.12;

// import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

/**
 * @dev Implementation of the TeleportCustody contract.
 *
 * There are two priviledged roles for the contract: "owner" and "admin".
 *
 * Owner: Has the ultimate control of the contract and the funds stored inside the
 *        contract. Including:
 *     1) "freeze" and "unfreeze" the contract: when the TeleportCustody is frozen,
 *        all deposits and withdrawals with the TeleportCustody is disabled. This 
 *        should only happen when a major security risk is spotted or if admin access
 *        is comprimised.
 *     2) assign "admins": owner has the authority to grant "unlock" permission to
 *        "admins" and set proper "unlock limit" for each "admin".
 *
 * Admin: Has the authority to "unlock" specific amount to tokens to receivers.
 */
contract TeleportCustody is TeleportAdmin {
  // USDC
  // ERC20 internal _tokenContract = ERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
  
  // USDT
  TetherToken internal _tokenContract = TetherToken(0xdAC17F958D2ee523a2206206994597C13D831ec7);

  // Records that an unlock transaction has been executed
  mapping(bytes32 => bool) internal _unlocked;
  
  // Emmitted when user locks token and initiates teleport
  event Locked(uint256 amount, bytes8 indexed flowAddress, address indexed ethereumAddress);

  // Emmitted when teleport completes and token gets unlocked
  event Unlocked(uint256 amount, address indexed ethereumAddress, bytes32 indexed flowHash);

  /**
    * @dev User locks token and initiates teleport request.
    */
  function lock(uint256 amount, bytes8 flowAddress)
    public
    notFrozen
  {
    address sender = _msgSender();

    // NOTE: Return value should be checked. However, Tether does not have return value.
    _tokenContract.transferFrom(sender, address(this), amount);

    emit Locked(amount, flowAddress, sender);
  }

  // Admin methods

  /**
    * @dev TeleportAdmin unlocks token upon receiving teleport request from Flow.
    */
  function unlock(uint256 amount, address ethereumAddress, bytes32 flowHash)
    public
    notFrozen
    consumeAuthorization(amount)
  {
    _unlock(amount, ethereumAddress, flowHash);
  }

  // Owner methods

  /**
    * @dev Owner unlocks token upon receiving teleport request from Flow.
    * There is no unlock limit for owner.
    */
  function unlockByOwner(uint256 amount, address ethereumAddress, bytes32 flowHash)
    public
    notFrozen
    onlyOwner
  {
    _unlock(amount, ethereumAddress, flowHash);
  }

  // Internal methods

  /**
    * @dev Internal function for processing unlock requests.
    * 
    * There is no way TeleportCustody can check the validity of the target address
    * beforehand so user and admin should always make sure the provided information
    * is correct.
    */
  function _unlock(uint256 amount, address ethereumAddress, bytes32 flowHash)
    internal
  {
    require(ethereumAddress != address(0), "TeleportCustody: ethereumAddress is the zero address");
    require(!_unlocked[flowHash], "TeleportCustody: same unlock hash has been executed");

    _unlocked[flowHash] = true;

    // NOTE: Return value should be checked. However, Tether does not have return value.
    _tokenContract.transfer(ethereumAddress, amount);

    emit Unlocked(amount, ethereumAddress, flowHash);
  }
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"allowedAmount","type":"uint256"}],"name":"AdminUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"bytes8","name":"flowAddress","type":"bytes8"},{"indexed":true,"internalType":"address","name":"ethereumAddress","type":"address"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ethereumAddress","type":"address"},{"indexed":true,"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"Unlocked","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"allowedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes8","name":"flowAddress","type":"bytes8"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unfreeze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ethereumAddress","type":"address"},{"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"ethereumAddress","type":"address"},{"internalType":"bytes32","name":"flowHash","type":"bytes32"}],"name":"unlockByOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"newAllowedAmount","type":"uint256"}],"name":"updateAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600280546001600160a01b03191673dac17f958d2ee523a2206206994597c13d831ec717905534801561003657600080fd5b506000610041610090565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350610094565b3390565b610bef806100a36000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063915420401161005b57806391542040146101cb578063aad33ccd14610203578063f2fde38b14610235576100c9565b8063715018a614610173578063734d37dd1461017b5780638da5cb5b146101a7576100c9565b806356dd3895116100b257806356dd38951461011e57806362a5af3b146101635780636a28f0001461016b576100c9565b80630da61ed2146100ce57806333eeb14714610102575b600080fd5b610100600480360360608110156100e457600080fd5b508035906001600160a01b03602082013516906040013561025b565b005b61010a610360565b604080519115158252519081900360200190f35b6101006004803603604081101561013457600080fd5b50803590602001357fffffffffffffffff00000000000000000000000000000000000000000000000016610370565b6101006104b8565b610100610537565b6101006105b0565b6101006004803603604081101561019157600080fd5b506001600160a01b038135169060200135610651565b6101af610716565b604080516001600160a01b039092168252519081900360200190f35b6101f1600480360360208110156101e157600080fd5b50356001600160a01b0316610725565b60408051918252519081900360200190f35b6101006004803603606081101561021957600080fd5b508035906001600160a01b036020820135169060400135610740565b6101006004803603602081101561024b57600080fd5b50356001600160a01b0316610803565b600054600160a01b900460ff16156102a45760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b8260006102af610925565b9050816102bb82610725565b10156102f85760405162461bcd60e51b815260040180806020018281038252603c815260200180610af4603c913960400191505060405180910390fd5b610303858585610929565b6001600160a01b038116600081815260016020908152604091829020805486900390819055825190815291517fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e9281900390910190a25050505050565b600054600160a01b900460ff1690565b600054600160a01b900460ff16156103b95760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b60006103c3610925565b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301523060248301526044820188905291519394509116916323b872dd9160648082019260009290919082900301818387803b15801561043957600080fd5b505af115801561044d573d6000803e3d6000fd5b50506040805186815290516001600160a01b03851693507fffffffffffffffff000000000000000000000000000000000000000000000000861692507f80f175843b31923d59bca655f7e465ee566b9935cee89dc4ed3e364e989ca5ca9181900360200190a3505050565b6104c0610925565b6000546001600160a01b03908116911614610522576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b61053f610925565b6000546001600160a01b039081169116146105a1576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b19169055565b6105b8610925565b6000546001600160a01b0390811691161461061a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60405162461bcd60e51b815260040180806020018281038252602c815260200180610b5a602c913960400191505060405180910390fd5b610659610925565b6000546001600160a01b039081169116146106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290516001600160a01b038416917fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e919081900360200190a26001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b600054600160a01b900460ff16156107895760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b610791610925565b6000546001600160a01b039081169116146107f3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6107fe838383610929565b505050565b61080b610925565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108b25760405162461bcd60e51b8152600401808060200182810382526026815260200180610ace6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b6001600160a01b03821661096e5760405162461bcd60e51b8152600401808060200182810382526034815260200180610b866034913960400191505060405180910390fd5b60008181526003602052604090205460ff16156109bc5760405162461bcd60e51b8152600401808060200182810382526033815260200180610a9b6033913960400191505060405180910390fd5b600081815260036020526040808220805460ff1916600117905560025481517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529251929091169263a9059cbb9260448084019382900301818387803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b50506040805186815290518493506001600160a01b03861692507f3c342bec7fbc1c28938255a591687f9d3f5a716eb7d26999e74607c63927e0b19181900360200190a350505056fe54656c65706f7274437573746f64793a2073616d6520756e6c6f636b206861736820686173206265656e2065786563757465644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354656c65706f727441646d696e3a2063616c6c657220646f6573206e6f7420686176652073756666696369656e7420617574686f72697a6174696f6e54656c65706f727441646d696e3a20636f6e74726163742069732066726f7a656e206279206f776e657254656c65706f727441646d696e3a206f776e6572736869702063616e6e6f742062652072656e6f756e63656454656c65706f7274437573746f64793a20657468657265756d4164647265737320697320746865207a65726f2061646472657373a2646970667358221220ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b464736f6c634300060c0033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100c95760003560e01c8063715018a611610081578063915420401161005b57806391542040146101cb578063aad33ccd14610203578063f2fde38b14610235576100c9565b8063715018a614610173578063734d37dd1461017b5780638da5cb5b146101a7576100c9565b806356dd3895116100b257806356dd38951461011e57806362a5af3b146101635780636a28f0001461016b576100c9565b80630da61ed2146100ce57806333eeb14714610102575b600080fd5b610100600480360360608110156100e457600080fd5b508035906001600160a01b03602082013516906040013561025b565b005b61010a610360565b604080519115158252519081900360200190f35b6101006004803603604081101561013457600080fd5b50803590602001357fffffffffffffffff00000000000000000000000000000000000000000000000016610370565b6101006104b8565b610100610537565b6101006105b0565b6101006004803603604081101561019157600080fd5b506001600160a01b038135169060200135610651565b6101af610716565b604080516001600160a01b039092168252519081900360200190f35b6101f1600480360360208110156101e157600080fd5b50356001600160a01b0316610725565b60408051918252519081900360200190f35b6101006004803603606081101561021957600080fd5b508035906001600160a01b036020820135169060400135610740565b6101006004803603602081101561024b57600080fd5b50356001600160a01b0316610803565b600054600160a01b900460ff16156102a45760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b8260006102af610925565b9050816102bb82610725565b10156102f85760405162461bcd60e51b815260040180806020018281038252603c815260200180610af4603c913960400191505060405180910390fd5b610303858585610929565b6001600160a01b038116600081815260016020908152604091829020805486900390819055825190815291517fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e9281900390910190a25050505050565b600054600160a01b900460ff1690565b600054600160a01b900460ff16156103b95760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b60006103c3610925565b600254604080517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b0380851660048301523060248301526044820188905291519394509116916323b872dd9160648082019260009290919082900301818387803b15801561043957600080fd5b505af115801561044d573d6000803e3d6000fd5b50506040805186815290516001600160a01b03851693507fffffffffffffffff000000000000000000000000000000000000000000000000861692507f80f175843b31923d59bca655f7e465ee566b9935cee89dc4ed3e364e989ca5ca9181900360200190a3505050565b6104c0610925565b6000546001600160a01b03908116911614610522576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b1916600160a01b179055565b61053f610925565b6000546001600160a01b039081169116146105a1576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6000805460ff60a01b19169055565b6105b8610925565b6000546001600160a01b0390811691161461061a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b60405162461bcd60e51b815260040180806020018281038252602c815260200180610b5a602c913960400191505060405180910390fd5b610659610925565b6000546001600160a01b039081169116146106bb576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6040805182815290516001600160a01b038416917fabfafa62f2f183eb8fe4ae2293ed2d954001a6a345c459031f171dedad91824e919081900360200190a26001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b031690565b6001600160a01b031660009081526001602052604090205490565b600054600160a01b900460ff16156107895760405162461bcd60e51b815260040180806020018281038252602a815260200180610b30602a913960400191505060405180910390fd5b610791610925565b6000546001600160a01b039081169116146107f3576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6107fe838383610929565b505050565b61080b610925565b6000546001600160a01b0390811691161461086d576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b0381166108b25760405162461bcd60e51b8152600401808060200182810382526026815260200180610ace6026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b3390565b6001600160a01b03821661096e5760405162461bcd60e51b8152600401808060200182810382526034815260200180610b866034913960400191505060405180910390fd5b60008181526003602052604090205460ff16156109bc5760405162461bcd60e51b8152600401808060200182810382526033815260200180610a9b6033913960400191505060405180910390fd5b600081815260036020526040808220805460ff1916600117905560025481517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018890529251929091169263a9059cbb9260448084019382900301818387803b158015610a3d57600080fd5b505af1158015610a51573d6000803e3d6000fd5b50506040805186815290518493506001600160a01b03861692507f3c342bec7fbc1c28938255a591687f9d3f5a716eb7d26999e74607c63927e0b19181900360200190a350505056fe54656c65706f7274437573746f64793a2073616d6520756e6c6f636b206861736820686173206265656e2065786563757465644f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737354656c65706f727441646d696e3a2063616c6c657220646f6573206e6f7420686176652073756666696369656e7420617574686f72697a6174696f6e54656c65706f727441646d696e3a20636f6e74726163742069732066726f7a656e206279206f776e657254656c65706f727441646d696e3a206f776e6572736869702063616e6e6f742062652072656e6f756e63656454656c65706f7274437573746f64793a20657468657265756d4164647265737320697320746865207a65726f2061646472657373a2646970667358221220ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b464736f6c634300060c0033

Deployed Bytecode Sourcemap

7410:2592:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8628:194;;;;;;;;;;;;;;;;-1:-1:-1;8628:194:0;;;-1:-1:-1;;;;;8628:194:0;;;;;;;;;;:::i;:::-;;5076:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;8174:328;;;;;;;;;;;;;;;;-1:-1:-1;8174:328:0;;;;;;;;;:::i;5231:77::-;;;:::i;5371:80::-;;;:::i;5898:140::-;;;:::i;5572:213::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5572:213:0;;;;;;;;:::i;2066:79::-;;;:::i;:::-;;;;-1:-1:-1;;;;;2066:79:0;;;;;;;;;;;;;;4867:131;;;;;;;;;;;;;;;;-1:-1:-1;4867:131:0;-1:-1:-1;;;;;4867:131:0;;:::i;:::-;;;;;;;;;;;;;;;;8983:182;;;;;;;;;;;;;;;;-1:-1:-1;8983:182:0;;;-1:-1:-1;;;;;8983:182:0;;;;;;;;;;:::i;3011:244::-;;;;;;;;;;;;;;;;-1:-1:-1;3011:244:0;-1:-1:-1;;;;;3011:244:0;;:::i;8628:194::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8756:6:::1;4368:14;4385:12;:10;:12::i;:::-;4368:29;;4445:6;4420:21;4434:6;4420:13;:21::i;:::-;:31;;4404:125;;;;-1:-1:-1::0;;;4404:125:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8774:42:::2;8782:6;8790:15;8807:8;8774:7;:42::i;:::-;-1:-1:-1::0;;;;;4690:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;;;;:32;;;;::::1;::::0;;;;4734:44;;;;;;;::::1;::::0;;;;;;;;::::1;4215:1;;8628:194:::0;;;:::o;5076:94::-;5132:4;5155:9;-1:-1:-1;;;5155:9:0;;;;;5076:94::o;8174:328::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8261:14:::1;8278:12;:10;:12::i;:::-;8389:14;::::0;:58:::1;::::0;;;;;-1:-1:-1;;;;;8389:58:0;;::::1;;::::0;::::1;::::0;8433:4:::1;8389:58:::0;;;;;;;;;;;;8261:29;;-1:-1:-1;8389:14:0;::::1;::::0;:27:::1;::::0;:58;;;;;:14:::1;::::0;:58;;;;;;;;:14;;:58;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8461:35:0::1;::::0;;;;;;;-1:-1:-1;;;;;8461:35:0;::::1;::::0;-1:-1:-1;8461:35:0;;::::1;::::0;-1:-1:-1;8461:35:0::1;::::0;;;;::::1;::::0;;::::1;4215:1;8174:328:::0;;:::o;5231:77::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5286:9:::1;:16:::0;;-1:-1:-1;;;;5286:16:0::1;-1:-1:-1::0;;;5286:16:0::1;::::0;;5231:77::o;5371:80::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5440:5:::1;5428:17:::0;;-1:-1:-1;;;;5428:17:0::1;::::0;;5371:80::o;5898:140::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5978:54:::1;;-1:-1:-1::0;;;5978:54:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5572:213:::0;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5691:39:::1;::::0;;;;;;;-1:-1:-1;;;;;5691:39:0;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;::::1;-1:-1:-1::0;;;;;5737:23:0;;::::1;;::::0;;;:14:::1;:23;::::0;;;;:42;5572:213::o;2066:79::-;2104:7;2131:6;-1:-1:-1;;;;;2131:6:0;2066:79;:::o;4867:131::-;-1:-1:-1;;;;;4969:23:0;4943:7;4969:23;;;:14;:23;;;;;;;4867:131::o;8983:182::-;4137:9;;-1:-1:-1;;;4137:9:0;;;;4136:10;4120:86;;;;-1:-1:-1;;;4120:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2288:12:::1;:10;:12::i;:::-;2278:6;::::0;-1:-1:-1;;;;;2278:6:0;;::::1;:22:::0;::::1;;2270:67;;;::::0;;-1:-1:-1;;;2270:67:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;9117:42:::2;9125:6;9133:15;9150:8;9117:7;:42::i;:::-;8983:182:::0;;;:::o;3011:244::-;2288:12;:10;:12::i;:::-;2278:6;;-1:-1:-1;;;;;2278:6:0;;;:22;;;2270:67;;;;;-1:-1:-1;;;2270:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3100:22:0;::::1;3092:73;;;;-1:-1:-1::0;;;3092:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3202:6;::::0;;3181:38:::1;::::0;-1:-1:-1;;;;;3181:38:0;;::::1;::::0;3202:6;::::1;::::0;3181:38:::1;::::0;::::1;3230:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;3230:17:0;;;::::1;::::0;;;::::1;::::0;;3011:244::o;622:106::-;710:10;622:106;:::o;9469:530::-;-1:-1:-1;;;;;9577:29:0;;9569:94;;;;-1:-1:-1;;;9569:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9679:19;;;;:9;:19;;;;;;;;9678:20;9670:84;;;;-1:-1:-1;;;9670:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9763:19;;;;:9;:19;;;;;;:26;;-1:-1:-1;;9763:26:0;9785:4;9763:26;;;9888:14;;:48;;;;;-1:-1:-1;;;;;9888:48:0;;;;;;;;;;;;;;;:14;;;;;:23;;:48;;;;;;;;;;9763:19;9888:14;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9950:43:0;;;;;;;;9984:8;;-1:-1:-1;;;;;;9950:43:0;;;-1:-1:-1;9950:43:0;;;;;;;;;9469:530;;;:::o

Swarm Source

ipfs://ef33d6bb9dbc79acfa5d35ebacc1546a55e224267e8b14bbc25a9195361526b4

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.