Skip to content

Commit

Permalink
feat(liquidity): added vesrion support to v0.5 contracts
Browse files Browse the repository at this point in the history
  • Loading branch information
lusd committed Nov 10, 2023
1 parent 914642e commit e118a70
Show file tree
Hide file tree
Showing 3 changed files with 212 additions and 36 deletions.
1 change: 1 addition & 0 deletions src/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ export const TOKENS_MAPPING: Record<string, string> = {
BTC: '0xae478ff7d83ed072dbc5e264250e67ef58f57c99d89b447efd8a0a2e8b2be76e::coin::T', // wormhole wrapped BTC
WETH: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::WETH', // LayerZero WETH
USDC: '0xf22bede237a07e121b56d91a491eb7bcdfd1f5907926a9e58338f964a01b17fa::asset::USDC', // layerzero USDC
amAPT: '0x111ae3e5bc816a5e63c2da97d0aa3886519e0cd5e4b046659fa35796bd11542a::amapt_token::AmnisApt' // Amnis APT
};
68 changes: 47 additions & 21 deletions src/modules/LiquidityModule.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,13 +24,16 @@ import {
} from '../utils';

import { CreateTXPayloadParams } from './SwapModule';
import {VERSION_0, VERSION_0_5} from "../constants";
import {getCurve, getScriptsFor} from "../utils/contracts";

interface ICreateBurnLiquidityPayload {
fromToken: AptosResourceType;
toToken: AptosResourceType;
burnAmount: Decimal | number;
slippage: number;
curveType: CurveType;
version?: typeof VERSION_0 | typeof VERSION_0_5;
}

