@sentio/sdk 2.15.0-rc.4 → 2.15.0-rc.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -13,3 +13,4 @@ export declare class AptosDex<T> extends MoveDex<AptosNetwork, MoveModuleBytecod
13
13
  coinList: CoinList;
14
14
  poolAdaptor: PoolAdaptor<T>;
15
15
  }
16
+ export declare function getPairValue(ctx: AptosContext, coinx: string, coiny: string, coinXAmount: bigint, coinYAmount: bigint): Promise<BigDecimal>;
@@ -1,5 +1,5 @@
1
1
  import { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js';
2
- import { MoveDex } from '../../move/ext/index.js';
2
+ import { MoveDex, moveGetPairValue } from '../../move/ext/index.js';
3
3
  export class CoinList {
4
4
  calculateValueInUsd(amount, coinInfo, timestamp) {
5
5
  return calculateValueInUsd(amount, coinInfo, timestamp);
@@ -18,4 +18,7 @@ export const AptosCoinList = new CoinList();
18
18
  export class AptosDex extends MoveDex {
19
19
  coinList = new CoinList();
20
20
  }
21
+ export async function getPairValue(ctx, coinx, coiny, coinXAmount, coinYAmount) {
22
+ return moveGetPairValue(AptosCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount);
23
+ }
21
24
  //# sourceMappingURL=aptos-dex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aptos-dex.js","sourceRoot":"","sources":["../../../src/aptos/ext/aptos-dex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASzF,OAAO,EAAgB,OAAO,EAAmC,MAAM,yBAAyB,CAAA;AAIhG,MAAM,OAAO,QAAQ;IACnB,mBAAmB,CAAC,MAAc,EAAE,QAAwB,EAAE,SAAiB;QAC7E,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,QAAQ,EAAE,CAAA;AAE3C,MAAM,OAAO,QAAY,SAAQ,OAQhC;IACC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;CAE1B","sourcesContent":["import { BigDecimal } from '@sentio/bigdecimal'\nimport { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js'\nimport {\n AptosResourcesContext,\n MoveResource,\n AptosContext,\n AptosNetwork,\n MoveModuleBytecode,\n Event,\n} from '@sentio/sdk/aptos'\nimport { MoveCoinList, MoveDex, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'\n\nexport type PoolAdaptor<T> = MovePoolAdaptor<MoveResource, T>\n\nexport class CoinList implements MoveCoinList {\n calculateValueInUsd(amount: bigint, coinInfo: SimpleCoinInfo, timestamp: number): Promise<BigDecimal> {\n return calculateValueInUsd(amount, coinInfo, timestamp)\n }\n\n getCoinInfo(type: string): SimpleCoinInfo {\n return getCoinInfo(type)\n }\n\n whiteListed(type: string): boolean {\n return whiteListed(type)\n }\n\n whitelistCoins(): Map<string, SimpleCoinInfo> {\n return whitelistCoins()\n }\n}\n\nexport const AptosCoinList = new CoinList()\n\nexport class AptosDex<T> extends MoveDex<\n AptosNetwork,\n MoveModuleBytecode,\n MoveResource,\n Event,\n AptosContext,\n AptosResourcesContext,\n T\n> {\n coinList = new CoinList()\n declare poolAdaptor: PoolAdaptor<T>\n}\n"]}
1
+ {"version":3,"file":"aptos-dex.js","sourceRoot":"","sources":["../../../src/aptos/ext/aptos-dex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AASzF,OAAO,EAAgB,OAAO,EAAE,gBAAgB,EAAmC,MAAM,yBAAyB,CAAA;AAIlH,MAAM,OAAO,QAAQ;IACnB,mBAAmB,CAAC,MAAc,EAAE,QAAwB,EAAE,SAAiB;QAC7E,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,QAAQ,EAAE,CAAA;AAE3C,MAAM,OAAO,QAAY,SAAQ,OAQhC;IACC,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAA;CAE1B;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAiB,EACjB,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,WAAmB;IAEnB,OAAO,gBAAgB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACrF,CAAC","sourcesContent":["import { BigDecimal } from '@sentio/bigdecimal'\nimport { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js'\nimport {\n AptosResourcesContext,\n MoveResource,\n AptosContext,\n AptosNetwork,\n MoveModuleBytecode,\n Event,\n} from '@sentio/sdk/aptos'\nimport { MoveCoinList, MoveDex, moveGetPairValue, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'\n\nexport type PoolAdaptor<T> = MovePoolAdaptor<MoveResource, T>\n\nexport class CoinList implements MoveCoinList {\n calculateValueInUsd(amount: bigint, coinInfo: SimpleCoinInfo, timestamp: number): Promise<BigDecimal> {\n return calculateValueInUsd(amount, coinInfo, timestamp)\n }\n\n getCoinInfo(type: string): SimpleCoinInfo {\n return getCoinInfo(type)\n }\n\n whiteListed(type: string): boolean {\n return whiteListed(type)\n }\n\n whitelistCoins(): Map<string, SimpleCoinInfo> {\n return whitelistCoins()\n }\n}\n\nexport const AptosCoinList = new CoinList()\n\nexport class AptosDex<T> extends MoveDex<\n AptosNetwork,\n MoveModuleBytecode,\n MoveResource,\n Event,\n AptosContext,\n AptosResourcesContext,\n T\n> {\n coinList = new CoinList()\n declare poolAdaptor: PoolAdaptor<T>\n}\n\nexport async function getPairValue(\n ctx: AptosContext,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint\n): Promise<BigDecimal> {\n return moveGetPairValue(AptosCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount)\n}\n"]}
@@ -30,5 +30,5 @@ export declare class MoveDex<Network, ModuleType, StructType, EventType, Context
30
30
  recordTradingVolume(ctx: ContextType, coinx: string, coiny: string, coinXAmount: bigint, coinYAmount: bigint, extraLabels?: any): Promise<BigDecimal>;
31
31
  syncPools(resources: StructType[], ctx: AccountContextType, poolsHandler?: (pools: DecodedStruct<StructType, T>[]) => Promise<void> | void): Promise<void>;
32
32
  getPair(coinx: string, coiny: string): Promise<string>;
33
- getPairValue(ctx: ContextType, coinx: string, coiny: string, coinXAmount: bigint, coinYAmount: bigint): Promise<BigDecimal>;
34
33
  }
34
+ export declare function moveGetPairValue<ContextType extends MoveAccountContext<any, any, any>>(coinList: MoveCoinList, ctx: ContextType, coinx: string, coiny: string, coinXAmount: bigint, coinYAmount: bigint): Promise<BigDecimal>;
@@ -151,30 +151,30 @@ export class MoveDex {
151
151
  }
152
152
  return `${coinXInfo.symbol}-${coinYInfo.symbol}`;
153
153
  }
154
- async getPairValue(ctx, coinx, coiny, coinXAmount, coinYAmount) {
155
- const whitelistx = this.coinList.whiteListed(coinx);
156
- const whitelisty = this.coinList.whiteListed(coiny);
157
- const coinXInfo = await this.coinList.getCoinInfo(coinx);
158
- const coinYInfo = await this.coinList.getCoinInfo(coiny);
159
- const timestamp = ctx.getTimestamp();
160
- let result = BigDecimal(0.0);
161
- if (!whitelistx || !whitelisty) {
162
- return result;
163
- }
164
- if (whitelistx) {
165
- const value = await this.coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp);
166
- result = value;
167
- if (!whitelisty) {
168
- result = result.plus(value);
169
- }
154
+ }
155
+ export async function moveGetPairValue(coinList, ctx, coinx, coiny, coinXAmount, coinYAmount) {
156
+ const whitelistx = coinList.whiteListed(coinx);
157
+ const whitelisty = coinList.whiteListed(coiny);
158
+ const coinXInfo = await coinList.getCoinInfo(coinx);
159
+ const coinYInfo = await coinList.getCoinInfo(coiny);
160
+ const timestamp = ctx.getTimestamp();
161
+ let result = BigDecimal(0.0);
162
+ if (!whitelistx || !whitelisty) {
163
+ return result;
164
+ }
165
+ if (whitelistx) {
166
+ const value = await coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp);
167
+ result = value;
168
+ if (!whitelisty) {
169
+ result = result.plus(value);
170
170
  }
171
- if (whitelisty) {
172
- const value = await this.coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp);
173
- if (!whitelistx) {
174
- result = result.plus(value);
175
- }
171
+ }
172
+ if (whitelisty) {
173
+ const value = await coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp);
174
+ if (!whitelistx) {
175
+ result = result.plus(value);
176
176
  }
177
- return result;
178
177
  }
178
+ return result;
179
179
  }
