ETH Price: $3,446.69 (+3.45%)

Contract

0x2fBa208E1B2106d40DaA472Cb7AE0c6C7EFc0224
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Redeem186608622023-11-27 5:20:47417 days ago1701062447IN
0x2fBa208E...C7EFc0224
0.04154625 ETH0.0036728220.57152968
Redeem186596772023-11-27 1:21:23417 days ago1701048083IN
0x2fBa208E...C7EFc0224
0.02391465 ETH0.0049887427.11789891
Redeem186528002023-11-26 2:14:23418 days ago1700964863IN
0x2fBa208E...C7EFc0224
0.06558036 ETH0.0035282319.69246117
Redeem186526092023-11-26 1:34:35418 days ago1700962475IN
0x2fBa208E...C7EFc0224
0.0259746 ETH0.0059338832.3656491
Redeem186452442023-11-25 0:49:59419 days ago1700873399IN
0x2fBa208E...C7EFc0224
0.00751568 ETH0.0039294223.50235108
Redeem186451012023-11-25 0:21:23419 days ago1700871683IN
0x2fBa208E...C7EFc0224
0.05444777 ETH0.0062496335
Redeem186385742023-11-24 2:24:35420 days ago1700792675IN
0x2fBa208E...C7EFc0224
0.01084271 ETH0.0036864620.57441911
Redeem186240942023-11-22 1:44:47422 days ago1700617487IN
0x2fBa208E...C7EFc0224
0.03052693 ETH0.0070914839.86824964
Redeem185980372023-11-18 10:09:23426 days ago1700302163IN
0x2fBa208E...C7EFc0224
0.01031025 ETH0.0028547317.61890221
Redeem185968582023-11-18 6:09:11426 days ago1700287751IN
0x2fBa208E...C7EFc0224
0.19486992 ETH0.0031222919.26875817
Redeem185908942023-11-17 10:06:35427 days ago1700215595IN
0x2fBa208E...C7EFc0224
0.11536811 ETH0.0051764831.94786916
Redeem185907512023-11-17 9:37:35427 days ago1700213855IN
0x2fBa208E...C7EFc0224
1.25803911 ETH0.0043146526.05513176
Redeem185898312023-11-17 6:31:23427 days ago1700202683IN
0x2fBa208E...C7EFc0224
0.21092754 ETH0.0035777719.96649444
Redeem185896602023-11-17 5:56:23427 days ago1700200583IN
0x2fBa208E...C7EFc0224
0.07708792 ETH0.0033808918.43967379
Redeem185880112023-11-17 0:26:11427 days ago1700180771IN
0x2fBa208E...C7EFc0224
0.20108651 ETH0.0039071621.23584022
Redeem185855062023-11-16 16:00:59427 days ago1700150459IN
0x2fBa208E...C7EFc0224
0.19966753 ETH0.0090691350.62962666
Redeem185843212023-11-16 12:03:11428 days ago1700136191IN
0x2fBa208E...C7EFc0224
0.20493628 ETH0.0073959241.43350099
Redeem185836692023-11-16 9:51:59428 days ago1700128319IN
0x2fBa208E...C7EFc0224
0.26976664 ETH0.0041569923.19894916
Redeem185826102023-11-16 6:19:23428 days ago1700115563IN
0x2fBa208E...C7EFc0224
0.04311514 ETH0.0036364722.08072338
Redeem185694792023-11-14 10:14:47430 days ago1699956887IN
0x2fBa208E...C7EFc0224
0.12744171 ETH0.0050117931.1684707
Redeem185680372023-11-14 5:25:23430 days ago1699939523IN
0x2fBa208E...C7EFc0224
0.32575088 ETH0.0040104921.80339089
Redeem185677662023-11-14 4:30:47430 days ago1699936247IN
0x2fBa208E...C7EFc0224
0.01581233 ETH0.0038219323.58246221
Redeem185648032023-11-13 18:35:47430 days ago1699900547IN
0x2fBa208E...C7EFc0224
0.0001452 ETH0.0096815654.04075606
Redeem185622762023-11-13 10:06:11431 days ago1699869971IN
0x2fBa208E...C7EFc0224
0.66902056 ETH0.0069244241.49667998
Redeem185238262023-11-08 1:01:23436 days ago1699405283IN
0x2fBa208E...C7EFc0224
0.00218456 ETH0.0035156321.69572001
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
186608622023-11-27 5:20:47417 days ago1701062447
0x2fBa208E...C7EFc0224
0.04154625 ETH
186596772023-11-27 1:21:23417 days ago1701048083
0x2fBa208E...C7EFc0224
0.02391465 ETH
186528002023-11-26 2:14:23418 days ago1700964863
0x2fBa208E...C7EFc0224
0.06558036 ETH
186526092023-11-26 1:34:35418 days ago1700962475
0x2fBa208E...C7EFc0224
0.0259746 ETH
186452442023-11-25 0:49:59419 days ago1700873399
0x2fBa208E...C7EFc0224
0.00751568 ETH
186451012023-11-25 0:21:23419 days ago1700871683
0x2fBa208E...C7EFc0224
0.05444777 ETH
186385742023-11-24 2:24:35420 days ago1700792675
0x2fBa208E...C7EFc0224
0.01084271 ETH
186240942023-11-22 1:44:47422 days ago1700617487
0x2fBa208E...C7EFc0224
0.03052693 ETH
185980372023-11-18 10:09:23426 days ago1700302163
0x2fBa208E...C7EFc0224
0.01031025 ETH
185968582023-11-18 6:09:11426 days ago1700287751
0x2fBa208E...C7EFc0224
0.19486992 ETH
185908942023-11-17 10:06:35427 days ago1700215595
0x2fBa208E...C7EFc0224
0.11536811 ETH
185907512023-11-17 9:37:35427 days ago1700213855
0x2fBa208E...C7EFc0224
1.25803911 ETH
185898312023-11-17 6:31:23427 days ago1700202683
0x2fBa208E...C7EFc0224
0.21092754 ETH
185896602023-11-17 5:56:23427 days ago1700200583
0x2fBa208E...C7EFc0224
0.07708792 ETH
185880112023-11-17 0:26:11427 days ago1700180771
0x2fBa208E...C7EFc0224
0.20108651 ETH
185855062023-11-16 16:00:59427 days ago1700150459
0x2fBa208E...C7EFc0224
0.19966753 ETH
185843212023-11-16 12:03:11428 days ago1700136191
0x2fBa208E...C7EFc0224
0.20493628 ETH
185836692023-11-16 9:51:59428 days ago1700128319
0x2fBa208E...C7EFc0224
0.26976664 ETH
185826102023-11-16 6:19:23428 days ago1700115563
0x2fBa208E...C7EFc0224
0.04311514 ETH
185797122023-11-15 20:36:47428 days ago1700080607
0x2fBa208E...C7EFc0224
0.12186695 ETH
185797122023-11-15 20:36:47428 days ago1700080607
0x2fBa208E...C7EFc0224
0.12186695 ETH
185694792023-11-14 10:14:47430 days ago1699956887
0x2fBa208E...C7EFc0224
0.12744171 ETH
185680372023-11-14 5:25:23430 days ago1699939523
0x2fBa208E...C7EFc0224
0.32575088 ETH
185677662023-11-14 4:30:47430 days ago1699936247
0x2fBa208E...C7EFc0224
0.01581233 ETH
185648032023-11-13 18:35:47430 days ago1699900547
0x2fBa208E...C7EFc0224
0.0001452 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.7

