Cryo Explorer Ethereum Mainnet

Address Contract Partially Verified

Address 0xC9332fdCB1C491Dcc683bAe86Fe3cb70360738BC
Balance 0 ETH
Nonce 19
Code Size 6098 bytes
Indexed Transactions 0
External Etherscan · Sourcify

Contract Bytecode

6098 bytes
0x6003361161000c5761139d565b60003560e01c346117805763e9cbd822811861003e576004361061178057602061179260003960005160405260206040f35b638a82f1fe8118610afe576101243610611780576004358060a01c61178057610160526084358060a01c611780576101805260a4358060a01c611780576101a052600054600214611780576002600055620186a15433181561010057600a6101c0527f4f6e6c792061646d696e000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b6002602435101561011257600061011b565b61271060243511155b6101855760076101c0527f57726f6e672041000000000000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b67016345785d8a000060443511156101fd57600c6101c0527f46656520746f6f206869676800000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b620f4240604435101561027057600b6101c0527f46656520746f6f206c6f770000000000000000000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b670de0b6b3a763ffff60643511156102e85760126101c0527f41646d696e2066656520746f6f206869676800000000000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b662386f26fc1000060e435101561035f57601c6101c0527f4c69717569646174696f6e20646973636f756e7420746f6f206c6f77000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b6706f05b59d3b2000060c43511156103d75760166101c0527f4c6f616e20646973636f756e7420746f6f2068696768000000000000000000006101e0526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b60e43560c4351161046d5760276101c0527f6e656564206c6f616e5f646973636f756e743e6c69717569646174696f6e5f646101e0527f6973636f756e7400000000000000000000000000000000000000000000000000610200526101c0506101c051806101e001601f826000031636823750506308c379a06101805260206101a052601f19601f6101c051011660440161019cfd5b6101a05163e91f2f4c6101c05260206101c060046101dc6000855af1610498573d600060003e3d6000fd5b60203d10611780576101c050506101805163a035b1fe6101e05260206101e060046101fc845afa6104ce573d600060003e3d6000fd5b60203d10611780576101e09050516101c0526101c05115611780576101c0516101805163ceb7f7596101e05260206101e060046101fc6000855af1610518573d600060003e3d6000fd5b60203d10611780576101e09050511861178057602435670de0b6b3a7640000810281670de0b6b3a764000082041861178057905060243560018103818111611780579050801561178057808204905090506101e052620186a45460206117926000396000516102c0526102c05161042052602061179260003960005163313ce567610220526020610220600461023c845afa6105b9573d600060003e3d6000fd5b60203d10611780576102209050518060120360128111611780579050604d81116117805780600a0a90506102e0526102e05161044052610160516103005261030051610460526101605163313ce567610260526020610260600461027c845afa610628573d600060003e3d6000fd5b60203d10611780576102609050518060120360128111611780579050604d81116117805780600a0a905061032052610320516104805260243561034052610340516104a0526101e051670de0b6b3a7640000810281670de0b6b3a76400008204186117805790508060b57101000000000000000000000000000000000082106106b8578160801c91508060401b90505b690100000000000000000082106106d6578160401c91508060201b90505b6501000000000082106106f0578160201c91508060101b90505b63010000008210610708578160101c91508060081b90505b620100008201810260121c9050808184040160011c9050808184040160011c9050808184040160011c9050808184040160011c9050808184040160011c9050808184040160011c9050808184040160011c9050808304808281188284100218905090509050905061036052610360516104c0526101e05160405261078d6102a06113a3565b6102a05161038052610380516104e0526101c0516103a0526103a051610500526044356103c0526103c051610520526064356103e0526103e05161054052610180516104005261040051610560526101606003823b0359600182126117805781600382863c81810183818561042060045afa5050828201816000f0801561178057905090509050905061020052620186a3546101605161024052610240516102e0526101a05161026052610260516103005260c43561028052610280516103205260e4356102a0526102a05161034052610200516102c0526102c0516103605260a06003823b0359600182126117805781600382863c8181018381856102e060045afa5050828201816000f08015611780579050905090509050610220526102005163e9333fab610240526102205161026052803b15611780576000610240602461025c6000855af16108e5573d600060003e3d6000fd5b5061022051604052610104356060526001608052610901611537565b620186a55461024052610160516102405161c34f811161178057620186a6015560006103e8905b8061026052620249f6610160516020526000526040600020610260516103e781116117805781019050546109b2576102405180700100000000000000000000000000000000017001000000000000000000000000000000008110611780579050620249f6610160516020526000526040600020610260516103e78111611780578101905055610a54565b6103e76102605118610a49576028610280527f546f6f206d616e7920636f6e74726f6c6c65727320666f722073616d6520636f6102a0527f6c6c61746572616c0000000000000000000000000000000000000000000000006102c0526102805061028051806102a001601f826000031636823750506308c379a061024052602061026052601f19601f61028051011660440161025cfd5b600101818118610928575b5050610220516102405161c34f81116117805760010155610200516102405161c34f81116117805761c35101556102405160018101818110611780579050620186a555610160517febbe0dfde9dde641808b7a803882653420f3a5b12bb405d238faed959e1e3aa3610220516102605261020051610280526101a0516102a052610240516102c0526080610260a26102205161026052610200516102805260406102606003600055f35b6331dc3ca88118610b9f5760043610611780576000604052620186a554606052600061c350905b8060805260605160805118610b3957610b97565b60405160805161c34f811161178057600101546331dc3ca860a052602060a0600460bc845afa610b6e573d600060003e3d6000fd5b60203d106117805760a09050518082018281106117805790509050604052600101818118610b25575b505060206040f35b63f44102368118610bbc5760243610611780576000606052610bd6565b636bbd5ec78118610c3a5760443610611780576024356060525b6004358060a01c61178057604052620249f660405160205260005260406000206060516103e78111611780578101905054700100000000000000000000000000000000810381811161178057905061c34f8111611780576001015460805260206080f35b63b12d54608118610c575760243610611780576000606052610c71565b631539838f8118610cd65760443610611780576024356060525b6004358060a01c61178057604052620249f660405160205260005260406000206060516103e78111611780578101905054700100000000000000000000000000000000810381811161178057905061c34f81116117805761c351015460805260206080f35b639af8f23c8118610d785760443610611780576004358060a01c611780576040526024358060a01c61178057606052600054600214611780576002600055620186a15433186117805760405115611780576060511561178057604051620186a355606051620186a4557f1694b0703640754583177bb0c9e8d97e4d163cd89d08ae426ef8cb3f4710954260605160805260405160a05260406080a16003600055005b63e9333fab8118610dee5760243610611780576004358060a01c61178057604052600054600214611780576002600055620186a154331861178057604051620186a1557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a16003600055005b63e41ab7718118610e6c5760243610611780576004358060a01c61178057604052600054600214611780576002600055620186a1543318611780576040511561178057604051620186a2557fffb40bfdfd246e95f543d08d9713c339f1d90fa9265e39b4f562f9011d7c919f60405160605260206060a16003600055005b63b933c50a8118610ec95760443610611780576004358060a01c6117805761016052600054600214611780576002600055620186a154331861178057610160516040526024356060526001608052610ec2611537565b6003600055005b632651990f8118610f2c5760243610611780576004358060a01c611780576101605260005460021461178057600260005561016051604052620249f7610160516020526000526040600020546060526000608052610f25611537565b6003600055005b63df068aba81186111815760243610611780576004358060a01c61178057604052600054600214611780576002600055620186a154331861178057620249f8604051602052600052604060002054606052620249f760405160205260005260406000205415610f9c576001610fa2565b60605115155b15611780576040516331dc3ca860a052602060a0600460bc845afa610fcc573d600060003e3d6000fd5b60203d106117805760a090505160405163e231bff060e052602060e0600460fc845afa610ffe573d600060003e3d6000fd5b60203d106117805760e09050518082018281106117805790509050604051634f02c420610120526020610120600461013c845afa611041573d600060003e3d6000fd5b60203d1061178057610120905051808203828111611780579050905060805260206117926000396000516370a0823160c05260405160e052602060c0602460dc845afa611093573d600060003e3d6000fd5b60203d106117805760c090505160a05260a05160805111156111475760805160a051808203828111611780579050905060c05260206117926000396000516340c10f1960e0526040516101005260c05161012052602060e0604460fc6000855af1611103573d600060003e3d6000fd5b60203d106117805760e0518060011c6117805761014052610140505060605160c0518082018281106117805790509050620249f86040516020526000526040600020555b604051631e0cfcef60c052602060c0600460dc6000855af161116e573d600060003e3d6000fd5b60203d106117805760c050506003600055005b63e94b0dd281186111ad57602436106117805760043561c34f8111611780576001015460405260206040f35b6386a8cdbc81186111da57602436106117805760043561c34f81116117805761c351015460405260206040f35b63f851a44081186111fb576004361061178057620186a15460405260206040f35b63cab4d3db811861121c576004361061178057620186a25460405260206040f35b630275417e811861123d576004361061178057620186a35460405260206040f35b633bc5799f811861125e576004361061178057620186a45460405260206040f35b6312397fa1811861127f576004361061178057620186a55460405260206040f35b6324c1173b81186112ad57602436106117805760043561c34f811161178057620186a6015460405260206040f35b63a736726881186112fa5760443610611780576004358060a01c61178057604052620249f660405160205260005260406000206024356103e7811161178057810190505460605260206060f35b63602b62d481186113375760243610611780576004358060a01c61178057604052620249f760405160205260005260406000205460605260206060f35b63c92696b281186113745760243610611780576004358060a01c61178057604052620249f860405160205260005260406000205460605260206060f35b63ad5c4648811861139b57600436106117805760206117b260003960005160405260206040f35b505b60006000fd5b604051606052600060805260006008905b8060a05260a051806007036007811161178057905060ff8111611780578060020a905060c05260c05160ff8111611780578060020a905060e05260e051670de0b6b3a7640000810281670de0b6b3a7640000820418611780579050606051106114635760605160e0518015611780578082049050905060605260805160c051670de0b6b3a7640000810281670de0b6b3a764000082041861178057905080820182811061178057905090506080525b6001018181186113b4575050670de0b6b3a764000060a0526000603b905b8060c052671bc16d674ec80000606051106114ba5760805160a05180820182811061178057905090506080526060518060011c90506060525b6060516060518082028115838383041417156117805790509050670de0b6b3a76400008104905060605260a0518060011c905060a052600101818118611481575050608051670de0b6b3a7640000810281670de0b6b3a76400008204186117805790506714057b7ef7678100810490508060ff1c61178057815250565b620249f860405160205260005260406000205460a05260a051606051111561160f5760605160a051808203828111611780579050905060c05260206117926000396000516340c10f1960e0526040516101005260c05161012052602060e0604460fc6000855af16115ad573d600060003e3d6000fd5b60203d106117805760e0518060011c61178057610140526101405050606051620249f86040516020526000526040600020556040517fad17aca0dc59a6d96350f71e2732094471c65b5a5cecd8f95b376edcd5534cc960c05160e052602060e0a25b60a05160605110156117305760a051606051808203828111611780579050905060206117926000396000516370a0823160e05260405161010052602060e0602460fc845afa611663573d600060003e3d6000fd5b60203d106117805760e09050518082811882841002189050905060c05260206117926000396000516379cc679060e0526040516101005260c05161012052602060e0604460fc6000855af16116bd573d600060003e3d6000fd5b60203d106117805760e0518060011c6117805761014052610140505060a05160c0518082038281116117805790509050620249f86040516020526000526040600020556040517fb21604369d32a00404a085ea01ab0a3f6b63f8a0ebda770e25695572416d9bcf60c05160e052602060e0a25b6080511561177e57606051620249f76040516020526000526040600020556040517f22d26e5448456e0d2368bca46b2c824717b39390656f1c6314237e11d691e4f260605160c052602060c0a25b565b600080fda165767970657283000307000b000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Verified Source Code Partial Match

