ETH Price: $3,251.64 (-2.27%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Exchange151180362022-07-11 0:10:49914 days ago1657498249IN
0x06E36eF6...1e0FD3711
0 ETH0.0073440714.199
Exchange149804722022-06-17 17:46:13937 days ago1655487973IN
0x06E36eF6...1e0FD3711
0 ETH0.0247326447.66948957
Exchange149751682022-06-16 19:56:13938 days ago1655409373IN
0x06E36eF6...1e0FD3711
0 ETH0.0152822531.07747379
Exchange149660712022-06-15 6:28:52939 days ago1655274532IN
0x06E36eF6...1e0FD3711
0 ETH0.0105913937.83222483
Exchange149568382022-06-13 16:04:36941 days ago1655136276IN
0x06E36eF6...1e0FD3711
0 ETH0.06841505132.60426954
Exchange148921252022-06-02 16:59:19952 days ago1654189159IN
0x06E36eF6...1e0FD3711
0 ETH0.0303119958.37694744
Exchange147846912022-05-16 6:30:17969 days ago1652682617IN
0x06E36eF6...1e0FD3711
0 ETH0.013635827.72039937
Exchange147819762022-05-15 20:07:49970 days ago1652645269IN
0x06E36eF6...1e0FD3711
0 ETH0.0127374325.89794086
Exchange147722762022-05-14 7:20:46971 days ago1652512846IN
0x06E36eF6...1e0FD3711
0 ETH0.0160958532.7327796
Exchange147720092022-05-14 6:13:43971 days ago1652508823IN
0x06E36eF6...1e0FD3711
0 ETH0.0151097430.72135149
Exchange147687042022-05-13 17:29:36972 days ago1652462976IN
0x06E36eF6...1e0FD3711
0 ETH0.0132144454.27278224
Exchange147679392022-05-13 14:31:21972 days ago1652452281IN
0x06E36eF6...1e0FD3711
0 ETH0.039875281.06561419
Exchange147674322022-05-13 12:41:02972 days ago1652445662IN
0x06E36eF6...1e0FD3711
0 ETH0.0299913573.84959549
Exchange147668972022-05-13 10:45:44972 days ago1652438744IN
0x06E36eF6...1e0FD3711
0 ETH0.0201240149.54226335
Exchange147659972022-05-13 7:16:36972 days ago1652426196IN
0x06E36eF6...1e0FD3711
0 ETH0.0298437960.281
Exchange147659082022-05-13 6:58:03972 days ago1652425083IN
0x06E36eF6...1e0FD3711
0 ETH0.0276045755.76759968
Exchange147651902022-05-13 4:12:53973 days ago1652415173IN
0x06E36eF6...1e0FD3711
0 ETH0.0426608486.1699539
Exchange147644232022-05-13 1:11:23973 days ago1652404283IN
0x06E36eF6...1e0FD3711
0 ETH0.08774214110.09590446
Exchange147632512022-05-12 20:48:10973 days ago1652388490IN
0x06E36eF6...1e0FD3711
0 ETH0.0440568988.96931386
Exchange147513802022-05-10 23:17:48975 days ago1652224668IN
0x06E36eF6...1e0FD3711
0 ETH0.0184670753.78718963
Exchange147506902022-05-10 20:37:19975 days ago1652215039IN
0x06E36eF6...1e0FD3711
0 ETH0.0256552450.67102494
Exchange147480432022-05-10 10:28:02975 days ago1652178482IN
0x06E36eF6...1e0FD3711
0 ETH0.055594434.93219189
Exchange147469302022-05-10 5:58:58975 days ago1652162338IN
0x06E36eF6...1e0FD3711
0 ETH0.0882256357.51341661
Exchange147448412022-05-09 21:58:41976 days ago1652133521IN
0x06E36eF6...1e0FD3711
0 ETH0.0309596861.74734441
Exchange147180662022-05-05 15:39:23980 days ago1651765163IN
0x06E36eF6...1e0FD3711
0 ETH0.0254236163.40433584
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:
GroGvtBridgeSwapper

Compiler Version
v0.8.3+commit.8d00100c

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 10 : GroGvtBridgeSwapper.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

import "./ZkSyncBridgeSwapper.sol";
import "./interfaces/IGroController.sol";
import "./interfaces/IGroToken.sol";
import "./interfaces/IGroDepositHandler.sol";
import "./interfaces/IGroWithdrawHandler.sol";
import "./interfaces/IGroBuoy.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

/**
 * @notice Exchanges a stablecoin for Gro Vault LP tokens.
 * Example indexes:
 * 0: DAI
 * 1: GVT
 */
contract GroGvtBridgeSwapper is ZkSyncBridgeSwapper {

    address public immutable depositHandler;
    address public immutable withdrawHandler;
    address public immutable stablecoin;
    uint256 public immutable stablecoinIndex;
    address public immutable gvt;
    address public immutable buoy;
    address public immutable groReferral;

    constructor(
        address _zkSync,
        address _l2Account,
        address _groController,
        uint256 _stablecoinIndex,
        address _groReferral
    )
        ZkSyncBridgeSwapper(_zkSync, _l2Account)
    {
        require(_groController != address(0), "null _groController");
        IGroController controller = IGroController(_groController);

        require(_stablecoinIndex < 3, "invalid _stablecoinIndex");
        stablecoin = controller.stablecoins()[_stablecoinIndex];
        stablecoinIndex = _stablecoinIndex;
        depositHandler = controller.depositHandler();
        withdrawHandler = controller.withdrawHandler();
        gvt = controller.gvt();
        buoy = controller.buoy();
        groReferral = _groReferral;
    }

    function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external override returns (uint256 amountOut) {
        require(_indexIn + _indexOut == 1, "invalid indexes");

        if (_indexIn == 0) {
            transferFromZkSync(stablecoin);
            amountOut = swapStablecoinForGvt(_amountIn);
            transferToZkSync(gvt, amountOut);
            emit Swapped(stablecoin, _amountIn, gvt, amountOut);
        } else {
            transferFromZkSync(gvt);
            amountOut = swapGvtForStablecoin(_amountIn);
            transferToZkSync(stablecoin, amountOut);
            emit Swapped(gvt, _amountIn, stablecoin, amountOut);
        }
    }

    function swapStablecoinForGvt(uint256 _amountIn) public returns (uint256) {
        uint256[3] memory inAmounts;
        inAmounts[stablecoinIndex] = _amountIn;
        uint256 balanceBefore = IGroToken(gvt).balanceOf(address(this));

        IERC20(stablecoin).approve(depositHandler, _amountIn);
        uint256 minLpAmount = getMinAmountOut(IGroBuoy(buoy).stableToLp(inAmounts, true));
        IGroDepositHandler(depositHandler).depositGvt(inAmounts, minLpAmount, groReferral);

        uint256 balanceAfter = IGroToken(gvt).balanceOf(address(this));
        return balanceAfter - balanceBefore;
    }

    function swapGvtForStablecoin(uint256 _amountIn) public returns (uint256) {
        uint256 balanceBefore = IERC20(stablecoin).balanceOf(address(this));

        uint256 usdAmount = IGroToken(gvt).getShareAssets(_amountIn);
        uint256 lpAmount = IGroBuoy(buoy).usdToLp(usdAmount);
        uint256 stableAmount = IGroBuoy(buoy).singleStableFromUsd(usdAmount, int128(uint128(stablecoinIndex)));
        uint256 minAmount = getMinAmountOut(stableAmount);
        IGroWithdrawHandler(withdrawHandler).withdrawByStablecoin(false, stablecoinIndex, lpAmount, minAmount);

        uint256 balanceAfter = IERC20(stablecoin).balanceOf(address(this));
        return balanceAfter - balanceBefore;
    }

    function tokens(uint256 _index) external view returns (address) {
        if (_index == 0) {
            return stablecoin;
        } else if (_index == 1) {
            return gvt;
        }
        revert("invalid _index");
    }
}

File 2 of 10 : ZkSyncBridgeSwapper.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

import "./interfaces/IZkSync.sol";
import "./interfaces/IBridgeSwapper.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

abstract contract ZkSyncBridgeSwapper is IBridgeSwapper {

    // The owner of the contract
    address public owner;
    // The max slippage accepted for swapping. Defaults to 1% with 6 decimals.
    uint256 public slippagePercent = 1e6;

    // The ZkSync bridge contract
    address public immutable zkSync;
    // The L2 market maker account
    address public immutable l2Account;

    address constant internal ETH_TOKEN = address(0);

    event OwnerChanged(address _owner, address _newOwner);
    event SlippageChanged(uint256 _slippagePercent);

    modifier onlyOwner {
        require(msg.sender == owner, "unauthorised");
        _;
    }

    constructor(address _zkSync, address _l2Account) {
        zkSync = _zkSync;
        l2Account = _l2Account;
        owner = msg.sender;
    }

    function changeOwner(address _newOwner) external onlyOwner {
        require(_newOwner != address(0), "invalid input");
        owner = _newOwner;
        emit OwnerChanged(owner, _newOwner);
    }

    function changeSlippage(uint256 _slippagePercent) external onlyOwner {
        require(_slippagePercent != slippagePercent && _slippagePercent <= 100e6, "invalid slippage");
        slippagePercent = _slippagePercent;
        emit SlippageChanged(slippagePercent);
    }

    /**
    * @dev Check if there is a pending balance to withdraw in zkSync and withdraw it if applicable.
    * @param _token The token to withdraw.
    */
    function transferFromZkSync(address _token) internal {
        uint128 pendingBalance = IZkSync(zkSync).getPendingBalance(address(this), _token);
        if (pendingBalance > 0) {
            IZkSync(zkSync).withdrawPendingBalance(payable(address(this)), _token, pendingBalance);
        }
    }

    /**
    * @dev Deposit the ETH or ERC20 token to zkSync.
    * @param _outputToken The token that was given.
    * @param _amountOut The amount of given token.
    */
    function transferToZkSync(address _outputToken, uint256 _amountOut) internal {
        if (_outputToken == ETH_TOKEN) {
            // deposit Eth to L2 bridge
            IZkSync(zkSync).depositETH{value: _amountOut}(l2Account);
        } else {
            // approve the zkSync bridge to take the output token
            IERC20(_outputToken).approve(zkSync, _amountOut);
            // deposit the output token to the L2 bridge
            IZkSync(zkSync).depositERC20(IERC20(_outputToken), toUint104(_amountOut), l2Account);
        }
    }

    /**
    * @dev Safety method to recover ETH or ERC20 tokens that are sent to the contract by error.
    * @param _token The token to recover.
    */
    function recoverToken(address _recipient, address _token) external onlyOwner returns (uint256 balance) {
        bool success;
        if (_token == ETH_TOKEN) {
            balance = address(this).balance;
            (success, ) = _recipient.call{value: balance}("");
        } else {
            balance = IERC20(_token).balanceOf(address(this));
            success = IERC20(_token).transfer(_recipient, balance);
        }
        require(success, "failed to recover");
    }

    /**
     * @dev fallback method to make sure we can receive ETH
     */
    receive() external payable {
        
    }

    /**
     * @dev Returns the minimum accepted out amount.
     */
    function getMinAmountOut(uint256 _amountIn) internal view returns (uint256) {
        return _amountIn * (100e6 - slippagePercent) / 100e6;
    }

    /**
     * @dev Returns the downcasted uint104 from uint256, reverting on
     * overflow (when the input is greater than largest uint104).
     */
    function toUint104(uint256 value) internal pure returns (uint104) {
        require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits");
        return uint104(value);
    }
}

File 3 of 10 : IGroController.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

interface IGroController {

    function DAI() external view returns (address);
    function USDC() external view returns (address);
    function USDT() external view returns (address);

    function stablecoins() external view returns (address[3] memory);
    function buoy() external view returns (address);
    function depositHandler() external view returns (address);
    function withdrawHandler() external view returns (address);
    function gvt() external view returns (address);
    function pwrd() external view returns (address);
}

File 4 of 10 : IGroToken.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

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

interface IGroToken is IERC20 {
    function pricePerShare() external view returns (uint256);

    function getShareAssets(uint256) external view returns (uint256);
}

File 5 of 10 : IGroDepositHandler.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

interface IGroDepositHandler {

    function depositGvt(
        uint256[3] calldata inAmounts,
        uint256 minAmount,
        address referral
    ) external;

    function depositPwrd(
        uint256[3] calldata inAmounts,
        uint256 minAmount,
        address referral
    ) external;
}

File 6 of 10 : IGroWithdrawHandler.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

interface IGroWithdrawHandler {

    function withdrawalFee(bool pwrd) external view returns (uint256);

    function withdrawByLPToken(
        bool pwrd,
        uint256 lpAmount,
        uint256[3] calldata minAmounts
    ) external;

    function withdrawByStablecoin(
        bool pwrd,
        uint256 index,
        uint256 lpAmount,
        uint256 minAmount
    ) external;

    function withdrawAllSingle(
        bool pwrd,
        uint256 index,
        uint256 minAmount
    ) external;

    function withdrawAllBalanced(bool pwrd, uint256[3] calldata minAmounts) external;
}

File 7 of 10 : IGroBuoy.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

interface IGroBuoy {
    function safetyCheck() external view returns (bool);

    function updateRatios() external returns (bool);

    function updateRatiosWithTolerance(uint256 tolerance) external returns (bool);

    function lpToUsd(uint256 inAmount) external view returns (uint256);

    function usdToLp(uint256 inAmount) external view returns (uint256);

    function stableToUsd(uint256[3] calldata inAmount, bool deposit) external view returns (uint256);

    function stableToLp(uint256[3] calldata inAmount, bool deposit) external view returns (uint256);

    function singleStableFromLp(uint256 inAmount, int128 i) external view returns (uint256);

    function getVirtualPrice() external view returns (uint256);

    function singleStableFromUsd(uint256 inAmount, int128 i) external view returns (uint256);

    function singleStableToUsd(uint256 inAmount, uint256 i) external view returns (uint256);
}

File 8 of 10 : IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}

