ETH Price: $2,928.65 (-4.80%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Exchange151219202022-07-11 14:43:451289 days ago1657550625IN
0xc4ee479d...a8f618d70
0 ETH0.0196895938.51740166
Exchange149752202022-06-16 20:09:211314 days ago1655410161IN
0xc4ee479d...a8f618d70
0 ETH0.0748109151.86942624
Exchange149626212022-06-14 16:18:451316 days ago1655223525IN
0xc4ee479d...a8f618d70
0 ETH0.099701669.91109107
Exchange149548642022-06-13 7:55:481318 days ago1655106948IN
0xc4ee479d...a8f618d70
0 ETH0.03850886134.05813291
Exchange148807452022-05-31 20:24:371330 days ago1654028677IN
0xc4ee479d...a8f618d70
0 ETH0.0294703553.64967125
Exchange148549782022-05-27 15:47:291334 days ago1653666449IN
0xc4ee479d...a8f618d70
0 ETH0.0451951959.72947023
Exchange148262252022-05-22 23:27:271339 days ago1653262047IN
0xc4ee479d...a8f618d70
0 ETH0.0119735523.29974579
Exchange148095962022-05-20 6:41:571342 days ago1653028917IN
0xc4ee479d...a8f618d70
0 ETH0.0107039920.83615516
Exchange147879102022-05-16 18:41:101345 days ago1652726470IN
0xc4ee479d...a8f618d70
0 ETH0.0193499737.64629829
Exchange147836122022-05-16 2:20:161346 days ago1652667616IN
0xc4ee479d...a8f618d70
0 ETH0.0128755315.78999131
Exchange147801422022-05-15 13:13:201347 days ago1652620400IN
0xc4ee479d...a8f618d70
0 ETH0.0244960930.04092888
Exchange147749052022-05-14 17:27:191347 days ago1652549239IN
0xc4ee479d...a8f618d70
0 ETH0.0127140524.74341795
Exchange147744372022-05-14 15:42:211347 days ago1652542941IN
0xc4ee479d...a8f618d70
0 ETH0.0131863725.6583692
Exchange147711792022-05-14 2:53:181348 days ago1652496798IN
0xc4ee479d...a8f618d70
0 ETH0.0160547431.25005312
Exchange147689012022-05-13 18:13:411348 days ago1652465621IN
0xc4ee479d...a8f618d70
0 ETH0.0559071168.56201326
Exchange147683182022-05-13 15:59:511348 days ago1652457591IN
0xc4ee479d...a8f618d70
0 ETH0.0349095667.94836721
Exchange147679352022-05-13 14:30:001348 days ago1652452200IN
0xc4ee479d...a8f618d70
0 ETH0.0593803272.83159602
Exchange147674372022-05-13 12:41:441349 days ago1652445704IN
0xc4ee479d...a8f618d70
0 ETH0.0361779470.64363877
Exchange147668972022-05-13 10:45:441349 days ago1652438744IN
0xc4ee479d...a8f618d70
0 ETH0.0253715349.54226335
Exchange147663422022-05-13 8:33:421349 days ago1652430822IN
0xc4ee479d...a8f618d70
0 ETH0.035755169.12125043
Exchange147658572022-05-13 6:47:451349 days ago1652424465IN
0xc4ee479d...a8f618d70
0 ETH0.0532771173.70190297
Exchange147653032022-05-13 4:39:201349 days ago1652416760IN
0xc4ee479d...a8f618d70
0 ETH0.0914444658.15187792
Exchange147652842022-05-13 4:36:311349 days ago1652416591IN
0xc4ee479d...a8f618d70
0 ETH0.1155611576.97144679
Exchange147651902022-05-13 4:12:531349 days ago1652415173IN
0xc4ee479d...a8f618d70
0 ETH0.1293720386.1699539
Exchange147644232022-05-13 1:11:231349 days ago1652404283IN
0xc4ee479d...a8f618d70
0 ETH0.05692861110.09590446
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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
//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");
    }
}

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

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

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

//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;
}

//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;
}

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

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

//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;
}

//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

API
[{"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"}]

