Yield Curve
Yield Curve
Pragma offers a feed that calculates the zero-coupon interest-rate curve fully on-chain. The interest rate values are derived from BTC spot and futures price difference, and Aave overnight rate. You can find more informations regarding the implementation here
Sample Code
use starknet::ContractAddress;
use pragma_lib::abi::{IYieldCurveABIDispatcher, IYieldCurveABIDispatcherTrait};
use pragma_lib::types::{AggregationMode, DataType, YieldPoint};
use starknet::get_block_timestamp;
use starknet::contract_address::contract_address_const;
fn get_yield_curve_points(number_of_decimals : u32) -> Span<YieldPoint> {
let YIELD_CURVE_ADDRESS: ContractAddress =
contract_address_const::<0x000000000000000000000>();
let yield_curve_dispatcher = IYieldCurveABIDispatcher { contract_address: YIELD_CURVE_ADDRESS };
let yield_curve_points = yield_curve_dispatcher
.get_yield_points(number_of_decimals);
return yield_curve_points; // will return the yield curve points multiiplied by 10^number_of_decimals
}
//USAGE
let number_of_decimals = 8;
let yield_points = get_yield_curve_points(number_of_decimals);
How the Yield Curve is Calculated
Aave overnight rates are used to estimate short-term rates. BTC spot and futures prices are pulled at the exact same time to calculate the rates for different maturities. The interest rate for each maturity is calculated according to the following equation:
We floor the values with 0 to account for case where spot > future (backwardation).
Technical Specification
Struct: YieldPoint
This struct represents a point on the yield curve. Each point contains the calculated rate, the timestamp at which it was calculated and what maturity it represents. It also shows the sources we have used to calculate it (e.g. Aave overnight rate, Deribit future/sport rate).
Members
capture_timestamp
: timestamp of data captureexpiry_timestamp
: timestamp of expiry of the instrument (1 day for overnight rates and expiration date for futures)rate
: the calculated yield rate or overnight ratesource
: an indicator for the source (str_to_felt
encoded lowercase of "on" for Aave overnight rate, "future/spot" for Deribit future/sport rate, and "other" for future additional data sources)
Function: get_yield_points
This function calculates what the yield curve is at any point in time, and returns the computed yields in form of an array.
Inputs
decimals
: the precision at which the rates are calculated
Returns
yield_curve
: an array ofYieldPoint
structs each representing a different maturity on the curve. Rates are reported up to the requested decimal.