File 9 of 10 : IZkSync.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

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

interface IZkSync {
    function getPendingBalance(address _address, address _token) external view returns (uint128);
    function withdrawPendingBalance(address payable _owner, address _token, uint128 _amount) external;
    function depositETH(address _zkSyncAddress) external payable;
    function depositERC20(IERC20 _token, uint104 _amount, address _zkSyncAddress) external;
}

File 10 of 10 : IBridgeSwapper.sol
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.3;

interface IBridgeSwapper {
    event Swapped(address _inputToken, uint256 _amountIn, address _outputToken, uint256 _amountOut);

    /**
    * @notice Perform an exchange between two tokens
    * @dev Index values can usually be found via the constructor arguments (if not hardcoded)
    * @param _indexIn Index value for the token to send
    * @param _indexOut Index valie of the token to receive
    * @param _amountIn Amount of `_indexIn` being exchanged
    * @return Actual amount of `_indexOut` received
    */
    function exchange(uint256 _indexIn, uint256 _indexOut, uint256 _amountIn) external returns (uint256);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 1000
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_zkSync","type":"address"},{"internalType":"address","name":"_l2Account","type":"address"},{"internalType":"address","name":"_groController","type":"address"},{"internalType":"uint256","name":"_stablecoinIndex","type":"uint256"},{"internalType":"address","name":"_groReferral","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address","name":"_newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"SlippageChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_inputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountIn","type":"uint256"},{"indexed":false,"internalType":"address","name":"_outputToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountOut","type":"uint256"}],"name":"Swapped","type":"event"},{"inputs":[],"name":"buoy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_slippagePercent","type":"uint256"}],"name":"changeSlippage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_indexIn","type":"uint256"},{"internalType":"uint256","name":"_indexOut","type":"uint256"},{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"exchange","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"groReferral","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gvt","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"l2Account","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"recoverToken","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"slippagePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stablecoinIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapGvtForStablecoin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amountIn","type":"uint256"}],"name":"swapStablecoinForGvt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"tokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawHandler","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"zkSync","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6101a0604052620f42406001553480156200001957600080fd5b5060405162002154380380620021548339810160408190526200003c916200046b565b6001600160601b0319606086811b821660805285901b1660a052600080546001600160a01b031916331790556001600160a01b038316620000c45760405162461bcd60e51b815260206004820152601360248201527f6e756c6c205f67726f436f6e74726f6c6c65720000000000000000000000000060448201526064015b60405180910390fd5b8260038310620001175760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964205f737461626c65636f696e496e64657800000000000000006044820152606401620000bb565b806001600160a01b031663a8fb4c506040518163ffffffff1660e01b815260040160606040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620004d1565b8360038110620001ac57634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b0316610100816001600160a01b031660601b81525050826101208181525050806001600160a01b0316639c8b2cfb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c919062000447565b6001600160a01b031660c0816001600160a01b031660601b81525050806001600160a01b031663083473ef6040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000447565b6001600160a01b031660e0816001600160a01b031660601b81525050806001600160a01b0316639e574a1e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000447565b6001600160a01b0316610140816001600160a01b031660601b81525050806001600160a01b031663b1cbf3ad6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c557600080fd5b505afa158015620003da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000400919062000447565b6001600160601b0319606091821b81166101605292901b90911661018052506200057a9350505050565b80516001600160a01b03811681146200044257600080fd5b919050565b60006020828403121562000459578081fd5b62000464826200042a565b9392505050565b600080600080600060a0868803121562000483578081fd5b6200048e866200042a565b94506200049e602087016200042a565b9350620004ae604087016200042a565b925060608601519150620004c5608087016200042a565b90509295509295909350565b600060608284031215620004e3578081fd5b82601f830112620004f2578081fd5b604051606081016001600160401b038111828210171562000517576200051762000564565b6040528083606081018610156200052c578384fd5b835b6003811015620005595762000543826200042a565b835260209283019291909101906001016200052e565b509195945050505050565b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405160601c6101605160601c6101805160601c611a6a620006ea6000396000818161019c0152610e2501526000818161037a01528181610690015281816107700152610d1f0152600081816103240152818161048a015281816105d901528181610bce01528181610e9601528181610fc8015281816110280152818161108901526110e801526000818161024801528181610739015281816108260152610b7401526000818161040e0152818161045a01528181610522015281816108d801528181610c9901528181610f9401528181610ff3015281816110bd015261111d01526000818161014b015261085d0152600081816102f001528181610c670152610df40152600081816101d00152818161159f015261175a01526000818161027c01528181611413015281816114ff015281816115c70152818161164101526116cf0152611a6a6000f3fe60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ca57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031e57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b81600114156104ae57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631ccbdcf290610e4d90869085907f000000000000000000000000000000000000000000000000000000000000000090600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f00000000000000000000000000000000000000000000000000000000000000006113d2565b610fc182610b66565b9050610fed7f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f00000000000000000000000000000000000000000000000000000000000000006113d2565b6110b682610500565b90506110e27f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000000000000000000000000000000000000000000091909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31

