PriceImpactUtils

_GNSPriceImpact facet internal library

This is a library to help manage a price impact decay algorithm .

When a trade is placed, OI is added to the window corresponding to time of open. When a trade is removed, OI is removed from the window corresponding to time of open.

When calculating price impact, only the most recent X windows are taken into account._

validWindowsDuration

modifier validWindowsDuration(uint48 _windowsDuration)

Validates new windowsDuration value

initializePriceImpact

function initializePriceImpact(uint48 _windowsDuration, uint48 _windowsCount) internal

Check IPriceImpactUtils interface for documentation

initializeNegPnlCumulVolMultiplier

function initializeNegPnlCumulVolMultiplier(uint40 _negPnlCumulVolMultiplier) internal

Check IPriceImpactUtils interface for documentation

initializePairFactors

function initializePairFactors(uint16[] _pairIndices, uint40[] _protectionCloseFactors, uint32[] _protectionCloseFactorBlocks, uint40[] _cumulativeFactors) internal

Check IPriceImpactUtils interface for documentation

setPriceImpactWindowsCount

function setPriceImpactWindowsCount(uint48 _newWindowsCount) internal

Check IPriceImpactUtils interface for documentation

setPriceImpactWindowsDuration

function setPriceImpactWindowsDuration(uint48 _newWindowsDuration, uint256 _pairsCount) internal

Check IPriceImpactUtils interface for documentation

setNegPnlCumulVolMultiplier

function setNegPnlCumulVolMultiplier(uint40 _negPnlCumulVolMultiplier) internal

Check IPriceImpactUtils interface for documentation

setProtectionCloseFactorWhitelist

function setProtectionCloseFactorWhitelist(address[] _traders, bool[] _whitelisted) internal

Check IPriceImpactUtils interface for documentation

setPairDepths

function setPairDepths(uint256[] _indices, uint128[] _depthsAboveUsd, uint128[] _depthsBelowUsd) internal

Check IPriceImpactUtils interface for documentation

setProtectionCloseFactors

function setProtectionCloseFactors(uint16[] _pairIndices, uint40[] _protectionCloseFactors) internal

Check IPriceImpactUtils interface for documentation

setProtectionCloseFactorBlocks

function setProtectionCloseFactorBlocks(uint16[] _pairIndices, uint32[] _protectionCloseFactorBlocks) internal

Check IPriceImpactUtils interface for documentation

setCumulativeFactors

function setCumulativeFactors(uint16[] _pairIndices, uint40[] _cumulativeFactors) internal

Check IPriceImpactUtils interface for documentation

setExemptOnOpen

function setExemptOnOpen(uint16[] _pairIndices, bool[] _exemptOnOpen) internal

Check IPriceImpactUtils interface for documentation

setExemptAfterProtectionCloseFactor

function setExemptAfterProtectionCloseFactor(uint16[] _pairIndices, bool[] _exemptAfterProtectionCloseFactor) internal

Check IPriceImpactUtils interface for documentation

addPriceImpactOpenInterest

function addPriceImpactOpenInterest(address _trader, uint32 _index, uint256 _oiDeltaCollateral, bool _open, bool _isPnlPositive) internal

Check IPriceImpactUtils interface for documentation

getPriceImpactOi

function getPriceImpactOi(uint256 _pairIndex, bool _long) internal view returns (uint256 activeOi)

Check IPriceImpactUtils interface for documentation

getTradePriceImpact

function getTradePriceImpact(address _trader, uint256 _marketPrice, uint256 _pairIndex, bool _long, uint256 _tradeOpenInterestUsd, bool _isPnlPositive, bool _open, uint256 _lastPosIncreaseBlock, enum ITradingStorage.ContractsVersion _contractsVersion) internal view returns (uint256 priceImpactP, uint256 priceAfterImpact)

Check IPriceImpactUtils interface for documentation

getPairDepth

function getPairDepth(uint256 _pairIndex) internal view returns (struct IPriceImpact.PairDepth)

Check IPriceImpactUtils interface for documentation

getOiWindowsSettings

function getOiWindowsSettings() internal view returns (struct IPriceImpact.OiWindowsSettings)

Check IPriceImpactUtils interface for documentation

getOiWindow

function getOiWindow(uint48 _windowsDuration, uint256 _pairIndex, uint256 _windowId) internal view returns (struct IPriceImpact.PairOi)

Check IPriceImpactUtils interface for documentation

getOiWindows

function getOiWindows(uint48 _windowsDuration, uint256 _pairIndex, uint256[] _windowIds) internal view returns (struct IPriceImpact.PairOi[])

Check IPriceImpactUtils interface for documentation

getPairDepths

function getPairDepths(uint256[] _indices) internal view returns (struct IPriceImpact.PairDepth[])

Check IPriceImpactUtils interface for documentation

getPairFactors

function getPairFactors(uint256[] _indices) internal view returns (struct IPriceImpact.PairFactors[] pairFactors)

Check IPriceImpactUtils interface for documentation

getNegPnlCumulVolMultiplier

function getNegPnlCumulVolMultiplier() internal view returns (uint40)

Check IPriceImpactUtils interface for documentation

