Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create | 10408120 | 12 hrs ago | IN | 0 S | 0.65297797 | ||||
Create | 10408078 | 12 hrs ago | IN | 0 S | 0.56876915 | ||||
Create | 10408038 | 12 hrs ago | IN | 0 S | 0.56843775 | ||||
Create | 10407996 | 12 hrs ago | IN | 0 S | 0.71100648 | ||||
Create | 10407954 | 12 hrs ago | IN | 0 S | 0.56945432 | ||||
Create | 10407814 | 12 hrs ago | IN | 0 S | 0.5668424 | ||||
Create | 10406166 | 12 hrs ago | IN | 0 S | 0.58612699 | ||||
Create | 10406020 | 12 hrs ago | IN | 0 S | 0.63431399 | ||||
Create | 10405748 | 12 hrs ago | IN | 0 S | 0.64939716 | ||||
Create | 10405622 | 12 hrs ago | IN | 0 S | 0.54602425 | ||||
Create | 10405534 | 12 hrs ago | IN | 0 S | 0.71353421 | ||||
Create | 10405096 | 12 hrs ago | IN | 0 S | 0.54608105 | ||||
Create | 10404901 | 12 hrs ago | IN | 0 S | 0.5929164 |
Latest 25 internal transactions (View All)
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x096c40d7...7CbD02bB1 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
OneWayLendingFactory
Compiler Version
vyper:0.3.10
Contract Source Code (Vyper language format)
# @version 0.3.10 # pragma optimize codesize # pragma evm-version shanghai """ @title OneWayLendingFactory @notice Factory of non-rehypothecated lending vaults: collateral is not being lent out. Although Vault.vy allows both, we should have this simpler version and rehypothecating version. @author Curve.fi @license Copyright (c) Curve.Fi, 2020-2024 - all rights reserved """ interface Vault: def initialize( amm_impl: address, controller_impl: address, borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, price_oracle: address, monetary_policy: address, loan_discount: uint256, liquidation_discount: uint256 ) -> (address, address): nonpayable def amm() -> address: view def controller() -> address: view def borrowed_token() -> address: view def collateral_token() -> address: view def price_oracle() -> address: view def set_max_supply(_value: uint256): nonpayable interface Controller: def monetary_policy() -> address: view interface AMM: def get_dy(i: uint256, j: uint256, in_amount: uint256) -> uint256: view def get_dx(i: uint256, j: uint256, out_amount: uint256) -> uint256: view def get_dydx(i: uint256, j: uint256, out_amount: uint256) -> (uint256, uint256): view def exchange(i: uint256, j: uint256, in_amount: uint256, min_amount: uint256, _for: address) -> uint256[2]: nonpayable def exchange_dy(i: uint256, j: uint256, out_amount: uint256, max_amount: uint256, _for: address) -> uint256[2]: nonpayable interface Pool: def price_oracle(i: uint256 = 0) -> uint256: view # Universal method! def coins(i: uint256) -> address: view event SetImplementations: amm: address controller: address vault: address price_oracle: address monetary_policy: address gauge: address event SetDefaultRates: min_rate: uint256 max_rate: uint256 event SetAdmin: admin: address event NewVault: id: indexed(uint256) collateral_token: indexed(address) borrowed_token: indexed(address) vault: address controller: address amm: address price_oracle: address monetary_policy: address event LiquidityGaugeDeployed: vault: address gauge: address STABLECOIN: public(immutable(address)) # These are limits for default borrow rates, NOT actual min and max rates. # Even governance cannot go beyond these rates before a new code is shipped MIN_RATE: public(constant(uint256)) = 10**15 / (365 * 86400) # 0.1% MAX_RATE: public(constant(uint256)) = 10**19 / (365 * 86400) # 1000% # Implementations which can be changed by governance amm_impl: public(address) controller_impl: public(address) vault_impl: public(address) pool_price_oracle_impl: public(address) monetary_policy_impl: public(address) gauge_impl: public(address) # Actual min/max borrow rates when creating new markets # for example, 0.5% -> 50% is a good choice min_default_borrow_rate: public(uint256) max_default_borrow_rate: public(uint256) # Admin is supposed to be the DAO admin: public(address) # Vaults can only be created but not removed vaults: public(Vault[10**18]) amms: public(AMM[10**18]) _vaults_index: HashMap[Vault, uint256] market_count: public(uint256) # Index to find vaults by a non-crvUSD token token_to_vaults: public(HashMap[address, Vault[10**18]]) token_market_count: public(HashMap[address, uint256]) gauges: public(address[10**18]) names: public(HashMap[uint256, String[64]]) @external def __init__( stablecoin: address, amm: address, controller: address, vault: address, pool_price_oracle: address, monetary_policy: address, gauge: address, admin: address): """ @notice Factory which creates one-way lending vaults (e.g. collateral is non-borrowable) @param stablecoin Address of crvUSD. Only crvUSD-containing markets are allowed @param amm Address of AMM implementation @param controller Address of Controller implementation @param pool_price_oracle Address of implementation for price oracle factory (prices from pools) @param monetary_policy Address for implementation of monetary policy @param gauge Address for gauge implementation @param admin Admin address (DAO) """ STABLECOIN = stablecoin self.amm_impl = amm self.controller_impl = controller self.vault_impl = vault self.pool_price_oracle_impl = pool_price_oracle self.monetary_policy_impl = monetary_policy self.gauge_impl = gauge self.min_default_borrow_rate = 5 * 10**15 / (365 * 86400) self.max_default_borrow_rate = 50 * 10**16 / (365 * 86400) self.admin = admin @internal def _create( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, price_oracle: address, name: String[64], min_borrow_rate: uint256, max_borrow_rate: uint256 ) -> Vault: """ @notice Internal method for creation of the vault """ assert borrowed_token != collateral_token, "Same token" assert borrowed_token == STABLECOIN or collateral_token == STABLECOIN vault: Vault = Vault(create_minimal_proxy_to(self.vault_impl)) min_rate: uint256 = self.min_default_borrow_rate max_rate: uint256 = self.max_default_borrow_rate if min_borrow_rate > 0: min_rate = min_borrow_rate if max_borrow_rate > 0: max_rate = max_borrow_rate assert min_rate >= MIN_RATE and max_rate <= MAX_RATE and min_rate <= max_rate, "Wrong rates" monetary_policy: address = create_from_blueprint( self.monetary_policy_impl, borrowed_token, min_rate, max_rate, code_offset=3) controller: address = empty(address) amm: address = empty(address) controller, amm = vault.initialize( self.amm_impl, self.controller_impl, borrowed_token, collateral_token, A, fee, price_oracle, monetary_policy, loan_discount, liquidation_discount ) market_count: uint256 = self.market_count log NewVault(market_count, collateral_token, borrowed_token, vault.address, controller, amm, price_oracle, monetary_policy) self.vaults[market_count] = vault self.amms[market_count] = AMM(amm) self._vaults_index[vault] = market_count + 2**128 self.names[market_count] = name self.market_count = market_count + 1 token: address = borrowed_token if borrowed_token == STABLECOIN: token = collateral_token market_count = self.token_market_count[token] self.token_to_vaults[token][market_count] = vault self.token_market_count[token] = market_count + 1 return vault @external @nonreentrant('lock') def create( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, price_oracle: address, name: String[64], min_borrow_rate: uint256 = 0, max_borrow_rate: uint256 = 0, supply_limit: uint256 = max_value(uint256) ) -> Vault: """ @notice Creation of the vault using user-supplied price oracle contract @param borrowed_token Token which is being borrowed @param collateral_token Token used for collateral @param A Amplification coefficient: band size is ~1/A @param fee Fee for swaps in AMM (for ETH markets found to be 0.6%) @param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount @param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount @param price_oracle Custom price oracle contract @param name Human-readable market name @param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate) @param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate) @param supply_limit Supply cap """ vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount, price_oracle, name, min_borrow_rate, max_borrow_rate) if supply_limit < max_value(uint256): vault.set_max_supply(supply_limit) return vault @external @nonreentrant('lock') def create_from_pool( borrowed_token: address, collateral_token: address, A: uint256, fee: uint256, loan_discount: uint256, liquidation_discount: uint256, pool: address, name: String[64], min_borrow_rate: uint256 = 0, max_borrow_rate: uint256 = 0, supply_limit: uint256 = max_value(uint256) ) -> Vault: """ @notice Creation of the vault using existing oraclized Curve pool as a price oracle @param borrowed_token Token which is being borrowed @param collateral_token Token used for collateral @param A Amplification coefficient: band size is ~1/A @param fee Fee for swaps in AMM (for ETH markets found to be 0.6%) @param loan_discount Maximum discount. LTV = sqrt(((A - 1) / A) ** 4) - loan_discount @param liquidation_discount Liquidation discount. LT = sqrt(((A - 1) / A) ** 4) - liquidation_discount @param pool Curve tricrypto-ng, twocrypto-ng or stableswap-ng pool which has non-manipulatable price_oracle(). Must contain both collateral_token and borrowed_token. @param name Human-readable market name @param min_borrow_rate Custom minimum borrow rate (otherwise min_default_borrow_rate) @param max_borrow_rate Custom maximum borrow rate (otherwise max_default_borrow_rate) @param supply_limit Supply cap """ # Find coins in the pool borrowed_ix: uint256 = 100 collateral_ix: uint256 = 100 N: uint256 = 0 for i in range(10): success: bool = False res: Bytes[32] = empty(Bytes[32]) success, res = raw_call( pool, _abi_encode(i, method_id=method_id("coins(uint256)")), max_outsize=32, is_static_call=True, revert_on_failure=False) coin: address = convert(res, address) if not success or coin == empty(address): break N += 1 if coin == borrowed_token: borrowed_ix = i elif coin == collateral_token: collateral_ix = i if collateral_ix == 100 or borrowed_ix == 100: raise "Tokens not in pool" price_oracle: address = create_from_blueprint( self.pool_price_oracle_impl, pool, N, borrowed_ix, collateral_ix, code_offset=3) vault: Vault = self._create(borrowed_token, collateral_token, A, fee, loan_discount, liquidation_discount, price_oracle, name, min_borrow_rate, max_borrow_rate) if supply_limit < max_value(uint256): vault.set_max_supply(supply_limit) return vault @view @external def controllers(n: uint256) -> address: return self.vaults[n].controller() @view @external def borrowed_tokens(n: uint256) -> address: return self.vaults[n].borrowed_token() @view @external def collateral_tokens(n: uint256) -> address: return self.vaults[n].collateral_token() @view @external def price_oracles(n: uint256) -> address: return self.vaults[n].price_oracle() @view @external def monetary_policies(n: uint256) -> address: return Controller(self.vaults[n].controller()).monetary_policy() @view @external def vaults_index(vault: Vault) -> uint256: return self._vaults_index[vault] - 2**128 @external def deploy_gauge(_vault: Vault) -> address: """ @notice Deploy a liquidity gauge for a vault @param _vault Vault address to deploy a gauge for @return Address of the deployed gauge """ ix: uint256 = self._vaults_index[_vault] assert ix != 0, "Unknown vault" ix -= 2**128 assert self.gauges[ix] == empty(address), "Gauge already deployed" implementation: address = self.gauge_impl assert implementation != empty(address), "Gauge implementation not set" gauge: address = create_from_blueprint(implementation, _vault, code_offset=3) self.gauges[ix] = gauge log LiquidityGaugeDeployed(_vault.address, gauge) return gauge @view @external def gauge_for_vault(_vault: Vault) -> address: return self.gauges[self._vaults_index[_vault] - 2**128] @external @nonreentrant('lock') def set_implementations(controller: address, amm: address, vault: address, pool_price_oracle: address, monetary_policy: address, gauge: address): """ @notice Set new implementations (blueprints) for controller, amm, vault, pool price oracle and monetary polcy. Doesn't change existing ones @param controller Address of the controller blueprint @param amm Address of the AMM blueprint @param vault Address of the Vault template @param pool_price_oracle Address of the pool price oracle blueprint @param monetary_policy Address of the monetary policy blueprint @param gauge Address for gauge implementation blueprint """ assert msg.sender == self.admin if controller != empty(address): self.controller_impl = controller if amm != empty(address): self.amm_impl = amm if vault != empty(address): self.vault_impl = vault if pool_price_oracle != empty(address): self.pool_price_oracle_impl = pool_price_oracle if monetary_policy != empty(address): self.monetary_policy_impl = monetary_policy if gauge != empty(address): self.gauge_impl = gauge log SetImplementations(amm, controller, vault, pool_price_oracle, monetary_policy, gauge) @external @nonreentrant('lock') def set_default_rates(min_rate: uint256, max_rate: uint256): """ @notice Change min and max default borrow rates for creating new markets @param min_rate Minimal borrow rate (0 utilization) @param max_rate Maxumum borrow rate (100% utilization) """ assert msg.sender == self.admin assert min_rate >= MIN_RATE assert max_rate <= MAX_RATE assert max_rate >= min_rate self.min_default_borrow_rate = min_rate self.max_default_borrow_rate = max_rate log SetDefaultRates(min_rate, max_rate) @external @nonreentrant('lock') def set_admin(admin: address): """ @notice Set admin of the factory (should end up with DAO) @param admin Address of the admin """ assert msg.sender == self.admin self.admin = admin log SetAdmin(admin) @external @view def coins(vault_id: uint256) -> address[2]: vault: Vault = self.vaults[vault_id] return [vault.borrowed_token(), vault.collateral_token()]
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"SetImplementations","inputs":[{"name":"amm","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"vault","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false},{"name":"gauge","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetDefaultRates","inputs":[{"name":"min_rate","type":"uint256","indexed":false},{"name":"max_rate","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"NewVault","inputs":[{"name":"id","type":"uint256","indexed":true},{"name":"collateral_token","type":"address","indexed":true},{"name":"borrowed_token","type":"address","indexed":true},{"name":"vault","type":"address","indexed":false},{"name":"controller","type":"address","indexed":false},{"name":"amm","type":"address","indexed":false},{"name":"price_oracle","type":"address","indexed":false},{"name":"monetary_policy","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"LiquidityGaugeDeployed","inputs":[{"name":"vault","type":"address","indexed":false},{"name":"gauge","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"stablecoin","type":"address"},{"name":"amm","type":"address"},{"name":"controller","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge","type":"address"},{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"price_oracle","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"create_from_pool","inputs":[{"name":"borrowed_token","type":"address"},{"name":"collateral_token","type":"address"},{"name":"A","type":"uint256"},{"name":"fee","type":"uint256"},{"name":"loan_discount","type":"uint256"},{"name":"liquidation_discount","type":"uint256"},{"name":"pool","type":"address"},{"name":"name","type":"string"},{"name":"min_borrow_rate","type":"uint256"},{"name":"max_borrow_rate","type":"uint256"},{"name":"supply_limit","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controllers","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"borrowed_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"collateral_tokens","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"price_oracles","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policies","inputs":[{"name":"n","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults_index","inputs":[{"name":"vault","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"deploy_gauge","inputs":[{"name":"_vault","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauge_for_vault","inputs":[{"name":"_vault","type":"address"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"nonpayable","type":"function","name":"set_implementations","inputs":[{"name":"controller","type":"address"},{"name":"amm","type":"address"},{"name":"vault","type":"address"},{"name":"pool_price_oracle","type":"address"},{"name":"monetary_policy","type":"address"},{"name":"gauge","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_default_rates","inputs":[{"name":"min_rate","type":"uint256"},{"name":"max_rate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_admin","inputs":[{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"coins","inputs":[{"name":"vault_id","type":"uint256"}],"outputs":[{"name":"","type":"address[2]"}]},{"stateMutability":"view","type":"function","name":"STABLECOIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"MIN_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"MAX_RATE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"amm_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"controller_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vault_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pool_price_oracle_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"monetary_policy_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"gauge_impl","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"min_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"max_default_borrow_rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"vaults","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"amms","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"market_count","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"token_to_vaults","inputs":[{"name":"arg0","type":"address"},{"name":"arg1","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"token_market_count","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"gauges","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"names","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"string"}]}]
Deployed Bytecode
0x5f3560e01c60056005600383160261142501601b395f5160088160ff16838360181c0260181c0660031b8260081c61ffff1601601839505f51818160201c14600336111661004c57610f42565b8061fffe16361034826001160217611421578060101c61ffff16565b602061157160403960206040f35b6301e3da5f60405260206040f35b6449d482455d60405260206040f35b60015460405260206040f35b60025460405260206040f35b60035460405260206040f35b60045460405260206040f35b60055460405260206040f35b60065460405260206040f35b60075460405260206040f35b60085460405260206040f35b60095460405260206040f35b600435670de0b6b3a763ffff811161142157600a015460405260206040f35b600435670de0b6b3a763ffff811161142157670de0b6b3a764000a015460405260206040f35b671bc16d674ec8000b5460405260206040f35b6004358060a01c61142157604052671bc16d674ec8000c6040516020525f5260405f20602435670de0b6b3a763ffff811161142157810190505460605260206060f35b6004358060a01c61142157604052671bc16d674ec8000d6040516020525f5260405f205460605260206060f35b600435670de0b6b3a763ffff811161142157671bc16d674ec8000e015460405260206040f35b6020806040526729a2241af62c000e6004356020525f5260405f208160400160208254015f81601f0160051c6003811161142157801561023f57905b808501548160051b850152600101818118610229575b5050508051806020830101601f825f03163682375050601f19601f8251602001011690509050810190506040f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052052610312565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052052610312565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052052610312565b60606101046104e0375b6004358060a01c61142157610420526024358060a01c611421576104405260c4358060a01c611421576104605260e435600401604081351161142157602081350180826104803750505f546002146114215760025f55610420516040526104405160605260806044608037610460516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526103b5610560610f46565b61056051610540527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520511461041e5761054051638a938f2f610560526105205161058052803b15611421575f610560602461057c5f855af161041c573d5f5f3e3d5ffd5b505b602061054060035f55f35b6040366104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104ce565b610104356104e0525f610500527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104ce565b60406101046104e0377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610520526104ce565b60606101046104e0375b6004358060a01c61142157610420526024358060a01c611421576104405260c4358060a01c611421576104605260e435600401604081351161142157602081350180826104803750505f546002146114215760025f556064610540526064610560525f610580525f600a905b806105a0526040366105c037610460515a63c66106576106245260046105a05161064452602001610620526106205060206106a0610620516106408585fa905090506105c0523d602081183d60201002186106805261068080516105e05260208101516106005250610600516105e05160200360031b1c8060a01c61142157610620526105c0516105cc5760016105d2565b61062051155b156105dc5761062c565b61058051600181018181106114215790506105805261042051610620511861060b576105a05161054052610621565b610440516106205118610621576105a051610560525b60010181811861053a575b505060646105605118610640576001610649565b60646105405118155b156106b35760126105a0527f546f6b656e73206e6f7420696e20706f6f6c00000000000000000000000000006105c0526105a0506105a051806105c001601f825f031636823750506308c379a061056052602061058052601f19601f6105a051011660440161057cfd5b600454610460516105c0526105c05161064052610580516105e0526105e05161066052610540516106005261060051610680526105605161062052610620516106a05260806003823b0359600182126114215781600382863c81810183818561064060045afa5050828201815ff080156114215790509050905090506105a0526104205160405261044051606052608060446080376105a0516101005260206104805101806101208261048060045afa50506104e05161018052610500516101a0526107806105e0610f46565b6105e0516105c0527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61052051146107e9576105c051638a938f2f6105e0526105205161060052803b15611421575f6105e060246105fc5f855af16107e7573d5f5f3e3d5ffd5b505b60206105c060035f55f35b6020600435670de0b6b3a763ffff811161142157600a015463f77c4791604052602060406004605c845afa61082b573d5f5f3e3d5ffd5b60203d10611421576040518060a01c6114215760805260809050f35b6020600435670de0b6b3a763ffff811161142157600a015463765337b6604052602060406004605c845afa61087e573d5f5f3e3d5ffd5b60203d10611421576040518060a01c6114215760805260809050f35b6020600435670de0b6b3a763ffff811161142157600a0154632621db2f604052602060406004605c845afa6108d1573d5f5f3e3d5ffd5b60203d10611421576040518060a01c6114215760805260809050f35b6020600435670de0b6b3a763ffff811161142157600a01546386fc88d3604052602060406004605c845afa610924573d5f5f3e3d5ffd5b60203d10611421576040518060a01c6114215760805260809050f35b6020600435670de0b6b3a763ffff811161142157600a015463f77c4791604052602060406004605c845afa610977573d5f5f3e3d5ffd5b60203d10611421576040518060a01c61142157608052608090505163adfae4ce60a052602060a0600460bc845afa6109b1573d5f5f3e3d5ffd5b60203d106114215760a0518060a01c6114215760e05260e09050f35b6004358060a01c61142157604052671bc16d674ec8000a6040516020525f5260405f2054700100000000000000000000000000000000810381811161142157905060605260206060f35b6004358060a01c61142157604052671bc16d674ec8000a6040516020525f5260405f2054606052606051610aa157600d6080527f556e6b6e6f776e207661756c740000000000000000000000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b6060517001000000000000000000000000000000008103818111611421579050606052606051670de0b6b3a763ffff811161142157671bc16d674ec8000e015415610b425760166080527f476175676520616c7265616479206465706c6f7965640000000000000000000060a0526080506080518060a001601f825f031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b600654608052608051610bab57601c60a0527f476175676520696d706c656d656e746174696f6e206e6f74207365740000000060c05260a05060a0518060c001601f825f031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60805160405160c05260c05160e05260206003823b0359600182126114215781600382863c81810160e051815250828201815ff0801561142157905090509050905060a05260a051606051670de0b6b3a763ffff811161142157671bc16d674ec8000e01557f656bb34c20491970a8c163f3bd62ead82022b379c3924960ec60f6dbfc5aab3b60405160c05260a05160e052604060c0a1602060a0f35b6004358060a01c61142157604052671bc16d674ec8000a6040516020525f5260405f20547001000000000000000000000000000000008103818111611421579050670de0b6b3a763ffff811161142157671bc16d674ec8000e015460605260206060f35b6004358060a01c611421576040526024358060a01c611421576060526044358060a01c611421576080526064358060a01c6114215760a0526084358060a01c6114215760c05260a4358060a01c6114215760e0525f546002146114215760025f5560095433186114215760405115610d25576040516002555b60605115610d34576060516001555b60805115610d43576080516003555b60a05115610d525760a0516004555b60c05115610d615760c0516005555b60e05115610d705760e0516006555b7f91d63b24386eae580bbbe65f3f50fd736c41031f36d85641bc13e74ac0cb95bb60605161010052604051610120526080516101405260a0516101605260c0516101805260e0516101a05260c0610100a160035f55005b5f546002146114215760025f556009543318611421576301e3da5f60043510611421576449d482455d602435116114215760043560243510611421576004356007556024356008557f279f1fe0f91b15d983792d0305a146961875690054db0d81bec8d1582461fc656040600460403760406040a160035f55005b6004358060a01c611421576040525f546002146114215760025f556009543318611421576040516009557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a160035f55005b600435670de0b6b3a763ffff811161142157600a015460405260405163765337b6606052602060606004607c845afa610ed9573d5f5f3e3d5ffd5b60203d10611421576060518060a01c6114215760a05260a090505161012052604051632621db2f60c052602060c0600460dc845afa610f1a573d5f5f3e3d5ffd5b60203d106114215760c0518060a01c6114215761010052610100905051610140526040610120f35b5f5ffd5b60605160405118610fb657600a6101c0527f53616d6520746f6b656e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f825f031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60206115715f395f5160405118610fce576001610fdd565b60206115715f395f5160605118155b15611421577f602d3d8160093d39f3363d3d373d3d3d363d73000000000000000000000000006101e05260035460601b6101f3527f5af43d82803e903d91602b57fd5bf300000000000000000000000000000000006102075260366101e05ff08015611421576101c0526007546101e05260085461020052610180511561106757610180516101e0525b6101a05115611079576101a051610200525b6301e3da5f6101e051101561108e575f6110af565b6449d482455d6102005111156110a4575f6110af565b610200516101e05111155b61111857600b610220527f57726f6e672072617465730000000000000000000000000000000000000000006102405261022050610220518061024001601f825f031636823750506308c379a06101e052602061020052601f19601f6102205101166044016101fcfd5b60055460405161024052610240516102a0526101e05161026052610260516102c0526102005161028052610280516102e05260606003823b0359600182126114215781600382863c8181018381856102a060045afa5050828201815ff0801561142157905090509050905061022052604036610240376101c0516343687bba610280526001546102a0526002546102c0526040516102e052606051610300526080516103205260a051610340526101005161036052610220516103805260c0516103a05260e0516103c052604061028061014461029c5f855af16111fe573d5f5f3e3d5ffd5b60403d1061142157610280518060a01c611421576103e0526102a0518060a01c61142157610400526103e0905080516102405260208101516102605250671bc16d674ec8000b5461028052604051606051610280517f2a854a597908740dff5f0846840f167547ea0d7614c43bde3ea49be2e68c07ec6101c0516102a052610240516102c052610260516102e0526101005161030052610220516103205260a06102a0a46101c05161028051670de0b6b3a763ffff811161142157600a01556102605161028051670de0b6b3a763ffff811161142157670de0b6b3a764000a0155610280517001000000000000000000000000000000008101818110611421579050671bc16d674ec8000a6101c0516020525f5260405f2055602061012051016729a2241af62c000e610280516020525f5260405f205f82601f0160051c6003811161142157801561136457905b8060051b61012001518184015560010181811861134c575b505050506102805160018101818110611421579050671bc16d674ec8000b556040516102a05260206115715f395f51604051186113a3576060516102a0525b671bc16d674ec8000d6102a0516020525f5260405f2054610280526101c051671bc16d674ec8000c6102a0516020525f5260405f2061028051670de0b6b3a763ffff81116114215781019050556102805160018101818110611421579050671bc16d674ec8000d6102a0516020525f5260405f20556101c051815250565b5f80fdd86715110c000914e90500be143908a83314790e99d0b1ba00e70005e5f260ba019a00258c64ea4a00ff002593a39776006800059c3b70a6026d0125e94b0dd207f40025762e7b920940002550c1163a0c4800250b91bd2700b70005a8acf8df01570045b053918701c70025d819bfef00760005485227a700cf00056fe4501f08470025e9333fab0e4200254622ab0301ed0025bcf75a8f09cd00256677b28700ab00056c15eadf0cac00c55673683f02d501654351e30b04c40185c66106570e9e0025c6f2a81d08ed0025041622b500930005d984d2a104290125c24dbebd008400056c3a55e50308018596bebb340a170025fd775c7801440005168819c0009f000586a8cdbc011e0025247ec87800c300055904e8dc029e014549b89984089a002573edeb30045a0145a74fcf900dc700453cfd3d8c00db0005bccc056c04910165f851a44000f300050000000000000000000000007fff4c4a827c84e32c5e175052834111b2ccd270
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.