ETH Price: $3,313.62 (-0.35%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Price_w179064942023-08-13 14:20:35885 days ago1691936435IN
0xbeF434E2...d1CfC4217
0 ETH0.0032109916.59747056

View more zero value Internal Transactions in Advanced View mode

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

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

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

Contract Source Code Verified (Exact Match)

Contract Name:
CryptoWithStablePriceTBTC

Compiler Version
vyper:0.3.9

Optimization Enabled:
N/A

Other Settings:
cancun EvmVersion, MIT license

Contract Source Code (Vyper language format)

# @version 0.3.9
"""
@title CryptoWithStablePriceTBTC
@notice Price oracle for tricryptoLLAMA for crvUSD. Optional Chainlink included
@author Curve.Fi
@license MIT
"""

# Tricrypto-ng
interface Tricrypto:
    def price_oracle(k: uint256) -> uint256: view
    def coins(i: uint256) -> address: view
    def totalSupply() -> uint256: view
    def virtual_price() -> uint256: view

interface StableAggregator:
    def price() -> uint256: view
    def price_w() -> uint256: nonpayable
    def stablecoin() -> address: view

interface ControllerFactory:
    def admin() -> address: view


struct ChainlinkAnswer:
    round_id: uint80
    answer: int256
    started_at: uint256
    updated_at: uint256
    answered_in_round: uint80

interface ChainlinkAggregator:
    def latestRoundData() -> ChainlinkAnswer: view
    def decimals() -> uint8: view


TRICRYPTO: public(immutable(Tricrypto))
TRICRYPTO_IX: public(immutable(uint256))
STABLESWAP_AGGREGATOR: public(immutable(StableAggregator))
STABLECOIN: public(immutable(address))
FACTORY: public(immutable(ControllerFactory))

CHAINLINK_AGGREGATOR_BTC: immutable(ChainlinkAggregator)
CHAINLINK_PRICE_PRECISION_BTC: immutable(uint256)
CHAINLINK_STALE_THRESHOLD: constant(uint256) = 86400
BOUND_SIZE: public(immutable(uint256))

use_chainlink: public(bool)


@external
def __init__(
        tricrypto: Tricrypto,
        ix: uint256,             # 0 = TBTC
        stable_aggregator: StableAggregator,
        factory: ControllerFactory,
        chainlink_aggregator_btc: ChainlinkAggregator,
        bound_size: uint256  # 1.5% sounds ok before we turn it off
    ):
    TRICRYPTO = tricrypto
    TRICRYPTO_IX = ix
    STABLESWAP_AGGREGATOR = stable_aggregator
    FACTORY = factory
    _stablecoin: address = stable_aggregator.stablecoin()
    STABLECOIN = _stablecoin
    assert tricrypto.coins(0) == _stablecoin  # First coin is crvUSD

    self.use_chainlink = True
    CHAINLINK_AGGREGATOR_BTC = chainlink_aggregator_btc
    CHAINLINK_PRICE_PRECISION_BTC = 10**convert(chainlink_aggregator_btc.decimals(), uint256)
    BOUND_SIZE = bound_size


@internal
@view
def _raw_price(agg_price: uint256) -> uint256:
    p_crypto_stable: uint256 = TRICRYPTO.price_oracle(TRICRYPTO_IX)          # d_crvusd/d_tbtc
    p_stable_agg: uint256 = agg_price                                        # d_usd/d_crvusd
    price: uint256 = p_crypto_stable * p_stable_agg / 10**18    # d_usd/d_btc

    # Limit BTC price
    if self.use_chainlink:
        chainlink_lrd: ChainlinkAnswer = CHAINLINK_AGGREGATOR_BTC.latestRoundData()
        if block.timestamp - min(chainlink_lrd.updated_at, block.timestamp) <= CHAINLINK_STALE_THRESHOLD:
            chainlink_p: uint256 = convert(chainlink_lrd.answer, uint256) * 10**18 / CHAINLINK_PRICE_PRECISION_BTC
            lower: uint256 = chainlink_p * (10**18 - BOUND_SIZE) / 10**18
            upper: uint256 = chainlink_p * (10**18 + BOUND_SIZE) / 10**18
            price = min(max(price, lower), upper)

    return price


@external
@view
def raw_price() -> uint256:
    return self._raw_price(STABLESWAP_AGGREGATOR.price())


@external
@view
def price() -> uint256:
    return self._raw_price(STABLESWAP_AGGREGATOR.price())


@external
def price_w() -> uint256:
    return self._raw_price(STABLESWAP_AGGREGATOR.price_w())


@external
def set_use_chainlink(do_it: bool):
    assert msg.sender == FACTORY.admin()
    self.use_chainlink = do_it

Contract Security Audit

Contract ABI

API
[{"stateMutability":"nonpayable","type":"constructor","inputs":[{"name":"tricrypto","type":"address"},{"name":"ix","type":"uint256"},{"name":"stable_aggregator","type":"address"},{"name":"factory","type":"address"},{"name":"chainlink_aggregator_btc","type":"address"},{"name":"bound_size","type":"uint256"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"raw_price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"price","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"price_w","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"nonpayable","type":"function","name":"set_use_chainlink","inputs":[{"name":"do_it","type":"bool"}],"outputs":[]},{"stateMutability":"view","type":"function","name":"TRICRYPTO","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"TRICRYPTO_IX","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"STABLESWAP_AGGREGATOR","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"STABLECOIN","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"FACTORY","inputs":[],"outputs":[{"name":"","type":"address"}]},{"stateMutability":"view","type":"function","name":"BOUND_SIZE","inputs":[],"outputs":[{"name":"","type":"uint256"}]},{"stateMutability":"view","type":"function","name":"use_chainlink","inputs":[],"outputs":[{"name":"","type":"bool"}]}]

61059b5150602061064b5f395f518060a01c61064757604052602061068b5f395f518060a01c6106475760605260206106ab5f395f518060a01c6106475760805260206106cb5f395f518060a01c6106475760a05234610647576040516104bb52602061066b5f395f516104db526060516104fb5260805161053b5260605163e9cbd82260e052602060e0600460fc845afa61009d573d5f5f3e3d5ffd5b60203d106106475760e0518060a01c610647576101205261012090505160c05260c05161051b5260c05160405163c661065760e0525f61010052602060e0602460fc845afa6100ee573d5f5f3e3d5ffd5b60203d106106475760e0518060a01c6106475761012052610120905051186106475760015f5560a05161055b5260a05163313ce56760e052602060e0600460fc845afa61013d573d5f5f3e3d5ffd5b60203d106106475760e0518060081c6106475761012052610120905051604d81116106475780600a0a905061057b5260206106eb5f395f5161059b526104bb61018b610000396105bb610000f36003361161000c57610259565b5f3560e01c346104aa576325069aca81186100335760206104bb5f395f5160405260206040f35b63eca7e86281186100505760206104db5f395f5160405260206040f35b63c959a716811861006d5760206104fb5f395f5160405260206040f35b6393a39776811861008a57602061051b5f395f5160405260206040f35b632dd3100081186100a757602061053b5f395f5160405260206040f35b63c19e2b7081186100c457602061059b5f395f5160405260206040f35b63f4e1ae6281186100da575f5460405260206040f35b63672485c1811861013357602060206104fb5f395f5163a035b1fe6102c05260206102c060046102dc845afa610112573d5f5f3e3d5ffd5b60203d106104aa576102c090505160405261012e61030061025d565b610300f35b63a035b1fe811861018c57602060206104fb5f395f5163a035b1fe6102c05260206102c060046102dc845afa61016b573d5f5f3e3d5ffd5b60203d106104aa576102c090505160405261018761030061025d565b610300f35b63ceb7f75981186101e657602060206104fb5f395f5163ceb7f7596102c05260206102c060046102dc5f855af16101c5573d5f5f3e3d5ffd5b60203d106104aa576102c09050516040526101e161030061025d565b610300f35b634f5002fa811861025757602436106104aa576004358060011c6104aa57604052602061053b5f395f5163f851a440606052602060606004607c845afa61022f573d5f5f3e3d5ffd5b60203d106104aa576060518060a01c6104aa5760a05260a090505133186104aa576040515f55005b505b5f5ffd5b60206104bb5f395f51636872765360805260206104db5f395f5160a052602060806024609c845afa610291573d5f5f3e3d5ffd5b60203d106104aa5760809050516060526040516080526060516080518082028115838383041417156104aa5790509050670de0b6b3a76400008104905060a0525f54156104a257602061055b5f395f5163feaf968c6101605260a0610160600461017c845afa610303573d5f5f3e3d5ffd5b60a03d106104aa57610160518060501c6104aa576102205261018051610240526101a051610260526101c051610280526101e0518060501c6104aa576102a0526102209050805160c052602081015160e0526040810151610100526060810151610120526080810151610140525062015180426101205142808281188284100218905090508082038281116104aa5790509050116104a25760e0515f81126104aa57670de0b6b3a7640000810281670de0b6b3a76400008204186104aa579050602061057b5f395f5180156104aa57808204905090506101605261016051602061059b5f395f5180670de0b6b3a764000003670de0b6b3a764000081116104aa5790508082028115838383041417156104aa5790509050670de0b6b3a7640000810490506101805261016051602061059b5f395f5180670de0b6b3a764000001670de0b6b3a764000081106104aa5790508082028115838383041417156104aa5790509050670de0b6b3a7640000810490506101a05260a05161018051808281188284110218905090506101a0518082811882841002189050905060a0525b60a051815250565b5f80fda165767970657283000309000b005b5f80fd0000000000000000000000002889302a794da87fbf1d6db415c1492194663d13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c00000000000000000000000000000000000000000000000000354a6ba7a18000

Deployed Bytecode

0x6003361161000c57610259565b5f3560e01c346104aa576325069aca81186100335760206104bb5f395f5160405260206040f35b63eca7e86281186100505760206104db5f395f5160405260206040f35b63c959a716811861006d5760206104fb5f395f5160405260206040f35b6393a39776811861008a57602061051b5f395f5160405260206040f35b632dd3100081186100a757602061053b5f395f5160405260206040f35b63c19e2b7081186100c457602061059b5f395f5160405260206040f35b63f4e1ae6281186100da575f5460405260206040f35b63672485c1811861013357602060206104fb5f395f5163a035b1fe6102c05260206102c060046102dc845afa610112573d5f5f3e3d5ffd5b60203d106104aa576102c090505160405261012e61030061025d565b610300f35b63a035b1fe811861018c57602060206104fb5f395f5163a035b1fe6102c05260206102c060046102dc845afa61016b573d5f5f3e3d5ffd5b60203d106104aa576102c090505160405261018761030061025d565b610300f35b63ceb7f75981186101e657602060206104fb5f395f5163ceb7f7596102c05260206102c060046102dc5f855af16101c5573d5f5f3e3d5ffd5b60203d106104aa576102c09050516040526101e161030061025d565b610300f35b634f5002fa811861025757602436106104aa576004358060011c6104aa57604052602061053b5f395f5163f851a440606052602060606004607c845afa61022f573d5f5f3e3d5ffd5b60203d106104aa576060518060a01c6104aa5760a05260a090505133186104aa576040515f55005b505b5f5ffd5b60206104bb5f395f51636872765360805260206104db5f395f5160a052602060806024609c845afa610291573d5f5f3e3d5ffd5b60203d106104aa5760809050516060526040516080526060516080518082028115838383041417156104aa5790509050670de0b6b3a76400008104905060a0525f54156104a257602061055b5f395f5163feaf968c6101605260a0610160600461017c845afa610303573d5f5f3e3d5ffd5b60a03d106104aa57610160518060501c6104aa576102205261018051610240526101a051610260526101c051610280526101e0518060501c6104aa576102a0526102209050805160c052602081015160e0526040810151610100526060810151610120526080810151610140525062015180426101205142808281188284100218905090508082038281116104aa5790509050116104a25760e0515f81126104aa57670de0b6b3a7640000810281670de0b6b3a76400008204186104aa579050602061057b5f395f5180156104aa57808204905090506101605261016051602061059b5f395f5180670de0b6b3a764000003670de0b6b3a764000081116104aa5790508082028115838383041417156104aa5790509050670de0b6b3a7640000810490506101805261016051602061059b5f395f5180670de0b6b3a764000001670de0b6b3a764000081106104aa5790508082028115838383041417156104aa5790509050670de0b6b3a7640000810490506101a05260a05161018051808281188284110218905090506101a0518082811882841002189050905060a0525b60a051815250565b5f80fda165767970657283000309000b0000000000000000000000002889302a794da87fbf1d6db415c1492194663d13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000f939e0a03fb07f59a73314e73794be0e57ac1b4e000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c0000000000000000000000000000000000000000000000000000000005f5e10000000000000000000000000000000000000000000000000000354a6ba7a18000

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

0000000000000000000000002889302a794da87fbf1d6db415c1492194663d13000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c00000000000000000000000000000000000000000000000000354a6ba7a18000

-----Decoded View---------------
Arg [0] : tricrypto (address): 0x2889302a794dA87fBF1D6Db415C1492194663D13
Arg [1] : ix (uint256): 0
Arg [2] : stable_aggregator (address): 0x18672b1b0c623a30089A280Ed9256379fb0E4E62
Arg [3] : factory (address): 0xC9332fdCB1C491Dcc683bAe86Fe3cb70360738BC
Arg [4] : chainlink_aggregator_btc (address): 0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c
Arg [5] : bound_size (uint256): 15000000000000000

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000002889302a794da87fbf1d6db415c1492194663d13
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 00000000000000000000000018672b1b0c623a30089a280ed9256379fb0e4e62
Arg [3] : 000000000000000000000000c9332fdcb1c491dcc683bae86fe3cb70360738bc
Arg [4] : 000000000000000000000000f4030086522a5beea4988f8ca5b36dbc97bee88c
Arg [5] : 00000000000000000000000000000000000000000000000000354a6ba7a18000


Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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