Compiler: v0.3.7+commit.6020b8bb EVM: paris
crvUSDControllerFactory.vy 351 lines
# @version 0.3.7
"""
@title crvUSD ControllerFactory
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved
"""

interface ERC20:
    def mint(_to: address, _value: uint256) -> bool: nonpayable
    def burnFrom(_to: address, _value: uint256) -> bool: nonpayable
    def balanceOf(_user: address) -> uint256: view
    def decimals() -> uint256: view

interface PriceOracle:
    def price() -> uint256: view
    def price_w() -> uint256: nonpayable

interface AMM:
    def set_admin(_admin: address): nonpayable

interface Controller:
    def total_debt() -> uint256: view
    def minted() -> uint256: view
    def redeemed() -> uint256: view
    def collect_fees() -> uint256: nonpayable

interface MonetaryPolicy:
    def rate_write() -> uint256: nonpayable


event AddMarket:
    collateral: indexed(address)
    controller: address
    amm: address
    monetary_policy: address
    ix: uint256

event SetDebtCeiling:
    addr: indexed(address)
    debt_ceiling: uint256

event MintForMarket:
    addr: indexed(address)
    amount: uint256

event RemoveFromMarket:
    addr: indexed(address)
    amount: uint256

event SetImplementations:
    amm: address
    controller: address