6101a0604052620f42406001553480156200001957600080fd5b5060405162002154380380620021548339810160408190526200003c916200046b565b6001600160601b0319606086811b821660805285901b1660a052600080546001600160a01b031916331790556001600160a01b038316620000c45760405162461bcd60e51b815260206004820152601360248201527f6e756c6c205f67726f436f6e74726f6c6c65720000000000000000000000000060448201526064015b60405180910390fd5b8260038310620001175760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964205f737461626c65636f696e496e64657800000000000000006044820152606401620000bb565b806001600160a01b031663a8fb4c506040518163ffffffff1660e01b815260040160606040518083038186803b1580156200015157600080fd5b505afa15801562000166573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200018c9190620004d1565b8360038110620001ac57634e487b7160e01b600052603260045260246000fd5b60200201516001600160a01b0316610100816001600160a01b031660601b81525050826101208181525050806001600160a01b0316639c8b2cfb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021157600080fd5b505afa15801562000226573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024c919062000447565b6001600160a01b031660c0816001600160a01b031660601b81525050806001600160a01b031663083473ef6040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a257600080fd5b505afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd919062000447565b6001600160a01b031660e0816001600160a01b031660601b81525050806001600160a01b0316639e574a1e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033357600080fd5b505afa15801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e919062000447565b6001600160a01b0316610140816001600160a01b031660601b81525050806001600160a01b031663b1cbf3ad6040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c557600080fd5b505afa158015620003da573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000400919062000447565b6001600160601b0319606091821b81166101605292901b90911661018052506200057a9350505050565b80516001600160a01b03811681146200044257600080fd5b919050565b60006020828403121562000459578081fd5b62000464826200042a565b9392505050565b600080600080600060a0868803121562000483578081fd5b6200048e866200042a565b94506200049e602087016200042a565b9350620004ae604087016200042a565b925060608601519150620004c5608087016200042a565b90509295509295909350565b600060608284031215620004e3578081fd5b82601f830112620004f2578081fd5b604051606081016001600160401b038111828210171562000517576200051762000564565b6040528083606081018610156200052c578384fd5b835b6003811015620005595762000543826200042a565b835260209283019291909101906001016200052e565b509195945050505050565b634e487b7160e01b600052604160045260246000fd5b60805160601c60a05160601c60c05160601c60e05160601c6101005160601c610120516101405160601c6101605160601c6101805160601c611a6a620006ea6000396000818161019c0152610e2501526000818161037a01528181610690015281816107700152610d1f0152600081816103240152818161048a015281816105d901528181610bce01528181610e9601528181610fc8015281816110280152818161108901526110e801526000818161024801528181610739015281816108260152610b7401526000818161040e0152818161045a01528181610522015281816108d801528181610c9901528181610f9401528181610ff3015281816110bd015261111d01526000818161014b015261085d0152600081816102f001528181610c670152610df40152600081816101d00152818161159f015261175a01526000818161027c01528181611413015281816114ff015281816115c70152818161164101526116cf0152611a6a6000f3fe60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101ca57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000081565b34801561027657600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561031e57600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b81600114156104ae57507f00000000000000000000000000000000000000000000000000000000000000006104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000000600f0b60248201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000000602482015260448101859052606481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000060038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018790529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631ccbdcf290610e4d90869085907f000000000000000000000000000000000000000000000000000000000000000090600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f00000000000000000000000000000000000000000000000000000000000000006113d2565b610fc182610b66565b9050610fed7f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f00000000000000000000000000000000000000000000000000000000000000006113d2565b6110b682610500565b90506110e27f000000000000000000000000000000000000000000000000000000000000000082611561565b604080517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081168252602082018590527f000000000000000000000000000000000000000000000000000000000000000016818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f0000000000000000000000000000000000000000000000000000000000000000169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f00000000000000000000000000000000000000000000000000000000000000001690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f000000000000000000000000000000000000000000000000000000000000000091909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef00000000000000000000000049be86d32fcb8fceec21fbe627e98424e1f59b1c000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000010000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31

Deployed Bytecode

