TradingCommonUtils

External library for helper functions commonly used in many places

getPnlPercent

function getPnlPercent(uint64 _openPrice, uint64 _currentPrice, bool _long, uint24 _leverage) public pure returns (int256 p)

Returns the current percent profit of a trade (1e10 precision)

Parameters

Name
Type
Description

_openPrice

uint64

trade open price (1e10 precision)

_currentPrice

uint64

trade current price (1e10 precision)

_long

bool

true for long, false for short

_leverage

uint24

trade leverage (1e3 precision)

getPositionSizeCollateral

function getPositionSizeCollateral(uint120 _collateralAmount, uint24 _leverage) public pure returns (uint256)

Returns position size of trade in collateral tokens (avoids overflow from uint120 collateralAmount)

Parameters

Name
Type
Description

_collateralAmount

uint120

collateral of trade

_leverage

uint24

leverage of trade (1e3)

getMarketExecutionPrice

Calculates market execution price for a trade (1e10 precision)

Parameters

Name
Type
Description

_price

uint256

price of the asset (1e10)

_spreadP

uint256

spread percentage (1e10)

_long

bool

true if long, false if short

_open

bool

_contractsVersion

enum ITradingStorage.ContractsVersion

convertCollateralToUsd

Converts collateral value to USD (1e18 precision)

Parameters

Name
Type
Description

_collateralAmount

uint256

amount of collateral (collateral precision)

_collateralPrecisionDelta

uint128

precision delta of collateral (10^18/10^decimals)

_collateralPriceUsd

uint256

price of collateral in USD (1e8)

convertCollateralToGns

Converts collateral value to GNS (1e18 precision)

Parameters

Name
Type
Description

_collateralAmount

uint256

amount of collateral (collateral precision)

_collateralPrecisionDelta

uint128

precision delta of collateral (10^18/10^decimals)

_gnsPriceCollateral

uint256

price of GNS in collateral (1e10)

getTradeValuePure

Calculates trade value (useful when closing a trade) Important: does not calculate if trade can be liquidated or not, has to be done by calling function

Parameters

Name
Type
Description

_collateral

uint256

amount of collateral (collateral precision)

_percentProfit

int256

profit percentage (1e10)

_feesCollateral

uint256

borrowing fee + closing fee in collateral tokens (collateral precision)

_collateralPrecisionDelta

uint128

precision delta of collateral (10^18/10^decimals)

getLiqPnlThresholdP

Pure function that returns the liquidation pnl % threshold for a trade (1e10)

Parameters

Name
Type
Description

_params

trade liquidation params

_leverage

uint256

trade leverage (1e3 precision)

getMinPositionSizeCollateral

Returns minimum position size in collateral tokens for a pair (collateral precision)

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_pairIndex

uint256

pair index

getPositionSizeCollateralBasis

Returns position size to use when charging fees

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_pairIndex

uint256

pair index

_positionSizeCollateral

uint256

trade position size in collateral tokens (collateral precision)

isWithinExposureLimits

Checks if total position size is not higher than maximum allowed open interest for a pair

Parameters

Name
Type
Description

_collateralIndex

uint8

index of collateral

_pairIndex

uint16

index of pair

_long

bool

true if long, false if short

_positionSizeCollateralDelta

uint256

position size delta in collateral tokens (collateral precision)

getTradeBorrowingFeeCollateral

Convenient wrapper to return trade borrowing fee in collateral tokens (collateral precision)

Parameters

Name
Type
Description

_trade

trade input

getTradeLiquidationPrice

Convenient wrapper to return trade liquidation price (1e10)

Parameters

Name
Type
Description

_trade

trade input

_useBorrowingFees

bool

getTradeValueCollateral

Returns trade value and borrowing fee in collateral tokens

Parameters

Name
Type
Description

_trade

trade data

_percentProfit

int256

profit percentage (1e10)

_closingFeesCollateral

uint256

closing fees in collateral tokens (collateral precision)

_collateralPrecisionDelta

uint128

precision delta of collateral (10^18/10^decimals)

getTradeOpeningPriceImpact

Returns price impact % (1e10), price after spread and impact (1e10)

Parameters

Name
Type
Description

_contractsVersion

enum ITradingStorage.ContractsVersion

contracts version

getTradeClosingPriceImpact

Returns price impact % (1e10), price after spread and impact (1e10), and trade value used to know if pnl is positive (collateral precision)

Parameters

Name
Type
Description

getTradeLiqPnlThresholdP

Returns a trade's liquidation threshold % (1e10)

Parameters

Name
Type
Description

_trade

trade struct

getTotalTradeFeesCollateral

Returns all fees for a trade in collateral tokens

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_trader

address

address of trader

_pairIndex

uint16

index of pair

_positionSizeCollateral

uint256

position size in collateral tokens (collateral precision)

getTradeFeesCollateral

Returns all fees for a trade in collateral tokens

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_trader

address

address of trader

_pairIndex

uint16

index of pair

_collateralAmount

uint256

trade collateral amount (collateral precision)

_positionSizeCollateral