event SetAdmin:
    admin: address

event SetFeeReceiver:
    fee_receiver: address


MAX_CONTROLLERS: constant(uint256) = 50000
STABLECOIN: immutable(ERC20)
controllers: public(address[MAX_CONTROLLERS])
amms: public(address[MAX_CONTROLLERS])
admin: public(address)
fee_receiver: public(address)
controller_implementation: public(address)
amm_implementation: public(address)

n_collaterals: public(uint256)
collaterals: public(address[MAX_CONTROLLERS])
collaterals_index: public(HashMap[address, uint256[1000]])

debt_ceiling: public(HashMap[address, uint256])
debt_ceiling_residual: public(HashMap[address, uint256])

# Limits
MIN_A: constant(uint256) = 2
MAX_A: constant(uint256) = 10000
MIN_FEE: constant(uint256) = 10**6  # 1e-12, still needs to be above 0
MAX_FEE: constant(uint256) = 10**17  # 10%
MAX_ADMIN_FEE: constant(uint256) = 10**18  # 100%
MAX_LOAN_DISCOUNT: constant(uint256) = 5 * 10**17
MIN_LIQUIDATION_DISCOUNT: constant(uint256) = 10**16

WETH: public(immutable(address))


@external
def __init__(stablecoin: ERC20,
             admin: address,
             fee_receiver: address,
             weth: address):
    """
    @notice Factory which creates both controllers and AMMs from blueprints
    @param stablecoin Stablecoin address
    @param admin Admin of the factory (ideally DAO)
    @param fee_receiver Receiver of interest and admin fees
    @param weth Address of WETH contract address
    """
    STABLECOIN = stablecoin
    self.admin = admin
    self.fee_receiver = fee_receiver
    WETH = weth