180
180
  //# sourceMappingURL=move-dex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"move-dex.js","sourceRoot":"","sources":["../../../src/move/ext/move-dex.ts"],"names":[],"mappings":"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","sourcesContent":["import { DecodedStruct, TypeDescriptor } from '../types.js'\nimport { BigDecimal } from '@sentio/bigdecimal'\nimport { Gauge } from '../../core/index.js'\nimport { MoveAccountContext, MoveContext } from '../move-context.js'\nimport { MoveCoinList } from './coin-list.js'\n\nexport interface SimpleCoinInfo {\n token_type: { type: string; account_address: string }\n symbol: string\n decimals: number\n bridge: string\n}\n\nexport interface MovePoolAdaptor<StructType, T> {\n getXReserve(pool: T): bigint\n\n getYReserve(pool: T): bigint\n\n getExtraPoolTags(pool: DecodedStruct<StructType, T>): any\n\n poolType: TypeDescriptor<T>\n}\n\nexport class MoveDex<\n Network,\n ModuleType,\n StructType,\n EventType,\n ContextType extends MoveContext<Network, ModuleType, StructType | EventType>,\n AccountContextType extends MoveAccountContext<Network, ModuleType, StructType | EventType>,\n T\n> {\n coinList: MoveCoinList\n poolAdaptor: MovePoolAdaptor<StructType, T>\n volume: Gauge\n volumeByCoin: Gauge\n tvlAll: Gauge\n tvlByPool: Gauge\n tvlByCoin: Gauge\n\n constructor(\n volume: Gauge,\n volumeByCoin: Gauge,\n tvlAll: Gauge,\n tvlByCoin: Gauge,\n tvlByPool: Gauge,\n poolAdaptor: MovePoolAdaptor<StructType, T>\n ) {\n this.volume = volume\n this.volumeByCoin = volumeByCoin\n this.tvlAll = tvlAll\n this.tvlByPool = tvlByPool\n this.tvlByCoin = tvlByCoin\n this.poolAdaptor = poolAdaptor\n }\n\n async recordTradingVolume(\n ctx: ContextType,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint,\n extraLabels?: any\n ): Promise<BigDecimal> {\n let result = BigDecimal(0)\n\n const whitelistx = this.coinList.whiteListed(coinx)\n const whitelisty = this.coinList.whiteListed(coiny)\n if (!whitelistx && !whitelisty) {\n return result\n }\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n const timestamp = ctx.getTimestamp()\n let resultX = BigDecimal(0)\n let resultY = BigDecimal(0)\n const pair = await this.getPair(coinx, coiny)\n const baseLabels: Record<string, string> = extraLabels ? { ...extraLabels, pair } : { pair }\n if (whitelistx) {\n resultX = await this.coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)\n }\n if (whitelisty) {\n resultY = await this.coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)\n }\n if (resultX.eq(0)) {\n resultX = BigDecimal(resultY)\n }\n if (resultY.eq(0)) {\n resultY = BigDecimal(resultX)\n }\n const total = resultX.plus(resultY)\n if (total.gt(0)) {\n this.volume.record(ctx, total, {\n ...baseLabels,\n bridge: coinXInfo.bridge,\n })\n }\n if (resultX.gt(0)) {\n this.volumeByCoin.record(ctx, resultX, {\n coin: coinXInfo.symbol,\n bridge: coinXInfo.bridge,\n type: coinXInfo.token_type.type,\n })\n }\n if (resultY.gt(0)) {\n this.volumeByCoin.record(ctx, resultY, {\n coin: coinYInfo.symbol,\n bridge: coinYInfo.bridge,\n type: coinYInfo.token_type.type,\n })\n }\n result = resultX.plus(resultY).div(2)\n return result\n }\n\n async syncPools(\n resources: StructType[],\n ctx: AccountContextType,\n poolsHandler?: (pools: DecodedStruct<StructType, T>[]) => Promise<void> | void\n ) {\n const pools = await ctx.coder.filterAndDecodeStruct(this.poolAdaptor.poolType, resources)\n\n const volumeByCoin = new Map<string, BigDecimal>()\n const timestamp = ctx.getTimestamp()\n\n console.log('num of pools: ', pools.length, timestamp)\n\n let tvlAllValue = BigDecimal(0)\n for (const pool of pools) {\n // savePool(ctx.version, pool.type_arguments)\n const coinx = pool.type_arguments[0]\n const coiny = pool.type_arguments[1]\n const whitelistx = this.coinList.whiteListed(coinx)\n const whitelisty = this.coinList.whiteListed(coiny)\n if (!whitelistx && !whitelisty) {\n continue\n }\n\n const pair = await this.getPair(coinx, coiny)\n const extraLabels = this.poolAdaptor.getExtraPoolTags(pool)\n const baseLabels: Record<string, string> = { ...extraLabels, pair }\n\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n\n const coinx_amount = this.poolAdaptor.getXReserve(pool.data_decoded)\n const coiny_amount = this.poolAdaptor.getYReserve(pool.data_decoded)\n\n let resultX = BigDecimal(0)\n let resultY = BigDecimal(0)\n\n if (whitelistx) {\n resultX = await this.coinList.calculateValueInUsd(coinx_amount, coinXInfo, timestamp)\n let coinXTotal = volumeByCoin.get(coinXInfo.token_type.type)\n if (!coinXTotal) {\n coinXTotal = resultX\n } else {\n coinXTotal = coinXTotal.plus(resultX)\n }\n volumeByCoin.set(coinXInfo.token_type.type, coinXTotal)\n }\n if (whitelisty) {\n resultY = await this.coinList.calculateValueInUsd(coiny_amount, coinYInfo, timestamp)\n let coinYTotal = volumeByCoin.get(coinYInfo.token_type.type)\n if (!coinYTotal) {\n coinYTotal = resultY\n } else {\n coinYTotal = coinYTotal.plus(resultY)\n }\n volumeByCoin.set(coinYInfo.token_type.type, coinYTotal)\n }\n\n if (resultX.eq(0)) {\n resultX = BigDecimal(resultY)\n }\n if (resultY.eq(0)) {\n resultY = BigDecimal(resultX)\n }\n\n const poolValue = resultX.plus(resultY)\n\n if (poolValue.isGreaterThan(0)) {\n this.tvlByPool.record(ctx, poolValue, baseLabels)\n }\n tvlAllValue = tvlAllValue.plus(poolValue)\n }\n this.tvlAll.record(ctx, tvlAllValue)\n\n if (poolsHandler) {\n poolsHandler(pools)\n }\n\n for (const [k, v] of volumeByCoin) {\n const coinInfo = this.coinList.whitelistCoins().get(k)\n if (!coinInfo) {\n throw Error('unexpected coin ' + k)\n }\n // const price = await getPrice(coinInfo, timestamp)\n // priceGauge.record(ctx, price, { coin: coinInfo.symbol })\n if (v.isGreaterThan(0)) {\n this.tvlByCoin.record(ctx, v, {\n coin: coinInfo.symbol,\n bridge: coinInfo.bridge,\n type: coinInfo.token_type.type,\n })\n }\n }\n }\n\n async getPair(coinx: string, coiny: string): Promise<string> {\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n if (coinXInfo.symbol.localeCompare(coinYInfo.symbol) > 0) {\n return `${coinYInfo.symbol}-${coinXInfo.symbol}`\n }\n return `${coinXInfo.symbol}-${coinYInfo.symbol}`\n }\n\n async getPairValue(\n ctx: ContextType,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint\n ): Promise<BigDecimal> {\n const whitelistx = this.coinList.whiteListed(coinx)\n const whitelisty = this.coinList.whiteListed(coiny)\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n const timestamp = ctx.getTimestamp()\n let result = BigDecimal(0.0)\n\n if (!whitelistx || !whitelisty) {\n return result\n }\n\n if (whitelistx) {\n const value = await this.coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)\n result = value\n\n if (!whitelisty) {\n result = result.plus(value)\n }\n }\n if (whitelisty) {\n const value = await this.coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)\n\n if (!whitelistx) {\n result = result.plus(value)\n }\n }\n\n return result\n }\n}\n"]}
