Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.7
Contract Source Code (Vyper language format)
# @version 0.3.7 # A "zap" for crypto pools to get_dx # (c) Curve.Fi, 2023 interface ERC20: def decimals() -> uint256: view interface Curve: def A() -> uint256: view def gamma() -> uint256: view def price_scale(i: uint256) -> uint256: view def coins(i: uint256) -> address: view def balances(i: uint256) -> uint256: view def D() -> uint256: view def fee_calc(xp: uint256[3]) -> uint256: view def future_A_gamma_time() -> uint256: view interface Curve2: def price_scale() -> uint256: view interface Math3: def newton_D(ANN: uint256, gamma: uint256, x_unsorted: uint256[3]) -> uint256: view def newton_y(ANN: uint256, gamma: uint256, x: uint256[3], D: uint256, i: uint256) -> uint256: view interface Math2: def newton_D(ANN: uint256, gamma: uint256, x_unsorted: uint256[2]) -> uint256: view def newton_y(ANN: uint256, gamma: uint256, x: uint256[2], D: uint256, i: uint256) -> uint256: view def fee_calc(pool: address, xp: uint256[2]) -> uint256: view interface StablePool: def calc_withdraw_one_coin(_token_amount: uint256, i: int128) -> uint256: view interface StableCalcZap: def calc_token_amount(pool: address, token: address, amounts: uint256[MAX_COINS], n_coins: uint256, deposit: bool, use_underlying: bool) -> uint256: view def get_dx_underlying(pool: address, i: int128, j: int128, dy: uint256, n_coins: uint256) -> uint256: view interface AtricryptoZap: def calc_token_amount(amounts: uint256[5], deposit: bool) -> uint256: view def calc_withdraw_one_coin(token_amount: uint256, i: uint256) -> uint256: view STABLE_CALC_ZAP: constant(address) = 0xCA8d0747B5573D69653C3aC22242e6341C36e4b4 MATH2: constant(address) = 0x69522fb5337663d3B4dFB0030b881c1A750Adb4f MATH3: constant(address) = 0x4f37A9d177470499A2dD084621020b023fcffc1F MAX_COINS: constant(uint256) = 10 PRECISION: constant(uint256) = 10**18 # The precision to convert to @internal @view def _get_dx_2_coins( pool: address, i: uint256, j: uint256, dy: uint256, xp: DynArray[uint256, MAX_COINS], precisions: DynArray[uint256, MAX_COINS], price_scale: DynArray[uint256, MAX_COINS], ) -> uint256: A: uint256 = Curve(pool).A() gamma: uint256 = Curve(pool).gamma() D: uint256 = Curve(pool).D() _xp_initial: uint256[2] = [ xp[0] * precisions[0], xp[1] * price_scale[0] * precisions[1] / PRECISION, ] if Curve(pool).future_A_gamma_time() > 0: D = Math2(MATH2).newton_D(A, gamma, _xp_initial) _fee: uint256 = 0 x: uint256 = 0 for k in range(10): _xp: uint256[2] = [xp[0], xp[1]] _xp[j] -= dy * 10 ** 10 / (10 ** 10 - _fee) _xp[0] *= precisions[0] _xp[1] = _xp[1] * price_scale[0] * precisions[1] / PRECISION x = Math2(MATH2).newton_y(A, gamma, _xp, D, i) _xp[i] = x _fee = Math2(MATH2).fee_calc(pool, _xp) dx: uint256 = x - _xp_initial[i] + 1 if i > 0: dx = dx * PRECISION / price_scale[i - 1] dx /= precisions[i] return dx @internal @view def _get_dx_3_coins( pool: address, i: uint256, j: uint256, dy: uint256, xp: DynArray[uint256, MAX_COINS], precisions: DynArray[uint256, MAX_COINS], price_scale: DynArray[uint256, MAX_COINS], ) -> uint256: A: uint256 = Curve(pool).A() gamma: uint256 = Curve(pool).gamma() D: uint256 = Curve(pool).D() _xp_initial: uint256[3] = [ xp[0] * precisions[0], xp[1] * price_scale[0] * precisions[1] / PRECISION, xp[2] * price_scale[1] * precisions[2] / PRECISION, ] if Curve(pool).future_A_gamma_time() > 0: D = Math3(MATH3).newton_D(A, gamma, _xp_initial) # Calc new balances without fees _fee: uint256 = 0 x: uint256 = 0 for k in range(10): _xp: uint256[3] = [xp[0], xp[1], xp[2]] _xp[j] -= dy * 10**10 / (10**10 - _fee) _xp[0] *= precisions[0] _xp[1] = _xp[1] * price_scale[0] * precisions[1] / PRECISION _xp[2] = _xp[2] * price_scale[1] * precisions[2] / PRECISION x = Math3(MATH3).newton_y(A, gamma, _xp, D, i) _xp[i] = x _fee = Curve(pool).fee_calc(_xp) dx: uint256 = x - _xp_initial[i] + 1 if i > 0: dx = dx * PRECISION / price_scale[i - 1] dx /= precisions[i] return dx @internal @view def _get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256: assert i != j and i < MAX_COINS and j < MAX_COINS, "coin index out of range" assert dy > 0, "do not exchange 0 coins" precisions: DynArray[uint256, MAX_COINS] = [] xp: DynArray[uint256, MAX_COINS] = [] for k in range(MAX_COINS): if k == n_coins: break xp.append(Curve(pool).balances(k)) coin: address = Curve(pool).coins(k) precisions.append(10**(18 - ERC20(coin).decimals())) price_scale: DynArray[uint256, MAX_COINS] = [] for k in range(MAX_COINS): if k == n_coins - 1: break if n_coins == 2: price_scale.append(Curve2(pool).price_scale()) break price_scale.append(Curve(pool).price_scale(k)) if n_coins == 3: return self._get_dx_3_coins(pool, i, j, dy, xp, precisions, price_scale) else: return self._get_dx_2_coins(pool, i, j, dy, xp, precisions, price_scale) @external @view def get_dx(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256) -> uint256: """ @notice Calculate the input amount required to receive the desired output amount. @param pool Address of the pool @param i Input coin index @param j Output coin index @param dy Desired amount of the coin going out @param n_coins Number of coins in the pool @return Required input amount """ return self._get_dx(pool, i, j, dy, n_coins) @external @view def get_dx_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: """ @notice Calculate the input amount required to receive the desired output amount. For underlying calculations in meta pool of a type [coin, stable-pool-LP]. @param pool Address of the pool @param i Input coin index @param j Output coin index @param dy Desired amount of the coin going out @param n_coins Number of coins in the pool @param base_pool Address of the base pool @param base_token Address of the base pool's LP token @return Required input amount """ # [coin] + [...n_meta_coins...] if i > 0 and j > 0: # meta_coin1 -> meta_coin2 return StableCalcZap(STABLE_CALC_ZAP).get_dx_underlying(base_pool, convert(i - 1, int128), convert(j - 1, int128), dy, n_coins - 1) elif i == 0: # coin -> meta_coin # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin) # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False) # 2. dx = get_dx(0, 1, lp_amount) base_amounts: uint256[MAX_COINS] = empty(uint256[MAX_COINS]) base_amounts[j - 1] = dy lp_amount: uint256 = StableCalcZap(STABLE_CALC_ZAP).calc_token_amount(base_pool, base_token, base_amounts, n_coins - 1, False, True) return self._get_dx(pool, 0, 1, lp_amount, 2) else: # j == 0, meta_coin -> coin # meta_coin -(add)-> LP -(swap)-> coin (dy - coin) # 1. lp_amount = get_dx(1, 0, dy) # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1) lp_amount: uint256 = self._get_dx(pool, 1, 0, dy, 2) # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough. return StablePool(base_pool).calc_withdraw_one_coin(lp_amount, convert(i - 1, int128)) @internal @view def _get_dx_tricrypto_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: # [...n_meta_coins...] + [coin1, coin2] n_meta_coins: uint256 = n_coins - 2 if i < n_meta_coins and j < n_meta_coins: # meta_coin1 -> meta_coin2 return StableCalcZap(STABLE_CALC_ZAP).get_dx_underlying(base_pool, convert(i, int128), convert(j, int128), dy, n_meta_coins) elif i >= n_meta_coins and j >= n_meta_coins: # coin1 -> coin2 return self._get_dx(pool, i - n_meta_coins + 1, j - n_meta_coins + 1, dy, 3) elif i >= n_meta_coins: # coin -> meta_coin # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin) # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False) # 2. dx = get_dx(1 or 2, 0, lp_amount) base_amounts: uint256[MAX_COINS] = empty(uint256[MAX_COINS]) base_amounts[j] = dy lp_amount: uint256 = StableCalcZap(STABLE_CALC_ZAP).calc_token_amount(base_pool, base_token, base_amounts, n_meta_coins, False, True) return self._get_dx(pool, i - n_meta_coins + 1, 0, lp_amount, 3) else: # j >= n_meta_coins, meta_coin -> coin # meta_coin -(add)-> LP -(swap)-> coin (dy - coin) # 1. lp_amount = get_dx(0, 1 or 2, dy) # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1) lp_amount: uint256 = self._get_dx(pool, 0, j - n_meta_coins + 1, dy, 3) # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough. return StablePool(base_pool).calc_withdraw_one_coin(lp_amount, convert(i, int128)) @external @view def get_dx_tricrypto_meta_underlying(pool: address, i: uint256, j: uint256, dy: uint256, n_coins: uint256, base_pool: address, base_token: address) -> uint256: """ @notice Calculate the input amount required to receive the desired output amount. For underlying calculations in meta pool of a type [stable-pool-LP, coin1, coin2]. xDAI (Gnosis): tricrypto Polygon: atricrypto3 Avalanche: atricrypto, avaxcrypto @param pool Address of the pool @param i Input coin index @param j Output coin index @param dy Desired amount of the coin going out @param n_coins Number of coins in the pool @param base_pool Address of the base pool @param base_token Address of the base pool's LP token @return Required input amount """ return self._get_dx_tricrypto_meta_underlying(pool, i, j, dy, n_coins, base_pool, base_token) @external @view def get_dx_double_meta_underlying( pool: address, i: uint256, j: uint256, dy: uint256, base_pool: address, base_pool_zap: address, second_base_pool: address, second_base_token: address, ) -> uint256: """ @notice Calculate the input amount required to receive the desired output amount. For underlying calculations in double meta pool of a type [coin, tricrypto-meta-pool-LP]. Polygon: crv/tricrypto and wmatic/tricrypto. @param pool Address of the pool @param i Input coin index @param j Output coin index @param dy Desired amount of the coin going out @param base_pool Address of the base pool @param base_pool_zap Address of the base pool's zap for underlying calc_token_amount @param second_base_pool Address of the second base pool @param second_base_token Address of the second base pool's LP token @return Required input amount """ # [coin] + [...n_meta_coins...] if i > 0 and j > 0: # meta_coin1 -> meta_coin2 return self._get_dx_tricrypto_meta_underlying(base_pool, i - 1, j - 1, dy, 5, second_base_pool, second_base_token) elif i == 0: # coin -> meta_coin # coin -(swap)-> LP -(remove)-> meta_coin (dy - meta_coin) # 1. lp_amount = calc_token_amount([..., dy, ...], deposit=False) # 2. dx = get_dx(0, 1, lp_amount) base_amounts: uint256[5] = empty(uint256[5]) base_amounts[j - 1] = dy lp_amount: uint256 = AtricryptoZap(base_pool_zap).calc_token_amount(base_amounts, False) return self._get_dx(pool, 0, 1, lp_amount, 2) else: # j == 0, meta_coin -> coin # meta_coin -(add)-> LP -(swap)-> coin (dy - coin) # 1. lp_amount = get_dx(1, 0, dy) # 2. dx = calc_withdraw_one_coin(lp_amount, i - 1) lp_amount: uint256 = self._get_dx(pool, 1, 0, dy, 2) # This is not right. Should be something like calc_add_one_coin. But tests say that it's precise enough. return AtricryptoZap(base_pool_zap).calc_withdraw_one_coin(lp_amount, i - 1)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"stateMutability":"view","type":"function","name":"get_dx","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_tricrypto_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"n_coins","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_dx_double_meta_underlying","inputs":[{"name":"pool","type":"address"},{"name":"i","type":"uint256"},{"name":"j","type":"uint256"},{"name":"dy","type":"uint256"},{"name":"base_pool","type":"address"},{"name":"base_pool_zap","type":"address"},{"name":"second_base_pool","type":"address"},{"name":"second_base_token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]}]
Contract Creation Code
6118b5610011610000396118b5610000f36003361161000c576105da565b60003560e01c346118a35763ca4bc714811861005b5760a436106118a3576004358060a01c6118a357610c80526020610c8051610760526080602461078037610056610ca06110d6565b610ca0f35b638ca1565381186103285760e436106118a3576004358060a01c6118a357610c805260a4358060a01c6118a357610ca05260c4358060a01c6118a357610cc052602435156100ad5760443515156100b0565b60005b610284576024356101eb5761014036610ce037606435604435600181038181116118a3579050600981116118a35760051b610ce001526379ccdf49610e4052610ca051610e6052610cc051610e8052610ce051610ea052610d0051610ec052610d2051610ee052610d4051610f0052610d6051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052608435600181038181116118a3579050610fe0526000611000526001611020526020610e406101e4610e5c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa6101a0573d600060003e3d6000fd5b60203d106118a357610e4051610e20526020610c80516107605260006107805260016107a052610e20516107c05260026107e0526101df610e406110d6565b610e4061032656610326565b610c80516107605260016107805260006107a0526064356107c05260026107e052610217610d006110d6565b610d0051610ce0526020610ca05163cc2b27d7610d0052610ce051610d2052602435600181038181116118a357905080607f1c6118a357610d40526020610d006044610d1c845afa61026e573d600060003e3d6000fd5b60203d106118a357610d00905061032656610326565b6020638fd3218f610ce052610ca051610d0052602435600181038181116118a357905080607f1c6118a357610d2052604435600181038181116118a357905080607f1c6118a357610d4052606435610d6052608435600181038181116118a3579050610d80526020610ce060a4610cfc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa61031a573d600060003e3d6000fd5b60203d106118a357610ce05bf35b634020784b811861039a5760e436106118a3576004358060a01c6118a3576110e05260a4358060a01c6118a3576111005260c4358060a01c6118a3576111205260206110e051610c805260806024610ca03761110051610d205261112051610d405261039561114061154b565b611140f35b635c27cc9c81186105d85761010436106118a3576004358060a01c6118a3576110e0526084358060a01c6118a3576111005260a4358060a01c6118a3576111205260c4358060a01c6118a3576111405260e4358060a01c6118a357611160526024351561040b57604435151561040e565b60005b610578576024356104e75760a03661118037606435604435600181038181116118a3579050600481116118a35760051b611180015261112051637ede89c56112405261118051611260526111a051611280526111c0516112a0526111e0516112c052611200516112e052600061130052602061124060c461125c845afa61049a573d600060003e3d6000fd5b60203d106118a3576112409050516112205260206110e0516107605260006107805260016107a052611220516107c05260026107e0526104db6112406110d6565b6112406105d6566105d6565b6110e0516107605260016107805260006107a0526064356107c05260026107e0526105136111a06110d6565b6111a05161118052602061112051634fb08c5e6111a052611180516111c052602435600181038181116118a35790506111e05260206111a060446111bc845afa610562573d600060003e3d6000fd5b60203d106118a3576111a090506105d6566105d6565b602061110051610c8052602435600181038181116118a3579050610ca052604435600181038181116118a3579050610cc052606435610ce0526005610d005261114051610d205261116051610d40526105d261118061154b565b6111805bf35b505b60006000fd5b60405163f446c1d0610500526020610500600461051c845afa610608573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610642573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa61067c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105605260405163f9ed9597610580526020610580600461059c845afa610766573d600060003e3d6000fd5b60203d106118a357610580905051156107e35763b0872d5d6105c0526104e0516105e05261050051610600526105405161062052610560516106405260206105c060846105dc7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6107d2573d600060003e3d6000fd5b60203d106118a3576105c051610520525b604036610580376000600a905b806105c05260c051156118a357600060051b60e001516105e052600260c051106118a357600160051b60e0015161060052608051600181116118a35760051b6105e001805160a0516402540be4008102816402540be4008204186118a357905061058051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506105e05161022051156118a357600060051b61024001518082028115838383041417156118a357905090506105e0526106005161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610600526329fcfcf2610620526104e0516106405261050051610660526105e05161068052610600516106a052610520516106c0526060516106e052602061062060c461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa610984573d600060003e3d6000fd5b60203d106118a357610620516105a0526105a051606051600181116118a35760051b6105e0015263e83502fa61062052604051610640526105e0516106605261060051610680526020610620606461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6109fb573d600060003e3d6000fd5b60203d106118a35761062051610580526001018181186107f05750506105a051606051600181116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105c05260605115610aac576105c051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105c0525b6105c051606051610220518110156118a35760051b610240015180156118a357808204905090506105c0526105c051815250565b60405163f446c1d0610500526020610500600461051c845afa610b08573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610b42573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa610b7c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a76400008104905061056052600360c051106118a357600260051b60e00151600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105805260405163f9ed95976105a05260206105a060046105bc845afa610cdc573d600060003e3d6000fd5b60203d106118a3576105a090505115610d615763c7fab7086105e0526104e05161060052610500516106205261054051610640526105605161066052610580516106805260206105e060a46105fc734f37a9d177470499a2dd084621020b023fcffc1f5afa610d50573d600060003e3d6000fd5b60203d106118a3576105e051610520525b6040366105a0376000600a905b806105e05260c051156118a357600060051b60e0015161060052600260c051106118a357600160051b60e0015161062052600360c051106118a357600260051b60e0015161064052608051600281116118a35760051b61060001805160a0516402540be4008102816402540be4008204186118a35790506105a051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506106005161022051156118a357600060051b61024001518082028115838383041417156118a35790509050610600526106205161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506106205261064051600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610640526336bc8855610660526104e05161068052610500516106a052610600516106c052610620516106e0526106405161070052610520516107205260605161074052602061066060e461067c734f37a9d177470499a2dd084621020b023fcffc1f5afa610f88573d600060003e3d6000fd5b60203d106118a357610660516105c0526105c051606051600281116118a35760051b610600015260405163572e5625610660526106005161068052610620516106a052610640516106c0526020610660606461067c845afa610fef573d600060003e3d6000fd5b60203d106118a3576106609050516105a052600101818118610d6e5750506105c051606051600281116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105e052606051156110a2576105e051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105e0525b6105e051606051610220518110156118a35760051b610240015180156118a357808204905090506105e0526105e051815250565b6107a05161078051146111035760096107805111156110f6576000611106565b60096107a0511115611106565b60005b611170576017610800527f636f696e20696e646578206f7574206f662072616e67650000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6107c0516111de576017610800527f646f206e6f742065786368616e6765203020636f696e730000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6000610800526000610960526000600a905b80610ac0526107e051610ac0511861120757611333565b61096051600981116118a357600181016109605261076051634903b0d1610ae052610ac051610b00526020610ae06024610afc845afa61124c573d600060003e3d6000fd5b60203d106118a357610ae09050518160051b6109800152506107605163c6610657610b0052610ac051610b20526020610b006024610b1c845afa611295573d600060003e3d6000fd5b60203d106118a357610b00518060a01c6118a357610b4052610b40905051610ae05261080051600981116118a3576001810161080052610ae05163313ce567610b00526020610b006004610b1c845afa6112f4573d600060003e3d6000fd5b60203d106118a357610b0090505180601203601281116118a3579050604d81116118a35780600a0a90508160051b6108200152506001018181186111f0575b50506000610ac0526000600a905b80610c20526107e051600181038181116118a3579050610c20511861136557611432565b60026107e051186113ca57610ac051600981116118a35760018101610ac0526107605163b9e8c9fd610c40526020610c406004610c5c845afa6113ad573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250611432565b610ac051600981116118a35760018101610ac0526107605163a3f7cdd5610c4052610c2051610c60526020610c406024610c5c845afa61140f573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250600101818118611341575b505060036107e051186114c85761076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa5050506114b8610c20610ae0565b610c205181525061154956611549565b61076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa505050611541610c206105e0565b610c20518152505b565b610d0051600281038181116118a3579050610d6052610d6051610ca0511061157457600061157e565b610d6051610cc051105b61182057610d6051610ca05110156115975760006115a2565b610d6051610cc05110155b6117a157610d6051610ca051101561166557610c805161076052600061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611602610da06110d6565b610da051610d8052610d205163cc2b27d7610da052610d8051610dc052610ca05180607f1c6118a357610de0526020610da06044610dbc845afa61164b573d600060003e3d6000fd5b60203d106118a357610da09050518152506118a1566118a1565b61014036610d8037610ce051610cc051600981116118a35760051b610d8001526379ccdf49610ee052610d2051610f0052610d4051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052610e2051610fe052610e405161100052610e605161102052610e805161104052610ea05161106052610d60516110805260006110a05260016110c0526020610ee06101e4610efc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611733573d600060003e3d6000fd5b60203d106118a357610ee051610ec052610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a35790506107805260006107a052610ec0516107c05260036107e052611791610ee06110d6565b610ee0518152506118a1566118a1565b610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a357905061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611810610d806110d6565b610d80518152506118a1566118a1565b638fd3218f610d8052610d2051610da052610ca05180607f1c6118a357610dc052610cc05180607f1c6118a357610de052610ce051610e0052610d6051610e20526020610d8060a4610d9c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611891573d600060003e3d6000fd5b60203d106118a357610d80518152505b565b600080fda165767970657283000307000b
Deployed Bytecode
0x6003361161000c576105da565b60003560e01c346118a35763ca4bc714811861005b5760a436106118a3576004358060a01c6118a357610c80526020610c8051610760526080602461078037610056610ca06110d6565b610ca0f35b638ca1565381186103285760e436106118a3576004358060a01c6118a357610c805260a4358060a01c6118a357610ca05260c4358060a01c6118a357610cc052602435156100ad5760443515156100b0565b60005b610284576024356101eb5761014036610ce037606435604435600181038181116118a3579050600981116118a35760051b610ce001526379ccdf49610e4052610ca051610e6052610cc051610e8052610ce051610ea052610d0051610ec052610d2051610ee052610d4051610f0052610d6051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052608435600181038181116118a3579050610fe0526000611000526001611020526020610e406101e4610e5c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa6101a0573d600060003e3d6000fd5b60203d106118a357610e4051610e20526020610c80516107605260006107805260016107a052610e20516107c05260026107e0526101df610e406110d6565b610e4061032656610326565b610c80516107605260016107805260006107a0526064356107c05260026107e052610217610d006110d6565b610d0051610ce0526020610ca05163cc2b27d7610d0052610ce051610d2052602435600181038181116118a357905080607f1c6118a357610d40526020610d006044610d1c845afa61026e573d600060003e3d6000fd5b60203d106118a357610d00905061032656610326565b6020638fd3218f610ce052610ca051610d0052602435600181038181116118a357905080607f1c6118a357610d2052604435600181038181116118a357905080607f1c6118a357610d4052606435610d6052608435600181038181116118a3579050610d80526020610ce060a4610cfc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa61031a573d600060003e3d6000fd5b60203d106118a357610ce05bf35b634020784b811861039a5760e436106118a3576004358060a01c6118a3576110e05260a4358060a01c6118a3576111005260c4358060a01c6118a3576111205260206110e051610c805260806024610ca03761110051610d205261112051610d405261039561114061154b565b611140f35b635c27cc9c81186105d85761010436106118a3576004358060a01c6118a3576110e0526084358060a01c6118a3576111005260a4358060a01c6118a3576111205260c4358060a01c6118a3576111405260e4358060a01c6118a357611160526024351561040b57604435151561040e565b60005b610578576024356104e75760a03661118037606435604435600181038181116118a3579050600481116118a35760051b611180015261112051637ede89c56112405261118051611260526111a051611280526111c0516112a0526111e0516112c052611200516112e052600061130052602061124060c461125c845afa61049a573d600060003e3d6000fd5b60203d106118a3576112409050516112205260206110e0516107605260006107805260016107a052611220516107c05260026107e0526104db6112406110d6565b6112406105d6566105d6565b6110e0516107605260016107805260006107a0526064356107c05260026107e0526105136111a06110d6565b6111a05161118052602061112051634fb08c5e6111a052611180516111c052602435600181038181116118a35790506111e05260206111a060446111bc845afa610562573d600060003e3d6000fd5b60203d106118a3576111a090506105d6566105d6565b602061110051610c8052602435600181038181116118a3579050610ca052604435600181038181116118a3579050610cc052606435610ce0526005610d005261114051610d205261116051610d40526105d261118061154b565b6111805bf35b505b60006000fd5b60405163f446c1d0610500526020610500600461051c845afa610608573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610642573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa61067c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105605260405163f9ed9597610580526020610580600461059c845afa610766573d600060003e3d6000fd5b60203d106118a357610580905051156107e35763b0872d5d6105c0526104e0516105e05261050051610600526105405161062052610560516106405260206105c060846105dc7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6107d2573d600060003e3d6000fd5b60203d106118a3576105c051610520525b604036610580376000600a905b806105c05260c051156118a357600060051b60e001516105e052600260c051106118a357600160051b60e0015161060052608051600181116118a35760051b6105e001805160a0516402540be4008102816402540be4008204186118a357905061058051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506105e05161022051156118a357600060051b61024001518082028115838383041417156118a357905090506105e0526106005161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610600526329fcfcf2610620526104e0516106405261050051610660526105e05161068052610600516106a052610520516106c0526060516106e052602061062060c461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa610984573d600060003e3d6000fd5b60203d106118a357610620516105a0526105a051606051600181116118a35760051b6105e0015263e83502fa61062052604051610640526105e0516106605261060051610680526020610620606461063c7369522fb5337663d3b4dfb0030b881c1a750adb4f5afa6109fb573d600060003e3d6000fd5b60203d106118a35761062051610580526001018181186107f05750506105a051606051600181116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105c05260605115610aac576105c051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105c0525b6105c051606051610220518110156118a35760051b610240015180156118a357808204905090506105c0526105c051815250565b60405163f446c1d0610500526020610500600461051c845afa610b08573d600060003e3d6000fd5b60203d106118a3576105009050516104e05260405163b1373929610520526020610520600461053c845afa610b42573d600060003e3d6000fd5b60203d106118a35761052090505161050052604051630f529ba2610540526020610540600461055c845afa610b7c573d600060003e3d6000fd5b60203d106118a3576105409050516105205260c051156118a357600060051b60e0015161022051156118a357600060051b61024001518082028115838383041417156118a3579050905061054052600260c051106118a357600160051b60e0015161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a76400008104905061056052600360c051106118a357600260051b60e00151600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506105805260405163f9ed95976105a05260206105a060046105bc845afa610cdc573d600060003e3d6000fd5b60203d106118a3576105a090505115610d615763c7fab7086105e0526104e05161060052610500516106205261054051610640526105605161066052610580516106805260206105e060a46105fc734f37a9d177470499a2dd084621020b023fcffc1f5afa610d50573d600060003e3d6000fd5b60203d106118a3576105e051610520525b6040366105a0376000600a905b806105e05260c051156118a357600060051b60e0015161060052600260c051106118a357600160051b60e0015161062052600360c051106118a357600260051b60e0015161064052608051600281116118a35760051b61060001805160a0516402540be4008102816402540be4008204186118a35790506105a051806402540be400036402540be40081116118a357905080156118a357808204905090508082038281116118a357905090508152506106005161022051156118a357600060051b61024001518082028115838383041417156118a35790509050610600526106205161038051156118a357600060051b6103a001518082028115838383041417156118a35790509050600261022051106118a357600160051b61024001518082028115838383041417156118a35790509050670de0b6b3a7640000810490506106205261064051600261038051106118a357600160051b6103a001518082028115838383041417156118a35790509050600361022051106118a357600260051b61024001518082028115838383041417156118a35790509050670de0b6b3a764000081049050610640526336bc8855610660526104e05161068052610500516106a052610600516106c052610620516106e0526106405161070052610520516107205260605161074052602061066060e461067c734f37a9d177470499a2dd084621020b023fcffc1f5afa610f88573d600060003e3d6000fd5b60203d106118a357610660516105c0526105c051606051600281116118a35760051b610600015260405163572e5625610660526106005161068052610620516106a052610640516106c0526020610660606461067c845afa610fef573d600060003e3d6000fd5b60203d106118a3576106609050516105a052600101818118610d6e5750506105c051606051600281116118a35760051b61054001518082038281116118a35790509050600181018181106118a35790506105e052606051156110a2576105e051670de0b6b3a7640000810281670de0b6b3a76400008204186118a3579050606051600181038181116118a3579050610380518110156118a35760051b6103a0015180156118a357808204905090506105e0525b6105e051606051610220518110156118a35760051b610240015180156118a357808204905090506105e0526105e051815250565b6107a05161078051146111035760096107805111156110f6576000611106565b60096107a0511115611106565b60005b611170576017610800527f636f696e20696e646578206f7574206f662072616e67650000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6107c0516111de576017610800527f646f206e6f742065786368616e6765203020636f696e730000000000000000006108205261080050610800518061082001601f826000031636823750506308c379a06107c05260206107e052601f19601f6108005101166044016107dcfd5b6000610800526000610960526000600a905b80610ac0526107e051610ac0511861120757611333565b61096051600981116118a357600181016109605261076051634903b0d1610ae052610ac051610b00526020610ae06024610afc845afa61124c573d600060003e3d6000fd5b60203d106118a357610ae09050518160051b6109800152506107605163c6610657610b0052610ac051610b20526020610b006024610b1c845afa611295573d600060003e3d6000fd5b60203d106118a357610b00518060a01c6118a357610b4052610b40905051610ae05261080051600981116118a3576001810161080052610ae05163313ce567610b00526020610b006004610b1c845afa6112f4573d600060003e3d6000fd5b60203d106118a357610b0090505180601203601281116118a3579050604d81116118a35780600a0a90508160051b6108200152506001018181186111f0575b50506000610ac0526000600a905b80610c20526107e051600181038181116118a3579050610c20511861136557611432565b60026107e051186113ca57610ac051600981116118a35760018101610ac0526107605163b9e8c9fd610c40526020610c406004610c5c845afa6113ad573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250611432565b610ac051600981116118a35760018101610ac0526107605163a3f7cdd5610c4052610c2051610c60526020610c406024610c5c845afa61140f573d600060003e3d6000fd5b60203d106118a357610c409050518160051b610ae0015250600101818118611341575b505060036107e051186114c85761076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa5050506114b8610c20610ae0565b610c205181525061154956611549565b61076051604052610780516060526107a0516080526107c05160a052610960518060c0528060051b8060e08261098060045afa5050506108005180610220528060051b806102408261082060045afa505050610ac05180610380528060051b806103a082610ae060045afa505050611541610c206105e0565b610c20518152505b565b610d0051600281038181116118a3579050610d6052610d6051610ca0511061157457600061157e565b610d6051610cc051105b61182057610d6051610ca05110156115975760006115a2565b610d6051610cc05110155b6117a157610d6051610ca051101561166557610c805161076052600061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611602610da06110d6565b610da051610d8052610d205163cc2b27d7610da052610d8051610dc052610ca05180607f1c6118a357610de0526020610da06044610dbc845afa61164b573d600060003e3d6000fd5b60203d106118a357610da09050518152506118a1566118a1565b61014036610d8037610ce051610cc051600981116118a35760051b610d8001526379ccdf49610ee052610d2051610f0052610d4051610f2052610d8051610f4052610da051610f6052610dc051610f8052610de051610fa052610e0051610fc052610e2051610fe052610e405161100052610e605161102052610e805161104052610ea05161106052610d60516110805260006110a05260016110c0526020610ee06101e4610efc73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611733573d600060003e3d6000fd5b60203d106118a357610ee051610ec052610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a35790506107805260006107a052610ec0516107c05260036107e052611791610ee06110d6565b610ee0518152506118a1566118a1565b610c805161076052610ca051610d60518082038281116118a35790509050600181018181106118a357905061078052610cc051610d60518082038281116118a35790509050600181018181106118a35790506107a052610ce0516107c05260036107e052611810610d806110d6565b610d80518152506118a1566118a1565b638fd3218f610d8052610d2051610da052610ca05180607f1c6118a357610dc052610cc05180607f1c6118a357610de052610ce051610e0052610d6051610e20526020610d8060a4610d9c73ca8d0747b5573d69653c3ac22242e6341c36e4b45afa611891573d600060003e3d6000fd5b60203d106118a357610d80518152505b565b600080fda165767970657283000307000b
Loading...
Loading
Loading...
Loading

Multichain Portfolio | 34 Chains
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.