@internal
@pure
def ln_int(_x: uint256) -> int256:
    """
    @notice Logarithm ln() function based on log2. Not very gas-efficient but brief
    """
    # adapted from: https://medium.com/coinmonks/9aef8515136e
    # and vyper log implementation
    # This can be much more optimal but that's not important here
    x: uint256 = _x
    res: uint256 = 0
    for i in range(8):
        t: uint256 = 2**(7 - i)
        p: uint256 = 2**t
        if x >= p * 10**18:
            x /= p
            res += t * 10**18
    d: uint256 = 10**18
    for i in range(59):  # 18 decimals: math.log2(10**10) == 59.7
        if (x >= 2 * 10**18):
            res += d
            x /= 2
        x = x * x / 10**18
        d /= 2
    # Now res = log2(x)
    # ln(x) = log2(x) / log2(e)
    return convert(res * 10**18 / 1442695040888963328, int256)
## End of low-level math


@external
@view
def stablecoin() -> ERC20:
    return STABLECOIN


@internal
def _set_debt_ceiling(addr: address, debt_ceiling: uint256, update: bool):
    """
    @notice Set debt ceiling for a market
    @param addr Controller address
    @param debt_ceiling Value for stablecoin debt ceiling
    @param update Whether to actually update the debt ceiling (False is used for burning the residuals)
    """
    old_debt_residual: uint256 = self.debt_ceiling_residual[addr]

    if debt_ceiling > old_debt_residual:
        to_mint: uint256 = debt_ceiling - old_debt_residual
        STABLECOIN.mint(addr, to_mint)
        self.debt_ceiling_residual[addr] = debt_ceiling
        log MintForMarket(addr, to_mint)

    if debt_ceiling < old_debt_residual:
        diff: uint256 = min(old_debt_residual - debt_ceiling, STABLECOIN.balanceOf(addr))
        STABLECOIN.burnFrom(addr, diff)
        self.debt_ceiling_residual[addr] = old_debt_residual - diff
        log RemoveFromMarket(addr, diff)

    if update:
        self.debt_ceiling[addr] = debt_ceiling
        log SetDebtCeiling(addr, debt_ceiling)