uint256

trade position size in collateral tokens (collateral precision)

_orderType

enum ITradingStorage.PendingOrderType

corresponding order type

getMinGovFeeCollateral

revertIfTradeHasPendingMarketOrder

Reverts if user initiated any kind of pending market order on his trade

Parameters

Name
Type
Description

_user

address

trade user

_index

uint32

trade index

getGToken

Returns gToken contract for a collateral index

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

transferCollateralFrom

Transfers collateral from trader

Parameters

Name
Type
Description

_collateralIndex

uint8

index of the collateral

_from

address

sending address

_amountCollateral

uint256

amount of collateral to receive (collateral precision)

transferCollateralTo

Transfers collateral to trader

Parameters

Name
Type
Description

_collateralIndex

uint8

index of the collateral

_to

address

receiving address

_amountCollateral

uint256

amount of collateral to transfer (collateral precision)

transferGnsTo

Transfers GNS to address

Parameters

Name
Type
Description

_to

address

receiving address

_amountGns

uint256

amount of GNS to transfer (1e18)

transferGnsFrom

Transfers GNS from address

Parameters

Name
Type
Description

_from

address

sending address

_amountGns

uint256

amount of GNS to receive (1e18)

sendCollateralToVault

Sends collateral to gToken vault for negative pnl

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_amountCollateral

uint256

amount of collateral to send to vault (collateral precision)

_trader

address

trader address

handleTradePnl

Handles pnl transfers when (fully or partially) closing a trade

Parameters

Name
Type
Description

_trade

trade struct

_collateralSentToTrader

int256

total amount to send to trader (collateral precision)

_availableCollateralInDiamond

int256

part of _collateralSentToTrader available in diamond balance (collateral precision)

_borrowingFeeCollateral

uint256

updateFeeTierPoints

Updates a trader's fee tiers points based on his trade size

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_trader

address

address of trader

_pairIndex

uint256

index of pair

_positionSizeCollateral

uint256

position size in collateral tokens (collateral precision)

distributeVaultFeeCollateral

Distributes fee to gToken vault

Parameters

Name
Type
Description

_collateralIndex

uint8

index of collateral

_trader

address

address of trader

_valueCollateral

uint256

fee in collateral tokens (collateral precision)

distributeExactGovFeeCollateral

Distributes gov fees exact amount

Parameters

Name
Type
Description

_collateralIndex

uint8

index of collateral

_trader

address

address of trader

_govFeeCollateral

uint256

position size in collateral tokens (collateral precision)

distributeGnsOtcFeeCollateral

Increases OTC balance to be distributed once OTC is executed

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_trader

address

trader address

_amountCollateral

uint256

amount of collateral tokens to distribute (collateral precision)

distributeTriggerFeeGns

Distributes trigger fee in GNS tokens

Parameters

Name
Type
Description

_trader

address

address of trader

_collateralIndex

uint8

index of collateral

_triggerFeeCollateral

uint256

trigger fee in collateral tokens (collateral precision)

_gnsPriceCollateral

uint256

gns/collateral price (1e10 precision)

_collateralPrecisionDelta

uint128

collateral precision delta (10^18/10^decimals)

processFees

Distributes opening fees for trade and returns the trade fees charged in collateral tokens

Parameters

Name
Type
Description

_trade

trade struct

_positionSizeCollateral

uint256

position size in collateral tokens (collateral precision)

_orderType

enum ITradingStorage.PendingOrderType

trade order type

distributeReferralFeeCollateral

Distributes referral rewards and returns the amount charged in collateral tokens

Parameters

Name
Type
Description

_collateralIndex

uint8

collateral index

_trader

address

address of trader

_positionSizeCollateral

uint256

position size in collateral tokens (collateral precision)

_referralFeeCollateral

uint256

referral fee in collateral tokens (collateral precision)

_gnsPriceCollateral

uint256

gns/collateral price (1e10 precision)

updateOi

_Update protocol open interest (any amount) CAREFUL: this will reset the trade's borrowing fees to 0 when open = true

Parameters

Name
Type
Description

_trade

trade struct

_positionSizeCollateral

uint256

position size in collateral tokens (collateral precision)

_open

bool

whether it corresponds to a trade opening or closing

_isPnlPositive

bool

whether it corresponds to a positive pnl trade (only relevant when _open = false)

updateOiTrade

_Update protocol open interest (trade position size) CAREFUL: this will reset the trade's borrowing fees to 0 when open = true

Parameters

Name
Type
Description

_trade

trade struct

_open

bool

whether it corresponds to a trade opening or closing

_isPnlPositive

bool

whether it corresponds to a positive pnl trade (only relevant when _open = false)

handleOiDelta

Handles OI delta for an existing trade (for trade updates)

Parameters

Name
Type
Description

_trade

trade struct

_newPositionSizeCollateral

uint256

new position size in collateral tokens (collateral precision)

_isPnlPositive

bool

whether it corresponds to a positive pnl trade (only relevant when closing)

_getMultiCollatDiamond

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

Last updated

Was this helpful?