ETH Price: $2,080.42 (+9.08%)
 

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
0x7bee258a1075082432023-07-29 7:21:03923 days ago1690615263IN
0xA035EDE4...Ac786fA13
0 ETH0.0000613064610.10000011
0x7bee258a1075069542023-07-29 6:38:05923 days ago1690612685IN
0xA035EDE4...Ac786fA13
0 ETH0.0000647619170.10000009
Register Asset1074936112023-07-28 23:13:19924 days ago1690585999IN
0xA035EDE4...Ac786fA13
0 ETH0.0000392759830.00008026
Register Asset1074935902023-07-28 23:12:37924 days ago1690585957IN
0xA035EDE4...Ac786fA13
0 ETH0.0000419961610.00008026

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
1075082432023-07-29 7:21:03923 days ago1690615263
0xA035EDE4...Ac786fA13
0 ETH
1075082432023-07-29 7:21:03923 days ago1690615263
0xA035EDE4...Ac786fA13
0 ETH
1075082432023-07-29 7:21:03923 days ago1690615263
0xA035EDE4...Ac786fA13
0 ETH
1075082432023-07-29 7:21:03923 days ago1690615263
0xA035EDE4...Ac786fA13
0 ETH
1075069542023-07-29 6:38:05923 days ago1690612685
0xA035EDE4...Ac786fA13
0 ETH
1075069542023-07-29 6:38:05923 days ago1690612685
0xA035EDE4...Ac786fA13
0 ETH
1075069542023-07-29 6:38:05923 days ago1690612685
0xA035EDE4...Ac786fA13
0 ETH
1075069542023-07-29 6:38:05923 days ago1690612685
0xA035EDE4...Ac786fA13
0 ETH

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AlchemixConnextGateway

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at optimistic.etherscan.io on 2023-07-28
*/

// Sources flattened with hardhat v2.9.9 https://hardhat.org

// File lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}


// File lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol

// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

pragma solidity ^0.8.0;


// File src/interfaces/ICrossChainToken.sol

pragma solidity >=0.5.0;

/// @title  ICrossChainToken
/// @author Alchemix Finance
interface ICrossChainToken is IERC20 {
  /// @notice Gets the total amount of minted tokens for an account.
  ///
  /// @param account The address of the account.
  ///
  /// @return The total minted.
  function hasMinted(address account) external view returns (uint256);

  /// @notice Lowers the number of tokens which the `msg.sender` has minted.
  ///
  /// This reverts if the `msg.sender` is not whitelisted.
  ///
  /// @param amount The amount to lower the minted amount by.
  function lowerHasMinted(uint256 amount) external;

  /// @notice Sets the mint allowance for a given account'
  ///
  /// This reverts if the `msg.sender` is not admin
  ///
  /// @param toSetCeiling The account whos allowance to update
  /// @param ceiling      The amount of tokens allowed to mint
  function setCeiling(address toSetCeiling, uint256 ceiling) external;

  /// @notice Updates the state of an address in the whitelist map
  ///
  /// This reverts if msg.sender is not admin
  ///
  /// @param toWhitelist the address whos state is being updated
  /// @param state the boolean state of the whitelist
  function setWhitelist(address toWhitelist, bool state) external;

  function mint(address recipient, uint256 amount) external;

  function burn(uint256 amount) external;

  function burnFrom(address account, uint256 amount) external;

  function exchangeOldForCanonical(address bridgeTokenAddress, uint256 tokenAmount) external returns (uint256 canonicalTokensOut);

  function exchangeCanonicalForOld(address bridgeTokenAddress, uint256 tokenAmount) external returns (uint256 bridgeTokensOut);
}


// File src/libraries/connext/LibConnextStorage.sol

pragma solidity ^0.8.13;

/**
 * @notice Enum representing status of destination transfer
 * @dev Status is only assigned on the destination domain, will always be "none" for the
 * origin domains
 * @return uint - Index of value in enum
 */
enum DestinationTransferStatus {
  None, // 0
  Reconciled, // 1
  Executed, // 2
  Completed // 3 - executed + reconciled
}

/**
 * @notice These are the parameters that will remain constant between the
 * two chains. They are supplied on `xcall` and should be asserted on `execute`
 * @property to - The account that receives funds, in the event of a crosschain call,
 * will receive funds if the call fails.
 *
 * @param originDomain - The originating domain (i.e. where `xcall` is called)
 * @param destinationDomain - The final domain (i.e. where `execute` / `reconcile` are called)\
 * @param canonicalDomain - The canonical domain of the asset you are bridging
 * @param to - The address you are sending funds (and potentially data) to
 * @param delegate - An address who can execute txs on behalf of `to`, in addition to allowing relayers
 * @param receiveLocal - If true, will use the local asset on the destination instead of adopted.
 * @param callData - The data to execute on the receiving chain. If no crosschain call is needed, then leave empty.
 * @param slippage - Slippage user is willing to accept from original amount in expressed in BPS (i.e. if
 * a user takes 1% slippage, this is expressed as 1_000)
 * @param originSender - The msg.sender of the xcall
 * @param bridgedAmt - The amount sent over the bridge (after potential AMM on xcall)
 * @param normalizedIn - The amount sent to `xcall`, normalized to 18 decimals
 * @param nonce - The nonce on the origin domain used to ensure the transferIds are unique
 * @param canonicalId - The unique identifier of the canonical token corresponding to bridge assets
 */