Optimization Enabled:
N/A

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Vyper language format)

# @version 0.3.7

from vyper.interfaces import ERC20

interface AggregatorV3Interface:
    def latestRoundData() -> (uint80, int256, uint256, uint256, uint80): view

interface IDYFI:
    def burn(owner: address, amount: uint256): nonpayable

interface CurvePoolInterface:
    def price_oracle() -> uint256: view

UNIT: constant(uint256) = 10**18
SLIPPAGE_TOLERANCE: constant(uint256) = 3
SLIPPAGE_DENOMINATOR: constant(uint256) = 1000

DYFI: immutable(IDYFI)
YFI: immutable(ERC20)
VEYFI: immutable(ERC20)
CURVE_POOL: immutable(CurvePoolInterface)
PRICE_FEED: immutable(AggregatorV3Interface)

# @dev Returns the address of the current owner.
owner: public(address)
# @dev Returns the address of the pending owner.
pending_owner: public(address)
# @dev when the contract is killed, redemptions aren't possible
killed: public(bool)
# @dev recipient of the ETH used for redemptions
payee: public(address)
# @dev scaling factor parameters packed into a single slot
packed_scaling_factor: uint256

# @dev Emitted when contract is killed
event Killed:
    yfi_recovered: uint256

event Sweep:
    token: indexed(address)
    amount: uint256

# @dev Emitted when the ownership transfer from
# `previous_owner` to `pending_owner` is initiated.
event PendingOwnershipTransfer:
    previous_owner: indexed(address)
    pending_owner: indexed(address)


# @dev Emitted when the ownership is transferred
# from `previous_owner` to `new_owner`.
event OwnershipTransferred:
    previous_owner: indexed(address)
    new_owner: indexed(address)

event SetPayee:
    payee: indexed(address)


MASK: constant(uint256) = 2**64 - 1

# powers of 10
E3: constant(int256)               = 1_000
E6: constant(int256)               = E3 * E3
E9: constant(int256)               = E3 * E6
E12: constant(int256)              = E3 * E9
E15: constant(int256)              = E3 * E12
E17: constant(int256)              = 100 * E15
E18: constant(int256)              = E3 * E15
E20: constant(int256)              = 100 * E18
MIN_NAT_EXP: constant(int256)      = -41 * E18
MAX_NAT_EXP: constant(int256)      = 130 * E18

# x_n = 2^(7-n), a_n = exp(x_n)
# in 20 decimals for n >= 2
X0: constant(int256)  = 128 * E18 # 18 decimals
A0: constant(int256)  = 38_877_084_059_945_950_922_200 * E15 * E18 # no decimals
X1: constant(int256)  = X0 / 2 # 18 decimals
A1: constant(int256)  = 6_235_149_080_811_616_882_910 * E6 # no decimals
X2: constant(int256)  = X1 * 100 / 2
A2: constant(int256)  = 7_896_296_018_268_069_516_100 * E12
X3: constant(int256)  = X2 / 2
A3: constant(int256)  = 888_611_052_050_787_263_676 * E6
X4: constant(int256)  = X3 / 2
A4: constant(int256)  = 298_095_798_704_172_827_474 * E3
X5: constant(int256)  = X4 / 2
A5: constant(int256)  = 5_459_815_003_314_423_907_810
X6: constant(int256)  = X5 / 2
A6: constant(int256)  = 738_905_609_893_065_022_723
X7: constant(int256)  = X6 / 2
A7: constant(int256)  = 271_828_182_845_904_523_536
X8: constant(int256)  = X7 / 2
A8: constant(int256)  = 164_872_127_070_012_814_685
X9: constant(int256)  = X8 / 2
A9: constant(int256)  = 128_402_541_668_774_148_407
X10: constant(int256) = X9 / 2
A10: constant(int256) = 11_331_4845_306_682_631_683
X11: constant(int256) = X10 / 2
A11: constant(int256) = 1_064_49_445_891_785_942_956

@external
def __init__(
    yfi: address, d_yfi: address, ve_yfi: address, owner: address, 
    price_feed: address, curve_pool: address, scaling_factor: uint256,
):
    assert scaling_factor >= UNIT and scaling_factor <= 12 * UNIT
    YFI = ERC20(yfi)
    DYFI = IDYFI(d_yfi)
    VEYFI = ERC20(ve_yfi)
    PRICE_FEED = AggregatorV3Interface(price_feed)
    CURVE_POOL = CurvePoolInterface(curve_pool)
    self._transfer_ownership(owner)
    self.payee = owner
    self.packed_scaling_factor = shift(scaling_factor, 128) | shift(scaling_factor, 192)


@payable
@external
def redeem(amount: uint256, recipient: address = msg.sender) -> uint256:
    """
    @notice Redeem your dYFI for YFI using ETH.
    @dev Redemption tolerates a 0.3% negative or positive slippage.
    @param amount amount of dYFI to spend
    @param recipient of the exercised YFI
    """
    self._check_killed()
    assert YFI.balanceOf(self) >= amount, "not enough YFI"
    eth_required: uint256 = self._eth_required(amount)
    assert eth_required > 0
    tolerance: uint256 = eth_required * SLIPPAGE_TOLERANCE / SLIPPAGE_DENOMINATOR
    if msg.value < (eth_required - tolerance) or msg.value > (eth_required + tolerance):
        raise "price out of tolerance"
    DYFI.burn(msg.sender, amount)
    raw_call(self.payee, b"", value=msg.value)
    YFI.transfer(recipient, amount)
    return amount