interface ICalculateRatesParams {
Expand All @@ -40,10 +43,11 @@ interface ICalculateRatesParams {
interactiveToken: 'from' | 'to';
curveType: CurveType;
slippage: number;
version?: typeof VERSION_0 | typeof VERSION_0_5;
}

interface ICalculateSupplyParams
extends Pick<ICalculateRatesParams, 'slippage'> {
extends Pick<ICalculateRatesParams, 'slippage' | 'version'> {
toAmount: Decimal | number;
fromAmount: Decimal | number;
toReserve: Decimal | number;
Expand All @@ -58,6 +62,7 @@ interface ICalculateBurnLiquidityParams {
slippage: number;
burnAmount: Decimal | number;
curveType: CurveType;
version?: typeof VERSION_0 | typeof VERSION_0_5;
}

type TGetResourcesPayload = Omit<
Expand All @@ -79,15 +84,21 @@ export class LiquidityModule implements IModule {
}

async checkPoolExistence(params: TGetResourcesPayload): Promise<boolean> {
const { moduleAccount, resourceAccount } = this.sdk.networkOptions;
const { moduleAccount, resourceAccount, moduleAccountV05, resourceAccountV05 } = this.sdk.networkOptions;
const curves = this.sdk.curves;
const { version = VERSION_0 } = params;

const moduleAcc = version === VERSION_0_5 ? moduleAccountV05 : moduleAccount;
const resourceAcc = version === VERSION_0_5 ? resourceAccountV05 : resourceAccount;

const modulesLiquidityPool = composeType(
moduleAccount,
moduleAcc,
'liquidity_pool',
'LiquidityPool',
);

const curve = curves[params.curveType];
const curve = getCurve(params.curveType, curves, version);

const liquidityPoolType = getPoolStr(
params.fromToken,
params.toToken,
Expand All @@ -98,7 +109,7 @@ export class LiquidityModule implements IModule {
try {
const liquidityPoolResource =
await this.sdk.Resources.fetchAccountResource<AptosResource>(
resourceAccount,
resourceAcc,
liquidityPoolType,
);
return Boolean(liquidityPoolResource?.type);
Expand All @@ -108,14 +119,19 @@ export class LiquidityModule implements IModule {
}

async getLiquidityPoolResource(params: TGetResourcesPayload) {
const { moduleAccount, resourceAccount } = this.sdk.networkOptions;
const { moduleAccount, resourceAccount, moduleAccountV05, resourceAccountV05 } = this.sdk.networkOptions;
const curves = this.sdk.curves;
const { version = VERSION_0 } = params;

const moduleAcc = version === VERSION_0_5 ? moduleAccountV05 : moduleAccount;
const resourceAcc = version === VERSION_0_5 ? resourceAccountV05 : resourceAccount;
const curve = getCurve(params.curveType, curves, version);

const modulesLiquidityPool = composeType(
moduleAccount,
moduleAcc,
'liquidity_pool',
'LiquidityPool',
);
const curve = curves[params.curveType];

const liquidityPoolType = getPoolStr(
params.fromToken,
Expand All @@ -129,7 +145,7 @@ export class LiquidityModule implements IModule {
try {
liquidityPoolResource =
await this.sdk.Resources.fetchAccountResource<AptosPoolResource>(
resourceAccount,
resourceAcc,
liquidityPoolType,
);
} catch (e) {
Expand All @@ -140,9 +156,11 @@ export class LiquidityModule implements IModule {

async getLiquiditySupplyResource(params: TGetResourcesPayload) {
const curves = this.sdk.curves;
const { modules, resourceAccount } = this.sdk.networkOptions;
const { modules, resourceAccount, resourceAccountV05 } = this.sdk.networkOptions;
const { version = VERSION_0 } = params;

const curve = curves[params.curveType];
const curve = getCurve(params.curveType, curves, version);
const resourceAcc = version === VERSION_0_5 ? resourceAccountV05 : resourceAccount;

function getPoolLpStr(
coinX: string,
Expand All @@ -153,8 +171,7 @@ export class LiquidityModule implements IModule {
? [coinX, coinY]
: [coinY, coinX];
return composeType(
//
resourceAccount,
resourceAcc,
'lp_coin',
'LP',
[sortedX, sortedY, curve],
Expand All @@ -168,7 +185,7 @@ export class LiquidityModule implements IModule {
try {
liquidityPoolResource =
await this.sdk.Resources.fetchAccountResource<AptosCoinInfoResource>(
resourceAccount,
resourceAcc,
composeType(modules.CoinInfo, [lpString]),
);
} catch (e) {
Expand Down Expand Up @@ -307,17 +324,21 @@ export class LiquidityModule implements IModule {
}

const isPoolExisted = await this.checkPoolExistence(params);
const { version = VERSION_0 } = params;

const { moduleAccountV05, moduleAccount } = this.sdk.networkOptions;
const moduleAcc = version === VERSION_0_5 ? moduleAccountV05 : moduleAccount;

const { modules } = this.sdk.networkOptions;
const curves = this.sdk.curves;
const scriptsVersion = getScriptsFor(version);

const functionName = composeType(
modules.Scripts,
moduleAcc,
scriptsVersion,
isPoolExisted ? 'add_liquidity' : 'register_pool_and_add_liquidity',
);


const curve = curves[params.curveType];
const curve = getCurve(params.curveType, curves, version);
const isSorted = is_sorted(params.fromToken, params.toToken);

const typeArguments = isSorted
Expand Down Expand Up @@ -366,10 +387,13 @@ export class LiquidityModule implements IModule {
);
}

const { version = VERSION_0 } = params;

const curves = this.sdk.curves;
const curve = curves[params.curveType];
const curve = getCurve(params.curveType, curves, version);

const { modules } = this.sdk.networkOptions;
const { moduleAccountV05, moduleAccount } = this.sdk.networkOptions;
const moduleAcc = version === VERSION_0_5 ? moduleAccountV05 : moduleAccount;

const output = await this.calculateOutputBurn(params);

Expand All @@ -382,7 +406,9 @@ export class LiquidityModule implements IModule {
? [params.burnAmount.toString(), xOutput, yOutput]
: [params.burnAmount.toString(), yOutput, xOutput];

const functionName = composeType(modules.Scripts, 'remove_liquidity');
const scriptsVersion = getScriptsFor(version);

const functionName = composeType(moduleAcc, scriptsVersion, 'remove_liquidity');

const typeArguments = isSorted
? [params.fromToken, params.toToken, curve]
Expand Down

0 comments on commit e118a70

Please sign in to comment.