FRAX Price: $0.79 (-2.86%)

Contract

0x960ea3e3C7FB317332d990873d354E18d7645590

Overview

FRAX Balance | FXTL Balance

0 FRAX | 9,027 FXTL

FRAX Value

$0.00

Token Holdings

More Info

Private Name Tags

Transaction Hash
Block
From
To
Price_w91472582024-08-31 11:53:47512 days ago1725105227IN
0x960ea3e3...8d7645590
0 FRAX0.000000220.00100025

View more zero value Internal Transactions in Advanced View mode

Advanced mode:

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OracleVaultWrapper

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 OracleVaultWrapper
@notice Wraps an external price oracle to be vault-aware (pricePerShare) and invertible
@author Curve.Fi
@license MIT
"""

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

interface Vault:
    def pricePerShare() -> uint256: view


ORACLE: public(immutable(Oracle))
VAULT: public(immutable(Vault))
IS_INVERTED: public(immutable(bool))

PPS_MAX_SPEED: constant(uint256) = 10**16 / 60  # Max speed of pricePerShare change

cached_price_per_share: public(uint256)
cached_timestamp: public(uint256)


@external
def __init__(
        oracle: Oracle,
        vault: Vault,
        is_inverted: bool
    ):
    ORACLE = oracle
    VAULT = vault
    IS_INVERTED = is_inverted
    self.cached_price_per_share = VAULT.pricePerShare()
    self.cached_timestamp = block.timestamp


@internal
@view
def _pps() -> uint256:
    return min(VAULT.pricePerShare(), self.cached_price_per_share * (10**18 + PPS_MAX_SPEED * (block.timestamp - self.cached_timestamp)) / 10**18)


@internal
def _pps_w() -> uint256:
    pps: uint256 = min(VAULT.pricePerShare(), self.cached_price_per_share * (10**18 + PPS_MAX_SPEED * (block.timestamp - self.cached_timestamp)) / 10**18)
    self.cached_price_per_share = pps
    self.cached_timestamp = block.timestamp
    return pps


@internal
@view
def _raw_price(p: uint256, pps: uint256) -> uint256:
    if IS_INVERTED:
        return pps * 10**18 / p
    else:
        return p * pps / 10**18


@external
@view
def price() -> uint256:
    return self._raw_price(ORACLE.price(), self._pps())


@external
def price_w() -> uint256:
    return self._raw_price(ORACLE.price_w(), self._pps_w())

Contract Security Audit

Contract ABI

API
[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"oracle","type":"address"},{"name":"vault","type":"address"},{"name":"is_inverted","type":"bool"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"price_w","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"ORACLE","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"VAULT","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"IS_INVERTED","inputs":[],"outputs":[{"name":"","type":"bool"}]},{"stateMutability":"view","type":"function","name":"cached_price_per_share","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"cached_timestamp","inputs":[],"outputs":[{"name":"","type":"uint256"}]}]

6103e85150346100a25760206104635f395f518060a01c6100a25760405260206104835f395f518060a01c6100a25760605260206104a35f395f518060011c6100a2576080526040516103a8526060516103c8526080516103e8526103c8516399530b0660a052602060a0600460bc845afa61007d573d5f5f3e3d5ffd5b60203d106100a25760a09050515f55426001556103a86100a661000039610408610000f35b5f80fd5f3560e01c60026005820660011b61039e01601e395f51565b6338013f028118610036573461039a5760206103a860403960206040f35b63411557d181186101ac573461039a5760206103c860403960206040f36101ac565b634b766a3481186101ac573461039a5760206103e860403960206040f36101ac565b63e92774518118610095573461039a575f5460405260206040f35b63a035b1fe81186101ac573461039a57602060206103a85f395f5163a035b1fe608052602060806004609c845afa6100cf573d5f5f3e3d5ffd5b60203d1061039a576080905051610100526100ea60c06101b0565b60c05161012052610100516040526101205160605261010960e0610323565b60e0f36101ac565b63e7c222d181186101ac573461039a5760015460405260206040f36101ac565b63ceb7f75981186101ac573461039a57602060206103a85f395f5163ceb7f75960a052602060a0600460bc5f855af161016c573d5f5f3e3d5ffd5b60203d1061039a5760a09050516101205261018760e0610262565b60e0516101405261012051604052610140516060526101a7610100610323565b610100f35b5f5ffd5b60206103c85f395f516399530b06604052602060406004605c845afa6101d8573d5f5f3e3d5ffd5b60203d1061039a5760409050515f544260015480820382811161039a57905090506597951b766aaa8102816597951b766aaa82041861039a57905080670de0b6b3a764000001670de0b6b3a7640000811061039a57905080820281158383830414171561039a5790509050670de0b6b3a76400008104905080828118828410021890509050815250565b60206103c85f395f516399530b06606052602060606004607c845afa61028a573d5f5f3e3d5ffd5b60203d1061039a5760609050515f544260015480820382811161039a57905090506597951b766aaa8102816597951b766aaa82041861039a57905080670de0b6b3a764000001670de0b6b3a7640000811061039a57905080820281158383830414171561039a5790509050670de0b6b3a764000081049050808281188284100218905090506040526040515f5542600155604051815250565b60206103e85f395f516103635760405160605180820281158383830414171561039a5790509050670de0b6b3a76400008104905081525061039856610398565b606051670de0b6b3a7640000810281670de0b6b3a764000082041861039a579050604051801561039a57808204905090508152505b565b5f80fd0131005800180111007a841903a8810a1860a16576797065728300030a00150000000000000000000000002f0af8ec2f5893392843a0f647a30a141dba9daf000000000000000000000000bfc4d34db83553725ec6c768da71d2d9c1456b550000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x5f3560e01c60026005820660011b61039e01601e395f51565b6338013f028118610036573461039a5760206103a860403960206040f35b63411557d181186101ac573461039a5760206103c860403960206040f36101ac565b634b766a3481186101ac573461039a5760206103e860403960206040f36101ac565b63e92774518118610095573461039a575f5460405260206040f35b63a035b1fe81186101ac573461039a57602060206103a85f395f5163a035b1fe608052602060806004609c845afa6100cf573d5f5f3e3d5ffd5b60203d1061039a576080905051610100526100ea60c06101b0565b60c05161012052610100516040526101205160605261010960e0610323565b60e0f36101ac565b63e7c222d181186101ac573461039a5760015460405260206040f36101ac565b63ceb7f75981186101ac573461039a57602060206103a85f395f5163ceb7f75960a052602060a0600460bc5f855af161016c573d5f5f3e3d5ffd5b60203d1061039a5760a09050516101205261018760e0610262565b60e0516101405261012051604052610140516060526101a7610100610323565b610100f35b5f5ffd5b60206103c85f395f516399530b06604052602060406004605c845afa6101d8573d5f5f3e3d5ffd5b60203d1061039a5760409050515f544260015480820382811161039a57905090506597951b766aaa8102816597951b766aaa82041861039a57905080670de0b6b3a764000001670de0b6b3a7640000811061039a57905080820281158383830414171561039a5790509050670de0b6b3a76400008104905080828118828410021890509050815250565b60206103c85f395f516399530b06606052602060606004607c845afa61028a573d5f5f3e3d5ffd5b60203d1061039a5760609050515f544260015480820382811161039a57905090506597951b766aaa8102816597951b766aaa82041861039a57905080670de0b6b3a764000001670de0b6b3a7640000811061039a57905080820281158383830414171561039a5790509050670de0b6b3a764000081049050808281188284100218905090506040526040515f5542600155604051815250565b60206103e85f395f516103635760405160605180820281158383830414171561039a5790509050670de0b6b3a76400008104905081525061039856610398565b606051670de0b6b3a7640000810281670de0b6b3a764000082041861039a579050604051801561039a57808204905090508152505b565b5f80fd0131005800180111007a0000000000000000000000002f0af8ec2f5893392843a0f647a30a141dba9daf000000000000000000000000bfc4d34db83553725ec6c768da71d2d9c1456b550000000000000000000000000000000000000000000000000000000000000000

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

0000000000000000000000002f0af8ec2f5893392843a0f647a30a141dba9daf000000000000000000000000bfc4d34db83553725ec6c768da71d2d9c1456b550000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : oracle (address): 0x2F0AF8eC2f5893392843a0F647A30A141dba9DaF
Arg [1] : vault (address): 0xBFc4D34Db83553725eC6c768da71D2D9c1456B55
Arg [2] : is_inverted (bool): False

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000002f0af8ec2f5893392843a0f647a30a141dba9daf
Arg [1] : 000000000000000000000000bfc4d34db83553725ec6c768da71d2d9c1456b55
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

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.