From bcf81736d71cc65aaaa148c56c3a84990ae89596 Mon Sep 17 00:00:00 2001 From: imsk17 Date: Tue, 16 Apr 2024 04:57:55 +0530 Subject: [PATCH] Helpers: Chains: Implement getting coin price and chain names --- src/chains/index.ts | 8 ++++++++ src/chains/ton.ts | 18 +++++++++++++++++- src/chains/web3.ts | 9 ++++++++- src/factory/config.ts | 2 ++ 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/chains/index.ts b/src/chains/index.ts index 3061021..f2370dc 100644 --- a/src/chains/index.ts +++ b/src/chains/index.ts @@ -110,4 +110,12 @@ export interface CalculateCoinFees { export interface CalculateDestinationTransactionFees { calculateTransactionFees: (chain_name: string) => Promise; +} + +export interface GetCoinPrice { + getCoinPrice: (coin_name: string) => Promise +} + +export interface ChainName { + chainName: () => string; } \ No newline at end of file diff --git a/src/chains/ton.ts b/src/chains/ton.ts index 23d19b4..e53a971 100644 --- a/src/chains/ton.ts +++ b/src/chains/ton.ts @@ -11,7 +11,9 @@ import { import type { CalculateCoinFees, CalculateDestinationTransactionFees, + ChainName, GetBalance, + GetCoinPrice, GetProvider, GetTokenBalance, SendInstallment, @@ -31,7 +33,9 @@ export type TonHelper = GetBalance & ValidateAddress & GetTokenBalance & CalculateCoinFees & - CalculateDestinationTransactionFees; + CalculateDestinationTransactionFees & + GetCoinPrice & +ChainName; export interface TonParams { client: TonClient; @@ -39,6 +43,7 @@ export interface TonParams { nativeTokenId: bigint; oracle: Address; burner: Address; + chainName: string; } export function tonHandler({ @@ -47,6 +52,7 @@ export function tonHandler({ nativeTokenId, oracle, burner, + chainName, }: TonParams): TonHelper { const oracleContract = client.open(Oracle.fromAddress(oracle)); const bridgeReader = client.open(Bridge.fromAddress(bridge)); @@ -177,6 +183,16 @@ export function tonHandler({ } return { + chainName: () => chainName, + getCoinPrice:async (coin) => { + const pf = await oracleContract.getPriceFeed(); + const cid = BigInt(`0x${sha256_sync(coin).toString('hex')}`) + const data = pf.get(cid) + if (!data) { + throw new Error(`No price info found for symbol ${coin}, id ${cid}`) + } + return data.price + } , calculateTransactionFees: async (chain_name) => oracleContract.getCalculateTransactionFees(chain_name), calculateCoinFees: async (coin_name, amt) => diff --git a/src/chains/web3.ts b/src/chains/web3.ts index 2fc81fe..9b2c889 100644 --- a/src/chains/web3.ts +++ b/src/chains/web3.ts @@ -7,8 +7,10 @@ import { import type { CalculateCoinFees, CalculateDestinationTransactionFees, + ChainName, GetApprovedTokenAmount, GetBalance, + GetCoinPrice, GetProvider, GetTokenBalance, PreTransfer, @@ -30,22 +32,27 @@ export type Web3Helper = GetBalance & GetApprovedTokenAmount & PreTransfer & CalculateCoinFees & - CalculateDestinationTransactionFees; + CalculateDestinationTransactionFees & GetCoinPrice & +ChainName; export interface Web3Params { provider: Provider; contract: string; oracle: string; + chainName: string; } export function web3Helper({ provider, contract, oracle, + chainName }: Web3Params): Web3Helper { const bridge = FTBridge__factory.connect(contract, provider); const orac = IEmmetFeeOracle__factory.connect(oracle, provider); return { + chainName: () => chainName, + getCoinPrice: (c) => orac.getCoinPrice(c), calculateCoinFees: (coinName, amt) => orac.calculateCoinFees(coinName, amt), calculateTransactionFees: async (destChain) => orac.calculateTransactionFee(destChain), diff --git a/src/factory/config.ts b/src/factory/config.ts index 98de07c..a203dc7 100644 --- a/src/factory/config.ts +++ b/src/factory/config.ts @@ -22,6 +22,7 @@ export namespace ChainFactoryConfigs { burner: Address.parse( "EQBtE7sxSqbDZwuWhxxQRzSZZ3UAm8j4mhR25iWS2xfEmZ6D", ), + chainName: "tonTestnet" }, polygonParams: { contract: ethers.getAddress( @@ -29,6 +30,7 @@ export namespace ChainFactoryConfigs { ), provider: new JsonRpcProvider(TestNetRpcUri.POLYGON), oracle: ethers.getAddress("0x95DB799744A5b36D6E7BE9AD3b451dBC5b8De673"), + chainName: "polygon" }, } satisfies Partial; }