1
+ {"version":3,"file":"move-dex.js","sourceRoot":"","sources":["../../../src/move/ext/move-dex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAsB/C,MAAM,OAAO,OAAO;IASlB,QAAQ,CAAc;IACtB,WAAW,CAAgC;IAC3C,MAAM,CAAO;IACb,YAAY,CAAO;IACnB,MAAM,CAAO;IACb,SAAS,CAAO;IAChB,SAAS,CAAO;IAEhB,YACE,MAAa,EACb,YAAmB,EACnB,MAAa,EACb,SAAgB,EAChB,SAAgB,EAChB,WAA2C;QAE3C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,GAAgB,EAChB,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,WAAmB,EACnB,WAAiB;QAEjB,IAAI,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAE1B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;YAC9B,OAAO,MAAM,CAAA;SACd;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAA;QACpC,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC7C,MAAM,UAAU,GAA2B,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;QAC5F,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;SACrF;QACD,IAAI,UAAU,EAAE;YACd,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;SACrF;QACD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACjB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;SAC9B;QACD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACjB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;SAC9B;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;gBAC7B,GAAG,UAAU;gBACb,MAAM,EAAE,SAAS,CAAC,MAAM;aACzB,CAAC,CAAA;SACH;QACD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;gBACrC,IAAI,EAAE,SAAS,CAAC,MAAM;gBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI;aAChC,CAAC,CAAA;SACH;QACD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;YACjB,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE;gBACrC,IAAI,EAAE,SAAS,CAAC,MAAM;gBACtB,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,IAAI,EAAE,SAAS,CAAC,UAAU,CAAC,IAAI;aAChC,CAAC,CAAA;SACH;QACD,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,SAAS,CACb,SAAuB,EACvB,GAAuB,EACvB,YAA8E;QAE9E,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAEzF,MAAM,YAAY,GAAG,IAAI,GAAG,EAAsB,CAAA;QAClD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAA;QAEpC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;QAEtD,IAAI,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,6CAA6C;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAA;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACnD,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;gBAC9B,SAAQ;aACT;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAC3D,MAAM,UAAU,GAA2B,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,CAAA;YAEnE,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;YAExD,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACpE,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YAEpE,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YAC3B,IAAI,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YAE3B,IAAI,UAAU,EAAE;gBACd,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;gBACrF,IAAI,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC5D,IAAI,CAAC,UAAU,EAAE;oBACf,UAAU,GAAG,OAAO,CAAA;iBACrB;qBAAM;oBACL,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iBACtC;gBACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;aACxD;YACD,IAAI,UAAU,EAAE;gBACd,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;gBACrF,IAAI,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;gBAC5D,IAAI,CAAC,UAAU,EAAE;oBACf,UAAU,GAAG,OAAO,CAAA;iBACrB;qBAAM;oBACL,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;iBACtC;gBACD,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;aACxD;YAED,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACjB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;aAC9B;YACD,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;gBACjB,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;aAC9B;YAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEvC,IAAI,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBAC9B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;aAClD;YACD,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;SAC1C;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAA;QAEpC,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,KAAK,CAAC,CAAA;SACpB;QAED,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,YAAY,EAAE;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YACtD,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,KAAK,CAAC,kBAAkB,GAAG,CAAC,CAAC,CAAA;aACpC;YACD,oDAAoD;YACpD,2DAA2D;YAC3D,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;gBACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE;oBAC5B,IAAI,EAAE,QAAQ,CAAC,MAAM;oBACrB,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,IAAI,EAAE,QAAQ,CAAC,UAAU,CAAC,IAAI;iBAC/B,CAAC,CAAA;aACH;SACF;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,KAAa;QACxC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;QACxD,IAAI,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACxD,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAA;SACjD;QACD,OAAO,GAAG,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,EAAE,CAAA;IAClD,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAsB,EACtB,GAAgB,EAChB,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,WAAmB;IAEnB,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAC9C,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,EAAE,CAAA;IACpC,IAAI,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAE5B,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,EAAE;QAC9B,OAAO,MAAM,CAAA;KACd;IAED,IAAI,UAAU,EAAE;QACd,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QACnF,MAAM,GAAG,KAAK,CAAA;QAEd,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC5B;KACF;IACD,IAAI,UAAU,EAAE;QACd,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAA;QAEnF,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;SAC5B;KACF;IAED,OAAO,MAAM,CAAA;AACf,CAAC","sourcesContent":["import { DecodedStruct, TypeDescriptor } from '../types.js'\nimport { BigDecimal } from '@sentio/bigdecimal'\nimport { Gauge } from '../../core/index.js'\nimport { MoveAccountContext, MoveContext } from '../move-context.js'\nimport { MoveCoinList } from './coin-list.js'\n\nexport interface SimpleCoinInfo {\n token_type: { type: string; account_address: string }\n symbol: string\n decimals: number\n bridge: string\n}\n\nexport interface MovePoolAdaptor<StructType, T> {\n getXReserve(pool: T): bigint\n\n getYReserve(pool: T): bigint\n\n getExtraPoolTags(pool: DecodedStruct<StructType, T>): any\n\n poolType: TypeDescriptor<T>\n}\n\nexport class MoveDex<\n Network,\n ModuleType,\n StructType,\n EventType,\n ContextType extends MoveContext<Network, ModuleType, StructType | EventType>,\n AccountContextType extends MoveAccountContext<Network, ModuleType, StructType | EventType>,\n T\n> {\n coinList: MoveCoinList\n poolAdaptor: MovePoolAdaptor<StructType, T>\n volume: Gauge\n volumeByCoin: Gauge\n tvlAll: Gauge\n tvlByPool: Gauge\n tvlByCoin: Gauge\n\n constructor(\n volume: Gauge,\n volumeByCoin: Gauge,\n tvlAll: Gauge,\n tvlByCoin: Gauge,\n tvlByPool: Gauge,\n poolAdaptor: MovePoolAdaptor<StructType, T>\n ) {\n this.volume = volume\n this.volumeByCoin = volumeByCoin\n this.tvlAll = tvlAll\n this.tvlByPool = tvlByPool\n this.tvlByCoin = tvlByCoin\n this.poolAdaptor = poolAdaptor\n }\n\n async recordTradingVolume(\n ctx: ContextType,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint,\n extraLabels?: any\n ): Promise<BigDecimal> {\n let result = BigDecimal(0)\n\n const whitelistx = this.coinList.whiteListed(coinx)\n const whitelisty = this.coinList.whiteListed(coiny)\n if (!whitelistx && !whitelisty) {\n return result\n }\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n const timestamp = ctx.getTimestamp()\n let resultX = BigDecimal(0)\n let resultY = BigDecimal(0)\n const pair = await this.getPair(coinx, coiny)\n const baseLabels: Record<string, string> = extraLabels ? { ...extraLabels, pair } : { pair }\n if (whitelistx) {\n resultX = await this.coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)\n }\n if (whitelisty) {\n resultY = await this.coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)\n }\n if (resultX.eq(0)) {\n resultX = BigDecimal(resultY)\n }\n if (resultY.eq(0)) {\n resultY = BigDecimal(resultX)\n }\n const total = resultX.plus(resultY)\n if (total.gt(0)) {\n this.volume.record(ctx, total, {\n ...baseLabels,\n bridge: coinXInfo.bridge,\n })\n }\n if (resultX.gt(0)) {\n this.volumeByCoin.record(ctx, resultX, {\n coin: coinXInfo.symbol,\n bridge: coinXInfo.bridge,\n type: coinXInfo.token_type.type,\n })\n }\n if (resultY.gt(0)) {\n this.volumeByCoin.record(ctx, resultY, {\n coin: coinYInfo.symbol,\n bridge: coinYInfo.bridge,\n type: coinYInfo.token_type.type,\n })\n }\n result = resultX.plus(resultY).div(2)\n return result\n }\n\n async syncPools(\n resources: StructType[],\n ctx: AccountContextType,\n poolsHandler?: (pools: DecodedStruct<StructType, T>[]) => Promise<void> | void\n ) {\n const pools = await ctx.coder.filterAndDecodeStruct(this.poolAdaptor.poolType, resources)\n\n const volumeByCoin = new Map<string, BigDecimal>()\n const timestamp = ctx.getTimestamp()\n\n console.log('num of pools: ', pools.length, timestamp)\n\n let tvlAllValue = BigDecimal(0)\n for (const pool of pools) {\n // savePool(ctx.version, pool.type_arguments)\n const coinx = pool.type_arguments[0]\n const coiny = pool.type_arguments[1]\n const whitelistx = this.coinList.whiteListed(coinx)\n const whitelisty = this.coinList.whiteListed(coiny)\n if (!whitelistx && !whitelisty) {\n continue\n }\n\n const pair = await this.getPair(coinx, coiny)\n const extraLabels = this.poolAdaptor.getExtraPoolTags(pool)\n const baseLabels: Record<string, string> = { ...extraLabels, pair }\n\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n\n const coinx_amount = this.poolAdaptor.getXReserve(pool.data_decoded)\n const coiny_amount = this.poolAdaptor.getYReserve(pool.data_decoded)\n\n let resultX = BigDecimal(0)\n let resultY = BigDecimal(0)\n\n if (whitelistx) {\n resultX = await this.coinList.calculateValueInUsd(coinx_amount, coinXInfo, timestamp)\n let coinXTotal = volumeByCoin.get(coinXInfo.token_type.type)\n if (!coinXTotal) {\n coinXTotal = resultX\n } else {\n coinXTotal = coinXTotal.plus(resultX)\n }\n volumeByCoin.set(coinXInfo.token_type.type, coinXTotal)\n }\n if (whitelisty) {\n resultY = await this.coinList.calculateValueInUsd(coiny_amount, coinYInfo, timestamp)\n let coinYTotal = volumeByCoin.get(coinYInfo.token_type.type)\n if (!coinYTotal) {\n coinYTotal = resultY\n } else {\n coinYTotal = coinYTotal.plus(resultY)\n }\n volumeByCoin.set(coinYInfo.token_type.type, coinYTotal)\n }\n\n if (resultX.eq(0)) {\n resultX = BigDecimal(resultY)\n }\n if (resultY.eq(0)) {\n resultY = BigDecimal(resultX)\n }\n\n const poolValue = resultX.plus(resultY)\n\n if (poolValue.isGreaterThan(0)) {\n this.tvlByPool.record(ctx, poolValue, baseLabels)\n }\n tvlAllValue = tvlAllValue.plus(poolValue)\n }\n this.tvlAll.record(ctx, tvlAllValue)\n\n if (poolsHandler) {\n poolsHandler(pools)\n }\n\n for (const [k, v] of volumeByCoin) {\n const coinInfo = this.coinList.whitelistCoins().get(k)\n if (!coinInfo) {\n throw Error('unexpected coin ' + k)\n }\n // const price = await getPrice(coinInfo, timestamp)\n // priceGauge.record(ctx, price, { coin: coinInfo.symbol })\n if (v.isGreaterThan(0)) {\n this.tvlByCoin.record(ctx, v, {\n coin: coinInfo.symbol,\n bridge: coinInfo.bridge,\n type: coinInfo.token_type.type,\n })\n }\n }\n }\n\n async getPair(coinx: string, coiny: string): Promise<string> {\n const coinXInfo = await this.coinList.getCoinInfo(coinx)\n const coinYInfo = await this.coinList.getCoinInfo(coiny)\n if (coinXInfo.symbol.localeCompare(coinYInfo.symbol) > 0) {\n return `${coinYInfo.symbol}-${coinXInfo.symbol}`\n }\n return `${coinXInfo.symbol}-${coinYInfo.symbol}`\n }\n}\n\nexport async function moveGetPairValue<ContextType extends MoveAccountContext<any, any, any>>(\n coinList: MoveCoinList,\n ctx: ContextType,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint\n): Promise<BigDecimal> {\n const whitelistx = coinList.whiteListed(coinx)\n const whitelisty = coinList.whiteListed(coiny)\n const coinXInfo = await coinList.getCoinInfo(coinx)\n const coinYInfo = await coinList.getCoinInfo(coiny)\n const timestamp = ctx.getTimestamp()\n let result = BigDecimal(0.0)\n\n if (!whitelistx || !whitelisty) {\n return result\n }\n\n if (whitelistx) {\n const value = await coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)\n result = value\n\n if (!whitelisty) {\n result = result.plus(value)\n }\n }\n if (whitelisty) {\n const value = await coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)\n\n if (!whitelistx) {\n result = result.plus(value)\n }\n }\n\n return result\n}\n"]}
@@ -16,3 +16,4 @@ export declare class SuiDex<T> extends MoveDex<SuiNetwork, SuiMovePackage, SuiMo
16
16
  coinList: CoinList;
17
17
  poolAdaptor: PoolAdaptor<T>;
18
18
  }