@external
@nonreentrant('lock')
def add_market(token: address, A: uint256, fee: uint256, admin_fee: uint256,
               _price_oracle_contract: address,
               monetary_policy: address, loan_discount: uint256, liquidation_discount: uint256,
               debt_ceiling: uint256) -> address[2]:
    """
    @notice Add a new market, creating an AMM and a Controller from a blueprint
    @param token Collateral token address
    @param A Amplification coefficient; one band size is 1/A
    @param fee AMM fee in the market's AMM
    @param admin_fee AMM admin fee
    @param _price_oracle_contract Address of price oracle contract for this market
    @param monetary_policy Monetary policy for this market
    @param loan_discount Loan discount: allowed to borrow only up to x_down * (1 - loan_discount)
    @param liquidation_discount Discount which defines a bad liquidation threshold
    @param debt_ceiling Debt ceiling for this market
    @return (Controller, AMM)
    """
    assert msg.sender == self.admin, "Only admin"
    assert A >= MIN_A and A <= MAX_A, "Wrong A"
    assert fee <= MAX_FEE, "Fee too high"
    assert fee >= MIN_FEE, "Fee too low"
    assert admin_fee < MAX_ADMIN_FEE, "Admin fee too high"
    assert liquidation_discount >= MIN_LIQUIDATION_DISCOUNT, "Liquidation discount too low"
    assert loan_discount <= MAX_LOAN_DISCOUNT, "Loan discount too high"
    assert loan_discount > liquidation_discount, "need loan_discount>liquidation_discount"
    MonetaryPolicy(monetary_policy).rate_write()  # Test that MonetaryPolicy has correct ABI

    p: uint256 = PriceOracle(_price_oracle_contract).price()  # This also validates price oracle ABI
    assert p > 0
    assert PriceOracle(_price_oracle_contract).price_w() == p
    A_ratio: uint256 = 10**18 * A / (A - 1)

    amm: address = create_from_blueprint(
        self.amm_implementation,
        STABLECOIN.address, 10**(18 - STABLECOIN.decimals()),
        token, 10**(18 - ERC20(token).decimals()),  # <- This validates ERC20 ABI
        A, isqrt(A_ratio * 10**18), self.ln_int(A_ratio),
        p, fee, admin_fee, _price_oracle_contract,
        code_offset=3)
    controller: address = create_from_blueprint(
        self.controller_implementation,
        token, monetary_policy, loan_discount, liquidation_discount, amm,
        code_offset=3)
    AMM(amm).set_admin(controller)
    self._set_debt_ceiling(controller, debt_ceiling, True)

    N: uint256 = self.n_collaterals
    self.collaterals[N] = token
    for i in range(1000):
        if self.collaterals_index[token][i] == 0:
            self.collaterals_index[token][i] = 2**128 + N
            break
        assert i != 999, "Too many controllers for same collateral"
    self.controllers[N] = controller
    self.amms[N] = amm
    self.n_collaterals = N + 1

    log AddMarket(token, controller, amm, monetary_policy, N)
    return [controller, amm]


@external
@view
def total_debt() -> uint256:
    """
    @notice Sum of all debts across controllers
    """
    total: uint256 = 0
    n_collaterals: uint256 = self.n_collaterals
    for i in range(MAX_CONTROLLERS):
        if i == n_collaterals:
            break
        total += Controller(self.controllers[i]).total_debt()
    return total


@external
@view
def get_controller(collateral: address, i: uint256 = 0) -> address:
    """
    @notice Get controller address for collateral
    @param collateral Address of collateral token
    @param i Iterate over several controllers for collateral if needed
    """
    return self.controllers[self.collaterals_index[collateral][i] - 2**128]


