S Price: $0.732617 (+0.69%)

Contract

0x5DFAd9014c12c89341d62Ac8F0A9dFD690DF0B74

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create104081202025-02-26 23:38:3412 hrs ago1740613114IN
0x5DFAd901...690DF0B74
0 S0.6529779757.7
Create104080782025-02-26 23:38:1812 hrs ago1740613098IN
0x5DFAd901...690DF0B74
0 S0.5687691550
Create104080382025-02-26 23:38:0212 hrs ago1740613082IN
0x5DFAd901...690DF0B74
0 S0.5684377550
Create104079962025-02-26 23:37:4612 hrs ago1740613066IN
0x5DFAd901...690DF0B74
0 S0.7110064862.83333333
Create104079542025-02-26 23:37:3012 hrs ago1740613050IN
0x5DFAd901...690DF0B74
0 S0.5694543250.33333333
Create104078142025-02-26 23:36:3712 hrs ago1740612997IN
0x5DFAd901...690DF0B74
0 S0.566842450
Create104061662025-02-26 23:26:3012 hrs ago1740612390IN
0x5DFAd901...690DF0B74
0 S0.5861269953.66666666
Create104060202025-02-26 23:25:3612 hrs ago1740612336IN
0x5DFAd901...690DF0B74
0 S0.6343139958.06666666
Create104057482025-02-26 23:23:5612 hrs ago1740612236IN
0x5DFAd901...690DF0B74
0 S0.6493971659.16733333
Create104056222025-02-26 23:23:0612 hrs ago1740612186IN
0x5DFAd901...690DF0B74
0 S0.5460242550
Create104055342025-02-26 23:22:3112 hrs ago1740612151IN
0x5DFAd901...690DF0B74
0 S0.7135342165.25809321
Create104050962025-02-26 23:19:5412 hrs ago1740611994IN
0x5DFAd901...690DF0B74
0 S0.5460810550
Create104049012025-02-26 23:18:4012 hrs ago1740611920IN
0x5DFAd901...690DF0B74
0 S0.592916453.99285714

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
104081202025-02-26 23:38:3412 hrs ago1740613114
0x5DFAd901...690DF0B74
 Contract Creation0 S
104081202025-02-26 23:38:3412 hrs ago1740613114
0x5DFAd901...690DF0B74
 Contract Creation0 S
104080782025-02-26 23:38:1812 hrs ago1740613098
0x5DFAd901...690DF0B74
 Contract Creation0 S
104080782025-02-26 23:38:1812 hrs ago1740613098
0x5DFAd901...690DF0B74
 Contract Creation0 S
104080382025-02-26 23:38:0212 hrs ago1740613082
0x5DFAd901...690DF0B74
 Contract Creation0 S
104080382025-02-26 23:38:0212 hrs ago1740613082
0x5DFAd901...690DF0B74
 Contract Creation0 S
104079962025-02-26 23:37:4612 hrs ago1740613066
0x5DFAd901...690DF0B74
 Contract Creation0 S
104079962025-02-26 23:37:4612 hrs ago1740613066
0x5DFAd901...690DF0B74
 Contract Creation0 S
104079542025-02-26 23:37:3012 hrs ago1740613050
0x5DFAd901...690DF0B74
 Contract Creation0 S
104079542025-02-26 23:37:3012 hrs ago1740613050
0x5DFAd901...690DF0B74
 Contract Creation0 S
104078142025-02-26 23:36:3712 hrs ago1740612997
0x5DFAd901...690DF0B74
 Contract Creation0 S
104078142025-02-26 23:36:3712 hrs ago1740612997
0x5DFAd901...690DF0B74
 Contract Creation0 S
104061662025-02-26 23:26:3012 hrs ago1740612390
0x5DFAd901...690DF0B74
 Contract Creation0 S
104061662025-02-26 23:26:3012 hrs ago1740612390
0x5DFAd901...690DF0B74
 Contract Creation0 S
104060202025-02-26 23:25:3612 hrs ago1740612336
0x5DFAd901...690DF0B74
 Contract Creation0 S
104060202025-02-26 23:25:3612 hrs ago1740612336
0x5DFAd901...690DF0B74
 Contract Creation0 S
104057482025-02-26 23:23:5612 hrs ago1740612236
0x5DFAd901...690DF0B74
 Contract Creation0 S
104057482025-02-26 23:23:5612 hrs ago1740612236
0x5DFAd901...690DF0B74
 Contract Creation0 S
104056222025-02-26 23:23:0612 hrs ago1740612186
0x5DFAd901...690DF0B74
 Contract Creation0 S
104056222025-02-26 23:23:0612 hrs ago1740612186
0x5DFAd901...690DF0B74
 Contract Creation0 S
104055342025-02-26 23:22:3112 hrs ago1740612151
0x5DFAd901...690DF0B74
 Contract Creation0 S
104055342025-02-26 23:22:3112 hrs ago1740612151
0x5DFAd901...690DF0B74
 Contract Creation0 S
104050962025-02-26 23:19:5412 hrs ago1740611994
0x5DFAd901...690DF0B74
 Contract Creation0 S
104050962025-02-26 23:19:5412 hrs ago1740611994
0x5DFAd901...690DF0B74
 Contract Creation0 S
104049012025-02-26 23:18:4012 hrs ago1740611920
0x5DFAd901...690DF0B74
 Contract Creation0 S
View All Internal Transactions
Loading...
Loading

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

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

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

Contract ABI

[{"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

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.