ETH Price: $2,043.97 (+4.89%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Rate_write241774352026-01-06 18:30:1131 days ago1767724211IN
0x8c5A7F01...5CE9bc933
0 ETH0.000048750.11998953
Rate_write241774142026-01-06 18:25:5931 days ago1767723959IN
0x8c5A7F01...5CE9bc933
0 ETH0.000063660.15669419
Rate_write241771882026-01-06 17:40:2331 days ago1767721223IN
0x8c5A7F01...5CE9bc933
0 ETH0.000071580.17510913
Rate_write241771872026-01-06 17:40:1131 days ago1767721211IN
0x8c5A7F01...5CE9bc933
0 ETH0.00007490.16166098
Rate_write241771822026-01-06 17:39:1131 days ago1767721151IN
0x8c5A7F01...5CE9bc933
0 ETH0.000047680.17588427
Rate_write241771802026-01-06 17:38:4731 days ago1767721127IN
0x8c5A7F01...5CE9bc933
0 ETH0.000068450.16847359
Rate_write190482742024-01-20 13:08:11749 days ago1705756091IN
0x8c5A7F01...5CE9bc933
0 ETH0.0047137813.9312786
Rate_write190482312024-01-20 12:59:35749 days ago1705755575IN
0x8c5A7F01...5CE9bc933
0 ETH0.0047457713.59699259
Rate_write190482302024-01-20 12:59:23749 days ago1705755563IN
0x8c5A7F01...5CE9bc933
0 ETH0.0054778213.85503297
Rate_write190482292024-01-20 12:59:11749 days ago1705755551IN
0x8c5A7F01...5CE9bc933
0 ETH0.0057578214.5632372
Rate_write190482282024-01-20 12:58:59749 days ago1705755539IN
0x8c5A7F01...5CE9bc933
0 ETH0.0089630714.67985465

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AggMonetaryPolicy - monetary policy based on aggregated prices for crvUSD

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
"""
@title AggMonetaryPolicy - monetary policy based on aggregated prices for crvUSD
@author Curve.Fi
@license Copyright (c) Curve.Fi, 2020-2023 - all rights reserved
"""

# This version uses min(last day) debt when calculating per-market rates
# Should be used for Controllers which update borrow rate too early (not at the end of every call)


interface PegKeeper:
    def debt() -> uint256: view

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

interface ControllerFactory:
    def total_debt() -> uint256: view
    def debt_ceiling(_for: address) -> uint256: view
    def n_collaterals() -> uint256: view
    def controllers(i: uint256) -> address: view

interface Controller:
    def total_debt() -> uint256: view


struct TotalDebts:
    total_debt: uint256
    controller_debt: uint256
    ceiling: uint256


event SetAdmin:
    admin: address

event AddPegKeeper:
    peg_keeper: indexed(address)

event RemovePegKeeper:
    peg_keeper: indexed(address)

event SetRate:
    rate: uint256

event SetSigma:
    sigma: int256

event SetTargetDebtFraction:
    target_debt_fraction: uint256


admin: public(address)

rate0: public(uint256)
sigma: public(int256)  # 2 * 10**16 for example
target_debt_fraction: public(uint256)

peg_keepers: public(PegKeeper[1001])
PRICE_ORACLE: public(immutable(PriceOracle))
CONTROLLER_FACTORY: public(immutable(ControllerFactory))

# Cache for controllers
MAX_CONTROLLERS: constant(uint256) = 50000
n_controllers: public(uint256)
controllers: public(address[MAX_CONTROLLERS])


struct DebtCandle:
    candle0: uint256  # earlier 1/2 day candle
    candle1: uint256   # later 1/2 day candle
    timestamp: uint256

DEBT_CANDLE_TIME: constant(uint256) = 86400 / 2
min_debt_candles: public(HashMap[address, DebtCandle])


MAX_TARGET_DEBT_FRACTION: constant(uint256) = 10**18
MAX_SIGMA: constant(int256) = 10**18
MIN_SIGMA: constant(int256) = 10**14
MAX_EXP: constant(uint256) = 1000 * 10**18
MAX_RATE: constant(uint256) = 43959106799  # 300% APY
TARGET_REMAINDER: constant(uint256) = 10**17  # rate is x1.9 when 10% left before ceiling


@external
def __init__(admin: address,
             price_oracle: PriceOracle,
             controller_factory: ControllerFactory,
             peg_keepers: PegKeeper[5],
             rate: uint256,
             sigma: int256,
             target_debt_fraction: uint256):
    self.admin = admin
    PRICE_ORACLE = price_oracle
    CONTROLLER_FACTORY = controller_factory
    for i in range(5):
        if peg_keepers[i].address == empty(address):
            break
        self.peg_keepers[i] = peg_keepers[i]

    assert sigma >= MIN_SIGMA
    assert sigma <= MAX_SIGMA
    assert target_debt_fraction > 0
    assert target_debt_fraction <= MAX_TARGET_DEBT_FRACTION
    assert rate <= MAX_RATE
    self.rate0 = rate
    self.sigma = sigma
    self.target_debt_fraction = target_debt_fraction


@external
def set_admin(admin: address):
    assert msg.sender == self.admin
    self.admin = admin
    log SetAdmin(admin)


@external
def add_peg_keeper(pk: PegKeeper):
    assert msg.sender == self.admin
    assert pk.address != empty(address)
    for i in range(1000):
        _pk: PegKeeper = self.peg_keepers[i]
        assert _pk != pk, "Already added"
        if _pk.address == empty(address):
            self.peg_keepers[i] = pk
            log AddPegKeeper(pk.address)
            break


@external
def remove_peg_keeper(pk: PegKeeper):
    assert msg.sender == self.admin
    replaced_peg_keeper: uint256 = 10000
    for i in range(1001):  # 1001th element is always 0x0
        _pk: PegKeeper = self.peg_keepers[i]
        if _pk == pk:
            replaced_peg_keeper = i
            log RemovePegKeeper(pk.address)
        if _pk.address == empty(address):
            if replaced_peg_keeper < i:
                if replaced_peg_keeper < i - 1:
                    self.peg_keepers[replaced_peg_keeper] = self.peg_keepers[i - 1]
                self.peg_keepers[i - 1] = PegKeeper(empty(address))
            break


@internal
@pure
def exp(power: int256) -> uint256:
    if power <= -41446531673892821376:
        return 0

    if power >= 135305999368893231589:
        # Return MAX_EXP when we are in overflow mode
        return MAX_EXP

    x: int256 = unsafe_div(unsafe_mul(power, 2**96), 10**18)

    k: int256 = unsafe_div(
        unsafe_add(
            unsafe_div(unsafe_mul(x, 2**96), 54916777467707473351141471128),
            2**95),
        2**96)
    x = unsafe_sub(x, unsafe_mul(k, 54916777467707473351141471128))

    y: int256 = unsafe_add(x, 1346386616545796478920950773328)
    y = unsafe_add(unsafe_div(unsafe_mul(y, x), 2**96), 57155421227552351082224309758442)
    p: int256 = unsafe_sub(unsafe_add(y, x), 94201549194550492254356042504812)
    p = unsafe_add(unsafe_div(unsafe_mul(p, y), 2**96), 28719021644029726153956944680412240)
    p = unsafe_add(unsafe_mul(p, x), (4385272521454847904659076985693276 * 2**96))

    q: int256 = x - 2855989394907223263936484059900
    q = unsafe_add(unsafe_div(unsafe_mul(q, x), 2**96), 50020603652535783019961831881945)
    q = unsafe_sub(unsafe_div(unsafe_mul(q, x), 2**96), 533845033583426703283633433725380)
    q = unsafe_add(unsafe_div(unsafe_mul(q, x), 2**96), 3604857256930695427073651918091429)
    q = unsafe_sub(unsafe_div(unsafe_mul(q, x), 2**96), 14423608567350463180887372962807573)
    q = unsafe_add(unsafe_div(unsafe_mul(q, x), 2**96), 26449188498355588339934803723976023)

    return shift(
        unsafe_mul(convert(unsafe_div(p, q), uint256), 3822833074963236453042738258902158003155416615667),
        unsafe_sub(k, 195))


@internal
@view
def get_total_debt(_for: address) -> (uint256, uint256):
    n_controllers: uint256 = self.n_controllers
    total_debt: uint256 = 0
    debt_for: uint256 = 0

    for i in range(MAX_CONTROLLERS):
        if i >= n_controllers:
            break
        controller: address = self.controllers[i]

        success: bool = False
        res: Bytes[32] = empty(Bytes[32])
        success, res = raw_call(controller, method_id("total_debt()"), max_outsize=32, is_static_call=True, revert_on_failure=False)
        debt: uint256 = convert(res, uint256)
        total_debt += debt
        if controller == _for:
            debt_for = debt

    return total_debt, debt_for


@internal
@view
def read_candle(_for: address) -> uint256:
    out: uint256 = 0
    candle: DebtCandle = self.min_debt_candles[_for]

    if block.timestamp < candle.timestamp / DEBT_CANDLE_TIME * DEBT_CANDLE_TIME + DEBT_CANDLE_TIME:
        if candle.candle0 > 0:
            out = min(candle.candle0, candle.candle1)
        else:
            out = candle.candle1
    elif block.timestamp < candle.timestamp / DEBT_CANDLE_TIME * DEBT_CANDLE_TIME + DEBT_CANDLE_TIME * 2:
        out = candle.candle1

    return out


@internal
def save_candle(_for: address, _value: uint256):
    candle: DebtCandle = self.min_debt_candles[_for]

    if candle.timestamp == 0 and _value == 0:
        # This record did not exist before, and value is zero -> not recording anything
        return

    if block.timestamp >= candle.timestamp / DEBT_CANDLE_TIME * DEBT_CANDLE_TIME + DEBT_CANDLE_TIME:
        if block.timestamp < candle.timestamp / DEBT_CANDLE_TIME * DEBT_CANDLE_TIME + DEBT_CANDLE_TIME * 2:
            candle.candle0 = candle.candle1
            candle.candle1 = _value
        else:
            candle.candle0 = _value
            candle.candle1 = _value
    else:
        candle.candle1 = min(candle.candle1, _value)

    candle.timestamp = block.timestamp
    self.min_debt_candles[_for] = candle


@internal
@view
def read_debt(_for: address, ro: bool) -> (uint256, uint256):
    debt_total: uint256 = self.read_candle(empty(address))
    debt_for: uint256 = self.read_candle(_for)
    fresh_total: uint256 = 0
    fresh_for: uint256 = 0

    if ro:
        fresh_total, fresh_for = self.get_total_debt(_for)
        if debt_total > 0:
            debt_total = min(debt_total, fresh_total)
        else:
            debt_total = fresh_total
        if debt_for > 0:
            debt_for = min(debt_for, fresh_for)
        else:
            debt_for = fresh_for

    else:
        if debt_total == 0 or debt_for == 0:
            fresh_total, fresh_for = self.get_total_debt(_for)
            if debt_total == 0:
                debt_total = fresh_total
            if debt_for == 0:
                debt_for = fresh_for

    return debt_total, debt_for


@internal
@view
def calculate_rate(_for: address, _price: uint256, ro: bool) -> uint256:
    sigma: int256 = self.sigma
    target_debt_fraction: uint256 = self.target_debt_fraction

    p: int256 = convert(_price, int256)
    pk_debt: uint256 = 0
    for pk in self.peg_keepers:
        if pk.address == empty(address):
            break
        pk_debt += pk.debt()

    total_debt: uint256 = 0
    debt_for: uint256 = 0
    total_debt, debt_for = self.read_debt(_for, ro)

    power: int256 = (10**18 - p) * 10**18 / sigma  # high price -> negative pow -> low rate
    if pk_debt > 0:
        if total_debt == 0:
            return 0
        else:
            power -= convert(pk_debt * 10**18 / total_debt * 10**18 / target_debt_fraction, int256)

    # Rate accounting for crvUSD price and PegKeeper debt
    rate: uint256 = self.rate0 * min(self.exp(power), MAX_EXP) / 10**18

    # Account for individual debt ceiling to dynamically tune rate depending on filling the market
    ceiling: uint256 = CONTROLLER_FACTORY.debt_ceiling(_for)
    if ceiling > 0:
        f: uint256 = min(debt_for * 10**18 / ceiling, 10**18 - TARGET_REMAINDER / 1000)
        rate = min(rate * ((10**18 - TARGET_REMAINDER) + TARGET_REMAINDER * 10**18 / (10**18 - f)) / 10**18, MAX_RATE)

    # Rate multiplication at different ceilings (target = 0.1):
    # debt = 0:
    #   new_rate = rate * ((1.0 - target) + target) = rate
    #
    # debt = ceiling:
    #   f = 1.0 - 0.1 / 1000 = 0.9999  # instead of infinity to avoid /0
    #   new_rate = min(rate * ((1.0 - target) + target / (1.0 - 0.9999)), max_rate) = max_rate
    #
    # debt = 0.9 * ceiling, target = 0.1
    #   f = 0.9
    #   new_rate = rate * ((1.0 - 0.1) + 0.1 / (1.0 - 0.9)) = rate * (1.0 + 1.0 - 0.1) = 1.9 * rate

    return rate


@view
@external
def rate(_for: address = msg.sender) -> uint256:
    return self.calculate_rate(_for, PRICE_ORACLE.price(), True)


@external
def rate_write(_for: address = msg.sender) -> uint256:
    # Update controller list
    n_controllers: uint256 = self.n_controllers
    n_factory_controllers: uint256 = CONTROLLER_FACTORY.n_collaterals()
    if n_factory_controllers > n_controllers:
        self.n_controllers = n_factory_controllers
        for i in range(MAX_CONTROLLERS):
            self.controllers[n_controllers] = CONTROLLER_FACTORY.controllers(n_controllers)
            n_controllers += 1
            if n_controllers >= n_factory_controllers:
                break

    # Update candles
    total_debt: uint256 = 0
    debt_for: uint256 = 0
    total_debt, debt_for = self.get_total_debt(_for)
    self.save_candle(empty(address), total_debt)
    self.save_candle(_for, debt_for)

    return self.calculate_rate(_for, PRICE_ORACLE.price_w(), False)


@external
def set_rate(rate: uint256):
    assert msg.sender == self.admin
    assert rate <= MAX_RATE
    self.rate0 = rate
    log SetRate(rate)


@external
def set_sigma(sigma: int256):
    assert msg.sender == self.admin
    assert sigma >= MIN_SIGMA
    assert sigma <= MAX_SIGMA

    self.sigma = sigma
    log SetSigma(sigma)


@external
def set_target_debt_fraction(target_debt_fraction: uint256):
    assert msg.sender == self.admin
    assert target_debt_fraction <= MAX_TARGET_DEBT_FRACTION
    assert target_debt_fraction > 0

    self.target_debt_fraction = target_debt_fraction
    log SetTargetDebtFraction(target_debt_fraction)

Contract Security Audit

Contract ABI

API
[{"name":"SetAdmin","inputs":[{"name":"admin","type":"address","indexed":false}],"anonymous":false,"type":"event"},{"name":"AddPegKeeper","inputs":[{"name":"peg_keeper","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"RemovePegKeeper","inputs":[{"name":"peg_keeper","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetRate","inputs":[{"name":"rate","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetSigma","inputs":[{"name":"sigma","type":"int256","indexed":false}],"anonymous":false,"type":"event"},{"name":"SetTargetDebtFraction","inputs":[{"name":"target_debt_fraction","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"admin","type":"address"},{"name":"price_oracle","type":"address"},{"name":"controller_factory","type":"address"},{"name":"peg_keepers","type":"address[5]"},{"name":"rate","type":"uint256"},{"name":"sigma","type":"int256"},{"name":"target_debt_fraction","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_admin","inputs":[{"name":"admin","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"add_peg_keeper","inputs":[{"name":"pk","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"remove_peg_keeper","inputs":[{"name":"pk","type":"address"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"rate","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"rate","inputs":[{"name":"_for","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"rate_write","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"rate_write","inputs":[{"name":"_for","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_rate","inputs":[{"name":"rate","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_sigma","inputs":[{"name":"sigma","type":"int256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"set_target_debt_fraction","inputs":[{"name":"target_debt_fraction","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"admin","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"rate0","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"sigma","inputs":[],"outputs":[{"name":"","type":"int256"}]},{"stateMutability":"view","type":"function","name":"target_debt_fraction","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"peg_keepers","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"PRICE_ORACLE","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"CONTROLLER_FACTORY","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"n_controllers","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"controllers","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"min_debt_candles","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"tuple","components":[{"name":"candle0","type":"uint256"},{"name":"candle1","type":"uint256"},{"name":"timestamp","type":"uint256"}]}]}]

6112865150346101b05760206114305f395f518060a01c6101b05760405260206114505f395f518060a01c6101b05760605260206114705f395f518060a01c6101b05760805260206114905f395f518060a01c6101b05760a05260206114b05f395f518060a01c6101b05760c05260206114d05f395f518060a01c6101b05760e05260206114f05f395f518060a01c6101b0576101005260206115105f395f518060a01c6101b057610120526040515f5560605161126652608051611286525f6005905b806101405261014051600481116101b05760051b60a001516100e457610113565b61014051600481116101b05760051b60a00151610140516103e881116101b057600401556001018181186100c3575b5050655af3107a400060206115505f395f51126101b057670de0b6b3a764000060206115505f395f51136101b05760206115705f395f51156101b057670de0b6b3a764000060206115705f395f51116101b057640a3c2abcef60206115305f395f51116101b05760206115305f395f5160015560206115505f395f5160025560206115705f395f516003556112666101b4610000396112a6610000f35b5f80fd5f3560e01c60026011820660011b61124401601e395f51565b63f851a44081186100335734611240575f5460405260206040f35b63e91f2f4c81186107ff573461124057336104a0526100d2566107ff565b6393c19e1881186107ff57346112405760015460405260206040f36107ff565b63afdf31cd81186107ff57346112405760025460405260206040f36107ff565b63a155b53a81186100ad57346112405760035460405260206040f35b63bdb09f2e81186107ff57602436103417611240576004358060a01c611240576104a0525b6103ed546104c05260206112865f395f516312397fa1610500526020610500600461051c845afa610105573d5f5f3e3d5ffd5b60203d10611240576105009050516104e0526104c0516104e05111156101d0576104e0516103ed555f61c350905b806105005260206112865f395f5163e94b0dd2610520526104c051610540526020610520602461053c845afa61016b573d5f5f3e3d5ffd5b60203d1061124057610520518060a01c61124057610560526105609050516104c05161c34f8111611240576103ee01556104c051600181018181106112405790506104c0526104e0516104c051106101c2576101cd565b600101818118610133575b50505b604036610500376104a0516040526101e9610540610ab9565b610540805161050052602081015161052052505f6040526105005160605261020f610c8a565b6104a05160405261052051606052610225610c8a565b60206104a0516102e05260206112665f395f5163ceb7f759610540526020610540600461055c5f855af161025b573d5f5f3e3d5ffd5b60203d1061124057610540905051610300525f6103205261027d610580610ece565b610580f36107ff565b63f623513881186102b457602436103417611240576004356103e88111611240576004015460405260206040f35b632c4e722e81186107ff573461124057336104a052610734566107ff565b630a19399a81186102f0573461124057602061126660403960206040f35b63e9333fab81186107ff57602436103417611240576004358060a01c611240576040525f543318611240576040515f557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a1006107ff565b63a38d1b218118610370573461124057602061128660403960206040f35b630eb57e3c81186107ff57602436103417611240576004358060a01c611240576040525f5433186112405760405115611240575f6103e8905b806060526060516103e8811161124057600401546080526040516080511861042757600d60a0527f416c72656164792061646465640000000000000000000000000000000000000060c05260a05060a0518060c001601f825f031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60805161046e576040516060516103e8811161124057600401556040517ff395c3706a8194522b942d1992143a7b60a92a83f99ec30e3833c7630e3c13315f60a0a2610479565b6001018181186103a9575b5050006107ff565b631d741825811861049e5734611240576103ed5460405260206040f35b63bc8f105081186107ff57602436103417611240575f54331861124057655af3107a40006004351261124057670de0b6b3a764000060043513611240576004356002557fdd7b7d5ad5206db1e2995b71e974a52e324ffefe428b26c79f323b814de1d15560043560405260206040a1006107ff565b63e94b0dd281186107ff576024361034176112405760043561c34f8111611240576103ee015460405260206040f36107ff565b635db441ed81186107ff57602436103417611240576004358060a01c6112405760405261c73e6040516020525f5260405f2080546060526001810154608052600281015460a0525060606060f36107ff565b6355aab44a81186106ac57602436103417611240576004358060a01c611240576040525f543318611240576127106060525f6103e9905b806080526080516103e88111611240576004015460a05260405160a05118610620576080516060526040517f52182c3057b74a074adcacf89ba9ff9860a1265c89cfecd998a111e06bc802675f60c0a25b60a05161069d5760805160605110156106a85760805160018103818111611240579050606051101561067a57608051600181038181116112405790506103e8811161124057600401546060516103e8811161124057600401555b5f608051600181038181116112405790506103e8811161124057600401556106a8565b6001018181186105cf575b5050005b63d4387a9981186107ff57602436103417611240575f54331861124057640a3c2abcef60043511611240576004356001557f2640b4015d3473fd09bf2b30939e17deb4068cdacf3892136e737e166ceb321060043560405260206040a1006107ff565b630ba9d8ca81186107ff57602436103417611240576004358060a01c611240576104a0525b60206104a0516102e05260206112665f395f5163a035b1fe6104c05260206104c060046104dc845afa610769573d5f5f3e3d5ffd5b60203d10611240576104c09050516103005260016103205261078c610500610ece565b610500f36107ff565b63c18b939681186107ff57602436103417611240575f54331861124057670de0b6b3a7640000600435116112405760043515611240576004356003557f282d6b198c8375838e9528471dafbdbbee8d421fb7fa793395872d42da32fa2b60043560405260206040a1005b5f5ffd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a4668060405113610835575f815250610ab7565b680755bf798b4a1bf1e56040511261085957683635c9adc5dea00000815250610ab7565b670de0b6b3a764000060405160601b056060526c010000000000000000000000006b8000000000000000000000006bb17217f7d1cf79abc9e3b39860605160601b0501056080526bb17217f7d1cf79abc9e3b39860805102606051036060526c10fe68e7fd37d0007b713f76506060510160a0526d02d16720577bd19bf614176fe9ea6c0100000000000000000000000060605160a05102050160a0526d04a4fd9f2a8b96949216d2255a6c60605160a051010360c0526e0587f503bb6ea29d25fcb7401964506c0100000000000000000000000060a05160c05102050160c05279d835ebba824c98fb31b83b2ca45c00000000000000000000000060605160c051020160c0526060516c240c330e9fb2d9cbaf0fd5aafc810381811361124057905060e0526d0277594991cfc85f6e2461837cd96c0100000000000000000000000060605160e05102050160e0526d1a521255e34f6a5061b25ef1c9c46c0100000000000000000000000060605160e05102050360e0526db1bbb201f443cf962f1a1d3db4a56c0100000000000000000000000060605160e05102050160e0526e02c72388d9f74f51a9331fed693f156c0100000000000000000000000060605160e05102050360e0526e05180bb14799ab47a8a8cb2a527d576c0100000000000000000000000060605160e05102050160e05274029d9dc38563c32e5c2f6dc192ee70ef65f9978af360e05160c051055f8112611240570260c3608051037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811315610aa95781811b610aaf565b81815f031c5b905090508152505b565b6103ed546060526040366080375f61c350905b8060c05260605160c05110610ae057610bb0565b60c05161c34f8111611240576103ee015460e0526040366101003760e0515a6004610160527f31dc3ca800000000000000000000000000000000000000000000000000000000610180526101605060206101c0610160516101808585fa90509050610100523d602081183d60201002186101a0526101a080516101205260208101516101405250610140516101205160200360031b1c6101605260805161016051808201828110611240579050905060805260405160e05118610ba5576101605160a0525b600101818118610acc575b5050608051815260a051602082015250565b5f60605261c73e6040516020525f5260405f208054608052600181015460a052600281015460c0525060c05161a8c08104905061a8c081028161a8c082041861124057905061a8c081018181106112405790504210610c585760c05161a8c08104905061a8c081028161a8c0820418611240579050620151808101818110611240579050421015610c825760a051606052610c82565b60805115610c7b5760805160a05180828118828410021890509050606052610c82565b60a0516060525b606051815250565b61c73e6040516020525f5260405f208054608052600181015460a052600281015460c0525060c051610cbf5760605115610cc1565b5f5b15610ccb57610d90565b60c05161a8c08104905061a8c081028161a8c082041861124057905061a8c08101818110611240579050421015610d175760a0516060518082811882841002189050905060a052610d66565b60c05161a8c08104905061a8c081028161a8c08204186112405790506201518081018181106112405790504210610d595760605160805260605160a052610d66565b60a05160805260605160a0525b4260c05261c73e6040516020525f5260405f20608051815560a051600182015560c0516002820155505b565b5f604052610da1610240610bc2565b61024051610220526101e051604052610dbb610260610bc2565b61026051610240526040366102603761020051610e375761022051610de1576001610de7565b61024051155b15610ebc576101e051604052610dfe6102a0610ab9565b6102a08051610260526020810151610280525061022051610e225761026051610220525b61024051610ebc576102805161024052610ebc565b6101e051604052610e496102a0610ab9565b6102a0805161026052602081015161028052506102205115610e835761022051610260518082811882841002189050905061022052610e8c565b61026051610220525b6102405115610eb35761024051610280518082811882841002189050905061024052610ebc565b61028051610240525b61022051815261024051602082015250565b6002546103405260035461036052610300518060ff1c61124057610380525f6103a0525f6103e9905b80600401546103c0526103c051610f0d57610f62565b6103a0516103c051630dca59c16103e05260206103e060046103fc845afa610f37573d5f5f3e3d5ffd5b60203d10611240576103e090505180820182811061124057905090506103a052600101818118610ef7575b50506040366103c0376102e0516101e0526103205161020052610f86610400610d92565b61040080516103c05260208101516103e052506103805180670de0b6b3a764000003670de0b6b3a764000081135f831218611240579050670de0b6b3a7640000810281670de0b6b3a764000082051861124057905061034051801561124057808205600160ff1b8314155f1983141517156112405790509050610400526103a051156110a6576103c051611021575f81525061123e566110a6565b610400516103a051670de0b6b3a7640000810281670de0b6b3a76400008204186112405790506103c05180156112405780820490509050670de0b6b3a7640000810281670de0b6b3a764000082041861124057905061036051801561124057808204905090508060ff1c611240578082038281135f8312186112405790509050610400525b600154610400516040526110bb610440610803565b61044051683635c9adc5dea00000818118683635c9adc5dea000008310021890508082028115838383041417156112405790509050670de0b6b3a7640000810490506104205260206112865f395f5163602b62d4610460526102e051610480526020610460602461047c845afa611134573d5f5f3e3d5ffd5b60203d1061124057610460905051610440526104405115611236576103e051670de0b6b3a7640000810281670de0b6b3a76400008204186112405790506104405180156112405780820490509050670de05bc096e9c000818118670de05bc096e9c00083100218905061046052610420516104605180670de0b6b3a764000003670de0b6b3a76400008111611240579050801561124057806e13426172c74d822b878fe80000000004905080670c7d713b49da000001670c7d713b49da000081106112405790508082028115838383041417156112405790509050670de0b6b3a764000081049050640a3c2abcef818118640a3c2abcef831002189050610420525b610420518152505b565b5f80fd079507ff0481070f051307ff0071035202d20091028607ff00510018054607ff0598841912668118221840a16576797065728300030a001600000000000000000000000040907540d8a6c65c637785e8f8b742ae6b0b996800000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc000000000000000000000000aa346781ddd7009caa644a4980f044c50cd2ae22000000000000000000000000e7cd2b4eb1d98cd6a4a48b6071d46401ac7dc5c80000000000000000000000006b765d07cf966c745b340adca67749fe75b5c3450000000000000000000000001ef89ed0edd93d1ec09e4c07373f69c49f4dccae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cfe7d53e00000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000016345785d8a0000

Deployed Bytecode

0x5f3560e01c60026011820660011b61124401601e395f51565b63f851a44081186100335734611240575f5460405260206040f35b63e91f2f4c81186107ff573461124057336104a0526100d2566107ff565b6393c19e1881186107ff57346112405760015460405260206040f36107ff565b63afdf31cd81186107ff57346112405760025460405260206040f36107ff565b63a155b53a81186100ad57346112405760035460405260206040f35b63bdb09f2e81186107ff57602436103417611240576004358060a01c611240576104a0525b6103ed546104c05260206112865f395f516312397fa1610500526020610500600461051c845afa610105573d5f5f3e3d5ffd5b60203d10611240576105009050516104e0526104c0516104e05111156101d0576104e0516103ed555f61c350905b806105005260206112865f395f5163e94b0dd2610520526104c051610540526020610520602461053c845afa61016b573d5f5f3e3d5ffd5b60203d1061124057610520518060a01c61124057610560526105609050516104c05161c34f8111611240576103ee01556104c051600181018181106112405790506104c0526104e0516104c051106101c2576101cd565b600101818118610133575b50505b604036610500376104a0516040526101e9610540610ab9565b610540805161050052602081015161052052505f6040526105005160605261020f610c8a565b6104a05160405261052051606052610225610c8a565b60206104a0516102e05260206112665f395f5163ceb7f759610540526020610540600461055c5f855af161025b573d5f5f3e3d5ffd5b60203d1061124057610540905051610300525f6103205261027d610580610ece565b610580f36107ff565b63f623513881186102b457602436103417611240576004356103e88111611240576004015460405260206040f35b632c4e722e81186107ff573461124057336104a052610734566107ff565b630a19399a81186102f0573461124057602061126660403960206040f35b63e9333fab81186107ff57602436103417611240576004358060a01c611240576040525f543318611240576040515f557f5a272403b402d892977df56625f4164ccaf70ca3863991c43ecfe76a6905b0a160405160605260206060a1006107ff565b63a38d1b218118610370573461124057602061128660403960206040f35b630eb57e3c81186107ff57602436103417611240576004358060a01c611240576040525f5433186112405760405115611240575f6103e8905b806060526060516103e8811161124057600401546080526040516080511861042757600d60a0527f416c72656164792061646465640000000000000000000000000000000000000060c05260a05060a0518060c001601f825f031636823750506308c379a06060526020608052601f19601f60a0510116604401607cfd5b60805161046e576040516060516103e8811161124057600401556040517ff395c3706a8194522b942d1992143a7b60a92a83f99ec30e3833c7630e3c13315f60a0a2610479565b6001018181186103a9575b5050006107ff565b631d741825811861049e5734611240576103ed5460405260206040f35b63bc8f105081186107ff57602436103417611240575f54331861124057655af3107a40006004351261124057670de0b6b3a764000060043513611240576004356002557fdd7b7d5ad5206db1e2995b71e974a52e324ffefe428b26c79f323b814de1d15560043560405260206040a1006107ff565b63e94b0dd281186107ff576024361034176112405760043561c34f8111611240576103ee015460405260206040f36107ff565b635db441ed81186107ff57602436103417611240576004358060a01c6112405760405261c73e6040516020525f5260405f2080546060526001810154608052600281015460a0525060606060f36107ff565b6355aab44a81186106ac57602436103417611240576004358060a01c611240576040525f543318611240576127106060525f6103e9905b806080526080516103e88111611240576004015460a05260405160a05118610620576080516060526040517f52182c3057b74a074adcacf89ba9ff9860a1265c89cfecd998a111e06bc802675f60c0a25b60a05161069d5760805160605110156106a85760805160018103818111611240579050606051101561067a57608051600181038181116112405790506103e8811161124057600401546060516103e8811161124057600401555b5f608051600181038181116112405790506103e8811161124057600401556106a8565b6001018181186105cf575b5050005b63d4387a9981186107ff57602436103417611240575f54331861124057640a3c2abcef60043511611240576004356001557f2640b4015d3473fd09bf2b30939e17deb4068cdacf3892136e737e166ceb321060043560405260206040a1006107ff565b630ba9d8ca81186107ff57602436103417611240576004358060a01c611240576104a0525b60206104a0516102e05260206112665f395f5163a035b1fe6104c05260206104c060046104dc845afa610769573d5f5f3e3d5ffd5b60203d10611240576104c09050516103005260016103205261078c610500610ece565b610500f36107ff565b63c18b939681186107ff57602436103417611240575f54331861124057670de0b6b3a7640000600435116112405760043515611240576004356003557f282d6b198c8375838e9528471dafbdbbee8d421fb7fa793395872d42da32fa2b60043560405260206040a1005b5f5ffd5b7ffffffffffffffffffffffffffffffffffffffffffffffffdc0d0570925a4668060405113610835575f815250610ab7565b680755bf798b4a1bf1e56040511261085957683635c9adc5dea00000815250610ab7565b670de0b6b3a764000060405160601b056060526c010000000000000000000000006b8000000000000000000000006bb17217f7d1cf79abc9e3b39860605160601b0501056080526bb17217f7d1cf79abc9e3b39860805102606051036060526c10fe68e7fd37d0007b713f76506060510160a0526d02d16720577bd19bf614176fe9ea6c0100000000000000000000000060605160a05102050160a0526d04a4fd9f2a8b96949216d2255a6c60605160a051010360c0526e0587f503bb6ea29d25fcb7401964506c0100000000000000000000000060a05160c05102050160c05279d835ebba824c98fb31b83b2ca45c00000000000000000000000060605160c051020160c0526060516c240c330e9fb2d9cbaf0fd5aafc810381811361124057905060e0526d0277594991cfc85f6e2461837cd96c0100000000000000000000000060605160e05102050160e0526d1a521255e34f6a5061b25ef1c9c46c0100000000000000000000000060605160e05102050360e0526db1bbb201f443cf962f1a1d3db4a56c0100000000000000000000000060605160e05102050160e0526e02c72388d9f74f51a9331fed693f156c0100000000000000000000000060605160e05102050360e0526e05180bb14799ab47a8a8cb2a527d576c0100000000000000000000000060605160e05102050160e05274029d9dc38563c32e5c2f6dc192ee70ef65f9978af360e05160c051055f8112611240570260c3608051037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811315610aa95781811b610aaf565b81815f031c5b905090508152505b565b6103ed546060526040366080375f61c350905b8060c05260605160c05110610ae057610bb0565b60c05161c34f8111611240576103ee015460e0526040366101003760e0515a6004610160527f31dc3ca800000000000000000000000000000000000000000000000000000000610180526101605060206101c0610160516101808585fa90509050610100523d602081183d60201002186101a0526101a080516101205260208101516101405250610140516101205160200360031b1c6101605260805161016051808201828110611240579050905060805260405160e05118610ba5576101605160a0525b600101818118610acc575b5050608051815260a051602082015250565b5f60605261c73e6040516020525f5260405f208054608052600181015460a052600281015460c0525060c05161a8c08104905061a8c081028161a8c082041861124057905061a8c081018181106112405790504210610c585760c05161a8c08104905061a8c081028161a8c0820418611240579050620151808101818110611240579050421015610c825760a051606052610c82565b60805115610c7b5760805160a05180828118828410021890509050606052610c82565b60a0516060525b606051815250565b61c73e6040516020525f5260405f208054608052600181015460a052600281015460c0525060c051610cbf5760605115610cc1565b5f5b15610ccb57610d90565b60c05161a8c08104905061a8c081028161a8c082041861124057905061a8c08101818110611240579050421015610d175760a0516060518082811882841002189050905060a052610d66565b60c05161a8c08104905061a8c081028161a8c08204186112405790506201518081018181106112405790504210610d595760605160805260605160a052610d66565b60a05160805260605160a0525b4260c05261c73e6040516020525f5260405f20608051815560a051600182015560c0516002820155505b565b5f604052610da1610240610bc2565b61024051610220526101e051604052610dbb610260610bc2565b61026051610240526040366102603761020051610e375761022051610de1576001610de7565b61024051155b15610ebc576101e051604052610dfe6102a0610ab9565b6102a08051610260526020810151610280525061022051610e225761026051610220525b61024051610ebc576102805161024052610ebc565b6101e051604052610e496102a0610ab9565b6102a0805161026052602081015161028052506102205115610e835761022051610260518082811882841002189050905061022052610e8c565b61026051610220525b6102405115610eb35761024051610280518082811882841002189050905061024052610ebc565b61028051610240525b61022051815261024051602082015250565b6002546103405260035461036052610300518060ff1c61124057610380525f6103a0525f6103e9905b80600401546103c0526103c051610f0d57610f62565b6103a0516103c051630dca59c16103e05260206103e060046103fc845afa610f37573d5f5f3e3d5ffd5b60203d10611240576103e090505180820182811061124057905090506103a052600101818118610ef7575b50506040366103c0376102e0516101e0526103205161020052610f86610400610d92565b61040080516103c05260208101516103e052506103805180670de0b6b3a764000003670de0b6b3a764000081135f831218611240579050670de0b6b3a7640000810281670de0b6b3a764000082051861124057905061034051801561124057808205600160ff1b8314155f1983141517156112405790509050610400526103a051156110a6576103c051611021575f81525061123e566110a6565b610400516103a051670de0b6b3a7640000810281670de0b6b3a76400008204186112405790506103c05180156112405780820490509050670de0b6b3a7640000810281670de0b6b3a764000082041861124057905061036051801561124057808204905090508060ff1c611240578082038281135f8312186112405790509050610400525b600154610400516040526110bb610440610803565b61044051683635c9adc5dea00000818118683635c9adc5dea000008310021890508082028115838383041417156112405790509050670de0b6b3a7640000810490506104205260206112865f395f5163602b62d4610460526102e051610480526020610460602461047c845afa611134573d5f5f3e3d5ffd5b60203d1061124057610460905051610440526104405115611236576103e051670de0b6b3a7640000810281670de0b6b3a76400008204186112405790506104405180156112405780820490509050670de05bc096e9c000818118670de05bc096e9c00083100218905061046052610420516104605180670de0b6b3a764000003670de0b6b3a76400008111611240579050801561124057806e13426172c74d822b878fe80000000004905080670c7d713b49da000001670c7d713b49da000081106112405790508082028115838383041417156112405790509050670de0b6b3a764000081049050640a3c2abcef818118640a3c2abcef831002189050610420525b610420518152505b565b5f80fd079507ff0481070f051307ff0071035202d20091028607ff00510018054607ff059800000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000040907540d8a6c65c637785e8f8b742ae6b0b996800000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc000000000000000000000000aa346781ddd7009caa644a4980f044c50cd2ae22000000000000000000000000e7cd2b4eb1d98cd6a4a48b6071d46401ac7dc5c80000000000000000000000006b765d07cf966c745b340adca67749fe75b5c3450000000000000000000000001ef89ed0edd93d1ec09e4c07373f69c49f4dccae000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cfe7d53e00000000000000000000000000000000000000000000000000470de4df820000000000000000000000000000000000000000000000000000016345785d8a0000

-----Decoded View---------------
Arg [0] : admin (address): 0x40907540d8a6C65c637785e8f8B742ae6b0b9968
Arg [1] : price_oracle (address): 0x18672b1b0c623a30089A280Ed9256379fb0E4E62
Arg [2] : controller_factory (address): 0xC9332fdCB1C491Dcc683bAe86Fe3cb70360738BC
Arg [3] : peg_keepers (address[5]): 0xaA346781dDD7009caa644A4980f044C50cD2ae22,0xE7cd2b4EB1d98CD6a4A48B6071D46401Ac7DC5C8,0x6B765d07cf966c745B340AdCa67749fE75B5c345,0x1ef89Ed0eDd93D1EC09E4c07373f69C49f4dcCae,0x0000000000000000000000000000000000000000
Arg [4] : rate (uint256): 3488077118
Arg [5] : sigma (int256): 20000000000000000
Arg [6] : target_debt_fraction (uint256): 100000000000000000

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000040907540d8a6c65c637785e8f8b742ae6b0b9968
Arg [1] : 00000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62
Arg [2] : 000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc
Arg [3] : 000000000000000000000000aa346781ddd7009caa644a4980f044c50cd2ae22
Arg [4] : 000000000000000000000000e7cd2b4eb1d98cd6a4a48b6071d46401ac7dc5c8
Arg [5] : 0000000000000000000000006b765d07cf966c745b340adca67749fe75b5c345
Arg [6] : 0000000000000000000000001ef89ed0edd93d1ec09e4c07373f69c49f4dccae
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 00000000000000000000000000000000000000000000000000000000cfe7d53e
Arg [9] : 00000000000000000000000000000000000000000000000000470de4df820000
Arg [10] : 000000000000000000000000000000000000000000000000016345785d8a0000


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.