@external
@view
def discount() -> uint256:
    """
    @notice Get the current dYFI redemption discount
    @return Redemption discount (18 decimals)
    @dev 
        Discount formula is `1/(1 + 10 e^(4.7(s*x - 1)))`,
        with `x = veyfi supply / yfi supply`
    """
    return self._discount()


@internal
@view
def _discount() -> uint256:
    yfi_supply: uint256 = YFI.totalSupply()
    veyfi_supply: uint256 = VEYFI.totalSupply()
    x: int256 = convert(veyfi_supply * UNIT / yfi_supply, int256)
    x = self._exp(47 * (self._scaling_factor()[0] * x / E18 - E18) / 10)
    return convert(E18 * E18 / (E18 + 10 * x), uint256)


@external
@view
def eth_required(amount: uint256) -> uint256:
    """
    @notice Estimate the required amount of ETH to redeem the amount of dYFI for YFI
    @param amount Amount of dYFI
    @return Amount of ETH required
    """
    return self._eth_required(amount)


@internal
@view
def _eth_required(amount: uint256) -> uint256:
    return amount * self._get_latest_price() / UNIT * (UNIT - self._discount()) / UNIT


@external
@view
def get_latest_price() -> uint256:
    """
    @notice Get the latest price of YFI in ETH
    @return Price of YFI in ETH (18 decimals)
    """
    return self._get_latest_price()


@internal
@view
def _get_latest_price() -> uint256:
    oracle_price: uint256 = convert(self._get_oracle_price(), uint256)
    pool_price: uint256 = CURVE_POOL.price_oracle()
    if pool_price < oracle_price:
        return oracle_price
    return pool_price


@internal
@view
def _get_oracle_price() -> int256:
    round_id: uint80 = 0
    price: int256 = 0
    started_at: uint256 = 0
    updated_at: uint256 = 0
    answered_in_round: uint80 = 0
    (round_id, price, started_at, updated_at, answered_in_round) = PRICE_FEED.latestRoundData()
    assert updated_at + 3600 > block.timestamp, "price too old"
    return price


@external
@view
def scaling_factor() -> uint256:
    """
    @notice Get the current discount curve scaling factor
    @return Scaling factor (18 decimals)
    """
    return convert(self._scaling_factor()[0], uint256)

@external
@view
def scaling_factor_ramp() -> (uint256, uint256, uint256, uint256):
    """
    @notice Get the current discount curve scaling factor ramp parameters
    @return Tuple of ramp start timestamp, ramp end timestamp, ramp start scaling factor, ramp end scaling factor
    """
    ramp_start: uint256 = 0
    ramp_end: uint256 = 0
    old: int256 = 0
    new: int256 = 0
    ramp_start, ramp_end, old, new = self._unpack_scaling_factor(self.packed_scaling_factor)
    return ramp_start, ramp_end, convert(old, uint256), convert(new, uint256)


@internal
@view
def _scaling_factor() -> (int256, bool):
    ramp_start: uint256 = 0
    ramp_end: uint256 = 0
    old: int256 = 0
    new: int256 = 0
    ramp_start, ramp_end, old, new = self._unpack_scaling_factor(self.packed_scaling_factor)
    if ramp_end <= block.timestamp:
        return new, False
    if ramp_start > block.timestamp:
        return old, False
    
    duration: int256 = convert(ramp_end - ramp_start, int256)
    time: int256 = convert(block.timestamp - ramp_start, int256)
    return old + (new - old) * time / duration, True


@external
def set_payee(new_payee: address):
    """
    @dev set the payee of the ETH used for redemptions
    @param new_payee the new payee
    """
    self._check_owner()
    assert new_payee != empty(address)
    self.payee = new_payee
    log SetPayee(new_payee)


@external
def start_ramp(new: uint256, duration: uint256 = 604_800, start: uint256 = block.timestamp):
    """
    @notice Start ramping of scaling factor
    @param new New scaling factor (18 decimals)
    @param duration Ramp duration (seconds)
    @param start Ramp start timestamp
    """
    self._check_owner()
    assert new >= UNIT and new <= 12 * UNIT
    assert start >= block.timestamp
    scaling_factor: int256 = 0
    active: bool = False
    scaling_factor, active = self._scaling_factor()
    assert not active
    self.packed_scaling_factor = self._pack_scaling_factor(
        start, start + duration, scaling_factor, convert(new, int256)
    )

@external
def stop_ramp():
    """
    @notice Stop a currently active ramp
    """
    self._check_owner()
    scaling_factor: int256 = 0
    active: bool = False
    scaling_factor, active = self._scaling_factor()
    assert active
    self.packed_scaling_factor = self._pack_scaling_factor(0, 0, scaling_factor, scaling_factor)


@external
def kill():
    """
    @dev stop the contract from being used and reclaim YFI
    """
    self._check_killed()
    self._check_owner()
    self.killed = True
    yfi_balance: uint256 = YFI.balanceOf(self)
    YFI.transfer(self.owner, yfi_balance)

    log Killed(yfi_balance)

@internal
def _check_killed():
    """
    @dev Throws if contract was killed
    """
    assert self.killed == False, "killed"

@external
def sweep(token: address) -> uint256:
    assert self.killed or token != YFI.address, "protected token"
    self._check_owner()
    amount: uint256 = 0
    if token == empty(address):
        amount = self.balance
        raw_call(self.owner, b"", value=amount)
    else:
        amount = ERC20(token).balanceOf(self)
        assert ERC20(token).transfer(self.owner, amount, default_return_value=True)
    log Sweep(token, amount)
    return amount


### Ownable2Step ###
@external
def transfer_ownership(new_owner: address):
    """
    @dev Starts the ownership transfer of the contract
         to a new account `new_owner`.
    @notice Note that this function can only be
            called by the current `owner`. Also, there is
            no security risk in setting `new_owner` to the
            zero address as the default value of `pending_owner`
            is in fact already the zero address and the zero
            address cannot call `accept_ownership`. Eventually,
            the function replaces the pending transfer if
            there is one.
    @param new_owner The 20-byte address of the new owner.
    """
    self._check_owner()
    self.pending_owner = new_owner
    log PendingOwnershipTransfer(self.owner, new_owner)


