From 78ba43588bf4acff85fd55129b42183b54befb12 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Sun, 21 Jul 2024 20:20:18 +0530 Subject: [PATCH] feat(factory): configure liquidty pools --- src/chains/index.ts | 49 +++++++++++++++++++------------------- src/chains/web3.ts | 40 ++++++++++++++++++------------- src/factory/factory.ts | 11 +++++++++ src/factory/types/index.ts | 17 +++++++++++++ 4 files changed, 76 insertions(+), 41 deletions(-) diff --git a/src/chains/index.ts b/src/chains/index.ts index 5e8d67d..e00daed 100644 --- a/src/chains/index.ts +++ b/src/chains/index.ts @@ -51,7 +51,7 @@ export interface SendInstallment { tokenSymbol: string, destAddress: string, fee?: bigint, - gasArgs?: GasArgs + gasArgs?: GasArgs, ) => Promise<{ hash: string; tx: Ret }>; } @@ -72,21 +72,22 @@ export interface GetTokenBalance { } export type AddressBookKeys = - | 'GasFees' - | 'EmmetTokenVault' - | 'EmmetData' - | 'CCTPHelper' - | 'HashHelper' - | 'SignatureVerifier' - | 'LiquidityPoolHelper' - | 'EmmetBridge' - | 'AddressStorageHelper' - | 'WTON' // Wrapped Token - | 'EMMET' // Token - | 'TON/USD' // price feed - | 'BNB/USD' // price feed - | 'MATIC/USD' // Price Feed - | 'EmmetMultisig'; + | "GasFees" + | "EmmetTokenVault" + | "EmmetData" + | "CCTPHelper" + | "HashHelper" + | "SignatureVerifier" + | "LiquidityPoolHelper" + | "EmmetBridge" + | "AddressStorageHelper" + | "WTON" // Wrapped Token + | "EMMET" // Token + | "TON/USD" // price feed + | "BNB/USD" // price feed + | "MATIC/USD" // Price Feed + | "EmmetMultisig" + | `elp${string}`; export interface AddressBook { address: (contr: AddressBookKeys) => Promise; @@ -132,7 +133,7 @@ export interface PreTransfer { token: string, spender: string, amount: bigint, - gasArgs: GasArgs + gasArgs: GasArgs, ) => Promise; } @@ -157,7 +158,7 @@ export interface GetApprovedTokenAmount { getApprovedAmount: ( token: string, owner: string, - spender: string + spender: string, ) => Promise; } @@ -165,7 +166,7 @@ export interface GetTxFee { txFee: ( targetChain: bigint, fromToken: string, - targetToken: string + targetToken: string, ) => Promise; } @@ -198,7 +199,7 @@ export interface GetEstimatedTime { estimateTime( targetChain: bigint, fromToken: string, - targetToken: string + targetToken: string, ): Promise; } @@ -211,8 +212,8 @@ export interface StakeLiquidity { signer: Signer, pool: string, amount: bigint, - ga: GasArgs - ) => Promise; + ga: GasArgs | undefined, + ) => Promise<{ hash: string; tx: RetTx }>; } export interface WithdrawLiquidity { @@ -220,8 +221,8 @@ export interface WithdrawLiquidity { signer: Signer, pool: string, amount: bigint, - ga: GasArgs - ) => Promise; + ga: GasArgs | undefined, + ) => Promise<{ hash: string; tx: RetTx }>; } export interface GetLpCurrentAPY { diff --git a/src/chains/web3.ts b/src/chains/web3.ts index 3bcaf53..c4f45dc 100644 --- a/src/chains/web3.ts +++ b/src/chains/web3.ts @@ -4,7 +4,7 @@ import { Overrides, type Provider, type Signer, -} from 'ethers'; +} from "ethers"; import type { AddressBook, ChainID, @@ -33,15 +33,15 @@ import type { GetLpTokenFee, GetLpProtocolFee, GetLpProtocolFeeAmount, -} from '.'; +} from "."; import { EmmetAddressBook__factory, EmmetBridge__factory, EmmetData__factory, EmmetLPV2__factory, WrappedERC20__factory, -} from '@emmet-contracts/web3'; -import type { PayableOverrides } from '@emmet-contracts/web3/dist/common'; +} from "@emmet-contracts/web3"; +import type { PayableOverrides } from "@emmet-contracts/web3/dist/common"; export type Web3Helper = GetBalance & GetProvider & @@ -85,21 +85,27 @@ export async function web3Helper({ nativeCoin, }: Web3Params): Promise { const addrBook = EmmetAddressBook__factory.connect(addressBook, provider); - const bridgeAddr = await addrBook.get('EmmetBridge'); - const emmetData = await addrBook.get('EmmetData'); + const bridgeAddr = await addrBook.get("EmmetBridge"); + const emmetData = await addrBook.get("EmmetData"); const bridge = EmmetBridge__factory.connect(bridgeAddr, provider); const data = EmmetData__factory.connect(emmetData, provider); return { id: async () => (await provider.getNetwork()).chainId, stakeLiquidity: async (signer, pool, amt, ga) => { const lp = EmmetLPV2__factory.connect(pool, signer); - const deposit = await lp.deposit(amt, ga); - return deposit; + const deposit = await lp.deposit(amt, { ...ga }); + return { + hash: deposit.hash, + tx: deposit, + }; }, withdrawLiquidity: async (signer, pool, amt, ga) => { const lp = EmmetLPV2__factory.connect(pool, signer); - const withdraw = await lp.withdrawTokens(amt, ga); - return withdraw; + const withdraw = await lp.withdrawTokens(amt, { ...ga }); + return { + hash: withdraw.hash, + tx: withdraw, + }; }, getLpCurrentAPY: async (pool) => { const lp = EmmetLPV2__factory.connect(pool); @@ -137,18 +143,18 @@ export async function web3Helper({ const ffc = await data.getForeignFeeCompensation( targetChainId, fromToken, - targetToken + targetToken, ); return protocolFee + ffc; }, async txInfo(hash) { - if (hash === '') { + if (hash === "") { return { timestamp: 0n, value: 0n, }; } - if (!hash.startsWith('0x')) { + if (!hash.startsWith("0x")) { //biome-ignore lint/style/noParameterAssign: ignore hash = `0x${hash}`; } @@ -173,8 +179,8 @@ export async function web3Helper({ if (!receipt) throw new Error(`No receipt found for tx hash: ${hash}`); const log = receipt.logs.find((e) => e.topics.includes( - bridge.interface.getEvent('SendInstallment').topicHash - ) + bridge.interface.getEvent("SendInstallment").topicHash, + ), ); if (!log) throw new Error(`No send installment log found for tx hash: ${hash}`); @@ -212,7 +218,7 @@ export async function web3Helper({ getApprovedAmount: async (tid, owner, spender) => await WrappedERC20__factory.connect(tid, provider).allowance( owner, - spender + spender, ), balance: (addr) => provider.getBalance(addr), provider: () => provider, @@ -220,7 +226,7 @@ export async function web3Helper({ const ts = await data.getCrossChainTokenStrategy( targetChain, fromToken, - targetToken + targetToken, ); const localSteps = ts[0]; const foreignSteps = ts[1]; diff --git a/src/factory/factory.ts b/src/factory/factory.ts index c5ba3b4..f3e9681 100644 --- a/src/factory/factory.ts +++ b/src/factory/factory.ts @@ -15,6 +15,7 @@ import type { ParamMap, } from "./types"; import { ChainIDToDomain, type SupportedChainID } from "../explorer-utils"; +import { AddressBookKeys } from "../chains"; function mapNonceToParams(chainParams: Partial): ParamMap { const cToP: ParamMap = new Map(); @@ -103,6 +104,16 @@ export async function ChainFactoryBuilder( return { inner, + async stakeLiqiduity(chain, signer, token, amount, ga) { + const lp = await chain.address(`elp${token}`); + const response = chain.stakeLiquidity(signer, lp, amount, ga); + return response; + }, + async withdrawLiqiduity(chain, signer, token, amount, ga) { + const lp = await chain.address(`elp${token}`); + const response = chain.withdrawLiquidity(signer, lp, amount, ga); + return response; + }, preTransfer: async (chain, signer, tid, spender, amt, ga) => { const pt = await chain.preTransfer(signer, tid, spender, amt, ga); return pt; diff --git a/src/factory/types/index.ts b/src/factory/types/index.ts index 5beda06..18d8a8c 100644 --- a/src/factory/types/index.ts +++ b/src/factory/types/index.ts @@ -1,12 +1,15 @@ import type { Web3Helper, Web3Params } from "../../chains/web3"; import type { TonHelper, TonParams } from "../../chains/ton"; import type { + AddressBook, Decimals, GetTxFee, NativeCoinName, PreTransfer, ProtocolFee, SendInstallment, + StakeLiquidity, + WithdrawLiquidity, } from "../../chains"; import type { JsonRpcProvider } from "ethers"; @@ -85,6 +88,20 @@ export type HelperMap = Map< >; export interface ChainFactory { + stakeLiqiduity: ( + chain: StakeLiquidity & AddressBook, + signer: Signer, + token: string, + amount: bigint, + ga: GasArgs | undefined, + ) => Promise<{ hash: string; tx: RetTx }>; + withdrawLiqiduity: ( + chain: WithdrawLiquidity & AddressBook, + signer: Signer, + token: string, + amount: bigint, + ga: GasArgs | undefined, + ) => Promise<{ hash: string; tx: RetTx }>; inner: (chain: T) => Promise>; sendInstallment: ( chain: SendInstallment & GetTxFee,