import { UnifiedPairOi } from "../../.."; import { OpenInterest, PairIndex } from "../../types"; import * as BorrowingFee from "./types"; export type GetBorrowingFeeContext = { currentBlock: number; groups: BorrowingFee.Group[]; pairs: BorrowingFee.Pair[]; collateralPriceUsd: number; pairOis: UnifiedPairOi[]; }; /** * @dev Calculates borrowing fees using v1 model (block-based with groups) * @dev Still actively used by markets that haven't migrated to v2 * @dev Uses dynamic collateral OI - converts OI to USD for fee calculations * @param posDai Position size in collateral * @param pairIndex Trading pair index (required) * @param long Whether position is long * @param initialAccFees Initial accumulated fees when trade was opened * @param context Context with current block, fee data, and collateral price * @returns Borrowing fee in collateral tokens */ export declare const getBorrowingFee: (posDai: number, pairIndex: PairIndex | undefined, long: boolean, initialAccFees: BorrowingFee.InitialAccFees, currentPairPrice: number, context: GetBorrowingFeeContext) => number; /** * @dev This function uses static OI which doesn't reflect current market values * @dev The v10 contracts use dynamic OI (beforeV10 + afterV10Token * currentPrice) */ export declare const withinMaxGroupOi: (pairIndex: PairIndex, long: boolean, positionSizeCollateral: number, context: { groups: BorrowingFee.Group[]; pairs: BorrowingFee.Pair[]; }) => boolean; export declare const borrowingFeeUtils: { getPairGroupAccFeesDeltas: (i: number, pairGroups: BorrowingFee.PairGroup[], initialFees: BorrowingFee.InitialAccFees, pairIndex: PairIndex, long: boolean, currentPairPrice: number, context: GetBorrowingFeeContext) => { deltaGroup: number; deltaPair: number; beforeTradeOpen: boolean; }; getPairPendingAccFees: (pairIndex: PairIndex, currentBlock: number, context: { pairs: BorrowingFee.Pair[]; openInterest: OpenInterest; collateralPriceUsd: number; }) => { accFeeLong: number; accFeeShort: number; deltaLong: number; deltaShort: number; }; getPairPendingAccFee: (pairIndex: PairIndex, currentBlock: number, long: boolean, context: { pairs: BorrowingFee.Pair[]; openInterest: OpenInterest; collateralPriceUsd: number; }) => number; getGroupPendingAccFees: (groupIndex: number, currentBlock: number, context: { groups: BorrowingFee.Group[]; collateralPriceUsd: number; }) => { accFeeLong: number; accFeeShort: number; deltaLong: number; deltaShort: number; }; getGroupPendingAccFee: (groupIndex: number, currentBlock: number, long: boolean, context: { groups: BorrowingFee.Group[]; collateralPriceUsd: number; }) => number; getPendingAccFees: (accFeeLong: number, accFeeShort: number, oiLong: number, oiShort: number, feePerBlock: number, currentBlock: number, accLastUpdatedBlock: number, maxOi: number, feeExponent: number, feeCaps?: BorrowingFee.BorrowingFeePerBlockCap, collateralPriceUsd?: number) => { accFeeLong: number; accFeeShort: number; deltaLong: number; deltaShort: number; }; getActiveFeePerBlock: (pair: BorrowingFee.Pair, group: BorrowingFee.Group | undefined) => number; getBorrowingDataActiveFeePerBlock: (val: BorrowingFee.Pair | BorrowingFee.Group) => number; getPairGroupIndex: (pairIndex: PairIndex, context: { pairs: BorrowingFee.Pair[]; }) => number; getPendingAccFeesDelta: (blockDistance: number, feePerBlock: number, netOi: number, maxOi: number, feeExponent: number) => number; getFeePerBlockCaps: (cap?: BorrowingFee.BorrowingFeePerBlockCap) => BorrowingFee.BorrowingFeePerBlockCap; }; export * as BorrowingFee from "./types"; export * from "./converter"; export * from "./builder";