diff --git a/packages/rest-api/src/constants/bridgeable.ts b/packages/rest-api/src/constants/bridgeable.ts index e0bbd61d80..1a9b25a99c 100644 --- a/packages/rest-api/src/constants/bridgeable.ts +++ b/packages/rest-api/src/constants/bridgeable.ts @@ -1,6 +1,7 @@ import { BridgeableToken } from '../types' import { CHAINS } from './chains' -import { ZeroAddress } from '.' + +const NativeTokenAddress = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' export const GOHM: BridgeableToken = { addresses: { @@ -796,16 +797,16 @@ export const NETH: BridgeableToken = { export const ETH: BridgeableToken = { addresses: { - [CHAINS.ETHEREUM.id]: ZeroAddress, - [CHAINS.OPTIMISM.id]: ZeroAddress, - [CHAINS.BOBA.id]: ZeroAddress, + [CHAINS.ETHEREUM.id]: NativeTokenAddress, + [CHAINS.OPTIMISM.id]: NativeTokenAddress, + [CHAINS.BOBA.id]: NativeTokenAddress, [CHAINS.CANTO.id]: '0x5FD55A1B9FC24967C4dB09C513C3BA0DFa7FF687', - [CHAINS.BASE.id]: ZeroAddress, - [CHAINS.ARBITRUM.id]: ZeroAddress, + [CHAINS.BASE.id]: NativeTokenAddress, + [CHAINS.ARBITRUM.id]: NativeTokenAddress, [CHAINS.DFK.id]: '0xfBDF0E31808d0aa7b9509AA6aBC9754E48C58852', - [CHAINS.BLAST.id]: ZeroAddress, - [CHAINS.SCROLL.id]: ZeroAddress, - [CHAINS.LINEA.id]: ZeroAddress, + [CHAINS.BLAST.id]: NativeTokenAddress, + [CHAINS.SCROLL.id]: NativeTokenAddress, + [CHAINS.LINEA.id]: NativeTokenAddress, }, decimals: { [CHAINS.ETHEREUM.id]: 18, @@ -832,7 +833,7 @@ export const ETH: BridgeableToken = { export const MOVR: BridgeableToken = { addresses: { [CHAINS.MOONBEAM.id]: '0x1d4C2a246311bB9f827F4C768e277FF5787B7D7E', - [CHAINS.MOONRIVER.id]: ZeroAddress, + [CHAINS.MOONRIVER.id]: NativeTokenAddress, }, decimals: { [CHAINS.MOONBEAM.id]: 18, @@ -852,7 +853,7 @@ export const AVAX: BridgeableToken = { addresses: { [CHAINS.MOONBEAM.id]: '0xA1f8890E39b4d8E33efe296D698fe42Fb5e59cC3', [CHAINS.KLAYTN.id]: '0xCd8fE44A29Db9159dB36f96570d7A4d91986f528', - [CHAINS.AVALANCHE.id]: ZeroAddress, + [CHAINS.AVALANCHE.id]: NativeTokenAddress, [CHAINS.DFK.id]: '0xB57B60DeBDB0b8172bb6316a9164bd3C695F133a', [CHAINS.HARMONY.id]: '0xb12c13e66AdE1F72f71834f2FC5082Db8C091358', }, @@ -909,7 +910,7 @@ export const WAVAX: BridgeableToken = { export const JEWEL: BridgeableToken = { addresses: { - [CHAINS.DFK.id]: ZeroAddress, + [CHAINS.DFK.id]: NativeTokenAddress, [CHAINS.HARMONY.id]: '0x72cb10c6bfa5624dd07ef608027e366bd690048f', [CHAINS.KLAYTN.id]: '0x30C103f8f5A3A732DFe2dCE1Cc9446f545527b43', [CHAINS.AVALANCHE.id]: '0x997Ddaa07d716995DE90577C123Db411584E5E46', @@ -1158,7 +1159,7 @@ export const DAIe: BridgeableToken = { export const KLAY: BridgeableToken = { addresses: { - [CHAINS.KLAYTN.id]: ZeroAddress, + [CHAINS.KLAYTN.id]: NativeTokenAddress, [CHAINS.DFK.id]: '0x97855Ba65aa7ed2F65Ed832a776537268158B78a', }, decimals: { @@ -1194,7 +1195,7 @@ export const WKLAY: BridgeableToken = { export const MATIC: BridgeableToken = { addresses: { - [CHAINS.POLYGON.id]: ZeroAddress, + [CHAINS.POLYGON.id]: NativeTokenAddress, [CHAINS.DFK.id]: '0xD17a41Cd199edF1093A9Be4404EaDe52Ec19698e', }, decimals: { @@ -1230,7 +1231,7 @@ export const WMATIC: BridgeableToken = { export const FTM: BridgeableToken = { addresses: { - [CHAINS.FANTOM.id]: ZeroAddress, + [CHAINS.FANTOM.id]: NativeTokenAddress, [CHAINS.DFK.id]: '0x2Df041186C844F8a2e2b63F16145Bc6Ff7d23E25', }, decimals: { diff --git a/packages/rest-api/src/middleware/normalizeNativeTokenAddress.ts b/packages/rest-api/src/middleware/normalizeNativeTokenAddress.ts new file mode 100644 index 0000000000..546c08136e --- /dev/null +++ b/packages/rest-api/src/middleware/normalizeNativeTokenAddress.ts @@ -0,0 +1,18 @@ +import { Request, Response, NextFunction } from 'express' +import { isAddress, getAddress } from 'ethers/lib/utils' + +import { NativeGasAddress, ZeroAddress } from '../constants' + +export const normalizeNativeTokenAddress = (addressFields: string[]) => { + return (req: Request, _res: Response, next: NextFunction) => { + for (const field of addressFields) { + const address = req.query[field] + if (typeof address === 'string' && isAddress(address)) { + const checksumAddress = getAddress(address) + req.query[field] = + checksumAddress === ZeroAddress ? NativeGasAddress : checksumAddress + } + } + next() + } +} diff --git a/packages/rest-api/src/routes/bridgeRoute.ts b/packages/rest-api/src/routes/bridgeRoute.ts index 3ee858fcb3..01fccb708b 100644 --- a/packages/rest-api/src/routes/bridgeRoute.ts +++ b/packages/rest-api/src/routes/bridgeRoute.ts @@ -7,6 +7,7 @@ import { showFirstValidationError } from '../middleware/showFirstValidationError import { bridgeController } from '../controllers/bridgeController' import { isTokenSupportedOnChain } from '../utils/isTokenSupportedOnChain' import { checksumAddresses } from '../middleware/checksumAddresses' +import { normalizeNativeTokenAddress } from '../middleware/normalizeNativeTokenAddress' const router = express.Router() @@ -187,6 +188,7 @@ const router = express.Router() */ router.get( '/', + normalizeNativeTokenAddress(['fromToken', 'toToken']), checksumAddresses(['fromToken', 'toToken']), [ check('fromChain') diff --git a/packages/rest-api/src/routes/bridgeTxInfoRoute.ts b/packages/rest-api/src/routes/bridgeTxInfoRoute.ts index 4336711511..09f249b99b 100644 --- a/packages/rest-api/src/routes/bridgeTxInfoRoute.ts +++ b/packages/rest-api/src/routes/bridgeTxInfoRoute.ts @@ -8,6 +8,7 @@ import { bridgeTxInfoController } from '../controllers/bridgeTxInfoController' import { isTokenAddress } from '../utils/isTokenAddress' import { isTokenSupportedOnChain } from '../utils/isTokenSupportedOnChain' import { checksumAddresses } from '../middleware/checksumAddresses' +import { normalizeNativeTokenAddress } from '../middleware/normalizeNativeTokenAddress' const router = express.Router() @@ -123,6 +124,7 @@ const router = express.Router() */ router.get( '/', + normalizeNativeTokenAddress(['fromToken', 'toToken']), checksumAddresses(['fromToken', 'toToken']), [ check('fromChain') diff --git a/packages/rest-api/src/routes/destinationTokensRoute.ts b/packages/rest-api/src/routes/destinationTokensRoute.ts index f06ac9e4f6..a6e4c590d4 100644 --- a/packages/rest-api/src/routes/destinationTokensRoute.ts +++ b/packages/rest-api/src/routes/destinationTokensRoute.ts @@ -8,6 +8,7 @@ import { destinationTokensController } from '../controllers/destinationTokensCon import { isTokenAddress } from '../utils/isTokenAddress' import { isTokenSupportedOnChain } from '../utils/isTokenSupportedOnChain' import { checksumAddresses } from '../middleware/checksumAddresses' +import { normalizeNativeTokenAddress } from '../middleware/normalizeNativeTokenAddress' const router = express.Router() @@ -98,6 +99,7 @@ const router = express.Router() router.get( '/', + normalizeNativeTokenAddress(['fromToken']), checksumAddresses(['fromToken']), [ check('fromChain') diff --git a/packages/rest-api/src/routes/swapRoute.ts b/packages/rest-api/src/routes/swapRoute.ts index ee65c015b0..8c050f3b2b 100644 --- a/packages/rest-api/src/routes/swapRoute.ts +++ b/packages/rest-api/src/routes/swapRoute.ts @@ -7,6 +7,7 @@ import { CHAINS_ARRAY } from '../constants/chains' import { isTokenAddress } from '../utils/isTokenAddress' import { isTokenSupportedOnChain } from '../utils/isTokenSupportedOnChain' import { checksumAddresses } from '../middleware/checksumAddresses' +import { normalizeNativeTokenAddress } from '../middleware/normalizeNativeTokenAddress' const router = express.Router() @@ -133,6 +134,7 @@ const router = express.Router() */ router.get( '/', + normalizeNativeTokenAddress(['fromToken', 'toToken']), checksumAddresses(['fromToken', 'toToken']), [ check('chain') diff --git a/packages/rest-api/src/routes/swapTxInfoRoute.ts b/packages/rest-api/src/routes/swapTxInfoRoute.ts index 2ffb03388f..093dc5686f 100644 --- a/packages/rest-api/src/routes/swapTxInfoRoute.ts +++ b/packages/rest-api/src/routes/swapTxInfoRoute.ts @@ -8,6 +8,7 @@ import { swapTxInfoController } from '../controllers/swapTxInfoController' import { isTokenAddress } from '../utils/isTokenAddress' import { isTokenSupportedOnChain } from '../utils/isTokenSupportedOnChain' import { checksumAddresses } from '../middleware/checksumAddresses' +import { normalizeNativeTokenAddress } from '../middleware/normalizeNativeTokenAddress' const router = express.Router() @@ -115,6 +116,7 @@ const router = express.Router() */ router.get( '/', + normalizeNativeTokenAddress(['fromToken', 'toToken']), checksumAddresses(['fromToken', 'toToken']), [ check('chain') diff --git a/packages/rest-api/src/tests/bridgeRoute.test.ts b/packages/rest-api/src/tests/bridgeRoute.test.ts index dcef8451ec..756089f50b 100644 --- a/packages/rest-api/src/tests/bridgeRoute.test.ts +++ b/packages/rest-api/src/tests/bridgeRoute.test.ts @@ -2,6 +2,8 @@ import request from 'supertest' import express from 'express' import bridgeRoute from '../routes/bridgeRoute' +import { NativeGasAddress, ZeroAddress } from '../constants' +import { USDC } from '../constants/bridgeable' const app = express() app.use('/bridge', bridgeRoute) @@ -11,8 +13,8 @@ describe('Bridge Route with Real Synapse Service', () => { const response = await request(app).get('/bridge').query({ fromChain: '1', toChain: '10', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum - toToken: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', // USDC on Optimism + fromToken: USDC.addresses[1], + toToken: USDC.addresses[10], amount: '1000', }) expect(response.status).toBe(200) @@ -22,6 +24,37 @@ describe('Bridge Route with Real Synapse Service', () => { expect(response.body[0]).toHaveProperty('bridgeFeeFormatted') }, 15000) + it('should return bridge quotes for ZeroAddress', async () => { + const response = await request(app).get('/bridge').query({ + fromChain: '1', + toChain: '10', + fromToken: ZeroAddress, + toToken: ZeroAddress, + amount: '10', + }) + expect(response.status).toBe(200) + expect(Array.isArray(response.body)).toBe(true) + expect(response.body.length).toBeGreaterThan(0) + expect(response.body[0]).toHaveProperty('maxAmountOutStr') + expect(response.body[0]).toHaveProperty('bridgeFeeFormatted') + }, 15000) + + it('should return bridge quotes for NativeGasAddress', async () => { + const response = await request(app).get('/bridge').query({ + fromChain: '1', + toChain: '10', + fromToken: NativeGasAddress, + toToken: NativeGasAddress, + amount: '10', + }) + + expect(response.status).toBe(200) + expect(Array.isArray(response.body)).toBe(true) + expect(response.body.length).toBeGreaterThan(0) + expect(response.body[0]).toHaveProperty('maxAmountOutStr') + expect(response.body[0]).toHaveProperty('bridgeFeeFormatted') + }, 15000) + it('should return 400 for unsupported fromChain, with error message', async () => { const response = await request(app).get('/bridge').query({ fromChain: '999', @@ -83,8 +116,8 @@ describe('Bridge Route with Real Synapse Service', () => { const response = await request(app).get('/bridge').query({ fromChain: '1', toChain: '10', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85', + fromToken: USDC.addresses[1], + toToken: USDC.addresses[10], }) expect(response.status).toBe(400) expect(response.body.error).toHaveProperty('field', 'amount') diff --git a/packages/rest-api/src/tests/bridgeTxInfoRoute.test.ts b/packages/rest-api/src/tests/bridgeTxInfoRoute.test.ts index 35ff81f19a..822491f887 100644 --- a/packages/rest-api/src/tests/bridgeTxInfoRoute.test.ts +++ b/packages/rest-api/src/tests/bridgeTxInfoRoute.test.ts @@ -2,6 +2,7 @@ import request from 'supertest' import express from 'express' import bridgeTxInfoRoute from '../routes/bridgeTxInfoRoute' +import { USDC } from '../constants/bridgeable' const app = express() app.use('/bridgeTxInfo', bridgeTxInfoRoute) @@ -11,8 +12,8 @@ describe('Bridge TX Info Route', () => { const response = await request(app).get('/bridgeTxInfo').query({ fromChain: '1', toChain: '137', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum - toToken: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', // USDC on Polygon + fromToken: USDC.addresses[1], + toToken: USDC.addresses[137], amount: '1000', destAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', }) @@ -79,8 +80,8 @@ describe('Bridge TX Info Route', () => { const response = await request(app).get('/bridgeTxInfo').query({ fromChain: '1', toChain: '137', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + fromToken: USDC.addresses[1], + toToken: USDC.addresses[137], destAddress: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', }) expect(response.status).toBe(400) @@ -91,8 +92,8 @@ describe('Bridge TX Info Route', () => { const response = await request(app).get('/bridgeTxInfo').query({ fromChain: '1', toChain: '137', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174', + fromToken: USDC.addresses[1], + toToken: USDC.addresses[137], amount: '1000', destAddress: 'invalid_address', }) diff --git a/packages/rest-api/src/tests/destinationTokensRoute.test.ts b/packages/rest-api/src/tests/destinationTokensRoute.test.ts index 4fe40a7a62..a083741ffa 100644 --- a/packages/rest-api/src/tests/destinationTokensRoute.test.ts +++ b/packages/rest-api/src/tests/destinationTokensRoute.test.ts @@ -2,6 +2,8 @@ import request from 'supertest' import express from 'express' import destinationTokensRoute from '../routes/destinationTokensRoute' +import { NativeGasAddress, ZeroAddress } from '../constants' +import { USDC, USDT } from '../constants/bridgeable' const app = express() app.use('/destinationTokens', destinationTokensRoute) @@ -10,7 +12,7 @@ describe('destinatonTokens Route', () => { it('should return destination tokens for valid input', async () => { const response = await request(app).get('/destinationTokens').query({ fromChain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], }) expect(response.status).toBe(200) @@ -24,7 +26,21 @@ describe('destinatonTokens Route', () => { it('should return destination tokens for valid gas Tokens', async () => { const response = await request(app).get('/destinationTokens').query({ fromChain: '1', - fromToken: '0x0000000000000000000000000000000000000000', + fromToken: NativeGasAddress, + }) + + expect(response.status).toBe(200) + expect(Array.isArray(response.body)).toBe(true) + expect(response.body.length).toBeGreaterThan(0) + expect(response.body[0]).toHaveProperty('symbol') + expect(response.body[0]).toHaveProperty('address') + expect(response.body[0]).toHaveProperty('chainId') + }) + + it('should return destination tokens for valid gas Tokens, ZeroAddress', async () => { + const response = await request(app).get('/destinationTokens').query({ + fromChain: '1', + fromToken: ZeroAddress, }) expect(response.status).toBe(200) @@ -40,7 +56,7 @@ describe('destinatonTokens Route', () => { const response = await request(app).get('/destinationTokens').query({ fromChain: '534352', - fromToken: '0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4', + fromToken: USDC.addresses[534352], }) expect(response.status).toBe(200) @@ -54,7 +70,7 @@ describe('destinatonTokens Route', () => { it('should return destination tokens for non-checksummed address', async () => { const response = await request(app).get('/destinationTokens').query({ fromChain: '43114', - fromToken: '0x9702230a8ea53601f5cd2dc00fdbc13d4df4a8c7', + fromToken: USDT.addresses[43114].toLowerCase(), }) expect(response.status).toBe(200) @@ -107,7 +123,7 @@ describe('destinatonTokens Route', () => { it('should return 400 for token not supported on specified chain', async () => { const response = await request(app).get('/destinationTokens').query({ fromChain: '10', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], }) expect(response.status).toBe(400) @@ -119,7 +135,7 @@ describe('destinatonTokens Route', () => { it('should return 400 for missing fromChain', async () => { const response = await request(app).get('/destinationTokens').query({ - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], }) expect(response.status).toBe(400) diff --git a/packages/rest-api/src/tests/swapRoute.test.ts b/packages/rest-api/src/tests/swapRoute.test.ts index 6c6d7ac43b..775372bc31 100644 --- a/packages/rest-api/src/tests/swapRoute.test.ts +++ b/packages/rest-api/src/tests/swapRoute.test.ts @@ -2,6 +2,8 @@ import request from 'supertest' import express from 'express' import swapRoute from '../routes/swapRoute' +import { NativeGasAddress, ZeroAddress } from '../constants' +import { DAI, NETH, USDC } from '../constants/bridgeable' const app = express() app.use('/swap', swapRoute) @@ -10,8 +12,8 @@ describe('Swap Route with Real Synapse Service', () => { it('should return a real swap quote for valid input, 1000 USDC', async () => { const response = await request(app).get('/swap').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI on Ethereum + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], amount: '1000', }) @@ -21,11 +23,39 @@ describe('Swap Route with Real Synapse Service', () => { expect(response.body).toHaveProperty('query') }, 10_000) + it('should return a real swap quote for valid input, Eth ZeroAddress', async () => { + const response = await request(app).get('/swap').query({ + chain: '10', + fromToken: ZeroAddress, + toToken: NETH.addresses[10], + amount: '1', + }) + + expect(response.status).toBe(200) + expect(response.body).toHaveProperty('maxAmountOut') + expect(response.body).toHaveProperty('routerAddress') + expect(response.body).toHaveProperty('query') + }, 10_000) + + it('should return a real swap quote for valid input, Eth NativeGasAddress', async () => { + const response = await request(app).get('/swap').query({ + chain: '10', + fromToken: NativeGasAddress, + toToken: NETH.addresses[10], + amount: '1', + }) + + expect(response.status).toBe(200) + expect(response.body).toHaveProperty('maxAmountOut') + expect(response.body).toHaveProperty('routerAddress') + expect(response.body).toHaveProperty('query') + }, 10_000) + it('should return 400 for unsupported chain, with error message', async () => { const response = await request(app).get('/swap').query({ chain: '111', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], amount: '1000', }) @@ -36,7 +66,7 @@ describe('Swap Route with Real Synapse Service', () => { it('should return 400 for invalid toToken address, with error message', async () => { const response = await request(app).get('/swap').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], toToken: 'invalid_address', amount: '1000', }) @@ -51,7 +81,7 @@ describe('Swap Route with Real Synapse Service', () => { it('should return 400 for token not supported on specified chain', async () => { const response = await request(app).get('/swap').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], toToken: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', // SNX on Ethereum (Not supported) amount: '1000', }) @@ -66,8 +96,8 @@ describe('Swap Route with Real Synapse Service', () => { it('should return 400 for missing amount, with error message', async () => { const response = await request(app).get('/swap').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], }) expect(response.status).toBe(400) diff --git a/packages/rest-api/src/tests/swapTxInfoRoute.test.ts b/packages/rest-api/src/tests/swapTxInfoRoute.test.ts index 3faf9ca8ea..99ea0e0f42 100644 --- a/packages/rest-api/src/tests/swapTxInfoRoute.test.ts +++ b/packages/rest-api/src/tests/swapTxInfoRoute.test.ts @@ -2,6 +2,7 @@ import request from 'supertest' import express from 'express' import swapTxInfoRoute from '../routes/swapTxInfoRoute' +import { DAI, USDC } from '../constants/bridgeable' const app = express() app.use('/swapTxInfo', swapTxInfoRoute) @@ -10,8 +11,8 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return transaction info for valid input, 1000 USDC to DAI', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', // USDC on Ethereum - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', // DAI on Ethereum + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], amount: '1000', address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', }) @@ -24,8 +25,8 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return 400 for invalid address, with error message', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], amount: '1000', address: 'invalid_address', }) @@ -39,8 +40,8 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return 400 for unsupported chain, with error message', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '111', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], amount: '1000', address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', }) @@ -51,7 +52,7 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return 400 for invalid toToken address, with error message', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], toToken: 'invalid_address', amount: '1000', address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', @@ -66,7 +67,7 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return 400 for token not supported on specified chain', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', + fromToken: USDC.addresses[1], toToken: '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F', // SNX on Ethereum (Not supported) amount: '1000', address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', @@ -81,8 +82,8 @@ describe('Swap TX Info Route with Real Synapse Service', () => { it('should return 400 for missing amount, with error message', async () => { const response = await request(app).get('/swapTxInfo').query({ chain: '1', - fromToken: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', - toToken: '0x6B175474E89094C44Da98b954EedeAC495271d0F', + fromToken: USDC.addresses[1], + toToken: DAI.addresses[1], address: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e', }) expect(response.status).toBe(400) diff --git a/packages/rest-api/src/tests/tokenListRoute.test.ts b/packages/rest-api/src/tests/tokenListRoute.test.ts index 16d2fb82df..127ea9fb12 100644 --- a/packages/rest-api/src/tests/tokenListRoute.test.ts +++ b/packages/rest-api/src/tests/tokenListRoute.test.ts @@ -16,7 +16,7 @@ describe('Index Route', () => { expect(keys.length).toBe(62) expect(response.body['ETH']['addresses']['1']).toBe( - '0x0000000000000000000000000000000000000000' + '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE' ) expect(response.body['SYN']['addresses']['1']).toBe( '0x0f2d719407fdbeff09d87557abb7232601fd9f29' diff --git a/packages/rest-api/src/utils/tokenAddressToToken.ts b/packages/rest-api/src/utils/tokenAddressToToken.ts index 21c073e7d5..6bad892582 100644 --- a/packages/rest-api/src/utils/tokenAddressToToken.ts +++ b/packages/rest-api/src/utils/tokenAddressToToken.ts @@ -1,4 +1,3 @@ -import { NativeGasAddress, ZeroAddress } from '../constants' import { BRIDGE_MAP } from '../constants/bridgeMap' export const tokenAddressToToken = (chain: string, tokenAddress: string) => { @@ -7,12 +6,12 @@ export const tokenAddressToToken = (chain: string, tokenAddress: string) => { return null } - const address = tokenAddress === ZeroAddress ? NativeGasAddress : tokenAddress + const tokenInfo = chainData[tokenAddress] - const tokenInfo = chainData[address] if (!tokenInfo) { return null } + return { address: tokenAddress, symbol: tokenInfo.symbol,