19
+ export declare function getPairValue(ctx: SuiContext, coinx: string, coiny: string, coinXAmount: bigint, coinYAmount: bigint): Promise<BigDecimal>;
@@ -1,5 +1,5 @@
1
1
  import { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js';
2
- import { MoveDex } from '../../move/ext/index.js';
2
+ import { MoveDex, moveGetPairValue } from '../../move/ext/index.js';
3
3
  export class CoinList {
4
4
  calculateValueInUsd(amount, coinInfo, timestamp) {
5
5
  return calculateValueInUsd(amount, coinInfo, timestamp);
@@ -18,4 +18,7 @@ export const SuiCoinList = new CoinList();
18
18
  export class SuiDex extends MoveDex {
19
19
  coinList = SuiCoinList;
20
20
  }
21
+ export async function getPairValue(ctx, coinx, coiny, coinXAmount, coinYAmount) {
22
+ return moveGetPairValue(SuiCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount);
23
+ }
21
24
  //# sourceMappingURL=move-dex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"move-dex.js","sourceRoot":"","sources":["../../../src/sui/ext/move-dex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzF,OAAO,EAAgB,OAAO,EAAmC,MAAM,yBAAyB,CAAA;AAOhG,MAAM,OAAO,QAAQ;IACnB,mBAAmB,CAAC,MAAc,EAAE,QAAwB,EAAE,SAAiB;QAC7E,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE,CAAA;AAEzC,MAAM,OAAO,MAAU,SAAQ,OAQ9B;IACC,QAAQ,GAAG,WAAW,CAAA;CAEvB","sourcesContent":["import { BigDecimal } from '@sentio/bigdecimal'\nimport { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js'\nimport { MoveCoinList, MoveDex, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'\nimport { SuiMoveObject, SuiMovePackage } from '@mysten/sui.js'\nimport { SuiNetwork } from '../network.js'\nimport { SuiContext, SuiObjectsContext } from '../context.js'\n\nexport type PoolAdaptor<T> = MovePoolAdaptor<SuiMoveObject, T>\n\nexport class CoinList implements MoveCoinList {\n calculateValueInUsd(amount: bigint, coinInfo: SimpleCoinInfo, timestamp: number): Promise<BigDecimal> {\n return calculateValueInUsd(amount, coinInfo, timestamp)\n }\n\n getCoinInfo(type: string): SimpleCoinInfo {\n return getCoinInfo(type)\n }\n\n whiteListed(type: string): boolean {\n return whiteListed(type)\n }\n\n whitelistCoins(): Map<string, SimpleCoinInfo> {\n return whitelistCoins()\n }\n}\n\nexport const SuiCoinList = new CoinList()\n\nexport class SuiDex<T> extends MoveDex<\n SuiNetwork,\n SuiMovePackage,\n SuiMoveObject,\n Event,\n SuiContext,\n SuiObjectsContext,\n T\n> {\n coinList = SuiCoinList\n declare poolAdaptor: PoolAdaptor<T>\n}\n"]}
1
+ {"version":3,"file":"move-dex.js","sourceRoot":"","sources":["../../../src/sui/ext/move-dex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzF,OAAO,EAAgB,OAAO,EAAE,gBAAgB,EAAmC,MAAM,yBAAyB,CAAA;AAOlH,MAAM,OAAO,QAAQ;IACnB,mBAAmB,CAAC,MAAc,EAAE,QAAwB,EAAE,SAAiB;QAC7E,OAAO,mBAAmB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAA;IACzD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,OAAO,WAAW,CAAC,IAAI,CAAC,CAAA;IAC1B,CAAC;IAED,cAAc;QACZ,OAAO,cAAc,EAAE,CAAA;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,QAAQ,EAAE,CAAA;AAEzC,MAAM,OAAO,MAAU,SAAQ,OAQ9B;IACC,QAAQ,GAAG,WAAW,CAAA;CAEvB;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAe,EACf,KAAa,EACb,KAAa,EACb,WAAmB,EACnB,WAAmB;IAEnB,OAAO,gBAAgB,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;AACnF,CAAC","sourcesContent":["import { BigDecimal } from '@sentio/bigdecimal'\nimport { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js'\nimport { MoveCoinList, MoveDex, moveGetPairValue, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'\nimport { SuiMoveObject, SuiMovePackage } from '@mysten/sui.js'\nimport { SuiNetwork } from '../network.js'\nimport { SuiContext, SuiObjectsContext } from '../context.js'\n\nexport type PoolAdaptor<T> = MovePoolAdaptor<SuiMoveObject, T>\n\nexport class CoinList implements MoveCoinList {\n calculateValueInUsd(amount: bigint, coinInfo: SimpleCoinInfo, timestamp: number): Promise<BigDecimal> {\n return calculateValueInUsd(amount, coinInfo, timestamp)\n }\n\n getCoinInfo(type: string): SimpleCoinInfo {\n return getCoinInfo(type)\n }\n\n whiteListed(type: string): boolean {\n return whiteListed(type)\n }\n\n whitelistCoins(): Map<string, SimpleCoinInfo> {\n return whitelistCoins()\n }\n}\n\nexport const SuiCoinList = new CoinList()\n\nexport class SuiDex<T> extends MoveDex<\n SuiNetwork,\n SuiMovePackage,\n SuiMoveObject,\n Event,\n SuiContext,\n SuiObjectsContext,\n T\n> {\n coinList = SuiCoinList\n declare poolAdaptor: PoolAdaptor<T>\n}\n\nexport async function getPairValue(\n ctx: SuiContext,\n coinx: string,\n coiny: string,\n coinXAmount: bigint,\n coinYAmount: bigint\n): Promise<BigDecimal> {\n return moveGetPairValue(SuiCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount)\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentio/sdk",
3
- "version": "2.15.0-rc.4",
3
+ "version": "2.15.0-rc.5",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -68,8 +68,8 @@
68
68
  "typechain": "^8.0.0",
69
69
  "typedoc": "^0.24.1",
70
70
  "yaml": "^2.2.1",
71
- "@sentio/protos": "^2.15.0-rc.4",
72
- "@sentio/runtime": "^2.15.0-rc.4"
71
+ "@sentio/protos": "^2.15.0-rc.5",
72
+ "@sentio/runtime": "^2.15.0-rc.5"
73
73
  },
74
74
  "peerDependencies": {
75
75
  "tsup": "npm:@sentio/tsup@^6.7.0"
@@ -8,7 +8,7 @@ import {
8
8
  MoveModuleBytecode,
9
9
  Event,
10
10
  } from '@sentio/sdk/aptos'
11
- import { MoveCoinList, MoveDex, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'
11
+ import { MoveCoinList, MoveDex, moveGetPairValue, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'
12
12
 
13
13
  export type PoolAdaptor<T> = MovePoolAdaptor<MoveResource, T>
14
14
 
@@ -44,3 +44,13 @@ export class AptosDex<T> extends MoveDex<
44
44
  coinList = new CoinList()
45
45
  declare poolAdaptor: PoolAdaptor<T>
46
46
  }
47
+
48
+ export async function getPairValue(
49
+ ctx: AptosContext,
50
+ coinx: string,
51
+ coiny: string,
52
+ coinXAmount: bigint,
53
+ coinYAmount: bigint
54
+ ): Promise<BigDecimal> {
55
+ return moveGetPairValue(AptosCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount)
56
+ }
@@ -215,41 +215,42 @@ export class MoveDex<
215
215
  }
216
216
  return `${coinXInfo.symbol}-${coinYInfo.symbol}`
217
217
  }
218
+ }
218
219
 
219
- async getPairValue(
220
- ctx: ContextType,
221
- coinx: string,
222
- coiny: string,
223
- coinXAmount: bigint,
224
- coinYAmount: bigint
225
- ): Promise<BigDecimal> {
226
- const whitelistx = this.coinList.whiteListed(coinx)
227
- const whitelisty = this.coinList.whiteListed(coiny)
228
- const coinXInfo = await this.coinList.getCoinInfo(coinx)
229
- const coinYInfo = await this.coinList.getCoinInfo(coiny)
230
- const timestamp = ctx.getTimestamp()
231
- let result = BigDecimal(0.0)
220
+ export async function moveGetPairValue<ContextType extends MoveAccountContext<any, any, any>>(
221
+ coinList: MoveCoinList,
222
+ ctx: ContextType,
223
+ coinx: string,
224
+ coiny: string,
225
+ coinXAmount: bigint,
226
+ coinYAmount: bigint
227
+ ): Promise<BigDecimal> {
228
+ const whitelistx = coinList.whiteListed(coinx)
229
+ const whitelisty = coinList.whiteListed(coiny)
230
+ const coinXInfo = await coinList.getCoinInfo(coinx)
231
+ const coinYInfo = await coinList.getCoinInfo(coiny)
232
+ const timestamp = ctx.getTimestamp()
233
+ let result = BigDecimal(0.0)
232
234
 
233
- if (!whitelistx || !whitelisty) {
234
- return result
235
- }
235
+ if (!whitelistx || !whitelisty) {
236
+ return result
237
+ }
236
238
 
237
- if (whitelistx) {
238
- const value = await this.coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)
239
- result = value
239
+ if (whitelistx) {
240
+ const value = await coinList.calculateValueInUsd(coinXAmount, coinXInfo, timestamp)
241
+ result = value
240
242
 
241
- if (!whitelisty) {
242
- result = result.plus(value)
243
- }
243
+ if (!whitelisty) {
244
+ result = result.plus(value)
244
245
  }
245
- if (whitelisty) {
246
- const value = await this.coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)
246
+ }
247
+ if (whitelisty) {
248
+ const value = await coinList.calculateValueInUsd(coinYAmount, coinYInfo, timestamp)
247
249
 
248
- if (!whitelistx) {
249
- result = result.plus(value)
250
- }
250
+ if (!whitelistx) {
251
+ result = result.plus(value)
251
252
  }
252
-
253
- return result
254
253
  }
254
+
255
+ return result
255
256
  }
@@ -1,6 +1,6 @@
1
1
  import { BigDecimal } from '@sentio/bigdecimal'
2
2
  import { calculateValueInUsd, getCoinInfo, whitelistCoins, whiteListed } from './coin.js'
3
- import { MoveCoinList, MoveDex, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'
3
+ import { MoveCoinList, MoveDex, moveGetPairValue, MovePoolAdaptor, SimpleCoinInfo } from '../../move/ext/index.js'
4
4
  import { SuiMoveObject, SuiMovePackage } from '@mysten/sui.js'
5
5
  import { SuiNetwork } from '../network.js'
6
6
  import { SuiContext, SuiObjectsContext } from '../context.js'
@@ -39,3 +39,13 @@ export class SuiDex<T> extends MoveDex<
39
39
  coinList = SuiCoinList
40
40
  declare poolAdaptor: PoolAdaptor<T>
41
41
  }
42
+
43
+ export async function getPairValue(
44
+ ctx: SuiContext,
45
+ coinx: string,
46
+ coiny: string,
47
+ coinXAmount: bigint,
48
+ coinYAmount: bigint
49
+ ): Promise<BigDecimal> {
50
+ return moveGetPairValue(SuiCoinList, ctx, coinx, coiny, coinXAmount, coinYAmount)
51
+ }