struct TransferInfo {
  uint32 originDomain;
  uint32 destinationDomain;
  uint32 canonicalDomain;
  address to;
  address delegate;
  bool receiveLocal;
  bytes callData;
  uint256 slippage;
  address originSender;
  uint256 bridgedAmt;
  uint256 normalizedIn;
  uint256 nonce;
  bytes32 canonicalId;
}

/**
 * @notice
 * @param params - The TransferInfo. These are consistent across sending and receiving chains.
 * @param routers - The routers who you are sending the funds on behalf of.
 * @param routerSignatures - Signatures belonging to the routers indicating permission to use funds
 * for the signed transfer ID.
 * @param sequencer - The sequencer who assigned the router path to this transfer.
 * @param sequencerSignature - Signature produced by the sequencer for path assignment accountability
 * for the path that was signed.
 */
struct ExecuteArgs {
  TransferInfo params;
  address[] routers;
  bytes[] routerSignatures;
  address sequencer;
  bytes sequencerSignature;
}


// File src/libraries/connext/TokenId.sol

pragma solidity ^0.8.13;

// ============= Structs =============

// Tokens are identified by a TokenId:
// domain - 4 byte chain ID of the chain from which the token originates
// id - 32 byte identifier of the token address on the origin chain, in that chain's address format
struct TokenId {
  uint32 domain;
  bytes32 id;
}


// File src/interfaces/external/connext/IConnext.sol

pragma solidity ^0.8.13;


interface IConnext {

  // ============ BRIDGE ==============

  function xcall(
    uint32 _destination,
    address _to,
    address _asset,
    address _delegate,
    uint256 _amount,
    uint256 _slippage,
    bytes calldata _callData
  ) external payable returns (bytes32);

  function xcallIntoLocal(
    uint32 _destination,
    address _to,
    address _asset,
    address _delegate,
    uint256 _amount,
    uint256 _slippage,
    bytes calldata _callData
  ) external payable returns (bytes32);

  function execute(ExecuteArgs calldata _args) external returns (bytes32 transferId);

  function forceUpdateSlippage(TransferInfo calldata _params, uint256 _slippage) external;

  function forceReceiveLocal(TransferInfo calldata _params) external;

  function bumpTransfer(bytes32 _transferId) external payable;

  function routedTransfers(bytes32 _transferId) external view returns (address[] memory);

  function transferStatus(bytes32 _transferId) external view returns (DestinationTransferStatus);

  function remote(uint32 _domain) external view returns (address);

  function domain() external view returns (uint256);

  function nonce() external view returns (uint256);

  function approvedSequencers(address _sequencer) external view returns (bool);

  function xAppConnectionManager() external view returns (address);

  // ============ ROUTERS ==============

  function LIQUIDITY_FEE_NUMERATOR() external view returns (uint256);

  function LIQUIDITY_FEE_DENOMINATOR() external view returns (uint256);

  function getRouterApproval(address _router) external view returns (bool);

  function getRouterRecipient(address _router) external view returns (address);

  function getRouterOwner(address _router) external view returns (address);

  function getProposedRouterOwner(address _router) external view returns (address);

  function getProposedRouterOwnerTimestamp(address _router) external view returns (uint256);

  function maxRoutersPerTransfer() external view returns (uint256);

  function routerBalances(address _router, address _asset) external view returns (uint256);

  function getRouterApprovalForPortal(address _router) external view returns (bool);

  function initializeRouter(address _owner, address _recipient) external;

  function setRouterRecipient(address _router, address _recipient) external;

  function proposeRouterOwner(address _router, address _proposed) external;

  function acceptProposedRouterOwner(address _router) external;

  function addRouterLiquidityFor(
    uint256 _amount,
    address _local,
    address _router
  ) external payable;

  function addRouterLiquidity(uint256 _amount, address _local) external payable;

  function removeRouterLiquidityFor(
    TokenId memory _canonical,
    uint256 _amount,
    address payable _to,
    address _router
  ) external;

  function removeRouterLiquidity(TokenId memory _canonical, uint256 _amount, address payable _to) external;
}


// File src/interfaces/external/connext/IXReceiver.sol

pragma solidity ^0.8.13;

interface IXReceiver {
  function xReceive(
    bytes32 _transferId,
    uint256 _amount,
    address _asset,
    address _originSender,
    uint32 _origin,
    bytes memory _callData
  ) external returns (bytes memory);
}


// File lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


// File src/interfaces/IERC20Burnable.sol

pragma solidity >=0.5.0;

/// @title  IERC20Burnable
/// @author Alchemix Finance
interface IERC20Burnable is IERC20 {
    /// @notice Burns `amount` tokens from the balance of `msg.sender`.
    ///
    /// @param amount The amount of tokens to burn.
    ///
    /// @return If burning the tokens was successful.
    function burn(uint256 amount) external returns (bool);

