diff --git a/packages/agent-sdk/src/evm/erc20.ts b/packages/agent-sdk/src/evm/erc20.ts index 9131510..342ecf3 100644 --- a/packages/agent-sdk/src/evm/erc20.ts +++ b/packages/agent-sdk/src/evm/erc20.ts @@ -3,6 +3,7 @@ import { encodeFunctionData, type Address } from "viem"; import { getClient, type MetaTransaction } from "near-safe"; import type { TokenInfo } from "./types"; +const NATIVE_ASSET = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; const MAX_APPROVAL = BigInt( "115792089237316195423570985008687907853269984665640564039457584007913129639935", ); @@ -60,6 +61,15 @@ export async function getTokenInfo( chainId: number, address: Address, ): Promise { + if (address.toLowerCase() === NATIVE_ASSET.toLowerCase()) { + return { + address: NATIVE_ASSET, + decimals: 18, + // Not all Native Assets are ETH, but enough are. + symbol: "ETH", + }; + } + const [decimals, symbol] = await Promise.all([ getTokenDecimals(chainId, address), getTokenSymbol(chainId, address), diff --git a/packages/agent-sdk/tests/evm/token.spec.ts b/packages/agent-sdk/tests/evm/token.spec.ts index 0bfd0d7..6a34faf 100644 --- a/packages/agent-sdk/tests/evm/token.spec.ts +++ b/packages/agent-sdk/tests/evm/token.spec.ts @@ -13,6 +13,19 @@ describe("getTokenDetails", () => { expect(tokenDetails).toBeDefined(); }); + it("should return the token details for native asset", async () => { + const tokenDetails = await getTokenDetails( + 8453, + "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + ); + + expect(tokenDetails).toStrictEqual({ + address: "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE", + decimals: 18, + symbol: "ETH", + }); + }); + it("should return the token details for a given symbol", async () => { const tokenDetails = await getTokenDetails(43114, "UNI"); expect(tokenDetails).toBeUndefined();