0x60806040526004361061012d5760003560e01c80639c8b2cfb116100a5578063bec872b011610074578063d42abed311610059578063d42abed3146103dc578063e9cbd822146103fc578063feaea5861461043057610134565b8063bec872b01461039c578063cfa87fe1146103bc57610134565b80639c8b2cfb146102de5780639e574a1e14610312578063a6f9dae114610346578063b1cbf3ad1461036857610134565b80635825a150116100fc5780637c19f005116100e15780637c19f0051461026a5780638da5cb5b1461029e57806394af2357146102be57610134565b80635825a15014610212578063628fe8cc1461023657610134565b8063083473ef146101395780632e11eb9b1461018a57806335aa6df8146101be5780634f64b2be146101f257610134565b3661013457005b600080fd5b34801561014557600080fd5b5061016d7f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe781565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561019657600080fd5b5061016d7f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3181565b3480156101ca57600080fd5b5061016d7f00000000000000000000000049be86d32fcb8fceec21fbe627e98424e1f59b1c81565b3480156101fe57600080fd5b5061016d61020d3660046118e4565b610450565b34801561021e57600080fd5b5061022860015481565b604051908152602001610181565b34801561024257600080fd5b506102287f000000000000000000000000000000000000000000000000000000000000000181565b34801561027657600080fd5b5061016d7f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef81565b3480156102aa57600080fd5b5060005461016d906001600160a01b031681565b3480156102ca57600080fd5b506102286102d93660046118e4565b610500565b3480156102ea57600080fd5b5061016d7f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081565b34801561031e57600080fd5b5061016d7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c81565b34801561035257600080fd5b50610366610361366004611848565b610973565b005b34801561037457600080fd5b5061016d7f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe81565b3480156103a857600080fd5b506103666103b73660046118e4565b610a86565b3480156103c857600080fd5b506102286103d73660046118e4565b610b66565b3480156103e857600080fd5b506102286103f7366004611914565b610f2f565b34801561040857600080fd5b5061016d7f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b34801561043c57600080fd5b5061022861044b366004611862565b61117c565b60008161047e57507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486104fb565b81600114156104ae57507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6104fb565b60405162461bcd60e51b815260206004820152600e60248201527f696e76616c6964205f696e64657800000000000000000000000000000000000060448201526064015b60405180910390fd5b919050565b6040516370a0823160e01b815230600482015260009081906001600160a01b037f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4816906370a082319060240160206040518083038186803b15801561056457600080fd5b505afa158015610578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061059c91906118fc565b6040517f11d1dcd2000000000000000000000000000000000000000000000000000000008152600481018590529091506000906001600160a01b037f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16906311d1dcd29060240160206040518083038186803b15801561061b57600080fd5b505afa15801561062f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065391906118fc565b6040517fe8ad4885000000000000000000000000000000000000000000000000000000008152600481018290529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe169063e8ad48859060240160206040518083038186803b1580156106d257600080fd5b505afa1580156106e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a91906118fc565b6040517f10a2862a000000000000000000000000000000000000000000000000000000008152600481018490527f0000000000000000000000000000000000000000000000000000000000000001600f0b60248201529091506000906001600160a01b037f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe16906310a2862a9060440160206040518083038186803b1580156107b257600080fd5b505afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906118fc565b905060006107f78261139f565b6040517f9793869b000000000000000000000000000000000000000000000000000000008152600060048201527f0000000000000000000000000000000000000000000000000000000000000001602482015260448101859052606481018290529091507f000000000000000000000000641befa4db601578a64f0fc1f4e89e9869268fe76001600160a01b031690639793869b90608401600060405180830381600087803b1580156108a957600080fd5b505af11580156108bd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b031691506370a082319060240160206040518083038186803b15801561092357600080fd5b505afa158015610937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095b91906118fc565b90506109678682611a07565b98975050505050505050565b6000546001600160a01b031633146109bc5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001600160a01b038116610a125760405162461bcd60e51b815260206004820152600d60248201527f696e76616c696420696e7075740000000000000000000000000000000000000060448201526064016104f2565b600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040805182815260208101929092527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91015b60405180910390a150565b6000546001600160a01b03163314610acf5760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b6001548114158015610ae557506305f5e1008111155b610b315760405162461bcd60e51b815260206004820152601060248201527f696e76616c696420736c6970706167650000000000000000000000000000000060448201526064016104f2565b60018190556040518181527febfb7b9839a38a6c5d27e43aeb27cf7c47a40bde9262cabba968aecd6336ea1090602001610a7b565b6000610b70611813565b82817f000000000000000000000000000000000000000000000000000000000000000160038110610bb157634e487b7160e01b600052603260045260246000fd5b60200201526040516370a0823160e01b81523060048201526000907f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b0316906370a082319060240160206040518083038186803b158015610c1857600080fd5b505afa158015610c2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5091906118fc565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f4081166004830152602482018790529192507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489091169063095ea7b390604401602060405180830381600087803b158015610cdf57600080fd5b505af1158015610cf3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d179190611894565b506000610dc17f000000000000000000000000bf8c81b2977b10f13a4ac542e72969a6e123f5fe6001600160a01b03166366c2bdcf8560016040518363ffffffff1660e01b8152600401610d6c929190611968565b60206040518083038186803b158015610d8457600080fd5b505afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dbc91906118fc565b61139f565b6040517f1ccbdcf20000000000000000000000000000000000000000000000000000000081529091506001600160a01b037f000000000000000000000000b7207ea9446dca1dec1c1fc93c6fcdf8b4a44f401690631ccbdcf290610e4d90869085907f0000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a3190600401611985565b600060405180830381600087803b158015610e6757600080fd5b505af1158015610e7b573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092507f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b031691506370a082319060240160206040518083038186803b158015610ee157600080fd5b505afa158015610ef5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1991906118fc565b9050610f258382611a07565b9695505050505050565b6000610f3b83856119b0565b600114610f8a5760405162461bcd60e51b815260206004820152600f60248201527f696e76616c696420696e6465786573000000000000000000000000000000000060448201526064016104f2565b8361108457610fb87f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486113d2565b610fc182610b66565b9050610fed7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c82611561565b604080517f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b039081168252602082018590527f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c16818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a1611175565b6110ad7f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6113d2565b6110b682610500565b90506110e27f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4882611561565b604080517f0000000000000000000000003adb04e127b9c0a5d36094125669d4603ac52a0c6001600160a01b039081168252602082018590527f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4816818301526060810183905290517fdb587d878116df0bdd4fe154699aa2c5f439da001cc811dfd05d9f589fc5a8ee9181900360800190a15b9392505050565b600080546001600160a01b031633146111c65760405162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5cd95960a21b60448201526064016104f2565b60006001600160a01b038316611232576040514792506001600160a01b038516908390600081818185875af1925050503d8060008114611222576040519150601f19603f3d011682016040523d82523d6000602084013e611227565b606091505b50508091505061134b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a082319060240160206040518083038186803b15801561127157600080fd5b505afa158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a991906118fc565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038681166004830152602482018390529193509084169063a9059cbb90604401602060405180830381600087803b15801561131057600080fd5b505af1158015611324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113489190611894565b90505b806113985760405162461bcd60e51b815260206004820152601160248201527f6661696c656420746f207265636f76657200000000000000000000000000000060448201526064016104f2565b5092915050565b60006305f5e1006001546305f5e1006113b89190611a07565b6113c290846119e8565b6113cc91906119c8565b92915050565b6040517f5aca41f60000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0382811660248301526000917f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef90911690635aca41f69060440160206040518083038186803b15801561145757600080fd5b505afa15801561146b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148f91906118b4565b90506fffffffffffffffffffffffffffffffff81161561155d576040517fd514da500000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301526fffffffffffffffffffffffffffffffff831660448301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef169063d514da50906064015b600060405180830381600087803b15801561154457600080fd5b505af1158015611558573d6000803e3d6000fd5b505050505b5050565b6001600160a01b03821661162a576040517f2d2da8060000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000049be86d32fcb8fceec21fbe627e98424e1f59b1c811660048301527f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef1690632d2da8069083906024016000604051808303818588803b15801561160c57600080fd5b505af1158015611620573d6000803e3d6000fd5b505050505061155d565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef811660048301526024820183905283169063095ea7b390604401602060405180830381600087803b15801561169457600080fd5b505af11580156116a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116cc9190611894565b507f000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef6001600160a01b031663e17376b5836117068461178a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b0392831660048201526cffffffffffffffffffffffffff90911660248201527f00000000000000000000000049be86d32fcb8fceec21fbe627e98424e1f59b1c91909116604482015260640161152a565b60006cffffffffffffffffffffffffff82111561180f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f303420626974730000000000000000000000000000000000000000000000000060648201526084016104f2565b5090565b60405180606001604052806003906020820280368337509192915050565b80356001600160a01b03811681146104fb57600080fd5b600060208284031215611859578081fd5b61117582611831565b60008060408385031215611874578081fd5b61187d83611831565b915061188b60208401611831565b90509250929050565b6000602082840312156118a5578081fd5b81518015158114611175578182fd5b6000602082840312156118c5578081fd5b81516fffffffffffffffffffffffffffffffff81168114611175578182fd5b6000602082840312156118f5578081fd5b5035919050565b60006020828403121561190d578081fd5b5051919050565b600080600060608486031215611928578081fd5b505081359360208301359350604090920135919050565b8060005b6003811015611962578151845260209384019390910190600101611943565b50505050565b60808101611976828561193f565b82151560608301529392505050565b60a08101611993828661193f565b8360608301526001600160a01b0383166080830152949350505050565b600082198211156119c3576119c3611a1e565b500190565b6000826119e357634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615611a0257611a02611a1e565b500290565b600082821015611a1957611a19611a1e565b500390565b634e487b7160e01b600052601160045260246000fdfea2646970667358221220b8bae2c718f2dd8d3c81210ebb9416ecf757581aff4bca05fdde97f420ed1d3564736f6c63430008030033

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

000000000000000000000000abea9132b05a70803a4e85094fd0e1800777fbef00000000000000000000000049be86d32fcb8fceec21fbe627e98424e1f59b1c000000000000000000000000cc5c60a319d33810b9eab9764717eef84defb8f400000000000000000000000000000000000000000000000000000000000000010000000000000000000000002f6579f6031e85b8862848b90118bb12c0ea5a31

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

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


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