    /// @notice Burns `amount` tokens from `owner`'s balance.
    ///
    /// @param owner  The address to burn tokens from.
    /// @param amount The amount of tokens to burn.
    ///
    /// @return If burning the tokens was successful.
    function burnFrom(address owner, uint256 amount) external returns (bool);
}


// File src/interfaces/IERC20Mintable.sol

pragma solidity >=0.5.0;

/// @title  IERC20Mintable
/// @author Alchemix Finance
interface IERC20Mintable is IERC20 {
    /// @notice Mints `amount` tokens to `recipient`.
    ///
    /// @param recipient The address which will receive the minted tokens.
    /// @param amount    The amount of tokens to mint.
    function mint(address recipient, uint256 amount) external;
}


// File src/libraries/TokenUtils.sol

pragma solidity ^0.8.13;




/// @title  TokenUtils
/// @author Alchemix Finance
library TokenUtils {
    /// @notice An error used to indicate that a call to an ERC20 contract failed.
    ///
    /// @param target  The target address.
    /// @param success If the call to the token was a success.
    /// @param data    The resulting data from the call. This is error data when the call was not a success. Otherwise,
    ///                this is malformed data when the call was a success.
    error ERC20CallFailed(address target, bool success, bytes data);

    /// @dev A safe function to get the decimals of an ERC20 token.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an unexpected value.
    ///
    /// @param token The target token.
    ///
    /// @return The amount of decimals of the token.
    function expectDecimals(address token) internal view returns (uint8) {
        (bool success, bytes memory data) = token.staticcall(
            abi.encodeWithSelector(IERC20Metadata.decimals.selector)
        );

        if (token.code.length == 0 || !success || data.length < 32) {
            revert ERC20CallFailed(token, success, data);
        }

        return abi.decode(data, (uint8));
    }

    /// @dev Gets the balance of tokens held by an account.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the query fails or returns an unexpected value.
    ///
    /// @param token   The token to check the balance of.
    /// @param account The address of the token holder.
    ///
    /// @return The balance of the tokens held by an account.
    function safeBalanceOf(address token, address account) internal view returns (uint256) {
        (bool success, bytes memory data) = token.staticcall(
            abi.encodeWithSelector(IERC20.balanceOf.selector, account)
        );

        if (token.code.length == 0 || !success || data.length < 32) {
            revert ERC20CallFailed(token, success, data);
        }

        return abi.decode(data, (uint256));
    }

    /// @dev Transfers tokens to another address.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the transfer failed or returns an unexpected value.
    ///
    /// @param token     The token to transfer.
    /// @param recipient The address of the recipient.
    /// @param amount    The amount of tokens to transfer.
    function safeTransfer(address token, address recipient, uint256 amount) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20.transfer.selector, recipient, amount)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Approves tokens for the smart contract.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the approval fails or returns an unexpected value.
    ///
    /// @param token   The token to approve.
    /// @param spender The contract to spend the tokens.
    /// @param value   The amount of tokens to approve.
    function safeApprove(address token, address spender, uint256 value) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20.approve.selector, spender, value)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Transfer tokens from one address to another address.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the transfer fails or returns an unexpected value.
    ///
    /// @param token     The token to transfer.
    /// @param owner     The address of the owner.
    /// @param recipient The address of the recipient.
    /// @param amount    The amount of tokens to transfer.
    function safeTransferFrom(address token, address owner, address recipient, uint256 amount) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20.transferFrom.selector, owner, recipient, amount)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Mints tokens to an address.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the mint fails or returns an unexpected value.
    ///
    /// @param token     The token to mint.
    /// @param recipient The address of the recipient.
    /// @param amount    The amount of tokens to mint.
    function safeMint(address token, address recipient, uint256 amount) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20Mintable.mint.selector, recipient, amount)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Burns tokens.
    ///
    /// Reverts with a `CallFailed` error if execution of the burn fails or returns an unexpected value.
    ///
    /// @param token  The token to burn.
    /// @param amount The amount of tokens to burn.
    function safeBurn(address token, uint256 amount) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20Burnable.burn.selector, amount)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }

    /// @dev Burns tokens from its total supply.
    ///
    /// @dev Reverts with a {CallFailed} error if execution of the burn fails or returns an unexpected value.
    ///
    /// @param token  The token to burn.
    /// @param owner  The owner of the tokens.
    /// @param amount The amount of tokens to burn.
    function safeBurnFrom(address token, address owner, uint256 amount) internal {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(IERC20Burnable.burnFrom.selector, owner, amount)
        );

        if (token.code.length == 0 || !success || (data.length != 0 && !abi.decode(data, (bool)))) {
            revert ERC20CallFailed(token, success, data);
        }
    }
}


// File src/bridging/connext/AlchemixConnextGateway.sol

pragma solidity ^0.8.13;



/**
 * @title AlchemixConnextGateway
 */
