Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 11 from a total of 11 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Rate_write | 24177435 | 31 days ago | IN | 0 ETH | 0.00004875 | ||||
| Rate_write | 24177414 | 31 days ago | IN | 0 ETH | 0.00006366 | ||||
| Rate_write | 24177188 | 31 days ago | IN | 0 ETH | 0.00007158 | ||||
| Rate_write | 24177187 | 31 days ago | IN | 0 ETH | 0.0000749 | ||||
| Rate_write | 24177182 | 31 days ago | IN | 0 ETH | 0.00004768 | ||||
| Rate_write | 24177180 | 31 days ago | IN | 0 ETH | 0.00006845 | ||||
| Rate_write | 19048274 | 749 days ago | IN | 0 ETH | 0.00471378 | ||||
| Rate_write | 19048231 | 749 days ago | IN | 0 ETH | 0.00474577 | ||||
| Rate_write | 19048230 | 749 days ago | IN | 0 ETH | 0.00547782 | ||||
| Rate_write | 19048229 | 749 days ago | IN | 0 ETH | 0.00575782 | ||||
| Rate_write | 19048228 | 749 days ago | IN | 0 ETH | 0.00896307 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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
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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]}]}]Contract Creation Code
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
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.