Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CurveStableswapFactoryNGHandler
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# pragma version 0.3.10 # pragma evm-version paris """ @title CurveStableswapFactoryNGHandler @custom:version 1.1.0 @author Curve.Fi @license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved @notice Stableswap Factory handler for the Metaregistry """ version: public(constant(String[8])) = "1.1.0" # ---- interfaces ---- # interface BaseRegistry: def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: view def get_admin_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view def get_A(_pool: address) -> uint256: view def get_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view def get_coins(_pool: address) -> DynArray[address, MAX_METAREGISTRY_COINS]: view def get_coin_indices(_pool: address, _from: address, _to: address) -> (int128, int128): view def get_decimals(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view def get_fees(_pool: address) -> uint256[2]: view def get_gauge(_pool: address) -> address: view def get_lp_token(_pool: address) -> address: view def get_meta_n_coins(_pool: address) -> (uint256, uint256): view def get_n_coins(_pool: address) -> uint256: view def get_pool_asset_type(_pool: address) -> uint256: view def get_underlying_balances(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view def get_underlying_coins(_pool: address) -> DynArray[address, MAX_METAREGISTRY_COINS]: view def get_underlying_decimals(_pool: address) -> DynArray[uint256, MAX_METAREGISTRY_COINS]: view def is_meta(_pool: address) -> bool: view def pool_count() -> uint256: view def pool_list(pool_id: uint256) -> address: view def base_pool_data(_pool: address) -> BasePoolArray: view def base_pool_count() -> uint256: view def get_base_pool(_pool: address) -> address: view def base_pool_list(i: uint256) -> address: view interface CurvePool: def admin_balances(i: uint256) -> uint256: view def balances(i: uint256) -> uint256: view def get_virtual_price() -> uint256: view def fee() -> uint256: view def admin_fee() -> uint256: view def offpeg_fee_multiplier() -> uint256: view def coins(i: uint256) -> address: view interface ERC20: def balanceOf(_addr: address) -> uint256: view def decimals() -> uint256: view def name() -> String[64]: view def totalSupply() -> uint256: view interface Gauge: def is_killed() -> bool: view struct BasePoolArray: lp_token: address coins: DynArray[address, MAX_METAREGISTRY_COINS] decimals: uint256 n_coins: uint256 asset_types: DynArray[uint8, MAX_METAREGISTRY_COINS] # ---- constants ---- # MAX_METAREGISTRY_COINS: constant(uint256) = 8 # ---- storage variables ---- # base_registry: public(BaseRegistry) # ---- constructor ---- # @external def __init__(_registry_address: address): self.base_registry = BaseRegistry(_registry_address) # ---- internal methods ---- # @internal @view def _get_base_pool_lp_token(_lp_token: address) -> address: for i in range(self.base_registry.base_pool_count(), bound=10000): base_pool: address = self.base_registry.base_pool_list(i) if self.base_registry.base_pool_data(base_pool).lp_token == _lp_token: return base_pool return empty(address) @internal @view def _get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]: _coins: DynArray[address, MAX_METAREGISTRY_COINS] = self.base_registry.get_coins(_pool) _padded_coins: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS]) for i in range(MAX_METAREGISTRY_COINS): if i == len(_coins): break _padded_coins[i] = _coins[i] return _padded_coins @internal @view def _get_underlying_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]: _coins: DynArray[address, MAX_METAREGISTRY_COINS] = self.base_registry.get_underlying_coins(_pool) _padded_coins: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS]) for i in range(MAX_METAREGISTRY_COINS): if i == len(_coins): break _padded_coins[i] = _coins[i] return _padded_coins @view @internal def _get_meta_underlying_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: base_coin_idx: uint256 = self.base_registry.get_n_coins(_pool) - 1 base_pool: address = self.base_registry.get_base_pool(_pool) # base pool lp token is at index 1: base_total_supply: uint256 = ERC20(CurvePool(_pool).coins(1)).totalSupply() ul_balance: uint256 = 0 underlying_pct: uint256 = 0 if base_total_supply > 0: underlying_pct = CurvePool(_pool).balances(base_coin_idx) * 10**36 / base_total_supply underlying_balances: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS]) ul_coins: address[MAX_METAREGISTRY_COINS] = self._get_underlying_coins(_pool) for i in range(MAX_METAREGISTRY_COINS): if ul_coins[i] == empty(address): break if i < base_coin_idx: ul_balance = CurvePool(_pool).balances(i) else: ul_balance = CurvePool(base_pool).balances(i - base_coin_idx) ul_balance = ul_balance * underlying_pct / 10**36 underlying_balances[i] = ul_balance return underlying_balances @internal @view def _pad_uint_dynarray( _array: DynArray[uint256, MAX_METAREGISTRY_COINS] ) -> uint256[MAX_METAREGISTRY_COINS]: _padded_array: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS]) array_len: uint256 = len(_array) for i in range(MAX_METAREGISTRY_COINS): if i == array_len: break _padded_array[i] = _array[i] return _padded_array @internal @view def _pad_addr_dynarray(_array: DynArray[address, MAX_METAREGISTRY_COINS]) -> address[MAX_METAREGISTRY_COINS]: _padded_array: address[MAX_METAREGISTRY_COINS] = empty(address[MAX_METAREGISTRY_COINS]) array_len: uint256 = len(_array) for i in range(MAX_METAREGISTRY_COINS): if i == array_len: break _padded_array[i] = _array[i] return _padded_array # ---- view methods (API) of the contract ---- # @external @view def find_pool_for_coins(_from: address, _to: address, i: uint256 = 0) -> address: return self.base_registry.find_pool_for_coins(_from, _to, i) @external @view def get_admin_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: """ @notice Get the balances of the admin of the pool @dev does not use base registry admin_balances because that has errors in the getter for n_coins (some pools show zero, so admin balances is zero) @param _pool address of the pool @return balances of the admin of the pool """ n_coins: uint256 = self.base_registry.get_n_coins(_pool) admin_balances: uint256[MAX_METAREGISTRY_COINS] = empty(uint256[MAX_METAREGISTRY_COINS]) for i in range(MAX_METAREGISTRY_COINS): if i == n_coins: break admin_balances[i] = CurvePool(_pool).admin_balances(i) return admin_balances @external @view def get_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: """ @notice Get the balances of the pool @param _pool address of the pool @return balances of the pool """ return self._pad_uint_dynarray(self.base_registry.get_balances(_pool)) @external @view def get_base_pool(_pool: address) -> address: """ @notice Get the base pool of the pool @param _pool address of the pool @return base pool of the pool """ return self.base_registry.get_base_pool(_pool) @view @external def get_coin_indices(_pool: address, _from: address, _to: address) -> (int128, int128, bool): """ @notice Get the indices of the coins in the pool @param _pool address of the pool @param _from address of the coin @param _to address of the coin @return coin indices and whether the coin swap involves an underlying market or not """ coin1: int128 = 0 coin2: int128 = 0 is_underlying: bool = False (coin1, coin2) = self.base_registry.get_coin_indices(_pool, _from, _to) # due to a bug in original factory contract, `is_underlying`` is always True # to fix this, we first check if it is a metapool, and if not then we return # False. If so, then we check if basepool lp token is one of the two coins, # in which case `is_underlying` would be False if self.base_registry.is_meta(_pool): base_pool_lp_token: address = self.base_registry.get_coins(_pool)[1] if base_pool_lp_token not in [_from, _to]: is_underlying = True return (coin1, coin2, is_underlying) @external @view def get_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]: """ @notice Get the coins of the pool @param _pool address of the pool @return coins of the pool """ return self._get_coins(_pool) @external @view def get_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: """ @notice Get the decimals of coins in the pool @param _pool address of the pool @return decimals of coins in the pool """ return self._pad_uint_dynarray(self.base_registry.get_decimals(_pool)) @external @view def get_fees(_pool: address) -> uint256[10]: """ @notice Get the fees of the pool @param _pool address of the pool @return fees of the pool """ fees: uint256[10] = empty(uint256[10]) fees[0] = CurvePool(_pool).fee() fees[1] = CurvePool(_pool).admin_fee() fees[2] = CurvePool(_pool).offpeg_fee_multiplier() return fees @external @view def get_virtual_price_from_lp_token(_pool: address) -> uint256: """ @notice Get the virtual price of the pool @param _pool address of the pool @return virtual price of the pool """ return CurvePool(_pool).get_virtual_price() @external @view def get_lp_token(_pool: address) -> address: """ @notice Get the lp token of the pool @dev for stableswap factory pools, the pool is the lp token itself @param _pool address of the pool @return lp token of the pool """ return _pool @external @view def get_n_coins(_pool: address) -> uint256: """ @notice Get the number of coins in the pool @param _pool address of the pool @return number of coins in the pool """ return self.base_registry.get_n_coins(_pool) @external @view def get_n_underlying_coins(_pool: address) -> uint256: """ @notice Get the number of underlying coins in the pool @param _pool address of the pool @return number of underlying coins in the pool """ # need to check if any of the token is a base pool LP token # since a metapool can be lptoken:lptoken, and it would count # underlying coins as 1 + base_pool_n_coins instead of 2 x base_pool_n_coins coins: address[MAX_METAREGISTRY_COINS] = self._get_coins(_pool) base_pool: address = empty(address) num_coins: uint256 = 0 for i in range(MAX_METAREGISTRY_COINS): if coins[i] == empty(address): break base_pool = self.base_registry.get_base_pool(coins[i]) if base_pool == empty(address) and coins[i] != empty(address): num_coins += 1 else: num_coins += self.base_registry.base_pool_data(base_pool).n_coins return num_coins @external @view def get_pool_asset_type(_pool: address) -> uint256: """ @notice Get the asset type of the coins in the pool @dev 0 = USD, 1 = ETH, 2 = BTC, 3 = Other @param _pool address of the pool @return pool asset type of the pool """ return self.base_registry.get_pool_asset_type(_pool) @external @view def get_pool_from_lp_token(_lp_token: address) -> address: """ @notice Get the pool of the lp token @dev This is more or less like a pass through method. Can be ignored but We leave it in for consistency across registry handlers. @param _lp_token address of the lp token (which is also the pool) @return pool of the lp token """ if self.base_registry.get_n_coins(_lp_token) > 0: return _lp_token return empty(address) @external @view def get_pool_name(_pool: address) -> String[64]: """ @notice Get the name of the pool @dev stable factory pools are ERC20 tokenized @return name of the pool """ if self.base_registry.get_n_coins(_pool) == 0: # _pool is not in base registry, so we ignore: return "" return ERC20(_pool).name() @external @view def get_pool_params(_pool: address) -> uint256[20]: """ @notice Get the parameters of the pool @param _pool address of the pool @return parameters of the pool """ stableswap_pool_params: uint256[20] = empty(uint256[20]) stableswap_pool_params[0] = self.base_registry.get_A(_pool) return stableswap_pool_params @external @view def get_underlying_balances(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: """ @notice Get the underlying balances of the pool @param _pool address of the pool @return underlying balances of the pool """ if not self.base_registry.is_meta(_pool): return self._pad_uint_dynarray(self.base_registry.get_balances(_pool)) return self._get_meta_underlying_balances(_pool) @external @view def get_underlying_coins(_pool: address) -> address[MAX_METAREGISTRY_COINS]: """ @notice Get the underlying coins of the pool @param _pool address of the pool @return underlying coins of the pool """ if not self.base_registry.is_meta(_pool): return self._get_coins(_pool) return self._get_underlying_coins(_pool) @external @view def get_underlying_decimals(_pool: address) -> uint256[MAX_METAREGISTRY_COINS]: """ @notice Get the underlying decimals of the pool @dev If it is a metapool, method uses the base registry. Else it uses a custom getter. This is because the base registry cannot unpack decimals (stored as a bitmap) if there is no metapool. So it returns the decimals of only the first coin. @param _pool Address of the pool @return underlying decimals of the pool """ if not self.base_registry.is_meta(_pool): return self._pad_uint_dynarray(self.base_registry.get_decimals(_pool)) return self._pad_uint_dynarray(self.base_registry.get_underlying_decimals(_pool)) @external @view def is_meta(_pool: address) -> bool: """ @notice Check if the pool is a metapool @param _pool address of the pool @return True if the pool is a metapool """ return self.base_registry.is_meta(_pool) @external @view def is_registered(_pool: address) -> bool: """ @notice Check if a pool belongs to the registry using get_n_coins @param _pool The address of the pool @return A bool corresponding to whether the pool belongs or not """ return self.base_registry.get_n_coins(_pool) > 0 @external @view def pool_count() -> uint256: """ @notice Get the number of pools in the registry @return number of pools in the registry """ return self.base_registry.pool_count() @external @view def pool_list(_index: uint256) -> address: """ @notice Get the address of the pool at the given index @param _index The index of the pool @return The address of the pool """ return self.base_registry.pool_list(_index)
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"_registry_address","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"find_pool_for_coins","inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"i","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_admin_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_base_pool","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_coin_indices","inputs":[{"name":"_pool","type":"address"},{"name":"_from","type":"address"},{"name":"_to","type":"address"}],"outputs":[{"name":"","type":"int128"},{"name":"","type":"int128"},{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"get_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_fees","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[10]"}]},{"stateMutability":"view","type":"function","name":"get_virtual_price_from_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_lp_token","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_n_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_n_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_asset_type","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_pool_from_lp_token","inputs":[{"name":"_lp_token","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"get_pool_name","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"get_pool_params","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[20]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_balances","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_coins","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"address[8]"}]},{"stateMutability":"view","type":"function","name":"get_underlying_decimals","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"uint256[8]"}]},{"stateMutability":"view","type":"function","name":"is_meta","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"is_registered","inputs":[{"name":"_pool","type":"address"}],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"pool_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"pool_list","inputs":[{"name":"_index","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"version","inputs":[],"outputs":[{"name":"","type":"string"}]},{"stateMutability":"view","type":"function","name":"base_registry","inputs":[],"outputs":[{"name":"","type":"address"}]}]
Contract Creation Code
34610032576020611a736000396000518060a01c61003257604052604051600055611a2761003761000039611a27610000f35b600080fd60003560e01c60026018820660011b6119f701601e39600051565b6354fd4d50811861009957346119f25760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63c11e45b8811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f160805260405160a052602060806024609c845afa6100e7573d600060003e3d6000fd5b60203d106119f25760809050516060526101003660803760006008905b8061018052606051610180511861011a57610176565b60405163e2e7d2646101a052610180516101c05260206101a060246101bc845afa61014a573d600060003e3d6000fd5b60203d106119f2576101a090505161018051600781116119f25760051b60800152600101818118610104575b50506101006080f361121f565b63b229777c811861121f57346119f25760005460405260206040f361121f565b63a87df06c811861121f576044361034176119f25760006080526101e25661121f565b636982eb0b8118610256576064361034176119f2576044356080525b6004358060a01c6119f2576040526024358060a01c6119f2576060526020600054636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa610238573d600060003e3d6000fd5b60203d106119f25760a0518060a01c6119f257610120526101209050f35b63bdf475c3811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6102a4573d600060003e3d6000fd5b60203d106119f2576060905051156102bf57602060406102c9565b6000606052602060605bf361121f565b6392e3cc2d8118610382576024361034176119f2576004358060a01c6119f2576102a0526101006000546392e3cc2d6102c0526102a0516102e0526101406102c060246102dc845afa610327573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa5050505061037d61054061191f565b610540f35b63eb85226d811861121f576064361034176119f2576004358060a01c6119f2576040526024358060a01c6119f2576060526044358060a01c6119f25760805260603660a03760005463eb85226d610100526040516101205260605161014052608051610160526040610100606461011c845afa610404573d600060003e3d6000fd5b60403d106119f2576101005180600f0b81186119f257610180526101205180600f0b81186119f2576101a0526101809050805160a052602081015160c0525060005463e4d332a961010052604051610120526020610100602461011c845afa610472573d600060003e3d6000fd5b60203d106119f257610100518060011c6119f257610140526101409050511561056957600054639ac90d3d610180526040516101a052610140610180602461019c845afa6104c5573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561051957905b8060051b6020850101518060a01c6119f2578160051b61030001526001018181186104f3575b5050806102e05250506102e0905060028151106119f257600160051b6020820101905051610160526101605160605181146105595760805181141561055c565b60005b90501561056957600160e0525b60a0516101005260c0516101205260e051610140526060610100f361121f565b636f20d6dd811861121f576024361034176119f2576004358060a01c6119f2576040526020600054636f20d6dd606052604051608052602060606024607c845afa6105d9573d600060003e3d6000fd5b60203d106119f2576060518060a01c6119f25760a05260a09050f361121f565b639ac90d3d8118610637576024361034176119f2576004358060a01c6119f25761040052610100610400516040526106326104206113d6565b610420f35b6352b51555811861121f576024361034176119f2576004358060a01c6119f2576102a0526101006000546352b515556102c0526102a0516102e0526101406102c060246102dc845afa61068f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506106e561054061191f565b610540f361121f565b637cdb72b0811861121f576024361034176119f2576004358060a01c6119f2576040526101403660603760405163ddca3f436101a05260206101a060046101bc845afa610740573d600060003e3d6000fd5b60203d106119f2576101a090505160605260405163fee3f7f96101a05260206101a060046101bc845afa610779573d600060003e3d6000fd5b60203d106119f2576101a0905051608052604051638edfdd5f6101a05260206101a060046101bc845afa6107b2573d600060003e3d6000fd5b60203d106119f2576101a090505160a0526101406060f361121f565b63c5b7074a811861121f576024361034176119f2576004358060a01c6119f257604052602060405163bb7b8b80606052602060606004607c845afa610818573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63379510498118610853576024361034176119f2576004358060a01c6119f25760405260206040f35b634cb088f1811861121f576024361034176119f2576004358060a01c6119f2576102a05260005463e4d332a96102c0526102a0516102e05260206102c060246102dc845afa6108a7573d600060003e3d6000fd5b60203d106119f2576102c0518060011c6119f2576103005261030090505161095b576101006000546352b51555610320526102a05161034052610140610320602461033c845afa6108fd573d600060003e3d6000fd5b60403d106119f257610320516103200160088151116119f257805160208160051b0180610480828560045afa505050506104809050805160208160051b01806040828560045afa505050506109536105a061191f565b6105a06109e9565b610100600054634cb088f16102c0526102a0516102e0526101406102c060246102dc845afa61098f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506109e561054061191f565b6105405bf361121f565b63940494f18118610a4d576024361034176119f2576004358060a01c6119f257604052602060005463940494f1606052604051608052602060606024607c845afa610a3f573d600060003e3d6000fd5b60203d106119f25760609050f35b635c9117418118610b8c576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa610a9b573d600060003e3d6000fd5b60203d106119f2576060905051610af05760208060c052600060a05260a08160c001600081528051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060c0610b8a565b602080610160526040516306fdde03606052608060606004607c845afa610b1c573d600060003e3d6000fd5b60403d106119f25760605160600160408151116119f257602081510180610100828460045afa5050506101009050816101600160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101605bf35b63e4d332a9811861121f576024361034176119f2576004358060a01c6119f257604052602060005463e4d332a9606052604051608052602060606024607c845afa610bdc573d600060003e3d6000fd5b60203d106119f2576060518060011c6119f25760a05260a09050f361121f565b630a700c08811861121f576024361034176119f2576004358060a01c6119f2576104005261040051604052610c326105206113d6565b6105206101006104206101008360045afa50506040366105203760006008905b806105605261056051600781116119f25760051b6104200151610c7457610e54565b600054636f20d6dd6105805261056051600781116119f25760051b61042001516105a0526020610580602461059c845afa610cb4573d600060003e3d6000fd5b60203d106119f257610580518060a01c6119f2576105c0526105c09050516105205261052051610cf95761056051600781116119f25760051b61042001511515610cfc565b60005b610e33576105405160005463ed87494061058052610520516105a052610300610580602461059c845afa610d35573d600060003e3d6000fd5b6101003d106119f257610580516105800180518060a01c6119f2576108a0526020810151810160088151116119f2578051600081600881116119f2578015610d9f57905b8060051b6020850101518060a01c6119f2578160051b6108e00152600101818118610d79575b5050806108c052505060408101516109e0526060810151610a00526080810151810160088151116119f2578051600081600881116119f2578015610e0557905b8060051b6020850101518060081c6119f2578160051b610a400152600101818118610ddf575b505080610a20525050506108a0905061016081019050518082018281106119f2579050905061054052610e49565b61054051600181018181106119f2579050610540525b600101818118610c52575b50506020610540f361121f565b6366d3966c811861121f576024361034176119f2576004358060a01c6119f25760405260206000546366d3966c606052604051608052602060606024607c845afa610eb1573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63688532aa8118610f34576024361034176119f2576004358060a01c6119f257604052610280366060376000546355b30b196102e0526040516103005260206102e060246102fc845afa610f1c573d600060003e3d6000fd5b60203d106119f2576102e09050516060526102806060f35b63956aae3a811861121f57346119f257602060005463956aae3a604052602060406004605c845afa610f6b573d600060003e3d6000fd5b60203d106119f25760409050f361121f565b6359f4f351811861121f576024361034176119f2576004358060a01c6119f2576107c05260005463e4d332a96107e0526107c0516108005260206107e060246107fc845afa610fd1573d600060003e3d6000fd5b60203d106119f2576107e0518060011c6119f25761082052610820905051611085576101006000546392e3cc2d610840526107c05161086052610140610840602461085c845afa611027573d600060003e3d6000fd5b60403d106119f257610840516108400160088151116119f257805160208160051b01806109a0828560045afa505050506109a09050805160208160051b01806040828560045afa5050505061107d610ac061191f565b610ac061109f565b6101006107c0516104005261109b6107e06115fe565b6107e05bf361121f565b63a77576ef811861121f576024361034176119f2576004358060a01c6119f2576104005260005463e4d332a96104205261040051610440526020610420602461043c845afa6110f9573d600060003e3d6000fd5b60203d106119f257610420518060011c6119f2576104605261046090505161113857610100610400516040526111306104806113d6565b610480611151565b6101006104005160405261114d6104206114ea565b6104205bf361121f565b63619ea806811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6111a5573d600060003e3d6000fd5b60203d106119f2576060905051151560a052602060a0f361121f565b633a1d5d8e811861121f576024361034176119f2576020600054633a1d5d8e604052600435606052602060406024605c845afa611203573d600060003e3d6000fd5b60203d106119f2576040518060a01c6119f25760805260809050f35b60006000fd611233573d600060003e3d6000fd5b60203d106119f257606090505161271081116119f25780156113cc57905b8060a0526000546322fe567160e05260a05161010052602060e0602460fc845afa611281573d600060003e3d6000fd5b60203d106119f25760e0518060a01c6119f2576101205261012090505160c05260405160005463ed87494060e05260c0516101005261030060e0602460fc845afa6112d1573d600060003e3d6000fd5b6101003d106119f25760e05160e00180518060a01c6119f257610400526020810151810160088151116119f2578051600081600881116119f257801561133957905b8060051b6020850101518060a01c6119f2578160051b6104400152600101818118611313575b5050806104205250506040810151610540526060810151610560526080810151810160088151116119f2578051600081600881116119f257801561139f57905b8060051b6020850101518060081c6119f2578160051b6105a00152600101818118611379575b50508061058052505050610400905051186113c15760c05183525050506113d4565b600101818118611251575b505060008152505b565b600054639ac90d3d610180526040516101a052610140610180602461019c845afa611406573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561145a57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611434575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186114a2576114d6565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b610180015260010181811861148c575b50506101008161010061018060045afa5050565b60005463a77576ef610180526040516101a052610140610180602461019c845afa61151a573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561156e57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611548575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186115b6576115ea565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b61018001526001018181186115a0575b50506101008161010061018060045afa5050565b60005463940494f16104405261040051610460526020610440602461045c845afa61162e573d600060003e3d6000fd5b60203d106119f257610440905051600181038181116119f257905061042052600054636f20d6dd6104605261040051610480526020610460602461047c845afa61167d573d600060003e3d6000fd5b60203d106119f257610460518060a01c6119f2576104a0526104a0905051610440526104005163c66106576104805260016104a0526020610480602461049c845afa6116ce573d600060003e3d6000fd5b60203d106119f257610480518060a01c6119f2576104c0526104c09050516318160ddd6104e05260206104e060046104fc845afa611711573d600060003e3d6000fd5b60203d106119f2576104e0905051610460526040366104803761046051156117b45761040051634903b0d16104c052610420516104e05260206104c060246104dc845afa611764573d600060003e3d6000fd5b60203d106119f2576104c09050516ec097ce7bc90715b34b9f10000000008102816ec097ce7bc90715b34b9f10000000008204186119f25790506104605180156119f257808204905090506104a0525b610100366104c037610400516040526117ce6106c06114ea565b6106c06101006105c06101008360045afa505060006008905b806106c0526106c051600781116119f25760051b6105c001516118095761190b565b610420516106c051106118a45761044051634903b0d16106e0526106c051610420518082038281116119f257905090506107005260206106e060246106fc845afa611859573d600060003e3d6000fd5b60203d106119f2576106e090505161048052610480516104a0518082028115838383041417156119f257905090506ec097ce7bc90715b34b9f100000000081049050610480526118e8565b61040051634903b0d16106e0526106c0516107005260206106e060246106fc845afa6118d5573d600060003e3d6000fd5b60203d106119f2576106e0905051610480525b610480516106c051600781116119f25760051b6104c001526001018181186117e7575b5050610100816101006104c060045afa5050565b61010036610160376040516102605260006008905b806102805261026051610280511861194b5761197f565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611934575b50506101008161010061016060045afa5050565b80610280526102605161028051186119aa576119de565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611993575b50506101008161010061016060045afa5050565b600080fd06ee09ef07ce121f0e6105891157121f001a0f7d0ec3121f018302cf121f121f0bfc082a121f01c601a305f911c110a584191a2781183000a16576797065728300030a00150000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8
Deployed Bytecode
0x60003560e01c60026018820660011b6119f701601e39600051565b6354fd4d50811861009957346119f25760208060805260056040527f312e312e3000000000000000000000000000000000000000000000000000000060605260408160800181518152602082015160208201528051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506080f35b63c11e45b8811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f160805260405160a052602060806024609c845afa6100e7573d600060003e3d6000fd5b60203d106119f25760809050516060526101003660803760006008905b8061018052606051610180511861011a57610176565b60405163e2e7d2646101a052610180516101c05260206101a060246101bc845afa61014a573d600060003e3d6000fd5b60203d106119f2576101a090505161018051600781116119f25760051b60800152600101818118610104575b50506101006080f361121f565b63b229777c811861121f57346119f25760005460405260206040f361121f565b63a87df06c811861121f576044361034176119f25760006080526101e25661121f565b636982eb0b8118610256576064361034176119f2576044356080525b6004358060a01c6119f2576040526024358060a01c6119f2576060526020600054636982eb0b60a05260405160c05260605160e05260805161010052602060a0606460bc845afa610238573d600060003e3d6000fd5b60203d106119f25760a0518060a01c6119f257610120526101209050f35b63bdf475c3811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6102a4573d600060003e3d6000fd5b60203d106119f2576060905051156102bf57602060406102c9565b6000606052602060605bf361121f565b6392e3cc2d8118610382576024361034176119f2576004358060a01c6119f2576102a0526101006000546392e3cc2d6102c0526102a0516102e0526101406102c060246102dc845afa610327573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa5050505061037d61054061191f565b610540f35b63eb85226d811861121f576064361034176119f2576004358060a01c6119f2576040526024358060a01c6119f2576060526044358060a01c6119f25760805260603660a03760005463eb85226d610100526040516101205260605161014052608051610160526040610100606461011c845afa610404573d600060003e3d6000fd5b60403d106119f2576101005180600f0b81186119f257610180526101205180600f0b81186119f2576101a0526101809050805160a052602081015160c0525060005463e4d332a961010052604051610120526020610100602461011c845afa610472573d600060003e3d6000fd5b60203d106119f257610100518060011c6119f257610140526101409050511561056957600054639ac90d3d610180526040516101a052610140610180602461019c845afa6104c5573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561051957905b8060051b6020850101518060a01c6119f2578160051b61030001526001018181186104f3575b5050806102e05250506102e0905060028151106119f257600160051b6020820101905051610160526101605160605181146105595760805181141561055c565b60005b90501561056957600160e0525b60a0516101005260c0516101205260e051610140526060610100f361121f565b636f20d6dd811861121f576024361034176119f2576004358060a01c6119f2576040526020600054636f20d6dd606052604051608052602060606024607c845afa6105d9573d600060003e3d6000fd5b60203d106119f2576060518060a01c6119f25760a05260a09050f361121f565b639ac90d3d8118610637576024361034176119f2576004358060a01c6119f25761040052610100610400516040526106326104206113d6565b610420f35b6352b51555811861121f576024361034176119f2576004358060a01c6119f2576102a0526101006000546352b515556102c0526102a0516102e0526101406102c060246102dc845afa61068f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506106e561054061191f565b610540f361121f565b637cdb72b0811861121f576024361034176119f2576004358060a01c6119f2576040526101403660603760405163ddca3f436101a05260206101a060046101bc845afa610740573d600060003e3d6000fd5b60203d106119f2576101a090505160605260405163fee3f7f96101a05260206101a060046101bc845afa610779573d600060003e3d6000fd5b60203d106119f2576101a0905051608052604051638edfdd5f6101a05260206101a060046101bc845afa6107b2573d600060003e3d6000fd5b60203d106119f2576101a090505160a0526101406060f361121f565b63c5b7074a811861121f576024361034176119f2576004358060a01c6119f257604052602060405163bb7b8b80606052602060606004607c845afa610818573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63379510498118610853576024361034176119f2576004358060a01c6119f25760405260206040f35b634cb088f1811861121f576024361034176119f2576004358060a01c6119f2576102a05260005463e4d332a96102c0526102a0516102e05260206102c060246102dc845afa6108a7573d600060003e3d6000fd5b60203d106119f2576102c0518060011c6119f2576103005261030090505161095b576101006000546352b51555610320526102a05161034052610140610320602461033c845afa6108fd573d600060003e3d6000fd5b60403d106119f257610320516103200160088151116119f257805160208160051b0180610480828560045afa505050506104809050805160208160051b01806040828560045afa505050506109536105a061191f565b6105a06109e9565b610100600054634cb088f16102c0526102a0516102e0526101406102c060246102dc845afa61098f573d600060003e3d6000fd5b60403d106119f2576102c0516102c00160088151116119f257805160208160051b0180610420828560045afa505050506104209050805160208160051b01806040828560045afa505050506109e561054061191f565b6105405bf361121f565b63940494f18118610a4d576024361034176119f2576004358060a01c6119f257604052602060005463940494f1606052604051608052602060606024607c845afa610a3f573d600060003e3d6000fd5b60203d106119f25760609050f35b635c9117418118610b8c576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa610a9b573d600060003e3d6000fd5b60203d106119f2576060905051610af05760208060c052600060a05260a08160c001600081528051806020830101601f82600003163682375050601f19601f82516020010116905090508101905060c0610b8a565b602080610160526040516306fdde03606052608060606004607c845afa610b1c573d600060003e3d6000fd5b60403d106119f25760605160600160408151116119f257602081510180610100828460045afa5050506101009050816101600160208251018082828560045afa50508051806020830101601f82600003163682375050601f19601f8251602001011690509050810190506101605bf35b63e4d332a9811861121f576024361034176119f2576004358060a01c6119f257604052602060005463e4d332a9606052604051608052602060606024607c845afa610bdc573d600060003e3d6000fd5b60203d106119f2576060518060011c6119f25760a05260a09050f361121f565b630a700c08811861121f576024361034176119f2576004358060a01c6119f2576104005261040051604052610c326105206113d6565b6105206101006104206101008360045afa50506040366105203760006008905b806105605261056051600781116119f25760051b6104200151610c7457610e54565b600054636f20d6dd6105805261056051600781116119f25760051b61042001516105a0526020610580602461059c845afa610cb4573d600060003e3d6000fd5b60203d106119f257610580518060a01c6119f2576105c0526105c09050516105205261052051610cf95761056051600781116119f25760051b61042001511515610cfc565b60005b610e33576105405160005463ed87494061058052610520516105a052610300610580602461059c845afa610d35573d600060003e3d6000fd5b6101003d106119f257610580516105800180518060a01c6119f2576108a0526020810151810160088151116119f2578051600081600881116119f2578015610d9f57905b8060051b6020850101518060a01c6119f2578160051b6108e00152600101818118610d79575b5050806108c052505060408101516109e0526060810151610a00526080810151810160088151116119f2578051600081600881116119f2578015610e0557905b8060051b6020850101518060081c6119f2578160051b610a400152600101818118610ddf575b505080610a20525050506108a0905061016081019050518082018281106119f2579050905061054052610e49565b61054051600181018181106119f2579050610540525b600101818118610c52575b50506020610540f361121f565b6366d3966c811861121f576024361034176119f2576004358060a01c6119f25760405260206000546366d3966c606052604051608052602060606024607c845afa610eb1573d600060003e3d6000fd5b60203d106119f25760609050f361121f565b63688532aa8118610f34576024361034176119f2576004358060a01c6119f257604052610280366060376000546355b30b196102e0526040516103005260206102e060246102fc845afa610f1c573d600060003e3d6000fd5b60203d106119f2576102e09050516060526102806060f35b63956aae3a811861121f57346119f257602060005463956aae3a604052602060406004605c845afa610f6b573d600060003e3d6000fd5b60203d106119f25760409050f361121f565b6359f4f351811861121f576024361034176119f2576004358060a01c6119f2576107c05260005463e4d332a96107e0526107c0516108005260206107e060246107fc845afa610fd1573d600060003e3d6000fd5b60203d106119f2576107e0518060011c6119f25761082052610820905051611085576101006000546392e3cc2d610840526107c05161086052610140610840602461085c845afa611027573d600060003e3d6000fd5b60403d106119f257610840516108400160088151116119f257805160208160051b01806109a0828560045afa505050506109a09050805160208160051b01806040828560045afa5050505061107d610ac061191f565b610ac061109f565b6101006107c0516104005261109b6107e06115fe565b6107e05bf361121f565b63a77576ef811861121f576024361034176119f2576004358060a01c6119f2576104005260005463e4d332a96104205261040051610440526020610420602461043c845afa6110f9573d600060003e3d6000fd5b60203d106119f257610420518060011c6119f2576104605261046090505161113857610100610400516040526111306104806113d6565b610480611151565b6101006104005160405261114d6104206114ea565b6104205bf361121f565b63619ea806811861121f576024361034176119f2576004358060a01c6119f25760405260005463940494f1606052604051608052602060606024607c845afa6111a5573d600060003e3d6000fd5b60203d106119f2576060905051151560a052602060a0f361121f565b633a1d5d8e811861121f576024361034176119f2576020600054633a1d5d8e604052600435606052602060406024605c845afa611203573d600060003e3d6000fd5b60203d106119f2576040518060a01c6119f25760805260809050f35b60006000fd611233573d600060003e3d6000fd5b60203d106119f257606090505161271081116119f25780156113cc57905b8060a0526000546322fe567160e05260a05161010052602060e0602460fc845afa611281573d600060003e3d6000fd5b60203d106119f25760e0518060a01c6119f2576101205261012090505160c05260405160005463ed87494060e05260c0516101005261030060e0602460fc845afa6112d1573d600060003e3d6000fd5b6101003d106119f25760e05160e00180518060a01c6119f257610400526020810151810160088151116119f2578051600081600881116119f257801561133957905b8060051b6020850101518060a01c6119f2578160051b6104400152600101818118611313575b5050806104205250506040810151610540526060810151610560526080810151810160088151116119f2578051600081600881116119f257801561139f57905b8060051b6020850101518060081c6119f2578160051b6105a00152600101818118611379575b50508061058052505050610400905051186113c15760c05183525050506113d4565b600101818118611251575b505060008152505b565b600054639ac90d3d610180526040516101a052610140610180602461019c845afa611406573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561145a57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611434575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186114a2576114d6565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b610180015260010181811861148c575b50506101008161010061018060045afa5050565b60005463a77576ef610180526040516101a052610140610180602461019c845afa61151a573d600060003e3d6000fd5b60403d106119f257610180516101800160088151116119f2578051600081600881116119f257801561156e57905b8060051b6020850101518060a01c6119f2578160051b6103000152600101818118611548575b5050806102e05250506102e09050805160208160051b01806060828560045afa50505050610100366101803760006008905b806102805260605161028051186115b6576115ea565b610280516060518110156119f25760051b6080015161028051600781116119f25760051b61018001526001018181186115a0575b50506101008161010061018060045afa5050565b60005463940494f16104405261040051610460526020610440602461045c845afa61162e573d600060003e3d6000fd5b60203d106119f257610440905051600181038181116119f257905061042052600054636f20d6dd6104605261040051610480526020610460602461047c845afa61167d573d600060003e3d6000fd5b60203d106119f257610460518060a01c6119f2576104a0526104a0905051610440526104005163c66106576104805260016104a0526020610480602461049c845afa6116ce573d600060003e3d6000fd5b60203d106119f257610480518060a01c6119f2576104c0526104c09050516318160ddd6104e05260206104e060046104fc845afa611711573d600060003e3d6000fd5b60203d106119f2576104e0905051610460526040366104803761046051156117b45761040051634903b0d16104c052610420516104e05260206104c060246104dc845afa611764573d600060003e3d6000fd5b60203d106119f2576104c09050516ec097ce7bc90715b34b9f10000000008102816ec097ce7bc90715b34b9f10000000008204186119f25790506104605180156119f257808204905090506104a0525b610100366104c037610400516040526117ce6106c06114ea565b6106c06101006105c06101008360045afa505060006008905b806106c0526106c051600781116119f25760051b6105c001516118095761190b565b610420516106c051106118a45761044051634903b0d16106e0526106c051610420518082038281116119f257905090506107005260206106e060246106fc845afa611859573d600060003e3d6000fd5b60203d106119f2576106e090505161048052610480516104a0518082028115838383041417156119f257905090506ec097ce7bc90715b34b9f100000000081049050610480526118e8565b61040051634903b0d16106e0526106c0516107005260206106e060246106fc845afa6118d5573d600060003e3d6000fd5b60203d106119f2576106e0905051610480525b610480516106c051600781116119f25760051b6104c001526001018181186117e7575b5050610100816101006104c060045afa5050565b61010036610160376040516102605260006008905b806102805261026051610280511861194b5761197f565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611934575b50506101008161010061016060045afa5050565b80610280526102605161028051186119aa576119de565b610280516040518110156119f25760051b6060015161028051600781116119f25760051b6101600152600101818118611993575b50506101008161010061016060045afa5050565b600080fd06ee09ef07ce121f0e6105891157121f001a0f7d0ec3121f018302cf121f121f0bfc082a121f01c601a305f911c110a5
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8
-----Decoded View---------------
Arg [0] : _registry_address (address): 0x7C2085419BE6a04f4ad88ea91bC9F5C6E6C463D8
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007c2085419be6a04f4ad88ea91bc9f5c6e6c463d8
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.