@external
def accept_ownership():
    """
    @dev The new owner accepts the ownership transfer.
    @notice Note that this function can only be
            called by the current `pending_owner`.
    """
    assert self.pending_owner == msg.sender, "Ownable2Step: caller is not the new owner"
    self._transfer_ownership(msg.sender)


@internal
def _check_owner():
    """
    @dev Throws if the sender is not the owner.
    """
    assert msg.sender == self.owner, "Ownable2Step: caller is not the owner"


@internal
def _transfer_ownership(new_owner: address):
    """
    @dev Transfers the ownership of the contract
         to a new account `new_owner` and deletes
         any pending owner.
    @notice This is an `internal` function without
            access restriction.
    @param new_owner The 20-byte address of the new owner.
    """
    self.pending_owner = empty(address)
    old_owner: address = self.owner
    self.owner = new_owner
    log OwnershipTransferred(old_owner, new_owner)


@internal
@pure
def _pack_scaling_factor(_ramp_start: uint256, _ramp_end: uint256, _old: int256, _new: int256) -> uint256:
    assert _ramp_start <= MASK and _ramp_end <= MASK
    assert _old <= convert(MASK, int256) and _new > 0 and _new <= convert(MASK, int256)
    return _ramp_start | shift(_ramp_end, 64) | \
        shift(convert(_old, uint256), 128) | shift(convert(_new, uint256), 192)

@internal
@pure
def _unpack_scaling_factor(_packed: uint256) -> (uint256, uint256, int256, int256):
    return _packed & MASK, shift(_packed, -64) & MASK, \
        convert(shift(_packed, -128) & MASK, int256), convert(shift(_packed, -192), int256)

# From https://github.com/yearn/yETH/blob/main/contracts/Pool.vy, based on Balancer code

@internal
@pure
def _exp(_x: int256) -> int256:
    """
    @notice Calculate natural exponent `e^x`
    @param _x Exponent (18 decimals)
    @return Natural exponent in 18 decimals
    """
    assert _x >= MIN_NAT_EXP and _x <= MAX_NAT_EXP
    if _x < 0:
        # exp(-x) = 1/exp(x)
        return unsafe_mul(E18, E18) / self.__exp(-_x)
    return self.__exp(_x)

@internal
@pure
def __exp(_x: int256) -> int256:
    """
    @notice Calculate natural exponent `e^x`, assuming exponent is positive
    @param _x Exponent (18 decimals)
    @return Natural exponent in 18 decimals
    @dev Caller should perform bounds checks before calling this function
    """
    
    # e^x = e^(sum(k_n x_n) + rem)
    #     = product(e^(k_n x_n)) * e^(rem)
    #     = product(a_n^k_n) * e^(rem)
    # k_n = {0,1}, x_n = 2^(7-n), a_n = exp(x_n)
    x: int256 = _x

    # subtract out x_ns
    f: int256 = 1
    if x >= X0:
        x = unsafe_sub(x, X0)
        f = A0
    elif x >= X1:
        x = unsafe_sub(x, X1)
        f = A1

    # other terms are in 20 decimals
    x = unsafe_mul(x, 100)

    p: int256 = E20
    if x >= X2:
        x = unsafe_sub(x, X2)
        p = unsafe_div(unsafe_mul(p, A2), E20) # p * A2 / E20
    if x >= X3:
        x = unsafe_sub(x, X3)
        p = unsafe_div(unsafe_mul(p, A3), E20)
    if x >= X4:
        x = unsafe_sub(x, X4)
        p = unsafe_div(unsafe_mul(p, A4), E20)
    if x >= X5:
        x = unsafe_sub(x, X5)
        p = unsafe_div(unsafe_mul(p, A5), E20)
    if x >= X6:
        x = unsafe_sub(x, X6)
        p = unsafe_div(unsafe_mul(p, A6), E20)
    if x >= X7:
        x = unsafe_sub(x, X7)
        p = unsafe_div(unsafe_mul(p, A7), E20)
    if x >= X8:
        x = unsafe_sub(x, X8)
        p = unsafe_div(unsafe_mul(p, A8), E20)
    if x >= X9:
        x = unsafe_sub(x, X9)
        p = unsafe_div(unsafe_mul(p, A9), E20)
    
    # x < X9 (0.25), taylor series for remainder
    # c = e^x = sum(x^n / n!)
    n: int256 = x
    c: int256 = unsafe_add(E20, x)

    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 2) # n * x / E20 / 2
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 3)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 4)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 5)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 6)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 7)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 8)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 9)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 10)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 11)
    c = unsafe_add(c, n)
    n = unsafe_div(unsafe_div(unsafe_mul(n, x), E20), 12)
    c = unsafe_add(c, n)

    # p * c / E20 * f / 100
    return unsafe_div(unsafe_mul(unsafe_div(unsafe_mul(p, c), E20), f), 100)

Contract Security Audit

Contract ABI