Deployed Bytecode

0x60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3181565b3480156101ca57600080fd5b5061016d7f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d381565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef81565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081565b34801561031e57600080fd5b5061016d7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c81565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe81565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f81565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6104fb565b81600114156104ae57507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe16906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe76001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081166004830152602482018790529192507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f9091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe6001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f401690631ccbdcf290610e4d90869085907f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3190600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6113d2565b610fc182610b66565b9050610fed7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c82611561565b604080517f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f6001600160a01b039081168252602082018590527f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d2565b6110b682610500565b90506110e27f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f82611561565b604080517f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b039081168252602082018590527f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef90911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3811660048301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef1690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef6001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d391909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033

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

000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000000000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31

-----Decoded View---------------
Arg [0] : _zkSync (address): 0xaBEA9132b05A70803a4E85094fD0e1800777fBEF
Arg [1] : _l2Account (address): 0xe4C0297BA4722D702a19cf0aB95b24658e8ad7D3
Arg [2] : _groController (address): 0xCC5c60A319D33810b9EaB9764717EeF84deFB8F4
Arg [3] : _stablecoinIndex (uint256): 0
Arg [4] : _groReferral (address): 0x2F6579F6031E85b8862848b90118Bb12c0ea5a31

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef
Arg [1] : 000000000000000000000000e4c0297ba4722d702a19cf0ab95b24658e8ad7d3
Arg [2] : 000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f4
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31


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.