Skip to content

Commit

Permalink
Merge pull request #100 from Premian-Labs/optimize-quote
Browse files Browse the repository at this point in the history
feat: add pool to quote function
  • Loading branch information
froggiedev committed Feb 7, 2024
2 parents a1b9572 + c7bc6b3 commit 36b20a1
Show file tree
Hide file tree
Showing 5 changed files with 96 additions and 55 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@premia/v3-sdk",
"version": "2.4.1",
"version": "2.5.1",
"description": "The official SDK for building applications on Premia V3.",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down
19 changes: 16 additions & 3 deletions src/api/optionAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { BigNumberish, Provider, toBigInt } from 'ethers'
import { get, isEqual } from 'lodash'

import { ZERO_BI } from '../constants'
import { FillableQuote, PoolMinimal, Token } from '../entities'
import { FillableQuote, PoolKey, PoolMinimal, Token } from '../entities'
import { BaseAPI } from './baseAPI'
import { TokenOrAddress } from './tokenAPI'
import { parseNumber } from '../utils'
Expand Down Expand Up @@ -215,6 +215,8 @@ export class OptionAPI extends BaseAPI {
showPoolErrors?: boolean
showOrderbookErrors?: boolean
showVaultErrors?: boolean
poolKey?: PoolKey
pool?: PoolMinimal
}): Promise<FillableQuote> {
const [bestRfqQuote, bestPoolQuote, bestVaultQuote] = await Promise.all([
this.premia.orders
Expand All @@ -224,7 +226,9 @@ export class OptionAPI extends BaseAPI {
options.isBuy,
options.minimumSize,
options.referrer,
options.taker
options.taker,
undefined,
options.pool
)
.catch((e) => {
if (options.showErrors || options.showOrderbookErrors) {
Expand All @@ -241,7 +245,10 @@ export class OptionAPI extends BaseAPI {
options.isBuy,
options.referrer,
options.taker,
options.maxSlippagePercent
options.maxSlippagePercent,
undefined,
options.poolKey,
options.pool
)
.catch((e) => {
if (options.showErrors || options.showPoolErrors) {
Expand Down Expand Up @@ -699,6 +706,10 @@ export class OptionAPI extends BaseAPI {

await Promise.all(
pools.map(async (pool) => {
const poolKey = await this.premia.pools.getPoolKeyFromAddress(
pool.address
)

const _options = {
poolAddress: pool.address,
size: options.size,
Expand All @@ -707,6 +718,8 @@ export class OptionAPI extends BaseAPI {
referrer: options.referrer,
taker: options.taker,
maxSlippagePercent: options.maxSlippagePercent,
pool,
poolKey,
}

if (!quotesByPool[pool.address]) {
Expand Down
40 changes: 25 additions & 15 deletions src/api/ordersAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ import {
OrderbookQuote,
SerializedQuote,
SignatureDomain,
PoolMinimal,
PoolKey,
} from '../entities'

/**
Expand Down Expand Up @@ -110,7 +112,8 @@ export class OrdersAPI extends BaseAPI {
quote: OrderbookQuote,
createdAt?: number,
referrer?: string,
provider?: Provider
provider?: Provider,
pool?: PoolMinimal
): Promise<FillableQuote> {
const poolContract = this.premia.contracts.getPoolContract(
poolAddress,
Expand All @@ -123,8 +126,8 @@ export class OrdersAPI extends BaseAPI {
: toBigInt(size)
const normalizedPremium = (_size * price) / WAD_BI

const [pool, takerFee] = await Promise.all([
this.premia.pools.getPoolMinimal(poolAddress),
const [_pool, takerFee] = await Promise.all([
pool ?? this.premia.pools.getPoolMinimal(poolAddress),
this.premia.pools.takerFee(
poolAddress,
_size,
Expand All @@ -136,19 +139,19 @@ export class OrdersAPI extends BaseAPI {
),
])

const denormalizedPrice = pool.isCall
const denormalizedPrice = _pool.isCall
? price
: (price * toBigInt(pool.strike)) / WAD_BI
: (price * toBigInt(_pool.strike)) / WAD_BI
const convertedPrice = convertDecimals(
denormalizedPrice,
WAD_DECIMALS,
pool.collateralAsset.decimals
_pool.collateralAsset.decimals
)

const premium = convertDecimals(
(_size * denormalizedPrice) / WAD_BI,
WAD_DECIMALS,
pool.collateralAsset.decimals
_pool.collateralAsset.decimals
)

const approvalAmount = quote.isBuy
Expand All @@ -158,7 +161,7 @@ export class OrdersAPI extends BaseAPI {
return {
...quote,
createdAt,
pool,
pool: _pool,
deadline: toBigInt(quote.deadline),
price: convertedPrice,
salt: toBigInt(quote.salt),
Expand Down Expand Up @@ -239,7 +242,8 @@ export class OrdersAPI extends BaseAPI {
minimumSize?: BigNumberish,
referrer?: string,
taker?: string,
provider?: Provider
provider?: Provider,
pool?: PoolMinimal
): Promise<FillableQuote | null> {
let quotes = await this.premia.orderbook.getQuotes(
poolAddress,
Expand Down Expand Up @@ -270,7 +274,8 @@ export class OrdersAPI extends BaseAPI {
bestQuote,
bestQuote.ts,
referrer,
provider
provider,
pool
)
}

Expand All @@ -297,6 +302,8 @@ export class OrdersAPI extends BaseAPI {
referrer?: string
taker?: string
provider?: Provider
poolKey?: PoolKey
pool?: PoolMinimal
},
callback: (quote: FillableQuote | null) => void
): Promise<void> {
Expand All @@ -309,10 +316,12 @@ export class OrdersAPI extends BaseAPI {
}

try {
const poolKey = await this.premia.pools.getPoolKeyFromAddress(
options.poolAddress,
options.provider
)
const poolKey =
options.poolKey ??
(await this.premia.pools.getPoolKeyFromAddress(
options.poolAddress,
options.provider
))

let [, bestQuote] = await Promise.all([
this.premia.orderbook.publishRFQ({
Expand All @@ -329,7 +338,8 @@ export class OrdersAPI extends BaseAPI {
options.minimumSize,
options.referrer,
options.taker,
options.provider
options.provider,
options.pool
),
])

Expand Down
26 changes: 18 additions & 8 deletions src/api/poolAPI.ts
Original file line number Diff line number Diff line change
Expand Up @@ -546,18 +546,22 @@ export class PoolAPI extends BaseAPI {
referrer?: string,
taker?: string,
maxSlippagePercent?: number,
provider?: Provider
provider?: Provider,
poolKey?: PoolKey,
pool?: PoolMinimal
): Promise<FillableQuote> {
const _size = toBigInt(size)
const poolContract = this.premia.contracts.getPoolContract(
poolAddress,
provider ?? this.premia.multicallProvider
)
const [poolKey, quote, pool] = await Promise.all([
this.getPoolKeyFromAddress(poolAddress, provider),

const [quote, _poolKey, _pool] = await Promise.all([
poolContract.getQuoteAMM(taker ?? ZeroAddress, _size, isBuy),
this.getPoolMinimal(poolAddress),
poolKey ?? this.getPoolKeyFromAddress(poolAddress, provider),
pool ?? this.getPoolMinimal(poolAddress),
])

const premiumLimit = maxSlippagePercent
? this.premia.pricing.premiumLimit(
quote.premiumNet,
Expand All @@ -567,8 +571,8 @@ export class PoolAPI extends BaseAPI {
: quote.premiumNet

return {
pool,
poolKey,
pool: _pool,
poolKey: _poolKey,
provider: poolAddress,
taker: ZeroAddress,
price: (quote.premiumNet * WAD_BI) / _size,
Expand Down Expand Up @@ -617,6 +621,8 @@ export class PoolAPI extends BaseAPI {
maxSlippagePercent?: number
showErrors?: boolean
provider?: Provider
poolKey?: PoolKey
pool?: PoolMinimal
},
callback: (quote: FillableQuote | null) => void
): Promise<void> {
Expand All @@ -639,7 +645,9 @@ export class PoolAPI extends BaseAPI {
options.referrer,
options.taker,
options.maxSlippagePercent,
options.provider
options.provider,
options.poolKey,
options.pool
).catch()

callbackIfNotStale(bestQuote)
Expand All @@ -662,7 +670,9 @@ export class PoolAPI extends BaseAPI {
options.referrer,
options.taker,
options.maxSlippagePercent,
options.provider
options.provider,
options.poolKey,
options.pool
).catch()

callbackIfNotStale(quote)
Expand Down
Loading

0 comments on commit 36b20a1

Please sign in to comment.