[{"name":"Killed","inputs":[{"name":"yfi_recovered","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"Sweep","inputs":[{"name":"token","type":"address","indexed":true},{"name":"amount","type":"uint256","indexed":false}],"anonymous":false,"type":"event"},{"name":"PendingOwnershipTransfer","inputs":[{"name":"previous_owner","type":"address","indexed":true},{"name":"pending_owner","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"OwnershipTransferred","inputs":[{"name":"previous_owner","type":"address","indexed":true},{"name":"new_owner","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"name":"SetPayee","inputs":[{"name":"payee","type":"address","indexed":true}],"anonymous":false,"type":"event"},{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"yfi","type":"address"},{"name":"d_yfi","type":"address"},{"name":"ve_yfi","type":"address"},{"name":"owner","type":"address"},{"name":"price_feed","type":"address"},{"name":"curve_pool","type":"address"},{"name":"scaling_factor","type":"uint256"}],"outputs":[]},{"stateMutability":"payable","type":"function","name":"redeem","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"payable","type":"function","name":"redeem","inputs":[{"name":"amount","type":"uint256"},{"name":"recipient","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"discount","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"eth_required","inputs":[{"name":"amount","type":"uint256"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"get_latest_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"scaling_factor","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"scaling_factor_ramp","inputs":[],"outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_payee","inputs":[{"name":"new_payee","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"},{"name":"duration","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"start_ramp","inputs":[{"name":"new","type":"uint256"},{"name":"duration","type":"uint256"},{"name":"start","type":"uint256"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"stop_ramp","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"kill","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"sweep","inputs":[{"name":"token","type":"address"}],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"transfer_ownership","inputs":[{"name":"new_owner","type":"address"}],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"accept_ownership","inputs":[],"outputs":[]},{"stateMutability":"view","type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"pending_owner","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"killed","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"payee","inputs":[],"outputs":[{"name":"","type":"address"}]}]

602061184a6000396000518060a01c61184557608052602061186a6000396000518060a01c6118455760a052602061188a6000396000518060a01c6118455760c05260206118aa6000396000518060a01c6118455760e05260206118ca6000396000518060a01c611845576101005260206118ea6000396000518060a01c61184557610120523461184557670de0b6b3a7640000602061190a60003960005110156100ab5760006100c2565b67a688906bd8b00000602061190a60003960005111155b15611845576080516116ee5260a0516116ce5260c05161170e526101005161174e526101205161172e5260e0516040526100fa611806565b60e051600355602061190a6000396000518060c01b9050602061190a6000396000518060801b9050176004556116ce6101386100003961176e610000f36003361161000c57610a23565b60003560e01c63db006a75811861002f57602436106116bc573361032052610052565b637bde82f281186102d157604436106116bc576024358060a01c6116bc57610320525b61005a611526565b60043560206116ee6000396000516370a082316103405230610360526020610340602461035c845afa610092573d600060003e3d6000fd5b60203d106116bc57610340905051101561010c57600e610380527f6e6f7420656e6f756768205946490000000000000000000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b6004356102c05261011e6103606114a1565b610360516103405261034051156116bc5761034051600381028160038204186116bc5790506103e8810490506103605261034051610360518082038281116116bc579050905034106101875761034051610360518082018281106116bc5790509050341161018a565b60015b156101f5576016610380527f7072696365206f7574206f6620746f6c6572616e6365000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b60206116ce600039600051639dc29fac61038052336103a0526004356103c052803b156116bc576000610380604461039c6000855af161023a573d600060003e3d6000fd5b506000610380526103805060006000610380516103a0346003545af1610265573d600060003e3d6000fd5b60206116ee60003960005163a9059cbb61038052610320516103a0526004356103c0526020610380604461039c6000855af16102a6573d600060003e3d6000fd5b60203d106116bc57610380518060011c6116bc576103e0526103e05050600435610380526020610380f35b346116bc57636b6f4a9d81186102fb57600436106116bc5760206102f661024061115b565b610240f35b63d127fe60811861032757602436106116bc5760206004356102c0526103226103206114a1565b610320f35b631a67245a811861034c57600436106116bc5760206103476102c0611420565b6102c0f35b63e90354ca811861038157600436106116bc5761036a610160610ac8565b61016051600081126116bc576101a05260206101a0f35b63951b930181186103fb57600436106116bc576080366060376004546040526103aa60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c0525060605160e0526080516101005260a051600081126116bc576101205260c051600081126116bc5761014052608060e0f35b63ec9b28f1811861045d57602436106116bc576004358060a01c6116bc5760a05261042461158d565b60a051156116bc5760a05160035560a0517fb35cb534021632242cdd9c586df6a75869880552d76afbabb674b6bd1f1b4f9f600060c0a2005b63561e5d0a811861048257602436106116bc5762093a806101605242610180526104c2565b63ec070a9d81186104a657604436106116bc576024356101605242610180526104c2565b63151357fc811861057757606436106116bc5760406024610160375b6104ca61158d565b670de0b6b3a764000060043510156104e35760006104f2565b67a688906bd8b0000060043511155b156116bc574261018051106116bc576040366101a0376105136101e0610ac8565b6101e080516101a05260208101516101c052506101c0516116bc576101805160405261018051610160518082018281106116bc57905090506060526101a0516080526004358060ff1c6116bc5760a05261056e6101e061161a565b6101e051600455005b636a6f101c81186105e857600436106116bc5761059261158d565b604036610160376105a46101a0610ac8565b6101a08051610160526020810151610180525061018051156116bc57604036604037610160516080526101605160a0526105df6101a061161a565b6101a051600455005b6341c0e1b581186106d757600436106116bc57610603611526565b61060b61158d565b600160025560206116ee6000396000516370a0823160c0523060e052602060c0602460dc845afa610641573d600060003e3d6000fd5b60203d106116bc5760c090505160a05260206116ee60003960005163a9059cbb60c05260005460e05260a05161010052602060c0604460dc6000855af161068d573d600060003e3d6000fd5b60203d106116bc5760c0518060011c6116bc576101205261012050507ff4a991ad9e7f9711696f7bd41529beb4c470d75788573535d4ca3f0857c79ce860a05160c052602060c0a1005b6301681a62811861089c57602436106116bc576004358060a01c6116bc5760a0526002546107145760206116ee60003960005160a0511415610717565b60015b61077857600f60c0527f70726f74656374656420746f6b656e000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b61078061158d565b600060c05260a0516107bd574760c052600060e05260e0506000600060e05161010060c0516000545af1610867573d600060003e3d6000fd610867565b60a0516370a0823160e0523061010052602060e0602460fc845afa6107e7573d600060003e3d6000fd5b60203d106116bc5760e090505160c05260a05163a9059cbb60e0526000546101005260c05161012052602060e0604460fc6000855af161082c573d600060003e3d6000fd5b3d61084357803b156116bc5760016101405261085b565b60203d106116bc5760e0518060011c6116bc57610140525b610140905051156116bc575b60a0517fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c7760c05160e052602060e0a2602060c0f35b63f0350c0481186108f957602436106116bc576004358060a01c6116bc5760a0526108c561158d565b60a05160015560a0516000547f23e1f881d1e797ea57a7247e53536f0bfc37c42e6645b3bdc4b1c9a0e0d8a133600060c0a3005b63a67c2dcb81186109a557600436106116bc573360015418156109975760296080527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060a0527f6e6577206f776e6572000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b336040526109a3610a29565b005b638da5cb5b81186109c457600436106116bc5760005460405260206040f35b637f4ec4c381186109e357600436106116bc5760015460405260206040f35b631f3a0e418118610a0257600436106116bc5760025460405260206040f35b63ae90b2138118610a2157600436106116bc5760035460405260206040f35b505b60006000fd5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b67ffffffffffffffff60405116815267ffffffffffffffff6040518060401c905016602082015267ffffffffffffffff6040518060801c9050168060ff1c6116bc5760408201526040518060c01c90508060ff1c6116bc57606082015250565b608036606037600454604052610ade60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c052504260805111610b195760c05181526000602082015250610bf6565b426060511115610b355760a05181526000602082015250610bf6565b6080516060518082038281116116bc57905090508060ff1c6116bc5760e052426060518082038281116116bc57905090508060ff1c6116bc576101005260a05160c05160a05180820382811360008312186116bc57905090506101005180820281191515600160ff1b84141517821584848405141716156116bc579050905060e05180156116bc57808205600160ff1b83141560001983141517156116bc579050905080820182811260008312186116bc5790509050815260016020820152505b565b60405160605260016080526806f05b59d3b20000006060511215610c4e576803782dace9d900000060605112610c7c576803782dace9d9000000606051036060526b1425982cf597cd205cef7380608052610c7c565b6806f05b59d3b200000060605103606052770195e54c5dd42177f53a27172fa9ec6302628270000000006080525b60646060510260605268056bc75e2d6310000060a05268ad78ebc5ac6200000060605112610cd85768ad78ebc5ac620000006060510360605268056bc75e2d631000006e01855144814a7ff805980ff008400060a051020560a0525b6856bc75e2d63100000060605112610d1b576856bc75e2d6310000006060510360605268056bc75e2d631000006b02df0ab5a80a22c61ab5a70060a051020560a0525b682b5e3af16b1880000060605112610d5c57682b5e3af16b188000006060510360605268056bc75e2d63100000693f1fce3da636ea5cf85060a051020560a0525b6815af1d78b58c40000060605112610d9d576815af1d78b58c4000006060510360605268056bc75e2d63100000690127fa27722cc06cc5e260a051020560a0525b680ad78ebc5ac620000060605112610ddd57680ad78ebc5ac62000006060510360605268056bc75e2d6310000068280e60114edb805d0360a051020560a0525b68056bc75e2d6310000060605112610e1d5768056bc75e2d631000006060510360605268056bc75e2d63100000680ebc5fb4174612111060a051020560a0525b6802b5e3af16b188000060605112610e5d576802b5e3af16b18800006060510360605268056bc75e2d631000006808f00f760a4b2db55d60a051020560a0525b68015af1d78b58c4000060605112610e9d5768015af1d78b58c400006060510360605268056bc75e2d631000006806f5f177578893793760a051020560a0525b60605160c05260605168056bc75e2d631000000160e052600268056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600368056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600468056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600568056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600668056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600768056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600868056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600968056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600a68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600b68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600c68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052606460805168056bc75e2d6310000060e05160a05102050205815250565b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000061010051121561107a57600061108b565b68070c1cc73b00c800006101005113155b156116bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100511361113f57610100517f800000000000000000000000000000000000000000000000000000000000000081146116bc576000036040526110f6610120610bf8565b6101205180156116bc57806ec097ce7bc90715b34b9f100000000005600160ff1b6ec097ce7bc90715b34b9f1000000000141560001983141517156116bc579050815250611159565b61010051604052611151610120610bf8565b610120518152505b565b60206116ee6000396000516318160ddd610180526020610180600461019c845afa61118b573d600060003e3d6000fd5b60203d106116bc5761018090505161016052602061170e6000396000516318160ddd6101a05260206101a060046101bc845afa6111cd573d600060003e3d6000fd5b60203d106116bc576101a09050516101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186116bc5790506101605180156116bc57808204905090508060ff1c6116bc576101a0526112296101c0610ac8565b6101c0516101a05180820281191515600160ff1b84141517821584848405141716156116bc5790509050670de0b6b3a764000081059050670de0b6b3a764000081038181136116bc579050602f810281602f8205186116bc579050600a810590506102205261022051610100526112a1610200611048565b610200516101a0526101a051600a810281600a8205186116bc57905080670de0b6b3a764000001670de0b6b3a7640000811260008312186116bc57905080156116bc57806ec097ce7bc90715b34b9f1000000000059050600081126116bc57815250565b60a036604037602061174e60003960005163feaf968c60e05260a060e0600460fc845afa611338573d600060003e3d6000fd5b60a03d106116bc5760e0518060501c6116bc576101a052610100516101c052610120516101e0526101405161020052610160518060501c6116bc57610220526101a09050805160405260208101516060526040810151608052606081015160a052608081015160c052504260a051610e1081018181106116bc5790501161141857600d60e0527f707269636520746f6f206f6c64000000000000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b606051815250565b61142b610260611305565b61026051600081126116bc5761024052602061172e6000396000516386fc88d3610280526020610280600461029c845afa61146b573d600060003e3d6000fd5b60203d106116bc576102809050516102605261024051610260511015611497576102405181525061149f565b610260518152505b565b6102c0516114b06102e0611420565b6102e0518082028115838383041417156116bc5790509050670de0b6b3a7640000810490506114e061030061115b565b6103005180670de0b6b3a764000003670de0b6b3a764000081116116bc5790508082028115838383041417156116bc5790509050670de0b6b3a764000081049050815250565b6002541561158b5760066040527f6b696c6c6564000000000000000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b6000543318156116185760256040527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206060527f6f776e657200000000000000000000000000000000000000000000000000000060805260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b67ffffffffffffffff6040511115611633576000611642565b67ffffffffffffffff60605111155b156116bc5767ffffffffffffffff6080511315611660576000611681565b600160a0511215611672576000611681565b67ffffffffffffffff60a05113155b156116bc5760a051600081126116bc578060c01b9050608051600081126116bc578060801b90506060518060401b9050604051171717815250565b600080fda165767970657283000307000b5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b600080fd0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000041252e8691e964f7de35156b68493bab6797a27500000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000000000000000000000000000008ac7230489e80000

Deployed Bytecode

0x6003361161000c57610a23565b60003560e01c63db006a75811861002f57602436106116bc573361032052610052565b637bde82f281186102d157604436106116bc576024358060a01c6116bc57610320525b61005a611526565b60043560206116ee6000396000516370a082316103405230610360526020610340602461035c845afa610092573d600060003e3d6000fd5b60203d106116bc57610340905051101561010c57600e610380527f6e6f7420656e6f756768205946490000000000000000000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b6004356102c05261011e6103606114a1565b610360516103405261034051156116bc5761034051600381028160038204186116bc5790506103e8810490506103605261034051610360518082038281116116bc579050905034106101875761034051610360518082018281106116bc5790509050341161018a565b60015b156101f5576016610380527f7072696365206f7574206f6620746f6c6572616e6365000000000000000000006103a0526103805061038051806103a001601f826000031636823750506308c379a061034052602061036052601f19601f61038051011660440161035cfd5b60206116ce600039600051639dc29fac61038052336103a0526004356103c052803b156116bc576000610380604461039c6000855af161023a573d600060003e3d6000fd5b506000610380526103805060006000610380516103a0346003545af1610265573d600060003e3d6000fd5b60206116ee60003960005163a9059cbb61038052610320516103a0526004356103c0526020610380604461039c6000855af16102a6573d600060003e3d6000fd5b60203d106116bc57610380518060011c6116bc576103e0526103e05050600435610380526020610380f35b346116bc57636b6f4a9d81186102fb57600436106116bc5760206102f661024061115b565b610240f35b63d127fe60811861032757602436106116bc5760206004356102c0526103226103206114a1565b610320f35b631a67245a811861034c57600436106116bc5760206103476102c0611420565b6102c0f35b63e90354ca811861038157600436106116bc5761036a610160610ac8565b61016051600081126116bc576101a05260206101a0f35b63951b930181186103fb57600436106116bc576080366060376004546040526103aa60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c0525060605160e0526080516101005260a051600081126116bc576101205260c051600081126116bc5761014052608060e0f35b63ec9b28f1811861045d57602436106116bc576004358060a01c6116bc5760a05261042461158d565b60a051156116bc5760a05160035560a0517fb35cb534021632242cdd9c586df6a75869880552d76afbabb674b6bd1f1b4f9f600060c0a2005b63561e5d0a811861048257602436106116bc5762093a806101605242610180526104c2565b63ec070a9d81186104a657604436106116bc576024356101605242610180526104c2565b63151357fc811861057757606436106116bc5760406024610160375b6104ca61158d565b670de0b6b3a764000060043510156104e35760006104f2565b67a688906bd8b0000060043511155b156116bc574261018051106116bc576040366101a0376105136101e0610ac8565b6101e080516101a05260208101516101c052506101c0516116bc576101805160405261018051610160518082018281106116bc57905090506060526101a0516080526004358060ff1c6116bc5760a05261056e6101e061161a565b6101e051600455005b636a6f101c81186105e857600436106116bc5761059261158d565b604036610160376105a46101a0610ac8565b6101a08051610160526020810151610180525061018051156116bc57604036604037610160516080526101605160a0526105df6101a061161a565b6101a051600455005b6341c0e1b581186106d757600436106116bc57610603611526565b61060b61158d565b600160025560206116ee6000396000516370a0823160c0523060e052602060c0602460dc845afa610641573d600060003e3d6000fd5b60203d106116bc5760c090505160a05260206116ee60003960005163a9059cbb60c05260005460e05260a05161010052602060c0604460dc6000855af161068d573d600060003e3d6000fd5b60203d106116bc5760c0518060011c6116bc576101205261012050507ff4a991ad9e7f9711696f7bd41529beb4c470d75788573535d4ca3f0857c79ce860a05160c052602060c0a1005b6301681a62811861089c57602436106116bc576004358060a01c6116bc5760a0526002546107145760206116ee60003960005160a0511415610717565b60015b61077857600f60c0527f70726f74656374656420746f6b656e000000000000000000000000000000000060e05260c05060c0518060e001601f826000031636823750506308c379a0608052602060a052601f19601f60c0510116604401609cfd5b61078061158d565b600060c05260a0516107bd574760c052600060e05260e0506000600060e05161010060c0516000545af1610867573d600060003e3d6000fd610867565b60a0516370a0823160e0523061010052602060e0602460fc845afa6107e7573d600060003e3d6000fd5b60203d106116bc5760e090505160c05260a05163a9059cbb60e0526000546101005260c05161012052602060e0604460fc6000855af161082c573d600060003e3d6000fd5b3d61084357803b156116bc5760016101405261085b565b60203d106116bc5760e0518060011c6116bc57610140525b610140905051156116bc575b60a0517fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c7760c05160e052602060e0a2602060c0f35b63f0350c0481186108f957602436106116bc576004358060a01c6116bc5760a0526108c561158d565b60a05160015560a0516000547f23e1f881d1e797ea57a7247e53536f0bfc37c42e6645b3bdc4b1c9a0e0d8a133600060c0a3005b63a67c2dcb81186109a557600436106116bc573360015418156109975760296080527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060a0527f6e6577206f776e6572000000000000000000000000000000000000000000000060c0526080506080518060a001601f826000031636823750506308c379a06040526020606052601f19601f6080510116604401605cfd5b336040526109a3610a29565b005b638da5cb5b81186109c457600436106116bc5760005460405260206040f35b637f4ec4c381186109e357600436106116bc5760015460405260206040f35b631f3a0e418118610a0257600436106116bc5760025460405260206040f35b63ae90b2138118610a2157600436106116bc5760035460405260206040f35b505b60006000fd5b60006001556000546060526040516000556040516060517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060006080a3565b67ffffffffffffffff60405116815267ffffffffffffffff6040518060401c905016602082015267ffffffffffffffff6040518060801c9050168060ff1c6116bc5760408201526040518060c01c90508060ff1c6116bc57606082015250565b608036606037600454604052610ade60e0610a68565b60e080516060526020810151608052604081015160a052606081015160c052504260805111610b195760c05181526000602082015250610bf6565b426060511115610b355760a05181526000602082015250610bf6565b6080516060518082038281116116bc57905090508060ff1c6116bc5760e052426060518082038281116116bc57905090508060ff1c6116bc576101005260a05160c05160a05180820382811360008312186116bc57905090506101005180820281191515600160ff1b84141517821584848405141716156116bc579050905060e05180156116bc57808205600160ff1b83141560001983141517156116bc579050905080820182811260008312186116bc5790509050815260016020820152505b565b60405160605260016080526806f05b59d3b20000006060511215610c4e576803782dace9d900000060605112610c7c576803782dace9d9000000606051036060526b1425982cf597cd205cef7380608052610c7c565b6806f05b59d3b200000060605103606052770195e54c5dd42177f53a27172fa9ec6302628270000000006080525b60646060510260605268056bc75e2d6310000060a05268ad78ebc5ac6200000060605112610cd85768ad78ebc5ac620000006060510360605268056bc75e2d631000006e01855144814a7ff805980ff008400060a051020560a0525b6856bc75e2d63100000060605112610d1b576856bc75e2d6310000006060510360605268056bc75e2d631000006b02df0ab5a80a22c61ab5a70060a051020560a0525b682b5e3af16b1880000060605112610d5c57682b5e3af16b188000006060510360605268056bc75e2d63100000693f1fce3da636ea5cf85060a051020560a0525b6815af1d78b58c40000060605112610d9d576815af1d78b58c4000006060510360605268056bc75e2d63100000690127fa27722cc06cc5e260a051020560a0525b680ad78ebc5ac620000060605112610ddd57680ad78ebc5ac62000006060510360605268056bc75e2d6310000068280e60114edb805d0360a051020560a0525b68056bc75e2d6310000060605112610e1d5768056bc75e2d631000006060510360605268056bc75e2d63100000680ebc5fb4174612111060a051020560a0525b6802b5e3af16b188000060605112610e5d576802b5e3af16b18800006060510360605268056bc75e2d631000006808f00f760a4b2db55d60a051020560a0525b68015af1d78b58c4000060605112610e9d5768015af1d78b58c400006060510360605268056bc75e2d631000006806f5f177578893793760a051020560a0525b60605160c05260605168056bc75e2d631000000160e052600268056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600368056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600468056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600568056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600668056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600768056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600868056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600968056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600a68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600b68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052600c68056bc75e2d6310000060605160c05102050560c05260c05160e0510160e052606460805168056bc75e2d6310000060e05160a05102050205815250565b7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc000061010051121561107a57600061108b565b68070c1cc73b00c800006101005113155b156116bc577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610100511361113f57610100517f800000000000000000000000000000000000000000000000000000000000000081146116bc576000036040526110f6610120610bf8565b6101205180156116bc57806ec097ce7bc90715b34b9f100000000005600160ff1b6ec097ce7bc90715b34b9f1000000000141560001983141517156116bc579050815250611159565b61010051604052611151610120610bf8565b610120518152505b565b60206116ee6000396000516318160ddd610180526020610180600461019c845afa61118b573d600060003e3d6000fd5b60203d106116bc5761018090505161016052602061170e6000396000516318160ddd6101a05260206101a060046101bc845afa6111cd573d600060003e3d6000fd5b60203d106116bc576101a09050516101805261018051670de0b6b3a7640000810281670de0b6b3a76400008204186116bc5790506101605180156116bc57808204905090508060ff1c6116bc576101a0526112296101c0610ac8565b6101c0516101a05180820281191515600160ff1b84141517821584848405141716156116bc5790509050670de0b6b3a764000081059050670de0b6b3a764000081038181136116bc579050602f810281602f8205186116bc579050600a810590506102205261022051610100526112a1610200611048565b610200516101a0526101a051600a810281600a8205186116bc57905080670de0b6b3a764000001670de0b6b3a7640000811260008312186116bc57905080156116bc57806ec097ce7bc90715b34b9f1000000000059050600081126116bc57815250565b60a036604037602061174e60003960005163feaf968c60e05260a060e0600460fc845afa611338573d600060003e3d6000fd5b60a03d106116bc5760e0518060501c6116bc576101a052610100516101c052610120516101e0526101405161020052610160518060501c6116bc57610220526101a09050805160405260208101516060526040810151608052606081015160a052608081015160c052504260a051610e1081018181106116bc5790501161141857600d60e0527f707269636520746f6f206f6c64000000000000000000000000000000000000006101005260e05060e0518061010001601f826000031636823750506308c379a060a052602060c052601f19601f60e051011660440160bcfd5b606051815250565b61142b610260611305565b61026051600081126116bc5761024052602061172e6000396000516386fc88d3610280526020610280600461029c845afa61146b573d600060003e3d6000fd5b60203d106116bc576102809050516102605261024051610260511015611497576102405181525061149f565b610260518152505b565b6102c0516114b06102e0611420565b6102e0518082028115838383041417156116bc5790509050670de0b6b3a7640000810490506114e061030061115b565b6103005180670de0b6b3a764000003670de0b6b3a764000081116116bc5790508082028115838383041417156116bc5790509050670de0b6b3a764000081049050815250565b6002541561158b5760066040527f6b696c6c6564000000000000000000000000000000000000000000000000000060605260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b6000543318156116185760256040527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206060527f6f776e657200000000000000000000000000000000000000000000000000000060805260405060405180606001601f826000031636823750506308c379a06000526020602052601f19601f6040510116604401601cfd5b565b67ffffffffffffffff6040511115611633576000611642565b67ffffffffffffffff60605111155b156116bc5767ffffffffffffffff6080511315611660576000611681565b600160a0511215611672576000611681565b67ffffffffffffffff60a05113155b156116bc5760a051600081126116bc578060c01b9050608051600081126116bc578060801b90506060518060401b9050604051171717815250565b600080fda165767970657283000307000b00000000000000000000000041252e8691e964f7de35156b68493bab6797a2750000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4

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

0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e00000000000000000000000041252e8691e964f7de35156b68493bab6797a27500000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba0000000000000000000000000000000000000000000000008ac7230489e80000

-----Decoded View---------------
Arg [0] : yfi (address): 0x0bc529c00C6401aEF6D220BE8C6Ea1667F6Ad93e
Arg [1] : d_yfi (address): 0x41252E8691e964f7DE35156B68493bAb6797a275
Arg [2] : ve_yfi (address): 0x90c1f9220d90d3966FbeE24045EDd73E1d588aD5
Arg [3] : owner (address): 0xdDddddDD0005d49D9b508BF034B036aaB5818bCF
Arg [4] : price_feed (address): 0x3EbEACa272Ce4f60E800f6C5EE678f50D2882fd4
Arg [5] : curve_pool (address): 0xC26b89A667578ec7b3f11b2F98d6Fd15C07C54ba
Arg [6] : scaling_factor (uint256): 10000000000000000000

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000bc529c00c6401aef6d220be8c6ea1667f6ad93e
Arg [1] : 00000000000000000000000041252e8691e964f7de35156b68493bab6797a275
Arg [2] : 00000000000000000000000090c1f9220d90d3966fbee24045edd73e1d588ad5
Arg [3] : 000000000000000000000000dddddddd0005d49d9b508bf034b036aab5818bcf
Arg [4] : 0000000000000000000000003ebeaca272ce4f60e800f6c5ee678f50d2882fd4
Arg [5] : 000000000000000000000000c26b89a667578ec7b3f11b2f98d6fd15c07c54ba
Arg [6] : 0000000000000000000000000000000000000000000000008ac7230489e80000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.