Keep3rV1Oracle is an on-chain oracle for UniswapV2 pairs.
Keep3rV1Oracle
Keep3rV1Oracles are sliding window oracles that use observations collected over a window to provide moving price averages in the past windowSize
with a precision of windowSize / granularity
.
The windowSize
is based on the granularity
supplied by the user. There is a reading every periodSize
minutes.
Price Feeds
Data Freshness
Contract: Keep3rV1Oracle
// returns the amount out corresponding to the amount in for a given token using the moving average over the time
function current(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut)
Example;
interface IUniswapV2Oracle {
function current(address tokenIn, uint amountIn, address tokenOut) external view returns (uint amountOut);
Security
Contract: Keep3rV1Oracle
A quote allows the caller to specify the granularity
or amount of points
to take. Each point
is periodSize
, so 24 points
would be 24 * periodSize
windowSize
Data freshness is decreased for increased security
// returns the amount out corresponding to the amount in for a given token using the moving average over the time taking granularity samples
function quote(address tokenIn, uint amountIn, address tokenOut, uint granularity) external view returns (uint amountOut)
Price points
Returns a set of price points
equal to points * periodSize
, so for the points in the last 24 hours use points = 48
// returns an amount of price points equal to periodSize * points
prices(address tokenIn, uint amountIn, address tokenOut, uint points) external view returns (uint[] memory)
Hourly
Returns a set of price points
equal to points * hours
, so for the points in the last 24 hours use points = 24
// returns an amount of price points equal to hour * points
function hourly(address tokenIn, uint amountIn, address tokenOut, uint points) external view returns (uint[] memory)
Daily
Returns a set of price points
equal to points * days
, so for the points in the last 24 hours use points = 1
// returns an amount of price points equal to days * points
function daily(address tokenIn, uint amountIn, address tokenOut, uint points) external view returns (uint[] memory)
Weekly
Returns a set of price points
equal to points * weeks
, so for the points in the last week use points = 1
// returns an amount of price points equal to days * points
function weekly(address tokenIn, uint amountIn, address tokenOut, uint points) external view returns (uint[] memory)
Volatility
Contract: Keep3rV1Volatility
Realized Volatility
Returns the realized volatility over the last amount of points
per window * periodSize
, so volatility over last hour would be points = 1 & window = 2
// returns realized volatility over points * window
function rVol(address tokenIn, address tokenOut, uint points, uint window) external view returns (uint)
Hourly Realized Volatility
Returns the realized volatility over the last amount of points
per hour
, so volatility over last hour would be points = 1
// returns realized volatility over points * window
function rVolHourly(address tokenIn, address tokenOut, uint points) external view returns (uint);
Daily Realized Volatility
Returns the realized volatility over the last amount of points
per days
, so volatility over last day would be points = 1
// returns realized volatility over points * window
function rVolDaily(address tokenIn, address tokenOut, uint points) external view returns (uint);
Weekly Realized Volatility
Returns the realized volatility over the last amount of points
per weeks
, so volatility over last day week be points = 1
// returns realized volatility over points * window
function rVolWeekly(address tokenIn, address tokenOut, uint points) external view returns (uint);
Pricing
Black Scholes Estimate
Contract: Keep3rV1Oracle
* @dev blackScholesEstimate calculates a rough price estimate for an ATM option
* @dev input parameters should be transformed prior to being passed to the function
* @dev so as to remove decimal places otherwise results will be far less accurate
* @param _vol uint256 volatility of the underlying converted to remove decimals
* @param _underlying uint256 price of the underlying asset
* @param _time uint256 days to expiration in years multiplied to remove decimals
function blackScholesEstimate(
uint256 _vol,
uint256 _underlying,
uint256 _time
) external pure returns (uint256 estimate);
Options Pricing
Contract: Keep3rV1Volatility
function C(uint t, uint v, uint sp, uint st) external pure returns (uint);
function quoteAll(uint t, uint v, uint sp, uint st) external pure returns (uint call, uint put);
function quotePrice(address tokenIn, address tokenOut, uint t, uint sp, uint st) external view returns (uint call, uint put);
function price(address tokenIn, address tokenOut) external view returns (uint);
function quote(address tokenIn, address tokenOut, uint t) external view returns (uint call, uint put);
Math libs
function optimalExp(uint256 x) external pure returns (uint256);
function ln(uint256 x) external pure returns (uint);
function ncdf(uint x) external pure returns (uint);
function cdf(int x) external pure returns (uint);
function generalLog(uint256 x) external pure returns (uint);
Beta Deployment
UniswapV2Oracle 0xCA2E2df6A7a7Cf5bd19D112E8568910a6C2D3885
Keep3rV1Oracle 0x73353801921417F465377c8d898c6f4C0270282C
Keep3rV1Volatility 0xCCdfCB72753CfD55C5afF5d98eA5f9C43be9659d
Tokens