From aa3eaab2b418e510a665a6b7a6260fe126b7666b Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Tue, 21 Jan 2025 11:25:28 -0600 Subject: [PATCH 1/6] Added UnattestedTokenId type Represents a token that does not exist yet --- core/definitions/src/types.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/core/definitions/src/types.ts b/core/definitions/src/types.ts index cac3fffc8..85dd078da 100644 --- a/core/definitions/src/types.ts +++ b/core/definitions/src/types.ts @@ -63,6 +63,18 @@ export function isTokenId(thing: any): thing is TokenId { ); } +/** + * An UnattestedTokenId is used to represent a token that has not yet been attested / created + * + * @interface UnattestedTokenId + */ +export type UnattestedTokenId = TokenId & { + isUnattested: true; +}; +export function isUnattestedTokenId(thing: any): thing is UnattestedTokenId { + return isTokenId(thing) && (>thing).isUnattested === true; +} + export function isSameToken(a: TokenId, b: TokenId): boolean { if (a.chain !== b.chain) return false; if (isNative(a.address) && isNative(b.address)) return true; From 48fee410190ccc640b01dd704034cac2be7fb17c Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Tue, 21 Jan 2025 16:24:01 -0600 Subject: [PATCH 2/6] added decimals to UnattestedToken type --- connect/src/routes/request.ts | 10 ++++++++-- connect/src/routes/token.ts | 3 ++- core/definitions/src/types.ts | 7 ++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/connect/src/routes/request.ts b/connect/src/routes/request.ts index 34685114a..c6af28f9c 100644 --- a/connect/src/routes/request.ts +++ b/connect/src/routes/request.ts @@ -86,6 +86,8 @@ export class RouteTransferRequest { params: { source: TokenId; destination: TokenId; + sourceDecimals?: number; + destinationDecimals?: number; }, fromChain?: ChainContext, toChain?: ChainContext, @@ -93,8 +95,12 @@ export class RouteTransferRequest { fromChain = fromChain ?? wh.getChain(params.source.chain); toChain = toChain ?? wh.getChain(params.destination.chain); - const sourceDetails = await getTokenDetails(fromChain, params.source); - const destDetails = await getTokenDetails(toChain, params.destination); + const sourceDetails = await getTokenDetails(fromChain, params.source, params.sourceDecimals); + const destDetails = await getTokenDetails( + toChain, + params.destination, + params.destinationDecimals, + ); const rtr = new RouteTransferRequest(fromChain, toChain, sourceDetails, destDetails); diff --git a/connect/src/routes/token.ts b/connect/src/routes/token.ts index af5530fa7..0c2c72544 100644 --- a/connect/src/routes/token.ts +++ b/connect/src/routes/token.ts @@ -31,6 +31,7 @@ export function tokenAddresses(tokens: TokenId[]): string[] { export async function getTokenDetails( chain: ChainContext, token: TokenId, + decimals?: number, ): Promise { const address = canonicalAddress(token); @@ -40,7 +41,7 @@ export async function getTokenDetails( const symbol = details ? details.symbol : undefined; const wrapped = isNative(token.address) ? await chain.getNativeWrappedTokenId() : undefined; - const decimals = Number(await chain.getDecimals(token.address)); + decimals = decimals ?? (await chain.getDecimals(token.address)); return { id: token, diff --git a/core/definitions/src/types.ts b/core/definitions/src/types.ts index 85dd078da..bf0b117c9 100644 --- a/core/definitions/src/types.ts +++ b/core/definitions/src/types.ts @@ -70,9 +70,14 @@ export function isTokenId(thing: any): thing is TokenId { */ export type UnattestedTokenId = TokenId & { isUnattested: true; + decimals: number; // expected decimals for the token }; export function isUnattestedTokenId(thing: any): thing is UnattestedTokenId { - return isTokenId(thing) && (>thing).isUnattested === true; + return ( + isTokenId(thing) && + (>thing).isUnattested === true && + (>thing).decimals !== undefined + ); } export function isSameToken(a: TokenId, b: TokenId): boolean { From 17cf582176ec16a6fdb3b10a1a17bf3f193d9db7 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Wed, 22 Jan 2025 16:57:24 -0600 Subject: [PATCH 3/6] added originalTokenId to UnattestedTokenId type --- core/definitions/src/types.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/definitions/src/types.ts b/core/definitions/src/types.ts index bf0b117c9..465f4ed7a 100644 --- a/core/definitions/src/types.ts +++ b/core/definitions/src/types.ts @@ -71,12 +71,14 @@ export function isTokenId(thing: any): thing is TokenId { export type UnattestedTokenId = TokenId & { isUnattested: true; decimals: number; // expected decimals for the token + originalTokenId: TokenId; }; export function isUnattestedTokenId(thing: any): thing is UnattestedTokenId { return ( isTokenId(thing) && (>thing).isUnattested === true && - (>thing).decimals !== undefined + (>thing).decimals !== undefined && + (>thing).originalTokenId !== undefined ); } From 63c196429b7fffd98043ea3e367d266772b8b3b2 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Thu, 23 Jan 2025 18:34:51 -0600 Subject: [PATCH 4/6] non-existent token catch fetch balance error --- platforms/evm/src/platform.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/platforms/evm/src/platform.ts b/platforms/evm/src/platform.ts index e35811c6b..edef1b408 100644 --- a/platforms/evm/src/platform.ts +++ b/platforms/evm/src/platform.ts @@ -105,7 +105,14 @@ export class EvmPlatform rpc, new EvmAddress(token).toString(), ); - return tokenImpl.balanceOf(walletAddr); + try { + return await tokenImpl.balanceOf(walletAddr); + } catch (e: any) { + if (e?.code === 'BAD_DATA') { + return null; + } + throw e; + } } static async getBalances( From 05b0d3571198ecbf33717e1bc1dcd867b5c1fbbf Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Wed, 29 Jan 2025 14:35:41 -0600 Subject: [PATCH 5/6] remove try/catch balance check --- platforms/evm/src/platform.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/platforms/evm/src/platform.ts b/platforms/evm/src/platform.ts index edef1b408..e08bbf512 100644 --- a/platforms/evm/src/platform.ts +++ b/platforms/evm/src/platform.ts @@ -105,14 +105,7 @@ export class EvmPlatform rpc, new EvmAddress(token).toString(), ); - try { - return await tokenImpl.balanceOf(walletAddr); - } catch (e: any) { - if (e?.code === 'BAD_DATA') { - return null; - } - throw e; - } + return await tokenImpl.balanceOf(walletAddr); } static async getBalances( From b14f958cc972a748052519b127f7654d332c9921 Mon Sep 17 00:00:00 2001 From: Kevin Peters Date: Wed, 29 Jan 2025 14:36:54 -0600 Subject: [PATCH 6/6] remove await --- platforms/evm/src/platform.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platforms/evm/src/platform.ts b/platforms/evm/src/platform.ts index e08bbf512..e35811c6b 100644 --- a/platforms/evm/src/platform.ts +++ b/platforms/evm/src/platform.ts @@ -105,7 +105,7 @@ export class EvmPlatform rpc, new EvmAddress(token).toString(), ); - return await tokenImpl.balanceOf(walletAddr); + return tokenImpl.balanceOf(walletAddr); } static async getBalances(