diff --git a/bridge/bridge.enum.ts b/bridge/bridge.enum.ts index 3210041..eb57d4c 100644 --- a/bridge/bridge.enum.ts +++ b/bridge/bridge.enum.ts @@ -1,3 +1,19 @@ +import { ADDRESS } from '@juicedollar/jusd'; +import { CONFIG } from 'api.config'; + export enum StablecoinEnum { StartUSD = 'StartUSD', + USDCe = 'USDC.e', + USDTe = 'USDT.e', + ctUSD = 'ctUSD', } + +const ADDR = ADDRESS[CONFIG.chain.id]; + +// Map enum values to lowercased stablecoin token addresses (skipping undefined for testnet) +export const STABLECOIN_ADDRESS: Partial> = { + ...(ADDR?.startUSD ? { [StablecoinEnum.StartUSD]: ADDR.startUSD.toLowerCase() } : {}), + ...(ADDR?.USDC ? { [StablecoinEnum.USDCe]: ADDR.USDC.toLowerCase() } : {}), + ...(ADDR?.USDT ? { [StablecoinEnum.USDTe]: ADDR.USDT.toLowerCase() } : {}), + ...(ADDR?.CTUSD ? { [StablecoinEnum.ctUSD]: ADDR.CTUSD.toLowerCase() } : {}), +}; \ No newline at end of file diff --git a/bridge/bridge.service.ts b/bridge/bridge.service.ts index caf1ed8..f087659 100644 --- a/bridge/bridge.service.ts +++ b/bridge/bridge.service.ts @@ -2,38 +2,42 @@ import { gql } from '@apollo/client/core'; import { Injectable } from '@nestjs/common'; import { PONDER_CLIENT } from 'api.apollo.config'; import { StablecoinBridgeQuery } from './bridge.types'; - -import { StablecoinEnum } from './bridge.enum'; +import { StablecoinEnum, STABLECOIN_ADDRESS } from './bridge.enum'; @Injectable() export class BridgeService { async getBridgedStables(stablecoin: StablecoinEnum, timestamp: Date, minAmount: bigint): Promise { + const address = STABLECOIN_ADDRESS[stablecoin]; + if (!address) return []; + const checkTimestamp = Math.trunc(timestamp.getTime() / 1000); const bridgeFetched = await PONDER_CLIENT.query({ fetchPolicy: 'no-cache', query: gql` - query GetBridge${stablecoin} { - bridge${stablecoin}s( - orderBy: "timestamp", orderDirection: "desc" - where: { - timestamp_gt: "${checkTimestamp}" - amount_gte: "${minAmount}" - isMint: true - } - ) { - items { - swapper - txHash - amount - isMint - timestamp - } - } - } - `, + query GetBridgeTxs { + bridgeTxs( + orderBy: "timestamp", orderDirection: "desc" + where: { + stablecoinAddress: "${address}" + timestamp_gt: "${checkTimestamp}" + amount_gte: "${minAmount}" + isMint: true + } + ) { + items { + stablecoinAddress + swapper + txHash + amount + isMint + timestamp + } + } + } + `, }); - return bridgeFetched?.data?.[`bridge${stablecoin}s`]?.items ?? []; + return bridgeFetched?.data?.bridgeTxs?.items ?? []; } } diff --git a/bridge/bridge.types.ts b/bridge/bridge.types.ts index 42e1b86..6c7a2fc 100644 --- a/bridge/bridge.types.ts +++ b/bridge/bridge.types.ts @@ -1,6 +1,7 @@ import { Address } from 'viem'; export type StablecoinBridgeQuery = { + stablecoinAddress: string; txHash: string; swapper: Address; amount: string;