getProtectionCloseFactorWhitelist

function getProtectionCloseFactorWhitelist(address _trader) internal view returns (bool)

Check IPriceImpactUtils interface for documentation

_getSlot

function _getSlot() internal pure returns (uint256)

Returns storage slot to use when fetching storage relevant to library

_getStorage

function _getStorage() internal pure returns (struct IPriceImpact.PriceImpactStorage s)

Returns storage pointer for storage struct in diamond contract, at defined slot

_getMultiCollatDiamond

function _getMultiCollatDiamond() internal view returns (contract IGNSMultiCollatDiamond)

Returns current address as multi-collateral diamond interface to call other facets functions.

_transferPriceImpactOiForPairs

function _transferPriceImpactOiForPairs(uint256 _pairsCount, mapping(uint256 => mapping(uint256 => struct IPriceImpact.PairOi)) _prevPairOiWindows, mapping(uint256 => mapping(uint256 => struct IPriceImpact.PairOi)) _newPairOiWindows, struct IPriceImpact.OiWindowsSettings _settings, uint48 _newWindowsDuration) internal

_Transfers total long / short OI from last '_settings.windowsCount' windows of _prevPairOiWindows to current window of _newPairOiWindows for _pairsCount pairs.

Emits a {PriceImpactOiTransferredPairs} event._

Parameters

Name
Type
Description

_pairsCount

uint256

number of pairs

_prevPairOiWindows

mapping(uint256 => mapping(uint256 => struct IPriceImpact.PairOi))

previous pair OI windows (previous windowsDuration mapping)

_newPairOiWindows

mapping(uint256 => mapping(uint256 => struct IPriceImpact.PairOi))

new pair OI windows (new windowsDuration mapping)

_settings

current OI windows settings

_newWindowsDuration

uint48

new windows duration

_transferPriceImpactOiForPair

function _transferPriceImpactOiForPair(uint256 _pairIndex, uint256 _prevCurrentWindowId, uint256 _prevEarliestWindowId, mapping(uint256 => struct IPriceImpact.PairOi) _prevPairOiWindows, struct IPriceImpact.PairOi _newPairOiWindow) internal

_Transfers total long / short OI from prevEarliestWindowId to prevCurrentWindowId windows of _prevPairOiWindows to _newPairOiWindow window.

Emits a {PriceImpactOiTransferredPair} event._

Parameters

Name
Type
Description

_pairIndex

uint256

index of the pair

_prevCurrentWindowId

uint256

previous current window ID

_prevEarliestWindowId

uint256

previous earliest active window ID

_prevPairOiWindows

mapping(uint256 => struct IPriceImpact.PairOi)

previous pair OI windows (previous windowsDuration mapping)

_newPairOiWindow

new pair OI window (new windowsDuration mapping)

_getWindowId

function _getWindowId(uint48 _timestamp, struct IPriceImpact.OiWindowsSettings _settings) internal pure returns (uint256)

Returns window id at _timestamp given _settings.

Parameters

Name
Type
Description

_timestamp

uint48

timestamp

_settings

OI windows settings

_getCurrentWindowId

function _getCurrentWindowId(struct IPriceImpact.OiWindowsSettings _settings) internal view returns (uint256)

Returns window id at current timestamp given _settings.

Parameters

Name
Type
Description

_settings

OI windows settings

_getEarliestActiveWindowId

function _getEarliestActiveWindowId(uint256 _currentWindowId, uint48 _windowsCount) internal pure returns (uint256)

Returns earliest active window id given _currentWindowId and _windowsCount.

Parameters

Name
Type
Description

_currentWindowId

uint256

current window id

_windowsCount

uint48

active windows count

_isWindowPotentiallyActive

function _isWindowPotentiallyActive(uint256 _windowId, uint256 _currentWindowId) internal pure returns (bool)

_Returns whether 'windowId' can be potentially active id given _currentWindowId

Parameters

Name
Type
Description

_windowId

uint256

window id

_currentWindowId

uint256

current window id

_getTradePriceImpact

function _getTradePriceImpact(uint256 _marketPrice, bool _long, uint256 _startOpenInterestUsd, uint256 _tradeOpenInterestUsd, uint256 _onePercentDepthUsd, bool _open, uint256 _protectionCloseFactor, uint256 _cumulativeFactor, enum ITradingStorage.ContractsVersion _contractsVersion) internal pure returns (uint256 priceImpactP, uint256 priceAfterImpact)

Returns trade price impact % and opening price after impact.

Parameters

Name
Type
Description

_marketPrice

uint256

market price (1e10 precision)

_long

bool

true for long, false for short

_startOpenInterestUsd

uint256

existing open interest of pair on trade side in USD (1e18 precision)

_tradeOpenInterestUsd

uint256

open interest of trade in USD (1e18 precision)

_onePercentDepthUsd

uint256

one percent depth of pair in USD on trade side

_open

bool

true for open, false for close

_protectionCloseFactor

uint256

protection close factor (1e10 precision)

_cumulativeFactor

uint256

cumulative factor (1e10 precision)

_contractsVersion

enum ITradingStorage.ContractsVersion

trade contracts version

Last updated