contract AlchemixConnextGateway is IXReceiver {
  /// @notice The admin.
  address public admin;

  // The Connext contract on this domain
  address public immutable connext;

  // The next tokens mapped to their respective alAssets. 
  mapping (address => address) public assets;

  /** @notice A modifier for authenticated calls.
   * This is an important security consideration. msg.sender must be the connext contract.
   */
  modifier onlySource() {
    require(
        msg.sender == connext,
      "Expected original caller to be Connext contract"
    );
    _;
  }

  /// @dev A modifier which reverts if the message sender is not the admin.
  modifier onlyAdmin() {
      if (msg.sender != admin) {
          revert ("Not admin");
      }
      _;
  }

  constructor(
    address _connext
  ) {
    connext = _connext;
    admin = msg.sender;
  }

  function setAdmin(address newAdmin) external onlyAdmin {
    admin = newAdmin;
  }

  function registerAsset(address nextAsset, address alAsset) external onlyAdmin {
    assets[nextAsset] = alAsset;
  }

  function bridgeAssets (
    address _target,
    address _asset,
    uint256 _amount,
    uint32 _destinationDomain,
    uint256 _relayerFee
  ) external payable returns (bytes32) {
    TokenUtils.safeTransferFrom(assets[_asset], _target, address(this), _amount);
    ICrossChainToken(assets[_asset]).exchangeCanonicalForOld(_asset, _amount);

    TokenUtils.safeApprove(_asset, connext, _amount);
    return IConnext(connext).xcall{value: _relayerFee}(
      _destinationDomain, // _destination
      _target,            // _to
      _asset,             // _asset
      msg.sender,         // _delegate
      _amount,            // _amount
      10000,              // _slippage
      bytes("")           // _callData
    );
  }

  /** @notice Authenticated receiver function.
    * @param _callData Calldata containing the new greeting.
    */
  function xReceive(
    bytes32 _transferId,
    uint256 _amount,
    address _asset,
    address _originSender,
    uint32 _origin,
    bytes memory _callData
  ) external onlySource() returns (bytes memory) {
    TokenUtils.safeApprove(_asset, assets[_asset], _amount);
    ICrossChainToken(assets[_asset]).exchangeOldForCanonical(_asset, _amount);
    
    TokenUtils.safeTransfer(assets[_asset], abi.decode(_callData, (address)), _amount);
  }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_connext","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"success","type":"bool"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"ERC20CallFailed","type":"error"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"assets","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint32","name":"_destinationDomain","type":"uint32"},{"internalType":"uint256","name":"_relayerFee","type":"uint256"}],"name":"bridgeAssets","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"connext","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"nextAsset","type":"address"},{"internalType":"address","name":"alAsset","type":"address"}],"name":"registerAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"setAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_transferId","type":"bytes32"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_asset","type":"address"},{"internalType":"address","name":"_originSender","type":"address"},{"internalType":"uint32","name":"_origin","type":"uint32"},{"internalType":"bytes","name":"_callData","type":"bytes"}],"name":"xReceive","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"}]

60a060405234801561001057600080fd5b50604051610c51380380610c5183398101604081905261002f91610052565b6001600160a01b0316608052600080546001600160a01b03191633179055610082565b60006020828403121561006457600080fd5b81516001600160a01b038116811461007b57600080fd5b9392505050565b608051610ba06100b16000396000818160ef015281816103440152818161038d015261042a0152610ba06000f3fe6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610819565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610852565b610225565b6100ca6100c536600461088f565b61028d565b6040519081526020015b60405180910390f35b3480156100e957600080fd5b506101117f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d4565b34801561013557600080fd5b50610111610144366004610852565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a3660046108fe565b61041d565b6040516100d49190610a53565b6000546001600160a01b031633146101f75760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101ee565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526001602052604081205490916102b6911687308761059c565b6001600160a01b038581166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018790529091169063280cf3ed906044016020604051808303816000875af1158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190610a66565b50610369857f0000000000000000000000000000000000000000000000000000000000000000866106b1565b604080516020810182526000815290516345560b5d60e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691638aac16ba9185916103d09188918c918c9133918d9161271091600401610a7f565b60206040518083038185885af11580156103ee573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104139190610a66565b9695505050505050565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104af5760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101ee565b6001600160a01b038086166000908152600160205260409020546104d691879116886106b1565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190610a66565b506001600160a01b0380861660009081526001602090815260409091205484516104139391909116916105969186018101908601610ada565b886107ce565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106009190610af7565b6000604051808303816000865af19150503d806000811461063d576040519150601f19603f3d011682016040523d82523d6000602084013e610642565b606091505b5091509150856001600160a01b03163b6000148061065e575081155b8061068557508051158015906106855750808060200190518101906106839190610b13565b155b156106a95785828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161071e9190610af7565b6000604051808303816000865af19150503d806000811461075b576040519150601f19603f3d011682016040523d82523d6000602084013e610760565b606091505b5091509150846001600160a01b03163b6000148061077c575081155b806107a357508051158015906107a35750808060200190518101906107a19190610b13565b155b156107c75784828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e0565b6001600160a01b038116811461081657600080fd5b50565b6000806040838503121561082c57600080fd5b823561083781610801565b9150602083013561084781610801565b809150509250929050565b60006020828403121561086457600080fd5b813561086f81610801565b9392505050565b803563ffffffff8116811461088a57600080fd5b919050565b600080600080600060a086880312156108a757600080fd5b85356108b281610801565b945060208601356108c281610801565b9350604086013592506108d760608701610876565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561091757600080fd5b8635955060208701359450604087013561093081610801565b9350606087013561094081610801565b925061094e60808801610876565b915060a087013567ffffffffffffffff8082111561096b57600080fd5b818901915089601f83011261097f57600080fd5b813581811115610991576109916108e8565b604051601f8201601f19908116603f011681019083821181831017156109b9576109b96108e8565b816040528281528c60208487010111156109d257600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a125781810151838201526020016109fa565b83811115610a21576000848401525b50505050565b60008151808452610a3f8160208601602086016109f7565b601f01601f19169290920160200192915050565b60208152600061086f6020830184610a27565b600060208284031215610a7857600080fd5b5051919050565b63ffffffff881681526001600160a01b0387811660208301528681166040830152851660608201526080810184905260a0810183905260e060c08201819052600090610acd90830184610a27565b9998505050505050505050565b600060208284031215610aec57600080fd5b815161086f81610801565b60008251610b098184602087016109f7565b9190910192915050565b600060208284031215610b2557600080fd5b8151801515811461086f57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b6190830184610a27565b9594505050505056fea2646970667358221220b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f4319464736f6c634300080d00330000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda

Deployed Bytecode

0x6080604052600436106100705760003560e01c8063de4b05481161004e578063de4b0548146100dd578063f11b818814610129578063f851a4401461015f578063fd614f411461017f57600080fd5b80634fad6bff14610075578063704b6c02146100975780637bee258a146100b7575b600080fd5b34801561008157600080fd5b50610095610090366004610819565b6101ac565b005b3480156100a357600080fd5b506100956100b2366004610852565b610225565b6100ca6100c536600461088f565b61028d565b6040519081526020015b60405180910390f35b3480156100e957600080fd5b506101117f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda81565b6040516001600160a01b0390911681526020016100d4565b34801561013557600080fd5b50610111610144366004610852565b6001602052600090815260409020546001600160a01b031681565b34801561016b57600080fd5b50600054610111906001600160a01b031681565b34801561018b57600080fd5b5061019f61019a3660046108fe565b61041d565b6040516100d49190610a53565b6000546001600160a01b031633146101f75760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064015b60405180910390fd5b6001600160a01b03918216600090815260016020526040902080546001600160a01b03191691909216179055565b6000546001600160a01b0316331461026b5760405162461bcd60e51b81526020600482015260096024820152682737ba1030b236b4b760b91b60448201526064016101ee565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0380851660009081526001602052604081205490916102b6911687308761059c565b6001600160a01b038581166000818152600160205260409081902054905163280cf3ed60e01b81526004810192909252602482018790529091169063280cf3ed906044016020604051808303816000875af1158015610319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033d9190610a66565b50610369857f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda866106b1565b604080516020810182526000815290516345560b5d60e11b81526001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda1691638aac16ba9185916103d09188918c918c9133918d9161271091600401610a7f565b60206040518083038185885af11580156103ee573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906104139190610a66565b9695505050505050565b6060336001600160a01b037f0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda16146104af5760405162461bcd60e51b815260206004820152602f60248201527f4578706563746564206f726967696e616c2063616c6c657220746f206265204360448201526e1bdb9b995e1d0818dbdb9d1c9858dd608a1b60648201526084016101ee565b6001600160a01b038086166000908152600160205260409020546104d691879116886106b1565b6001600160a01b0385811660008181526001602052604090819020549051639006a50f60e01b815260048101929092526024820189905290911690639006a50f906044016020604051808303816000875af1158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190610a66565b506001600160a01b0380861660009081526001602090815260409091205484516104139391909116916105969186018101908601610ada565b886107ce565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17905291516000928392908816916106009190610af7565b6000604051808303816000865af19150503d806000811461063d576040519150601f19603f3d011682016040523d82523d6000602084013e610642565b606091505b5091509150856001600160a01b03163b6000148061065e575081155b8061068557508051158015906106855750808060200190518101906106839190610b13565b155b156106a95785828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b505050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063095ea7b360e01b906064015b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161071e9190610af7565b6000604051808303816000865af19150503d806000811461075b576040519150601f19603f3d011682016040523d82523d6000602084013e610760565b606091505b5091509150846001600160a01b03163b6000148061077c575081155b806107a357508051158015906107a35750808060200190518101906107a19190610b13565b155b156107c75784828260405163e7e40b5b60e01b81526004016101ee93929190610b35565b5050505050565b6040516001600160a01b03838116602483015260448201839052600091829186169063a9059cbb60e01b906064016106e0565b6001600160a01b038116811461081657600080fd5b50565b6000806040838503121561082c57600080fd5b823561083781610801565b9150602083013561084781610801565b809150509250929050565b60006020828403121561086457600080fd5b813561086f81610801565b9392505050565b803563ffffffff8116811461088a57600080fd5b919050565b600080600080600060a086880312156108a757600080fd5b85356108b281610801565b945060208601356108c281610801565b9350604086013592506108d760608701610876565b949793965091946080013592915050565b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c0878903121561091757600080fd5b8635955060208701359450604087013561093081610801565b9350606087013561094081610801565b925061094e60808801610876565b915060a087013567ffffffffffffffff8082111561096b57600080fd5b818901915089601f83011261097f57600080fd5b813581811115610991576109916108e8565b604051601f8201601f19908116603f011681019083821181831017156109b9576109b96108e8565b816040528281528c60208487010111156109d257600080fd5b8260208601602083013760006020848301015280955050505050509295509295509295565b60005b83811015610a125781810151838201526020016109fa565b83811115610a21576000848401525b50505050565b60008151808452610a3f8160208601602086016109f7565b601f01601f19169290920160200192915050565b60208152600061086f6020830184610a27565b600060208284031215610a7857600080fd5b5051919050565b63ffffffff881681526001600160a01b0387811660208301528681166040830152851660608201526080810184905260a0810183905260e060c08201819052600090610acd90830184610a27565b9998505050505050505050565b600060208284031215610aec57600080fd5b815161086f81610801565b60008251610b098184602087016109f7565b9190910192915050565b600060208284031215610b2557600080fd5b8151801515811461086f57600080fd5b6001600160a01b03841681528215156020820152606060408201819052600090610b6190830184610a27565b9594505050505056fea2646970667358221220b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f4319464736f6c634300080d0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda

-----Decoded View---------------
Arg [0] : _connext (address): 0x8f7492DE823025b4CfaAB1D34c58963F2af5DEDA

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008f7492de823025b4cfaab1d34c58963f2af5deda


Deployed Bytecode Sourcemap

20491:2443:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21476:118;;;;;;;;;;-1:-1:-1;21476:118:0;;;;;:::i;:::-;;:::i;:::-;;21386:84;;;;;;;;;;-1:-1:-1;21386:84:0;;;;;:::i;:::-;;:::i;21600:749::-;;;;;;:::i;:::-;;:::i;:::-;;;1712:25:1;;;1700:2;1685:18;21600:749:0;;;;;;;;20637:32;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1912:32:1;;;1894:51;;1882:2;1867:18;20637:32:0;1748:203:1;20736:42:0;;;;;;;;;;-1:-1:-1;20736:42:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;20736:42:0;;;20568:20;;;;;;;;;;-1:-1:-1;20568:20:0;;;;-1:-1:-1;;;;;20568:20:0;;;22473:458;;;;;;;;;;-1:-1:-1;22473:458:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21476:118::-;21213:5;;-1:-1:-1;;;;;21213:5:0;21199:10;:19;21195:68;;21233:20;;-1:-1:-1;;;21233:20:0;;4450:2:1;21233:20:0;;;4432:21:1;4489:1;4469:18;;;4462:29;-1:-1:-1;;;4507:18:1;;;4500:39;4556:18;;21233:20:0;;;;;;;;21195:68;-1:-1:-1;;;;;21561:17:0;;::::1;;::::0;;;:6:::1;:17;::::0;;;;:27;;-1:-1:-1;;;;;;21561:27:0::1;::::0;;;::::1;;::::0;;21476:118::o;21386:84::-;21213:5;;-1:-1:-1;;;;;21213:5:0;21199:10;:19;21195:68;;21233:20;;-1:-1:-1;;;21233:20:0;;4450:2:1;21233:20:0;;;4432:21:1;4489:1;4469:18;;;4462:29;-1:-1:-1;;;4507:18:1;;;4500:39;4556:18;;21233:20:0;4248:332:1;21195:68:0;21448:5:::1;:16:::0;;-1:-1:-1;;;;;;21448:16:0::1;-1:-1:-1::0;;;;;21448:16:0;;;::::1;::::0;;;::::1;::::0;;21386:84::o;21600:749::-;-1:-1:-1;;;;;21821:14:0;;;21777:7;21821:14;;;:6;:14;;;;;;21777:7;;21793:76;;21821:14;21837:7;21854:4;21861:7;21793:27;:76::i;:::-;-1:-1:-1;;;;;21893:14:0;;;;;;;:6;:14;;;;;;;;21876:73;;-1:-1:-1;;;21876:73:0;;;;;4759:51:1;;;;4826:18;;;4819:34;;;21893:14:0;;;;21876:56;;4732:18:1;;21876:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21958:48;21981:6;21989:7;21998;21958:22;:48::i;:::-;22304:9;;;;;;;;-1:-1:-1;22304:9:0;;22020:323;;-1:-1:-1;;;22020:323:0;;-1:-1:-1;;;;;22029:7:0;22020:23;;;;22051:11;;22020:323;;22072:18;;22115:7;;22149:6;;22186:10;;22226:7;;22264:5;;22020:323;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22013:330;21600:749;-1:-1:-1;;;;;;21600:749:0:o;22473:458::-;22674:12;20982:10;-1:-1:-1;;;;;20996:7:0;20982:21;;20964:104;;;;-1:-1:-1;;;20964:104:0;;6189:2:1;20964:104:0;;;6171:21:1;6228:2;6208:18;;;6201:30;6267:34;6247:18;;;6240:62;-1:-1:-1;;;6318:18:1;;;6311:45;6373:19;;20964:104:0;5987:411:1;20964:104:0;-1:-1:-1;;;;;22726:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;22695:55:::1;::::0;22718:6;;22726:14:::1;22742:7:::0;22695:22:::1;:55::i;:::-;-1:-1:-1::0;;;;;22774:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;22757:73;;-1:-1:-1;;;22757:73:0;;::::1;::::0;::::1;4759:51:1::0;;;;4826:18;;;4819:34;;;22774:14:0;;::::1;::::0;22757:56:::1;::::0;4732:18:1;;22757:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;22867:14:0;;::::1;;::::0;;;:6:::1;:14;::::0;;;;;;;;22883:32;;22843:82:::1;::::0;22867:14;;;::::1;::::0;22883:32:::1;::::0;;;;;;;::::1;;:::i;:::-;22917:7;22843:23;:82::i;17774:443::-:0;17946:78;;;-1:-1:-1;;;;;6925:15:1;;;17946:78:0;;;6907:34:1;6977:15;;;6957:18;;;6950:43;7009:18;;;;7002:34;;;17946:78:0;;;;;;;;;;6842:18:1;;;;17946:78:0;;;;;;;-1:-1:-1;;;;;17946:78:0;-1:-1:-1;;;17946:78:0;;;17921:114;;-1:-1:-1;;;;17921:10:0;;;;:114;;17946:78;17921:114;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17885:150;;;;18052:5;-1:-1:-1;;;;;18052:17:0;;18073:1;18052:22;:34;;;;18079:7;18078:8;18052:34;:85;;;-1:-1:-1;18091:11:0;;:16;;;;:45;;;18123:4;18112:24;;;;;;;;;;;;:::i;:::-;18111:25;18091:45;18048:162;;;18177:5;18184:7;18193:4;18161:37;;-1:-1:-1;;;18161:37:0;;;;;;;;;;:::i;18048:162::-;17874:343;;17774:443;;;;:::o;16944:405::-;17093:63;;-1:-1:-1;;;;;4777:32:1;;;17093:63:0;;;4759:51:1;4826:18;;;4819:34;;;17033:12:0;;;;17068:10;;;-1:-1:-1;;;17116:23:0;4732:18:1;;17093:63:0;;;;-1:-1:-1;;17093:63:0;;;;;;;;;;;;;;-1:-1:-1;;;;;17093:63:0;-1:-1:-1;;;;;;17093:63:0;;;;;;;;;;17068:99;;;;17093:63;17068:99;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17032:135;;;;17184:5;-1:-1:-1;;;;;17184:17:0;;17205:1;17184:22;:34;;;;17211:7;17210:8;17184:34;:85;;;-1:-1:-1;17223:11:0;;:16;;;;:45;;;17255:4;17244:24;;;;;;;;;;;;:::i;:::-;17243:25;17223:45;17180:162;;;17309:5;17316:7;17325:4;17293:37;;-1:-1:-1;;;17293:37:0;;;;;;;;;;:::i;17180:162::-;17021:328;;16944:405;;;:::o;16175:413::-;16328:67;;-1:-1:-1;;;;;4777:32:1;;;16328:67:0;;;4759:51:1;4826:18;;;4819:34;;;16268:12:0;;;;16303:10;;;-1:-1:-1;;;16351:24:0;4732:18:1;;16328:67:0;4585:274:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:388::-;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;-1:-1:-1;460:2:1;445:18;;432:32;473:33;432:32;473:33;:::i;:::-;525:7;515:17;;;150:388;;;;;:::o;543:247::-;602:6;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;543:247;-1:-1:-1;;;543:247:1:o;795:163::-;862:20;;922:10;911:22;;901:33;;891:61;;948:1;945;938:12;891:61;795:163;;;:::o;963:598::-;1057:6;1065;1073;1081;1089;1142:3;1130:9;1121:7;1117:23;1113:33;1110:53;;;1159:1;1156;1149:12;1110:53;1198:9;1185:23;1217:31;1242:5;1217:31;:::i;:::-;1267:5;-1:-1:-1;1324:2:1;1309:18;;1296:32;1337:33;1296:32;1337:33;:::i;:::-;1389:7;-1:-1:-1;1443:2:1;1428:18;;1415:32;;-1:-1:-1;1466:37:1;1499:2;1484:18;;1466:37;:::i;:::-;963:598;;;;-1:-1:-1;963:598:1;;1550:3;1535:19;1522:33;;963:598;-1:-1:-1;;963:598:1:o;1956:127::-;2017:10;2012:3;2008:20;2005:1;1998:31;2048:4;2045:1;2038:15;2072:4;2069:1;2062:15;2088:1408;2200:6;2208;2216;2224;2232;2240;2293:3;2281:9;2272:7;2268:23;2264:33;2261:53;;;2310:1;2307;2300:12;2261:53;2346:9;2333:23;2323:33;;2403:2;2392:9;2388:18;2375:32;2365:42;;2457:2;2446:9;2442:18;2429:32;2470:31;2495:5;2470:31;:::i;:::-;2520:5;-1:-1:-1;2577:2:1;2562:18;;2549:32;2590:33;2549:32;2590:33;:::i;:::-;2642:7;-1:-1:-1;2668:38:1;2701:3;2686:19;;2668:38;:::i;:::-;2658:48;;2757:3;2746:9;2742:19;2729:33;2781:18;2822:2;2814:6;2811:14;2808:34;;;2838:1;2835;2828:12;2808:34;2876:6;2865:9;2861:22;2851:32;;2921:7;2914:4;2910:2;2906:13;2902:27;2892:55;;2943:1;2940;2933:12;2892:55;2979:2;2966:16;3001:2;2997;2994:10;2991:36;;;3007:18;;:::i;:::-;3082:2;3076:9;3050:2;3136:13;;-1:-1:-1;;3132:22:1;;;3156:2;3128:31;3124:40;3112:53;;;3180:18;;;3200:22;;;3177:46;3174:72;;;3226:18;;:::i;:::-;3266:10;3262:2;3255:22;3301:2;3293:6;3286:18;3341:7;3336:2;3331;3327;3323:11;3319:20;3316:33;3313:53;;;3362:1;3359;3352:12;3313:53;3418:2;3413;3409;3405:11;3400:2;3392:6;3388:15;3375:46;3463:1;3458:2;3453;3445:6;3441:15;3437:24;3430:35;3484:6;3474:16;;;;;;;2088:1408;;;;;;;;:::o;3501:258::-;3573:1;3583:113;3597:6;3594:1;3591:13;3583:113;;;3673:11;;;3667:18;3654:11;;;3647:39;3619:2;3612:10;3583:113;;;3714:6;3711:1;3708:13;3705:48;;;3749:1;3740:6;3735:3;3731:16;3724:27;3705:48;;3501:258;;;:::o;3764:257::-;3805:3;3843:5;3837:12;3870:6;3865:3;3858:19;3886:63;3942:6;3935:4;3930:3;3926:14;3919:4;3912:5;3908:16;3886:63;:::i;:::-;4003:2;3982:15;-1:-1:-1;;3978:29:1;3969:39;;;;4010:4;3965:50;;3764:257;-1:-1:-1;;3764:257:1:o;4026:217::-;4173:2;4162:9;4155:21;4136:4;4193:44;4233:2;4222:9;4218:18;4210:6;4193:44;:::i;4864:184::-;4934:6;4987:2;4975:9;4966:7;4962:23;4958:32;4955:52;;;5003:1;5000;4993:12;4955:52;-1:-1:-1;5026:16:1;;4864:184;-1:-1:-1;4864:184:1:o;5053:740::-;5390:10;5378:23;;5360:42;;-1:-1:-1;;;;;5476:15:1;;;5471:2;5456:18;;5449:43;5528:15;;;5523:2;5508:18;;5501:43;5580:15;;5575:2;5560:18;;5553:43;5627:3;5612:19;;5605:35;;;5429:3;5656:19;;5649:35;;;5721:3;5715;5700:19;;5693:32;;;5341:4;;5742:45;;5767:19;;5759:6;5742:45;:::i;:::-;5734:53;5053:740;-1:-1:-1;;;;;;;;;5053:740:1:o;6403:259::-;6481:6;6534:2;6522:9;6513:7;6509:23;6505:32;6502:52;;;6550:1;6547;6540:12;6502:52;6582:9;6576:16;6601:31;6626:5;6601:31;:::i;7047:274::-;7176:3;7214:6;7208:13;7230:53;7276:6;7271:3;7264:4;7256:6;7252:17;7230:53;:::i;:::-;7299:16;;;;;7047:274;-1:-1:-1;;7047:274:1:o;7326:277::-;7393:6;7446:2;7434:9;7425:7;7421:23;7417:32;7414:52;;;7462:1;7459;7452:12;7414:52;7494:9;7488:16;7547:5;7540:13;7533:21;7526:5;7523:32;7513:60;;7569:1;7566;7559:12;7608:395;-1:-1:-1;;;;;7805:32:1;;7787:51;;7881:14;;7874:22;7869:2;7854:18;;7847:50;7933:2;7928;7913:18;;7906:30;;;-1:-1:-1;;7953:44:1;;7978:18;;7970:6;7953:44;:::i;:::-;7945:52;7608:395;-1:-1:-1;;;;;7608:395:1:o

Swarm Source

ipfs://b79cb06d6b0bd6b4e6eab11091bbf586421596c2964bf6c45604674cf0f43194

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
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.