Overview
ETH Balance
ETH Value
Less Than $0.01 (@ $3,690.63/ETH)Token Holdings
Could not find any matches!
- ERC-20 Tokens (21)0 DAIDai Stableco... (DAI)$0.00@0.9990 FRAXFrax (FRAX)$0.00@0.99520 tBTCOptimism tBT... (tBTC)$0.00@96,798.000 WETHWrapped Ethe... (WETH)$0.00@3,692.300 wstETHWrapped liqu... (wstETH)$0.00@4,403.810 OPOptimism (OP)$0.00@2.21170.000001 USDCUSD Coin (USDC)$0.00@0.998515,000 WLD [ WWW.GET-WLD.ORG ] Visit to claim rewardERC-20: ! (WLD [ ...)43,767 BRC-20.WSERC-20: ! BRC-20.... (BRC-20...)50,000 0ERC-20: B O N U S... (0)0 CRVCurve DAO Token$0.00@1.140 2BTC-fERC-20: Curve.fi ... (2BTC-f)10,000 $ERC-20: E T H - B... ($)0 USDGLOGlo Dollar$0.00@1.00060 USDMMountain Protocol USD$0.00@0.99770.000001 USDVUSDV0 LUSDLUSD Stablecoin$0.00@0.99550 MIMMagic Internet Money$0.00@0.99591 TokenERC-20 TOKEN*[Spam]13,500 TokenERC-20 TOKEN*[Spam]300 TokenERC-20 TOKEN*[Spam]NFT Tokens (28)Airdrop+$50 000 (BONUS-ETH.NET) 🎁ERC-1155tw1$100,000 SHibERC-1155tw1$100,000 SHibERC-1155Airdrop$50 000 FOR FREEERC-1155Airdrop$50 000 FOR FREEERC-1155hurry Up!$5O OOO FOR FREEERC-1155EthereumEthereumERC-1155$FLOKIFLOKI AIRDROP AT floki-crypto.onlineERC-1155ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]
Latest 25 from a total of 12,875 transactions
Transaction Hash MethodBlockFromToExchange 129039163 2024-12-08 16:58:23 43 hrs ago 1733677103 IN 0 ETH$0.00 0.000001116292 0.00140107 Exchange 128964535 2024-12-06 23:30:47 3 days ago 1733527847 IN 0 ETH$0.00 0.000003199463 0.00140216 Exchange 128962786 2024-12-06 22:32:29 3 days ago 1733524349 IN 0 ETH$0.00 0.000001736839 0.0014015 Exchange 128613197 2024-11-28 20:19:31 11 days ago 1732825171 IN 0 ETH$0.00 0.000022675926 0.00140036 Exchange 128575105 2024-11-27 23:09:47 12 days ago 1732748987 IN 0 ETH$0.00 0.00000120154 0.00103566 Exchange 128406688 2024-11-24 1:35:53 16 days ago 1732412153 IN 0 ETH$0.00 0.000000817478 0.0014007 Exchange 128313290 2024-11-21 21:42:37 18 days ago 1732225357 IN 0 ETH$0.00 0.000000746021 0.00140765 Exchange 128312997 2024-11-21 21:32:51 18 days ago 1732224771 IN 0 ETH$0.00 0.000000464567 0.00140582 Exchange 128034072 2024-11-15 10:35:21 25 days ago 1731666921 IN 0 ETH$0.00 0.000001109053 0.00140111 Exchange 127710119 2024-11-07 22:36:55 32 days ago 1731019015 IN 0 ETH$0.00 0.000000918694 0.00140077 Exchange 127619232 2024-11-05 20:07:21 34 days ago 1730837241 IN 0 ETH$0.00 0.000002578305 0.0014005 Exchange 127511620 2024-11-03 8:20:17 37 days ago 1730622017 IN 0 ETH$0.00 0.000000605087 0.00140086 Exchange 127257243 2024-10-28 11:01:03 43 days ago 1730113263 IN 0 ETH$0.00 0.000001051219 0.00140356 Exchange 127256658 2024-10-28 10:41:33 43 days ago 1730112093 IN 0 ETH$0.00 0.000001101358 0.00140375 Exchange 127245353 2024-10-28 4:24:43 43 days ago 1730089483 IN 0 ETH$0.00 0.000000649288 0.00140565 Exchange 126966605 2024-10-21 17:33:07 49 days ago 1729531987 IN 0 ETH$0.00 0.000000742451 0.00177408 Exchange 126966136 2024-10-21 17:17:29 49 days ago 1729531049 IN 0 ETH$0.00 0.000000741002 0.00179538 Exchange 126459623 2024-10-09 23:53:43 61 days ago 1728518023 IN 0 ETH$0.00 0.000008567564 0.01384086 Exchange 126459132 2024-10-09 23:37:21 61 days ago 1728517041 IN 0 ETH$0.00 0.000009024984 0.01453314 Exchange 126448357 2024-10-09 17:38:11 61 days ago 1728495491 IN 0 ETH$0.00 0.00000348708 0.00667341 Exchange 126448219 2024-10-09 17:33:35 61 days ago 1728495215 IN 0 ETH$0.00 0.000003596858 0.00655953 Exchange 126448147 2024-10-09 17:31:11 61 days ago 1728495071 IN 0 ETH$0.00 0.000003431247 0.00637509 Exchange 126448113 2024-10-09 17:30:03 61 days ago 1728495003 IN 0 ETH$0.00 0.000003361316 0.00643896 Exchange 126448041 2024-10-09 17:27:39 61 days ago 1728494859 IN 0 ETH$0.00 0.00000335699 0.00625252 Exchange 126448005 2024-10-09 17:26:27 61 days ago 1728494787 IN 0 ETH$0.00 0.000003377402 0.00620062 Latest 25 internal transactions (View All)
Advanced mode:Parent Transaction Hash Block From To 128575105 2024-11-27 23:09:47 12 days ago 1732748987 0.200554305948265 ETH$740.17 128575105 2024-11-27 23:09:47 12 days ago 1732748987 0.200554305948265 ETH$740.17 126070269 2024-09-30 23:35:15 70 days ago 1727739315 0.001984762283583 ETH$7.33 126070269 2024-09-30 23:35:15 70 days ago 1727739315 0.001984762283583 ETH$7.33 126070191 2024-09-30 23:32:39 70 days ago 1727739159 0.005938773792752 ETH$21.92 126070191 2024-09-30 23:32:39 70 days ago 1727739159 0.005938773792752 ETH$21.92 124073055 2024-08-15 18:01:27 116 days ago 1723744887 0.202085542400027 ETH$745.82 124073055 2024-08-15 18:01:27 116 days ago 1723744887 0.202085542400027 ETH$745.82 123620516 2024-08-05 6:36:49 127 days ago 1722839809 0.3 ETH$1,107.19 123620516 2024-08-05 6:36:49 127 days ago 1722839809 0.3 ETH$1,107.19 122575821 2024-07-12 2:13:39 151 days ago 1720750419 0.167616847172419 ETH$618.61 122575821 2024-07-12 2:13:39 151 days ago 1720750419 0.167616847172419 ETH$618.61 122459028 2024-07-09 9:20:33 154 days ago 1720516833 0.01613379861537 ETH$59.54 122459028 2024-07-09 9:20:33 154 days ago 1720516833 0.01613379861537 ETH$59.54 122454158 2024-07-09 6:38:13 154 days ago 1720507093 0.00681162795503 ETH$25.14 122454158 2024-07-09 6:38:13 154 days ago 1720507093 0.00681162795503 ETH$25.14 122438304 2024-07-08 21:49:45 154 days ago 1720475385 0.000384341347077 ETH$1.42 122438304 2024-07-08 21:49:45 154 days ago 1720475385 0.000384341347077 ETH$1.42 122434333 2024-07-08 19:37:23 154 days ago 1720467443 0.000393202762285 ETH$1.45 122434333 2024-07-08 19:37:23 154 days ago 1720467443 0.000393202762285 ETH$1.45 122430714 2024-07-08 17:36:45 154 days ago 1720460205 0.167704197778224 ETH$618.93 122430714 2024-07-08 17:36:45 154 days ago 1720460205 0.167704197778224 ETH$618.93 122425228 2024-07-08 14:33:53 154 days ago 1720449233 0.009502153659542 ETH$35.07 122425228 2024-07-08 14:33:53 154 days ago 1720449233 0.009502153659542 ETH$35.07 122423373 2024-07-08 13:32:03 154 days ago 1720445523 0.065369201114171 ETH$241.25 Loading...LoadingContract Source Code Verified (Exact Match)
Contract Name:CurveRouterOptimism v1.0
Compiler Versionvyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7 """ @title CurveRouterOptimism v1.0 @author Curve.Fi @license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved @notice Performs up to 5 swaps in a single transaction, can do estimations with get_dy and get_dx """ from vyper.interfaces import ERC20 interface StablePool: def exchange(i: int128, j: int128, dx: uint256, min_dy: uint256): payable def exchange_underlying(i: int128, j: int128, dx: uint256, min_dy: uint256): payable def get_dy(i: int128, j: int128, amount: uint256) -> uint256: view def get_dy_underlying(i: int128, j: int128, amount: uint256) -> uint256: view def coins(i: uint256) -> address: view def calc_withdraw_one_coin(token_amount: uint256, i: int128) -> uint256: view def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256): nonpayable interface CryptoPool: def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable def exchange_underlying(i: uint256, j: uint256, dx: uint256, min_dy: uint256): payable def get_dy(i: uint256, j: uint256, amount: uint256) -> uint256: view def get_dy_underlying(i: uint256, j: uint256, amount: uint256) -> uint256: view def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view def remove_liquidity_one_coin(token_amount: uint256, i: uint256, min_amount: uint256): nonpayable interface CryptoPoolETH: def exchange(i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable interface LendingBasePoolMetaZap: def exchange_underlying(pool: address, i: int128, j: int128, dx: uint256, min_dy: uint256): nonpayable interface CryptoMetaZap: def get_dy(pool: address, i: uint256, j: uint256, dx: uint256) -> uint256: view def exchange(pool: address, i: uint256, j: uint256, dx: uint256, min_dy: uint256, use_eth: bool): payable interface StablePool2Coins: def add_liquidity(amounts: uint256[2], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[2], is_deposit: bool) -> uint256: view interface CryptoPool2Coins: def calc_token_amount(amounts: uint256[2]) -> uint256: view interface StablePool3Coins: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[3], is_deposit: bool) -> uint256: view interface CryptoPool3Coins: def calc_token_amount(amounts: uint256[3]) -> uint256: view interface StablePool4Coins: def add_liquidity(amounts: uint256[4], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[4], is_deposit: bool) -> uint256: view interface CryptoPool4Coins: def calc_token_amount(amounts: uint256[4]) -> uint256: view interface StablePool5Coins: def add_liquidity(amounts: uint256[5], min_mint_amount: uint256): payable def calc_token_amount(amounts: uint256[5], is_deposit: bool) -> uint256: view interface CryptoPool5Coins: def calc_token_amount(amounts: uint256[5]) -> uint256: view interface LendingStablePool3Coins: def add_liquidity(amounts: uint256[3], min_mint_amount: uint256, use_underlying: bool): payable def remove_liquidity_one_coin(token_amount: uint256, i: int128, min_amount: uint256, use_underlying: bool) -> uint256: nonpayable interface Llamma: def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view interface WETH: def deposit(): payable def withdraw(_amount: uint256): nonpayable # SNX interface SnxCoin: def currencyKey() -> bytes32: nonpayable interface Synthetix: def exchangeWithTracking(sourceCurrencyKey: bytes32, sourceAmount: uint256, destinationCurrencyKey: bytes32, rewardAddress: address, trackingCode: bytes32) -> uint256: nonpayable interface SynthetixExchanger: def getAmountsForExchange(sourceAmount: uint256, sourceCurrencyKey: bytes32, destinationCurrencyKey: bytes32) -> AmountAndFee: view interface SynthetixAddressResolver: def getAddress(name: bytes32) -> address: view # Calc zaps interface StableCalc: def calc_token_amount(pool: address, token: address, amounts: uint256[10], n_coins: uint256, deposit: bool, use_underlying: bool) -> uint256: view def get_dx(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_meta(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address) -> uint256: view def get_dx_meta_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view interface CryptoCalc: def get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256: view def get_dx_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: view struct AmountAndFee: amountReceived: uint256 fee: uint256 exchangeFeeRate: uint256 event Exchange: sender: indexed(address) receiver: indexed(address) route: address[11] swap_params: uint256[5][5] pools: address[5] in_amount: uint256 out_amount: uint256 ETH_ADDRESS: constant(address) = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE WETH_ADDRESS: immutable(address) # SNX # https://github.com/Synthetixio/synthetix-docs/blob/master/content/addresses.md SNX_ADDRESS_RESOLVER: constant(address) = 0x95A6a3f44a70172E7d50a9e28c85Dfd712756B8C SNX_TRACKING_CODE: constant(bytes32) = 0x4355525645000000000000000000000000000000000000000000000000000000 # CURVE SNX_EXCHANGER_NAME: constant(bytes32) = 0x45786368616E6765720000000000000000000000000000000000000000000000 # Exchanger snx_currency_keys: HashMap[address, bytes32] # Calc zaps STABLE_CALC: immutable(StableCalc) CRYPTO_CALC: immutable(CryptoCalc) is_approved: HashMap[address, HashMap[address, bool]] @external @payable def __default__(): pass @external def __init__( _weth: address, _stable_calc: address, _crypto_calc: address, _snx_coins: address[4]): WETH_ADDRESS = _weth STABLE_CALC = StableCalc(_stable_calc) CRYPTO_CALC = CryptoCalc(_crypto_calc) for _snx_coin in _snx_coins: self.is_approved[_snx_coin][0x8700dAec35aF8Ff88c16BdF0418774CB3D7599B4] = True self.snx_currency_keys[_snx_coin] = SnxCoin(_snx_coin).currencyKey() @external @payable @nonreentrant('lock') def exchange( _route: address[11], _swap_params: uint256[5][5], _amount: uint256, _expected: uint256, _pools: address[5]=empty(address[5]), _receiver: address=msg.sender ) -> uint256: """ @notice Performs up to 5 swaps in a single transaction. @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _amount The amount of input token (`_route[0]`) to be sent. @param _expected The minimum amount received after the final swap. @param _pools Array of pools for swaps via zap contracts. This parameter is needed only for swap_type = 3. @param _receiver Address to transfer the final output token to. @return Received amount of the final output token. """ input_token: address = _route[0] output_token: address = empty(address) amount: uint256 = _amount # validate / transfer initial token if input_token == ETH_ADDRESS: assert msg.value == amount else: assert msg.value == 0 assert ERC20(input_token).transferFrom(msg.sender, self, amount, default_return_value=True) for i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps swap: address = _route[i*2-1] pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 6) output_token = _route[i*2] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins if not self.is_approved[input_token][swap]: assert ERC20(input_token).approve(swap, max_value(uint256), default_return_value=True, skip_contract_check=True) self.is_approved[input_token][swap] = True eth_amount: uint256 = 0 if input_token == ETH_ADDRESS: eth_amount = amount # perform the swap according to the swap type if params[2] == 1: if params[3] == 1: # stable StablePool(swap).exchange(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount) else: # crypto, tricrypto or llamma if input_token == ETH_ADDRESS or output_token == ETH_ADDRESS: CryptoPoolETH(swap).exchange(params[0], params[1], amount, 0, True, value=eth_amount) else: CryptoPool(swap).exchange(params[0], params[1], amount, 0) elif params[2] == 2: if params[3] == 1: # stable StablePool(swap).exchange_underlying(convert(params[0], int128), convert(params[1], int128), amount, 0, value=eth_amount) else: # crypto or tricrypto CryptoPool(swap).exchange_underlying(params[0], params[1], amount, 0, value=eth_amount) elif params[2] == 3: # SWAP IS ZAP HERE !!! if params[3] == 1: # stable LendingBasePoolMetaZap(swap).exchange_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, 0) else: # crypto or tricrypto use_eth: bool = input_token == ETH_ADDRESS or output_token == ETH_ADDRESS CryptoMetaZap(swap).exchange(pool, params[0], params[1], amount, 0, use_eth, value=eth_amount) elif params[2] == 4: if params[4] == 2: amounts: uint256[2] = [0, 0] amounts[params[0]] = amount StablePool2Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount StablePool3Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[0]] = amount StablePool4Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[4] == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[0]] = amount StablePool5Coins(swap).add_liquidity(amounts, 0, value=eth_amount) elif params[2] == 5: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount LendingStablePool3Coins(swap).add_liquidity(amounts, 0, True, value=eth_amount) # example: aave on Polygon elif params[2] == 6: if params[3] == 1: # stable StablePool(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0) else: # crypto or tricrypto CryptoPool(swap).remove_liquidity_one_coin(amount, params[1], 0) # example: atricrypto3 on Polygon elif params[2] == 7: LendingStablePool3Coins(swap).remove_liquidity_one_coin(amount, convert(params[1], int128), 0, True) # example: aave on Polygon elif params[2] == 8: if input_token == ETH_ADDRESS and output_token == WETH_ADDRESS: WETH(swap).deposit(value=amount) elif input_token == WETH_ADDRESS and output_token == ETH_ADDRESS: WETH(swap).withdraw(amount) else: raise "Swap type 8 is only for ETH <-> WETH" elif params[2] == 9: Synthetix(swap).exchangeWithTracking(self.snx_currency_keys[input_token], amount, self.snx_currency_keys[output_token], empty(address), SNX_TRACKING_CODE) else: raise "Bad swap type" # update the amount received if output_token == ETH_ADDRESS: amount = self.balance else: amount = ERC20(output_token).balanceOf(self) # sanity check, if the routing data is incorrect we will have a 0 balance and that is bad assert amount != 0, "Received nothing" # check if this was the last swap if i == 5 or _route[i*2+1] == empty(address): break # if there is another swap, the output token becomes the input for the next round input_token = output_token amount -= 1 # Change non-zero -> non-zero costs less gas than zero -> non-zero assert amount >= _expected, "Slippage" # transfer the final token to the receiver if output_token == ETH_ADDRESS: raw_call(_receiver, b"", value=amount) else: assert ERC20(output_token).transfer(_receiver, amount, default_return_value=True) log Exchange(msg.sender, _receiver, _route, _swap_params, _pools, _amount, amount) return amount @view @external def get_dy( _route: address[11], _swap_params: uint256[5][5], _amount: uint256, _pools: address[5]=empty(address[5]) ) -> uint256: """ @notice Get amount of the final output token received in an exchange @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _amount The amount of input token (`_route[0]`) to be sent. @param _pools Array of pools for swaps via zap contracts. This parameter is needed only for swap_type = 3. @return Expected amount of the final output token. """ input_token: address = _route[0] output_token: address = empty(address) amount: uint256 = _amount for i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps swap: address = _route[i*2-1] pool: address = _pools[i-1] # Only for Polygon meta-factories underlying swap (swap_type == 4) output_token = _route[i * 2] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins # Calc output amount according to the swap type if params[2] == 1: if params[3] == 1: # stable amount = StablePool(swap).get_dy(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto or llamma amount = CryptoPool(swap).get_dy(params[0], params[1], amount) elif params[2] == 2: if params[3] == 1: # stable amount = StablePool(swap).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto amount = CryptoPool(swap).get_dy_underlying(params[0], params[1], amount) elif params[2] == 3: # SWAP IS ZAP HERE !!! if params[3] == 1: # stable amount = StablePool(pool).get_dy_underlying(convert(params[0], int128), convert(params[1], int128), amount) else: # crypto amount = CryptoMetaZap(swap).get_dy(pool, params[0], params[1], amount) elif params[2] in [4, 5]: if params[3] == 1: # stable amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] amounts[params[0]] = amount amount = STABLE_CALC.calc_token_amount(swap, output_token, amounts, params[4], True, True) else: # Tricrypto pools have stablepool interface for calc_token_amount if params[4] == 2: amounts: uint256[2] = [0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool2Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool2Coins(swap).calc_token_amount(amounts, True) elif params[4] == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool3Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool3Coins(swap).calc_token_amount(amounts, True) elif params[4] == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool4Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool4Coins(swap).calc_token_amount(amounts, True) elif params[4] == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[0]] = amount if params[3] == 2: # crypto amount = CryptoPool5Coins(swap).calc_token_amount(amounts) else: # tricrypto amount = StablePool5Coins(swap).calc_token_amount(amounts, True) elif params[2] in [6, 7]: if params[3] == 1: # stable amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[1], int128)) else: # crypto amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[1]) elif params[2] == 8: if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS: # ETH <--> WETH rate is 1:1 pass else: raise "Swap type 8 is only for ETH <-> WETH" elif params[2] == 9: snx_exchanger: address = SynthetixAddressResolver(SNX_ADDRESS_RESOLVER).getAddress(SNX_EXCHANGER_NAME) amount_and_fee: AmountAndFee = SynthetixExchanger(snx_exchanger).getAmountsForExchange( amount, self.snx_currency_keys[input_token], self.snx_currency_keys[output_token] ) amount = amount_and_fee.amountReceived else: raise "Bad swap type" # check if this was the last swap if i == 5 or _route[i*2+1] == empty(address): break # if there is another swap, the output token becomes the input for the next round input_token = output_token return amount - 1 @view @external def get_dx( _route: address[11], _swap_params: uint256[5][5], _out_amount: uint256, _pools: address[5], _base_pools: address[5]=empty(address[5]), _base_tokens: address[5]=empty(address[5]), ) -> uint256: """ @notice Calculate the input amount required to receive the desired `_out_amount` @dev Routing and swap params must be determined off-chain. This functionality is designed for gas efficiency over ease-of-use. @param _route Array of [initial token, pool or zap, token, pool or zap, token, ...] The array is iterated until a pool address of 0x00, then the last given token is transferred to `_receiver` @param _swap_params Multidimensional array of [i, j, swap type, pool_type, n_coins] where i is the index of input token j is the index of output token The swap_type should be: 1. for `exchange`, 2. for `exchange_underlying`, 3. for underlying exchange via zap: factory stable metapools with lending base pool `exchange_underlying` and factory crypto-meta pools underlying exchange (`exchange` method in zap) 4. for coin -> LP token "exchange" (actually `add_liquidity`), 5. for lending pool underlying coin -> LP token "exchange" (actually `add_liquidity`), 6. for LP token -> coin "exchange" (actually `remove_liquidity_one_coin`) 7. for LP token -> lending or fake pool underlying coin "exchange" (actually `remove_liquidity_one_coin`) 8. for ETH <-> WETH 9. for SNX swaps (sUSD, sEUR, sETH, sBTC) pool_type: 1 - stable, 2 - crypto, 3 - tricrypto, 4 - llamma n_coins is the number of coins in pool @param _out_amount The desired amount of output coin to receive. @param _pools Array of pools. @param _base_pools Array of base pools (for meta pools). @param _base_tokens Array of base lp tokens (for meta pools). @return Required amount of input token to send. """ amount: uint256 = _out_amount for _i in range(1, 6): # 5 rounds of iteration to perform up to 5 swaps i: uint256 = 6 - _i swap: address = _route[i*2-1] if swap == empty(address): continue input_token: address = _route[(i - 1) * 2] output_token: address = _route[i * 2] pool: address = _pools[i-1] base_pool: address = _base_pools[i-1] base_token: address = _base_tokens[i-1] params: uint256[5] = _swap_params[i-1] # i, j, swap_type, pool_type, n_coins n_coins: uint256 = params[4] # Calc a required input amount according to the swap type if params[2] == 1: if params[3] == 1: # stable if base_pool == empty(address): # non-meta amount = STABLE_CALC.get_dx(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins) else: amount = STABLE_CALC.get_dx_meta(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool) elif params[3] in [2, 3]: # crypto or tricrypto amount = CRYPTO_CALC.get_dx(pool, params[0], params[1], amount, n_coins) else: # llamma amount = Llamma(pool).get_dx(params[0], params[1], amount) elif params[2] in [2, 3]: if params[3] == 1: # stable if base_pool == empty(address): # non-meta amount = STABLE_CALC.get_dx_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins) else: amount = STABLE_CALC.get_dx_meta_underlying(pool, convert(params[0], int128), convert(params[1], int128), amount, n_coins, base_pool, base_token) else: # crypto amount = CRYPTO_CALC.get_dx_meta_underlying(pool, params[0], params[1], amount, n_coins, base_pool, base_token) elif params[2] in [4, 5]: # This is not correct. Should be something like calc_add_one_coin. But tests say that it's precise enough. if params[3] == 1: # stable amount = StablePool(swap).calc_withdraw_one_coin(amount, convert(params[0], int128)) else: # crypto amount = CryptoPool(swap).calc_withdraw_one_coin(amount, params[0]) elif params[2] in [6, 7]: if params[3] == 1: # stable amounts: uint256[10] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] amounts[params[1]] = amount amount = STABLE_CALC.calc_token_amount(swap, input_token, amounts, n_coins, False, True) else: # Tricrypto pools have stablepool interface for calc_token_amount if n_coins == 2: amounts: uint256[2] = [0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool2Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool2Coins(swap).calc_token_amount(amounts, False) elif n_coins == 3: amounts: uint256[3] = [0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool3Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool3Coins(swap).calc_token_amount(amounts, False) elif n_coins == 4: amounts: uint256[4] = [0, 0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool4Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool4Coins(swap).calc_token_amount(amounts, False) elif n_coins == 5: amounts: uint256[5] = [0, 0, 0, 0, 0] amounts[params[1]] = amount if params[3] == 2: # crypto amount = CryptoPool5Coins(swap).calc_token_amount(amounts) # This is not correct else: # tricrypto amount = StablePool5Coins(swap).calc_token_amount(amounts, False) elif params[2] == 8: if input_token == WETH_ADDRESS or output_token == WETH_ADDRESS: # ETH <--> WETH rate is 1:1 pass else: raise "Swap type 8 is only for ETH <-> WETH" elif params[2] == 9: snx_exchanger: address = SynthetixAddressResolver(SNX_ADDRESS_RESOLVER).getAddress(SNX_EXCHANGER_NAME) amount_and_fee: AmountAndFee = SynthetixExchanger(snx_exchanger).getAmountsForExchange( 10**18, self.snx_currency_keys[input_token], self.snx_currency_keys[output_token] ) amount = amount * 10**18 / amount_and_fee.amountReceived else: raise "Bad swap type" return amount
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"name":"Exchange","inputs":[{"name":"sender","type":"address","indexed":true},{"name":"receiver","type":"address","indexed":true},{"name":"route","type":"address[11]","indexed":false},{"name":"swap_params","type":"uint256[5][5]","indexed":false},{"name":"pools","type":"address[5]","indexed":false},{"name":"in_amount","type":"uint256","indexed":false},{"name":"out_amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_weth","type":"address"},{"name":"_stable_calc","type":"address"},{"name":"_crypto_calc","type":"address"},{"name":"_snx_coins","type":"address[4]"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"exchange","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_expected","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_receiver","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dy","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"_route","type":"address[11]"},{"name":"_swap_params","type":"uint256[5][5]"},{"name":"_out_amount","type":"uint256"},{"name":"_pools","type":"address[5]"},{"name":"_base_pools","type":"address[5]"},{"name":"_base_tokens","type":"address[5]"}],"outputs":[{"name":"","type":"uint256"}]}]
Contract Creation Code
60206130216000396000518060a01c61301c5760405260206130416000396000518060a01c61301c5760605260206130616000396000518060a01c61301c5760805260206130816000396000518060a01c61301c5760a05260206130a16000396000518060a01c61301c5760c05260206130c16000396000518060a01c61301c5760e05260206130e16000396000518060a01c61301c57610100523461301c57604051612eb552606051612ed552608051612ef55260006004905b8060051b60a00151610120526001600261012051602052600052604060002080738700daec35af8ff88c16bdf0418774cb3d7599b460205260005260406000209050556101205163dbd06c85610140526020610140600461015c6000855af1610128573d600060003e3d6000fd5b60203d1061301c576101409050516001610120516020526000526040600020556001018181186100ba575050612eb561016661000039612f15610000f36003361161000c57612ea1565b60003560e01c63371dc4478118610037576104c43610612ea35760a0366101a037336102405261011a565b635c9c18e281186100a5576105643610612ea3576104c4358060a01c612ea3576101a0526104e4358060a01c612ea3576101c052610504358060a01c612ea3576101e052610524358060a01c612ea35761020052610544358060a01c612ea35761022052336102405261011a565b63c872a3c581186111c3576105843610612ea3576104c4358060a01c612ea3576101a0526104e4358060a01c612ea3576101c052610504358060a01c612ea3576101e052610524358060a01c612ea35761020052610544358060a01c612ea35761022052610564358060a01c612ea357610240525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea35761018052600054600114612ea357600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a0513418612ea35761028b565b34612ea357610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b15612ea35760016103405261027f565b60203d10612ea3576102c0518060011c612ea357610340525b61034090505115612ea3575b600160058101905b806102c0526102c0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516102e0526102c05160018103818111612ea357905060048111612ea35760051b6101a00151610300526102c0518060011b818160011c18612ea3579050600a8111612ea35760051b604001516102805260a06102c05160018103818111612ea357905060048111612ea357026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506002610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c612ea357610420525b61042090505115612ea35760016002610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c612ea357610400526103405180607f1c612ea357610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50610e49565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50610e49565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b15612ea35760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50610e49565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c612ea357610400526103405180607f1c612ea357610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50610e49565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50610e49565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c612ea357610420526103405180607f1c612ea357610440526102a05161046052600061048052803b15612ea35760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50610e49565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b15612ea357600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50610e49565b60046103605118610a045760026103a05118610866576040366103e0376102a0516103205160018111612ea35760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b15612ea3576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50610e49565b60036103a051186108e8576060366103e0376102a0516103205160028111612ea35760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b15612ea3576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50610e49565b60046103a05118610972576080366103e0376102a0516103205160038111612ea35760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b15612ea357600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50610e49565b60056103a05118610e495760a0366103e0376102a0516103205160048111612ea35760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b15612ea357600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50610e49565b60056103605118610a8c576060366103e0376102a0516103205160028111612ea35760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b15612ea357600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50610e49565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c612ea35761042052600061044052803b15612ea35760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50610e49565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b15612ea35760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50610e49565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c612ea3576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d10612ea3576103e05050610e49565b60086103605118610d3c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf1576020612eb5600039600051610280511815610bf4565b60005b610d02576020612eb56000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b610cc25760246103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f5745544800000000000000000000000000000000000000000000000000000000610420526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd610e49565b6102e051632e1a7d4d6103e0526102a05161040052803b15612ea35760006103e060246103fc6000855af1610cfc573d600060003e3d6000fd5b50610e49565b6102e05163d0e30db06103e052803b15612ea35760006103e060046103fc6102a051855af1610d36573d600060003e3d6000fd5b50610e49565b60096103605118610de3576102e0516330ead7606103e052600161026051602052600052604060002054610400526102a05161042052600161028051602052600052604060002054610440526000610460527f43555256450000000000000000000000000000000000000000000000000000006104805260206103e060a46103fc6000855af1610dd1573d600060003e3d6000fd5b60203d10612ea3576103e05050610e49565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610e7157476102a052610eb2565b610280516370a082316103e052306104005260206103e060246103fc845afa610e9f573d600060003e3d6000fd5b60203d10612ea3576103e09050516102a0525b6102a051610f205760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c05118610f32576001610f64565b6102c0518060011b818160011c18612ea357905060018101818110612ea3579050600a8111612ea35760051b60400151155b15610f6e57610f81565b6102805161026052600101818118610293575b50506102a05160018103818111612ea35790506102a0526104a4356102a051101561100c5760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511861105c5760006102c0526102c050600060006102c0516102e06102a051610240515af16110d3573d600060003e3d6000fd6110d3565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af1611097573d600060003e3d6000fd5b3d6110ae57803b15612ea3576001610320526110c7565b60203d10612ea3576102c0518060011c612ea357610320525b61032090505115612ea3575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c81186111e3576104a43610612ea35760a0366101a037611248565b63637653cb8118611ed7576105443610612ea3576104a4358060a01c612ea3576101a0526104c4358060a01c612ea3576101c0526104e4358060a01c612ea3576101e052610504358060a01c612ea35761020052610524358060a01c612ea357610220525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea3576101805234612ea357604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516102c0526102a05160018103818111612ea357905060048111612ea35760051b6101a001516102e0526102a0518060011b818160011c18612ea3579050600a8111612ea35760051b604001516102605260a06102a05160018103818111612ea357905060048111612ea357026101640180356103005260208101356103205260408101356103405260608101356103605260808101356103805250600161034051186114b2576001610360511861145a576102c051635e0d443f6103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa611443573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa61149b573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b600261034051186115885760016103605118611530576102c0516307211ef76103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa611519573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa611571573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b600361034051186116665760016103605118611606576102e0516307211ef76103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa6115ef573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa61164f573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b610340516004811861167957600161167f565b60058118155b90506119a957610340516006811861169857600161169e565b60078118155b90506118f65760086103405118611773576020612eb560003960005161024051186116ca5760016116dc565b6020612eb56000396000516102605118155b611e585760246103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f57455448000000000000000000000000000000000000000000000000000000006103e0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611e5856611e58565b6009610340511861188c576321f8a7216103c0527f45786368616e67657200000000000000000000000000000000000000000000006103e05260206103c060246103dc7395a6a3f44a70172e7d50a9e28c85dfd712756b8c5afa6117dc573d600060003e3d6000fd5b60203d10612ea3576103c0518060a01c612ea35761040052610400516103a0526103a05163f450aa3461042052610280516104405260016102405160205260005260406000205461046052600161026051602052600052604060002054610480526060610420606461043c845afa611859573d600060003e3d6000fd5b60603d10612ea357610420905080516103c05260208101516103e052604081015161040052506103c05161028052611e58565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611e58565b60016103605118611959576102c05163cc2b27d76103c052610280516103e0526103205180607f1c612ea3576104005260206103c060446103dc845afa611942573d600060003e3d6000fd5b60203d10612ea3576103c090505161028052611e58565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa611992573d600060003e3d6000fd5b60203d10612ea3576103c090505161028052611e58565b60016103605118611a9057610140366103c037610280516103005160098111612ea35760051b6103c001526020612ed56000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa611a79573d600060003e3d6000fd5b60203d10612ea35761050090505161028052611e58565b60026103805118611b6b576040366103c037610280516103005160018111612ea35760051b6103c0015260026103605118611b15576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa611afe573d600060003e3d6000fd5b60203d10612ea35761040090505161028052611e58565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa611b54573d600060003e3d6000fd5b60203d10612ea35761040090505161028052611e58565b60036103805118611c56576060366103c037610280516103005160028111612ea35760051b6103c0015260026103605118611bf8576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa611be1573d600060003e3d6000fd5b60203d10612ea35761042090505161028052611e58565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa611c3f573d600060003e3d6000fd5b60203d10612ea35761042090505161028052611e58565b60046103805118611d51576080366103c037610280516103005160038111612ea35760051b6103c0015260026103605118611ceb576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa611cd4573d600060003e3d6000fd5b60203d10612ea35761044090505161028052611e58565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa611d3a573d600060003e3d6000fd5b60203d10612ea35761044090505161028052611e58565b60056103805118611e585760a0366103c037610280516103005160048111612ea35760051b6103c0015260026103605118611dee576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa611dd7573d600060003e3d6000fd5b60203d10612ea35761046090505161028052611e58565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa611e45573d600060003e3d6000fd5b60203d10612ea357610460905051610280525b60056102a05118611e6a576001611e9c565b6102a0518060011b818160011c18612ea357905060018101818110612ea3579050600a8111612ea35760051b60400151155b15611ea657611eb9565b610260516102405260010181811861130c575b50506102805160018103818111612ea35790506102a05260206102a0f35b63c07b53538118611ef8576105443610612ea357610140366102403761201d565b6381fc0ca58118611f68576105e43610612ea357610544358060a01c612ea35761024052610564358060a01c612ea35761026052610584358060a01c612ea357610280526105a4358060a01c612ea3576102a0526105c4358060a01c612ea3576102c05260a0366102e03761201d565b6390e7e2058118612e9f576106843610612ea357610544358060a01c612ea35761024052610564358060a01c612ea35761026052610584358060a01c612ea357610280526105a4358060a01c612ea3576102a0526105c4358060a01c612ea3576102c0526105e4358060a01c612ea3576102e052610604358060a01c612ea35761030052610624358060a01c612ea35761032052610644358060a01c612ea35761034052610664358060a01c612ea357610360525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea357610180526104a4358060a01c612ea3576101a0526104c4358060a01c612ea3576101c0526104e4358060a01c612ea3576101e052610504358060a01c612ea35761020052610524358060a01c612ea3576102205234612ea3576104843561038052600160058101905b806103a0526103a0518060060360068111612ea35790506103c0526103c0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516103e0526103e05161218057612e8c565b6103c05160018103818111612ea35790508060011b818160011c18612ea3579050600a8111612ea35760051b60400151610400526103c0518060011b818160011c18612ea3579050600a8111612ea35760051b60400151610420526103c05160018103818111612ea357905060048111612ea35760051b6101a00151610440526103c05160018103818111612ea357905060048111612ea35760051b6102400151610460526103c05160018103818111612ea357905060048111612ea35760051b6102e001516104805260a06103c05160018103818111612ea357905060048111612ea357026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e051186124a757600161050051186123c1576104605161233a576020612ed560003960005163158819d46105605261044051610580526104a05180607f1c612ea3576105a0526104c05180607f1c612ea3576105c052610380516105e0526105405161060052602061056060a461057c845afa612323573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b6020612ed560003960005163571f00b56105605261044051610580526104a05180607f1c612ea3576105a0526104c05180607f1c612ea3576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa6123aa573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b61050051600281186123d45760016123da565b60038118155b905061243857610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612421573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b6020612ef560003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa612490573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6104e051600281186124ba5760016124c0565b60038118155b9050612cf0576104e051600481186124d95760016124df565b60058118155b9050612c3d576104e051600681186124f85760016124fe565b60078118155b905061278a5760086104e051186125d3576020612eb5600039600051610400511861252a57600161253c565b6020612eb56000396000516104205118155b612e8c576024610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f57455448000000000000000000000000000000000000000000000000000000006105a05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612e8c56612e8c565b60096104e05118612720576321f8a721610580527f45786368616e67657200000000000000000000000000000000000000000000006105a0526020610580602461059c7395a6a3f44a70172e7d50a9e28c85dfd712756b8c5afa61263c573d600060003e3d6000fd5b60203d10612ea357610580518060a01c612ea3576105c0526105c051610560526105605163f450aa346105e052670de0b6b3a764000061060052600161040051602052600052604060002054610620526001610420516020526000526040600020546106405260606105e060646105fc845afa6126be573d600060003e3d6000fd5b60603d10612ea3576105e0905080516105805260208101516105a05260408101516105c0525061038051670de0b6b3a7640000810281670de0b6b3a7640000820418612ea3579050610580518015612ea3578082049050905061038052612e8c565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612e8c565b60016105005118612871576101403661058037610380516104c05160098111612ea35760051b61058001526020612ed56000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa61285a573d600060003e3d6000fd5b60203d10612ea3576106c090505161038052612e8c565b6002610540511861294c5760403661058037610380516104c05160018111612ea35760051b6105800152600261050051186128f6576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6128df573d600060003e3d6000fd5b60203d10612ea3576105c090505161038052612e8c565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa612935573d600060003e3d6000fd5b60203d10612ea3576105c090505161038052612e8c565b60036105405118612a375760603661058037610380516104c05160028111612ea35760051b6105800152600261050051186129d9576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6129c2573d600060003e3d6000fd5b60203d10612ea3576105e090505161038052612e8c565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa612a20573d600060003e3d6000fd5b60203d10612ea3576105e090505161038052612e8c565b60046105405118612b325760803661058037610380516104c05160038111612ea35760051b610580015260026105005118612acc576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa612ab5573d600060003e3d6000fd5b60203d10612ea35761060090505161038052612e8c565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa612b1b573d600060003e3d6000fd5b60203d10612ea35761060090505161038052612e8c565b60056105405118612e8c5760a03661058037610380516104c05160048111612ea35760051b610580015260026105005118612bcf576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa612bb8573d600060003e3d6000fd5b60203d10612ea35761062090505161038052612e8c565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa612c26573d600060003e3d6000fd5b60203d10612ea35761062090505161038052612e8c565b60016105005118612ca0576103e05163cc2b27d761058052610380516105a0526104a05180607f1c612ea3576105c0526020610580604461059c845afa612c89573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa612cd9573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b60016105005118612e115761046051612d82576020612ed5600039600051638fd3218f61058052610440516105a0526104a05180607f1c612ea3576105c0526104c05180607f1c612ea3576105e05261038051610600526105405161062052602061058060a461059c845afa612d6b573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6020612ed5600039600051634933a86461058052610440516105a0526104a05180607f1c612ea3576105c0526104c05180607f1c612ea3576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612dfa573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6020612ef5600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612e79573d600060003e3d6000fd5b60203d10612ea357610580905051610380525b6001018181186121245750506020610380f35b505b005b600080fda165767970657283000307000b005b600080fd0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc0000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d9000000000000000000000000fbc4198702e81ae77c06d58f81b629bdf36f0a71000000000000000000000000e405de8f52ba7559f9df3c368500b6e6ae6cee49000000000000000000000000298b9b95708152ff6968aafd889c6586e9169f1dDeployed Bytecode
0x6003361161000c57612ea1565b60003560e01c63371dc4478118610037576104c43610612ea35760a0366101a037336102405261011a565b635c9c18e281186100a5576105643610612ea3576104c4358060a01c612ea3576101a0526104e4358060a01c612ea3576101c052610504358060a01c612ea3576101e052610524358060a01c612ea35761020052610544358060a01c612ea35761022052336102405261011a565b63c872a3c581186111c3576105843610612ea3576104c4358060a01c612ea3576101a0526104e4358060a01c612ea3576101c052610504358060a01c612ea3576101e052610524358060a01c612ea35761020052610544358060a01c612ea35761022052610564358060a01c612ea357610240525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea35761018052600054600114612ea357600160005560405161026052600061028052610484356102a05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610260511861020d576102a0513418612ea35761028b565b34612ea357610260516323b872dd6102c052336102e05230610300526102a0516103205260206102c060646102dc6000855af161024f573d600060003e3d6000fd5b3d61026657803b15612ea35760016103405261027f565b60203d10612ea3576102c0518060011c612ea357610340525b61034090505115612ea3575b600160058101905b806102c0526102c0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516102e0526102c05160018103818111612ea357905060048111612ea35760051b6101a00151610300526102c0518060011b818160011c18612ea3579050600a8111612ea35760051b604001516102805260a06102c05160018103818111612ea357905060048111612ea357026101640180356103205260208101356103405260408101356103605260608101356103805260808101356103a052506002610260516020526000526040600020806102e0516020526000526040600020905054610436576102605163095ea7b36103c0526102e0516103e0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104005260206103c060446103dc6000855af16103e3573d600060003e3d6000fd5b3d6103f357600161042052610404565b6103c0518060011c612ea357610420525b61042090505115612ea35760016002610260516020526000526040600020806102e05160205260005260406000209050555b60006103c05273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610463576102a0516103c0525b600161036051186105da57600161038051186104e1576102e051633df021246103e0526103205180607f1c612ea357610400526103405180607f1c612ea357610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af16104db573d600060003e3d6000fd5b50610e49565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610506576001610522565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b61057c576102e051635b41b9086103e052610320516104005261034051610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6000855af1610576573d600060003e3d6000fd5b50610e49565b6102e05163394747c56103e052610320516104005261034051610420526102a05161044052600061046052600161048052803b15612ea35760006103e060a46103fc6103c051855af16105d4573d600060003e3d6000fd5b50610e49565b600261036051186106b05760016103805118610658576102e05163a6417ed66103e0526103205180607f1c612ea357610400526103405180607f1c612ea357610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af1610652573d600060003e3d6000fd5b50610e49565b6102e0516365b2489b6103e052610320516104005261034051610420526102a05161044052600061046052803b15612ea35760006103e060846103fc6103c051855af16106aa573d600060003e3d6000fd5b50610e49565b600361036051186107e15760016103805118610734576102e051637981c43e6103e05261030051610400526103205180607f1c612ea357610420526103405180607f1c612ea357610440526102a05161046052600061048052803b15612ea35760006103e060a46103fc6000855af161072e573d600060003e3d6000fd5b50610e49565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610759576001610775565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118155b6103e0526102e051632bf78c61610400526103005161042052610320516104405261034051610460526102a0516104805260006104a0526103e0516104c052803b15612ea357600061040060c461041c6103c051855af16107db573d600060003e3d6000fd5b50610e49565b60046103605118610a045760026103a05118610866576040366103e0376102a0516103205160018111612ea35760051b6103e001526102e051630b4c7e4d610420526103e051610440526104005161046052600061048052803b15612ea3576000610420606461043c6103c051855af1610860573d600060003e3d6000fd5b50610e49565b60036103a051186108e8576060366103e0376102a0516103205160028111612ea35760051b6103e001526102e051634515cef3610440526103e051610460526104005161048052610420516104a05260006104c052803b15612ea3576000610440608461045c6103c051855af16108e2573d600060003e3d6000fd5b50610e49565b60046103a05118610972576080366103e0376102a0516103205160038111612ea35760051b6103e001526102e05163029b2f34610460526103e05161048052610400516104a052610420516104c052610440516104e052600061050052803b15612ea357600061046060a461047c6103c051855af161096c573d600060003e3d6000fd5b50610e49565b60056103a05118610e495760a0366103e0376102a0516103205160048111612ea35760051b6103e001526102e0516384738499610480526103e0516104a052610400516104c052610420516104e05261044051610500526104605161052052600061054052803b15612ea357600061048060c461049c6103c051855af16109fe573d600060003e3d6000fd5b50610e49565b60056103605118610a8c576060366103e0376102a0516103205160028111612ea35760051b6103e001526102e051632b6e993a610440526103e051610460526104005161048052610420516104a05260006104c05260016104e052803b15612ea357600061044060a461045c6103c051855af1610a86573d600060003e3d6000fd5b50610e49565b60066103605118610b465760016103805118610af8576102e051631a4d01d26103e0526102a051610400526103405180607f1c612ea35761042052600061044052803b15612ea35760006103e060646103fc6000855af1610af2573d600060003e3d6000fd5b50610e49565b6102e05163f1dc3cc96103e0526102a051610400526103405161042052600061044052803b15612ea35760006103e060646103fc6000855af1610b40573d600060003e3d6000fd5b50610e49565b60076103605118610bb2576102e05163517a55a36103e0526102a051610400526103405180607f1c612ea3576104205260006104405260016104605260206103e060846103fc6000855af1610ba0573d600060003e3d6000fd5b60203d10612ea3576103e05050610e49565b60086103605118610d3c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102605118610bf1576020612eb5600039600051610280511815610bf4565b60005b610d02576020612eb56000396000516102605118610c2c5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511815610c2f565b60005b610cc25760246103e0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610400527f5745544800000000000000000000000000000000000000000000000000000000610420526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd610e49565b6102e051632e1a7d4d6103e0526102a05161040052803b15612ea35760006103e060246103fc6000855af1610cfc573d600060003e3d6000fd5b50610e49565b6102e05163d0e30db06103e052803b15612ea35760006103e060046103fc6102a051855af1610d36573d600060003e3d6000fd5b50610e49565b60096103605118610de3576102e0516330ead7606103e052600161026051602052600052604060002054610400526102a05161042052600161028051602052600052604060002054610440526000610460527f43555256450000000000000000000000000000000000000000000000000000006104805260206103e060a46103fc6000855af1610dd1573d600060003e3d6000fd5b60203d10612ea3576103e05050610e49565b600d6103e0527f4261642073776170207479706500000000000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6102805118610e7157476102a052610eb2565b610280516370a082316103e052306104005260206103e060246103fc845afa610e9f573d600060003e3d6000fd5b60203d10612ea3576103e09050516102a0525b6102a051610f205760106103e0527f5265636569766564206e6f7468696e6700000000000000000000000000000000610400526103e0506103e0518061040001601f826000031636823750506308c379a06103a05260206103c052601f19601f6103e05101166044016103bcfd5b60056102c05118610f32576001610f64565b6102c0518060011b818160011c18612ea357905060018101818110612ea3579050600a8111612ea35760051b60400151155b15610f6e57610f81565b6102805161026052600101818118610293575b50506102a05160018103818111612ea35790506102a0526104a4356102a051101561100c5760086102c0527f536c6970706167650000000000000000000000000000000000000000000000006102e0526102c0506102c051806102e001601f826000031636823750506308c379a06102805260206102a052601f19601f6102c051011660440161029cfd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee610280511861105c5760006102c0526102c050600060006102c0516102e06102a051610240515af16110d3573d600060003e3d6000fd6110d3565b6102805163a9059cbb6102c052610240516102e0526102a0516103005260206102c060446102dc6000855af1611097573d600060003e3d6000fd5b3d6110ae57803b15612ea3576001610320526110c7565b60203d10612ea3576102c0518060011c612ea357610320525b61032090505115612ea3575b61024051337f56d0661e240dfb199ef196e16e6f42473990366314f0226ac978f7be3cd9ee836040516102c0526060516102e0526080516103005260a0516103205260c0516103405260e051610360526101005161038052610120516103a052610140516103c052610160516103e052610180516104005260a06101646104203760a06102046104c03760a06102a46105603760a06103446106003760a06103e46106a0376101a051610740526101c051610760526101e05161078052610200516107a052610220516107c052610484356107e0526102a051610800526105606102c0a360206102a06000600055f35b6381889a2c81186111e3576104a43610612ea35760a0366101a037611248565b63637653cb8118611ed7576105443610612ea3576104a4358060a01c612ea3576101a0526104c4358060a01c612ea3576101c0526104e4358060a01c612ea3576101e052610504358060a01c612ea35761020052610524358060a01c612ea357610220525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea3576101805234612ea357604051610240526000610260526104843561028052600160058101905b806102a0526102a0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516102c0526102a05160018103818111612ea357905060048111612ea35760051b6101a001516102e0526102a0518060011b818160011c18612ea3579050600a8111612ea35760051b604001516102605260a06102a05160018103818111612ea357905060048111612ea357026101640180356103005260208101356103205260408101356103405260608101356103605260808101356103805250600161034051186114b2576001610360511861145a576102c051635e0d443f6103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa611443573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c05163556d6e9f6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa61149b573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b600261034051186115885760016103605118611530576102c0516307211ef76103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa611519573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c0516385f11d1e6103a052610300516103c052610320516103e052610280516104005260206103a060646103bc845afa611571573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b600361034051186116665760016103605118611606576102e0516307211ef76103a0526103005180607f1c612ea3576103c0526103205180607f1c612ea3576103e052610280516104005260206103a060646103bc845afa6115ef573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b6102c05163e9737ee26103a0526102e0516103c052610300516103e0526103205161040052610280516104205260206103a060846103bc845afa61164f573d600060003e3d6000fd5b60203d10612ea3576103a090505161028052611e58565b610340516004811861167957600161167f565b60058118155b90506119a957610340516006811861169857600161169e565b60078118155b90506118f65760086103405118611773576020612eb560003960005161024051186116ca5760016116dc565b6020612eb56000396000516102605118155b611e585760246103a0527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e206103c0527f57455448000000000000000000000000000000000000000000000000000000006103e0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611e5856611e58565b6009610340511861188c576321f8a7216103c0527f45786368616e67657200000000000000000000000000000000000000000000006103e05260206103c060246103dc7395a6a3f44a70172e7d50a9e28c85dfd712756b8c5afa6117dc573d600060003e3d6000fd5b60203d10612ea3576103c0518060a01c612ea35761040052610400516103a0526103a05163f450aa3461042052610280516104405260016102405160205260005260406000205461046052600161026051602052600052604060002054610480526060610420606461043c845afa611859573d600060003e3d6000fd5b60603d10612ea357610420905080516103c05260208101516103e052604081015161040052506103c05161028052611e58565b600d6103a0527f42616420737761702074797065000000000000000000000000000000000000006103c0526103a0506103a051806103c001601f826000031636823750506308c379a061036052602061038052601f19601f6103a051011660440161037cfd611e58565b60016103605118611959576102c05163cc2b27d76103c052610280516103e0526103205180607f1c612ea3576104005260206103c060446103dc845afa611942573d600060003e3d6000fd5b60203d10612ea3576103c090505161028052611e58565b6102c051634fb08c5e6103c052610280516103e052610320516104005260206103c060446103dc845afa611992573d600060003e3d6000fd5b60203d10612ea3576103c090505161028052611e58565b60016103605118611a9057610140366103c037610280516103005160098111612ea35760051b6103c001526020612ed56000396000516379ccdf49610500526102c0516105205261026051610540526103c051610560526103e05161058052610400516105a052610420516105c052610440516105e052610460516106005261048051610620526104a051610640526104c051610660526104e05161068052610380516106a05260016106c05260016106e05260206105006101e461051c845afa611a79573d600060003e3d6000fd5b60203d10612ea35761050090505161028052611e58565b60026103805118611b6b576040366103c037610280516103005160018111612ea35760051b6103c0015260026103605118611b15576102c051638d8ea727610400526103c051610420526103e051610440526020610400604461041c845afa611afe573d600060003e3d6000fd5b60203d10612ea35761040090505161028052611e58565b6102c05163ed8e84f3610400526103c051610420526103e051610440526001610460526020610400606461041c845afa611b54573d600060003e3d6000fd5b60203d10612ea35761040090505161028052611e58565b60036103805118611c56576060366103c037610280516103005160028111612ea35760051b6103c0015260026103605118611bf8576102c051635b6f1b5a610420526103c051610440526103e0516104605261040051610480526020610420606461043c845afa611be1573d600060003e3d6000fd5b60203d10612ea35761042090505161028052611e58565b6102c051633883e119610420526103c051610440526103e05161046052610400516104805260016104a0526020610420608461043c845afa611c3f573d600060003e3d6000fd5b60203d10612ea35761042090505161028052611e58565b60046103805118611d51576080366103c037610280516103005160038111612ea35760051b6103c0015260026103605118611ceb576102c051631a805185610440526103c051610460526103e05161048052610400516104a052610420516104c0526020610440608461045c845afa611cd4573d600060003e3d6000fd5b60203d10612ea35761044090505161028052611e58565b6102c05163cf701ff7610440526103c051610460526103e05161048052610400516104a052610420516104c05260016104e052602061044060a461045c845afa611d3a573d600060003e3d6000fd5b60203d10612ea35761044090505161028052611e58565b60056103805118611e585760a0366103c037610280516103005160048111612ea35760051b6103c0015260026103605118611dee576102c0516309379690610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052602061046060a461047c845afa611dd7573d600060003e3d6000fd5b60203d10612ea35761046090505161028052611e58565b6102c051637ede89c5610460526103c051610480526103e0516104a052610400516104c052610420516104e0526104405161050052600161052052602061046060c461047c845afa611e45573d600060003e3d6000fd5b60203d10612ea357610460905051610280525b60056102a05118611e6a576001611e9c565b6102a0518060011b818160011c18612ea357905060018101818110612ea3579050600a8111612ea35760051b60400151155b15611ea657611eb9565b610260516102405260010181811861130c575b50506102805160018103818111612ea35790506102a05260206102a0f35b63c07b53538118611ef8576105443610612ea357610140366102403761201d565b6381fc0ca58118611f68576105e43610612ea357610544358060a01c612ea35761024052610564358060a01c612ea35761026052610584358060a01c612ea357610280526105a4358060a01c612ea3576102a0526105c4358060a01c612ea3576102c05260a0366102e03761201d565b6390e7e2058118612e9f576106843610612ea357610544358060a01c612ea35761024052610564358060a01c612ea35761026052610584358060a01c612ea357610280526105a4358060a01c612ea3576102a0526105c4358060a01c612ea3576102c0526105e4358060a01c612ea3576102e052610604358060a01c612ea35761030052610624358060a01c612ea35761032052610644358060a01c612ea35761034052610664358060a01c612ea357610360525b6004358060a01c612ea3576040526024358060a01c612ea3576060526044358060a01c612ea3576080526064358060a01c612ea35760a0526084358060a01c612ea35760c05260a4358060a01c612ea35760e05260c4358060a01c612ea3576101005260e4358060a01c612ea35761012052610104358060a01c612ea35761014052610124358060a01c612ea35761016052610144358060a01c612ea357610180526104a4358060a01c612ea3576101a0526104c4358060a01c612ea3576101c0526104e4358060a01c612ea3576101e052610504358060a01c612ea35761020052610524358060a01c612ea3576102205234612ea3576104843561038052600160058101905b806103a0526103a0518060060360068111612ea35790506103c0526103c0518060011b818160011c18612ea357905060018103818111612ea3579050600a8111612ea35760051b604001516103e0526103e05161218057612e8c565b6103c05160018103818111612ea35790508060011b818160011c18612ea3579050600a8111612ea35760051b60400151610400526103c0518060011b818160011c18612ea3579050600a8111612ea35760051b60400151610420526103c05160018103818111612ea357905060048111612ea35760051b6101a00151610440526103c05160018103818111612ea357905060048111612ea35760051b6102400151610460526103c05160018103818111612ea357905060048111612ea35760051b6102e001516104805260a06103c05160018103818111612ea357905060048111612ea357026101640180356104a05260208101356104c05260408101356104e05260608101356105005260808101356105205250610520516105405260016104e051186124a757600161050051186123c1576104605161233a576020612ed560003960005163158819d46105605261044051610580526104a05180607f1c612ea3576105a0526104c05180607f1c612ea3576105c052610380516105e0526105405161060052602061056060a461057c845afa612323573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b6020612ed560003960005163571f00b56105605261044051610580526104a05180607f1c612ea3576105a0526104c05180607f1c612ea3576105c052610380516105e05261054051610600526104605161062052602061056060c461057c845afa6123aa573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b61050051600281186123d45760016123da565b60038118155b905061243857610440516337ed3a7a610560526104a051610580526104c0516105a052610380516105c0526020610560606461057c845afa612421573d600060003e3d6000fd5b60203d10612ea35761056090505161038052612e8c565b6020612ef560003960005163ca4bc71461058052610440516105a0526104a0516105c0526104c0516105e05261038051610600526105405161062052602061058060a461059c845afa612490573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6104e051600281186124ba5760016124c0565b60038118155b9050612cf0576104e051600481186124d95760016124df565b60058118155b9050612c3d576104e051600681186124f85760016124fe565b60078118155b905061278a5760086104e051186125d3576020612eb5600039600051610400511861252a57600161253c565b6020612eb56000396000516104205118155b612e8c576024610560527f5377617020747970652038206973206f6e6c7920666f7220455448203c2d3e20610580527f57455448000000000000000000000000000000000000000000000000000000006105a05261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612e8c56612e8c565b60096104e05118612720576321f8a721610580527f45786368616e67657200000000000000000000000000000000000000000000006105a0526020610580602461059c7395a6a3f44a70172e7d50a9e28c85dfd712756b8c5afa61263c573d600060003e3d6000fd5b60203d10612ea357610580518060a01c612ea3576105c0526105c051610560526105605163f450aa346105e052670de0b6b3a764000061060052600161040051602052600052604060002054610620526001610420516020526000526040600020546106405260606105e060646105fc845afa6126be573d600060003e3d6000fd5b60603d10612ea3576105e0905080516105805260208101516105a05260408101516105c0525061038051670de0b6b3a7640000810281670de0b6b3a7640000820418612ea3579050610580518015612ea3578082049050905061038052612e8c565b600d610560527f42616420737761702074797065000000000000000000000000000000000000006105805261056050610560518061058001601f826000031636823750506308c379a061052052602061054052601f19601f61056051011660440161053cfd612e8c565b60016105005118612871576101403661058037610380516104c05160098111612ea35760051b61058001526020612ed56000396000516379ccdf496106c0526103e0516106e052610400516107005261058051610720526105a051610740526105c051610760526105e05161078052610600516107a052610620516107c052610640516107e052610660516108005261068051610820526106a05161084052610540516108605260006108805260016108a05260206106c06101e46106dc845afa61285a573d600060003e3d6000fd5b60203d10612ea3576106c090505161038052612e8c565b6002610540511861294c5760403661058037610380516104c05160018111612ea35760051b6105800152600261050051186128f6576103e051638d8ea7276105c052610580516105e0526105a0516106005260206105c060446105dc845afa6128df573d600060003e3d6000fd5b60203d10612ea3576105c090505161038052612e8c565b6103e05163ed8e84f36105c052610580516105e0526105a0516106005260006106205260206105c060646105dc845afa612935573d600060003e3d6000fd5b60203d10612ea3576105c090505161038052612e8c565b60036105405118612a375760603661058037610380516104c05160028111612ea35760051b6105800152600261050051186129d9576103e051635b6f1b5a6105e05261058051610600526105a051610620526105c0516106405260206105e060646105fc845afa6129c2573d600060003e3d6000fd5b60203d10612ea3576105e090505161038052612e8c565b6103e051633883e1196105e05261058051610600526105a051610620526105c0516106405260006106605260206105e060846105fc845afa612a20573d600060003e3d6000fd5b60203d10612ea3576105e090505161038052612e8c565b60046105405118612b325760803661058037610380516104c05160038111612ea35760051b610580015260026105005118612acc576103e051631a8051856106005261058051610620526105a051610640526105c051610660526105e051610680526020610600608461061c845afa612ab5573d600060003e3d6000fd5b60203d10612ea35761060090505161038052612e8c565b6103e05163cf701ff76106005261058051610620526105a051610640526105c051610660526105e0516106805260006106a052602061060060a461061c845afa612b1b573d600060003e3d6000fd5b60203d10612ea35761060090505161038052612e8c565b60056105405118612e8c5760a03661058037610380516104c05160048111612ea35760051b610580015260026105005118612bcf576103e05163093796906106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c052602061062060a461063c845afa612bb8573d600060003e3d6000fd5b60203d10612ea35761062090505161038052612e8c565b6103e051637ede89c56106205261058051610640526105a051610660526105c051610680526105e0516106a052610600516106c05260006106e052602061062060c461063c845afa612c26573d600060003e3d6000fd5b60203d10612ea35761062090505161038052612e8c565b60016105005118612ca0576103e05163cc2b27d761058052610380516105a0526104a05180607f1c612ea3576105c0526020610580604461059c845afa612c89573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6103e051634fb08c5e61058052610380516105a0526104a0516105c0526020610580604461059c845afa612cd9573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b60016105005118612e115761046051612d82576020612ed5600039600051638fd3218f61058052610440516105a0526104a05180607f1c612ea3576105c0526104c05180607f1c612ea3576105e05261038051610600526105405161062052602061058060a461059c845afa612d6b573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6020612ed5600039600051634933a86461058052610440516105a0526104a05180607f1c612ea3576105c0526104c05180607f1c612ea3576105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612dfa573d600060003e3d6000fd5b60203d10612ea35761058090505161038052612e8c565b6020612ef5600039600051638ca1565361058052610440516105a0526104a0516105c0526104c0516105e0526103805161060052610540516106205261046051610640526104805161066052602061058060e461059c845afa612e79573d600060003e3d6000fd5b60203d10612ea357610580905051610380525b6001018181186121245750506020610380f35b505b005b600080fda165767970657283000307000b0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004200000000000000000000000000000000000006000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc0000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d9000000000000000000000000fbc4198702e81ae77c06d58f81b629bdf36f0a71000000000000000000000000e405de8f52ba7559f9df3c368500b6e6ae6cee49000000000000000000000000298b9b95708152ff6968aafd889c6586e9169f1d
-----Decoded View---------------
Arg [0] : _weth (address): 0x4200000000000000000000000000000000000006
Arg [1] : _stable_calc (address): 0xCA8d0747B5573D69653C3aC22242e6341C36e4b4
Arg [2] : _crypto_calc (address): 0xA72C85C258A81761433B4e8da60505Fe3Dd551CC
Arg [3] : _snx_coins (address[4]): 0x8c6f28f2F1A3C87F0f938b96d27520d9751ec8d9,0xFBc4198702E81aE77c06D58f81b629BDf36f0a71,0xE405de8F52ba7559f9df3C368500B6E6ae6Cee49,0x298B9B95708152ff6968aafd889c6586e9169f1D
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [1] : 000000000000000000000000ca8d0747b5573d69653c3ac22242e6341c36e4b4
Arg [2] : 000000000000000000000000a72c85c258a81761433b4e8da60505fe3dd551cc
Arg [3] : 0000000000000000000000008c6f28f2f1a3c87f0f938b96d27520d9751ec8d9
Arg [4] : 000000000000000000000000fbc4198702e81ae77c06d58f81b629bdf36f0a71
Arg [5] : 000000000000000000000000e405de8f52ba7559f9df3c368500b6e6ae6cee49
Arg [6] : 000000000000000000000000298b9b95708152ff6968aafd889c6586e9169f1dLoading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 30 Chains
Chain Token Portfolio % Price Amount Value ARB 33.20% $3,691.08 0.000000000000000001 <$0.000001 OP Ether (ETH)33.20% $3,690.63 0.000000000000000001 <$0.000001 ETH 33.19% $3,689.41 0.000000000000000001 <$0.000001 AVAX 0.40% $44.26 0.000000000000000001 <$0.000001 FTM 0.01% $1.14 0.000000000000000001 <$0.000001 POL <0.01% $0.567006 0.000000000000000001 <$0.000001 [ Download: CSV Export ][ Download: CSV Export ]A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Before You Copy
Transaction Private Note
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.