@external
@view
def get_amm(collateral: address, i: uint256 = 0) -> address:
    """
    @notice Get AMM address for collateral
    @param collateral Address of collateral token
    @param i Iterate over several amms for collateral if needed
    """
    return self.amms[self.collaterals_index[collateral][i] - 2**128]


@external
@nonreentrant('lock')
def set_implementations(controller: address, amm: address):
    """
    @notice Set new implementations (blueprints) for controller and amm. Doesn't change existing ones
    @param controller Address of the controller blueprint
    @param amm Address of the AMM blueprint
    """
    assert msg.sender == self.admin
    assert controller != empty(address)
    assert amm != empty(address)
    self.controller_implementation = controller
    self.amm_implementation = amm
    log SetImplementations(amm, controller)


@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
@nonreentrant('lock')
def set_fee_receiver(fee_receiver: address):
    """
    @notice Set fee receiver who earns interest (DAO)
    @param fee_receiver Address of the receiver
    """
    assert msg.sender == self.admin
    assert fee_receiver != empty(address)
    self.fee_receiver = fee_receiver
    log SetFeeReceiver(fee_receiver)


@external
@nonreentrant('lock')
def set_debt_ceiling(_to: address, debt_ceiling: uint256):
    """
    @notice Set debt ceiling of the address - mint the token amount given for it
    @param _to Address to allow borrowing for
    @param debt_ceiling Maximum allowed to be allowed to mint for it
    """
    assert msg.sender == self.admin
    self._set_debt_ceiling(_to, debt_ceiling, True)


@external
@nonreentrant('lock')
def rug_debt_ceiling(_to: address):
    """
    @notice Remove stablecoins above the debt ceiling from the address and burn them
    @param _to Address to remove stablecoins from
    """
    self._set_debt_ceiling(_to, self.debt_ceiling[_to], False)


@external
@nonreentrant('lock')
def collect_fees_above_ceiling(_to: address):
    """
    @notice If the receiver is the controller - increase the debt ceiling if it's not enough to claim admin fees
            and claim them
    @param _to Address of the controller
    """
    assert msg.sender == self.admin
    old_debt_residual: uint256 = self.debt_ceiling_residual[_to]
    assert self.debt_ceiling[_to] > 0 or old_debt_residual > 0

    admin_fees: uint256 = Controller(_to).total_debt() + Controller(_to).redeemed() - Controller(_to).minted()
    b: uint256 = STABLECOIN.balanceOf(_to)
    if admin_fees > b:
        to_mint: uint256 = admin_fees - b
        STABLECOIN.mint(_to, to_mint)
        self.debt_ceiling_residual[_to] = old_debt_residual + to_mint
    Controller(_to).collect_fees()

Read Contract

WETH 0xad5c4648 → address
admin 0xf851a440 → address
amm_implementation 0x3bc5799f → address
amms 0x86a8cdbc → address
collaterals 0x24c1173b → address
collaterals_index 0xa7367268 → uint256
controller_implementation 0x0275417e → address
controllers 0xe94b0dd2 → address
debt_ceiling 0x602b62d4 → uint256
debt_ceiling_residual 0xc92696b2 → uint256
fee_receiver 0xcab4d3db → address
get_amm 0xb12d5460 → address
get_amm 0x1539838f → address
get_controller 0xf4410236 → address
get_controller 0x6bbd5ec7 → address
n_collaterals 0x12397fa1 → uint256
stablecoin 0xe9cbd822 → address
total_debt 0x31dc3ca8 → uint256

Write Contract 7 functions

These functions modify contract state and require a wallet transaction to execute.

add_market 0x8a82f1fe
address token
uint256 A
uint256 fee
uint256 admin_fee
address _price_oracle_contract
address monetary_policy
uint256 loan_discount
uint256 liquidation_discount
uint256 debt_ceiling
returns: address[2]
collect_fees_above_ceiling 0xdf068aba
address _to
rug_debt_ceiling 0x2651990f
address _to
set_admin 0xe9333fab
address admin
set_debt_ceiling 0xb933c50a
address _to
uint256 debt_ceiling
set_fee_receiver 0xe41ab771
address fee_receiver
set_implementations 0x9af8f23c
address controller
address amm

Recent Transactions

No transactions found for this address