UNPKG

@brian-ai/ee-portals-solver

Version:

> ⚠️ README: work in progress.

209 lines (194 loc) 6.3 kB
import { describe, expect, test } from "bun:test"; import { PortalsSolver } from "../src"; import { parseUnits, type Hex } from "viem"; import { arbitrum, avalanche, base, bsc, gnosis, mainnet, mode, optimism, polygon, } from "viem/chains"; describe("[portals-solver] tests", () => { const chains = [ { id: 1, chain: mainnet, }, { id: 43114, chain: avalanche, }, { id: 137, chain: polygon, }, { id: 56, chain: bsc, }, { id: 10, chain: optimism, }, { id: 42161, chain: arbitrum, }, { id: 100, chain: gnosis, }, { id: 8453, chain: base, }, { chain: mode, id: 34443, }, ]; const portalsSolver = new PortalsSolver( chains.map((chain) => chain.id), "https://api.portals.fi/v2", process.env.PORTALS_API_KEY!, "0x129B480AD625bcD1A5c3A1C10d708114726Fa467", 0.1, 0.5 ); const usdcTokenMap: Record<number, Hex> = { 1: "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48", 56: "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", 43114: "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E", 10: "0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85", 42161: "0xaf88d065e77c8cC2239327C5EDb3A432268e5831", 100: "0xDDAfbb505ad214D7b80b1f830fcCc89B60fb7A83", 137: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174", 324: "0x3355df6D4c9C3035724Fd0e3914dE96A5a83aaf4", 8453: "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", 59144: "0x176211869cA2b568f2A7D4EE941E073a821EE1ff", 5000: "0x09Bc4E0D864854c6aFB6eB9A9cdF58aC190D0dF9", 534352: "0x06eFdBFf2a14a7c8E15944D1F4A48F9F95F663A4", 34443: "0xd988097fb8612cc24eec14542bc03424c656005f", }; const aaveUsdcTokenMap: Record<number, Hex> = { 1: "0x98C23E9d8f34FEFb1B7BD6a91B7FF122F4e16F5c", 42161: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", 10: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", 43114: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", 137: "0x625E7708f30cA75bfd92586e17077590C60eb4cD", 8453: "0x0a1d576f3eFeF75b330424287a95A366e8281D54", }; const aaveChains = [ { id: 1, chain: mainnet, }, { id: 42161, chain: arbitrum, }, { id: 10, chain: optimism, }, { id: 137, chain: polygon, }, { id: 8453, chain: base, }, { id: 43114, chain: avalanche, }, ]; const nativeTokenMap: Record<number, Hex> = { 1: "0x0000000000000000000000000000000000000000", 56: "0x0000000000000000000000000000000000000000", 43114: "0x0000000000000000000000000000000000000000", 10: "0x0000000000000000000000000000000000000000", 42161: "0x0000000000000000000000000000000000000000", 100: "0x0000000000000000000000000000000000000000", 137: "0x0000000000000000000000000000000000000000", 8453: "0x0000000000000000000000000000000000000000", 34443: "0x0000000000000000000000000000000000000000", }; describe("swap tests", async () => { for (const sourceChain of chains) { // on only one chain swap USDC to ETH and viceversa test(`should return a swap transaction on ${sourceChain.chain.name} from USDC to ETH`, async () => { const result = await portalsSolver.execute("swap", { chain: sourceChain.chain, inputToken: usdcTokenMap[sourceChain.id], outputToken: nativeTokenMap[sourceChain.id], amount: parseUnits("6", 6), receiver: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", address: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", }); expect(result).toBeDefined(); expect(result.type).toBe("write"); expect(result.solver).toBe("portals"); expect(result.data).toBeDefined(); expect(result.data.length).toBeGreaterThan(0); }); test(`should return a swap transaction on ${sourceChain.chain.name} from ETH to USDC`, async () => { const result = await portalsSolver.execute("swap", { chain: sourceChain.chain, inputToken: nativeTokenMap[sourceChain.id], outputToken: usdcTokenMap[sourceChain.id], amount: parseUnits("6", 18), receiver: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", address: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", }); expect(result).toBeDefined(); expect(result.type).toBe("write"); expect(result.solver).toBe("portals"); expect(result.data).toBeDefined(); }); } }); describe("deposit tests", async () => { for (const sourceChain of aaveChains) { test(`should return a aave deposit transaction on ${sourceChain.chain.name} from USDC to aave USDC`, async () => { const result = await portalsSolver.execute("deposit", { chain: sourceChain.chain, inputToken: usdcTokenMap[sourceChain.id], outputToken: aaveUsdcTokenMap[sourceChain.id], amount: parseUnits("6", 6), receiver: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", address: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", }); expect(result).toBeDefined(); expect(result.type).toBe("write"); expect(result.solver).toBe("portals"); expect(result.data).toBeDefined(); expect(result.data.length).toBeGreaterThan(0); }); } }); describe("withdraw tests", async () => { for (const sourceChain of aaveChains) { test(`should return a aave withdraw transaction on ${sourceChain.chain.name} from aave USDC to USDC`, async () => { const result = await portalsSolver.execute("withdraw", { chain: sourceChain.chain, inputToken: aaveUsdcTokenMap[sourceChain.id], outputToken: usdcTokenMap[sourceChain.id], amount: parseUnits("6", 6), receiver: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", address: "0x02489791e27a36b9C314c2c70d9d4103eB5ba415", }); expect(result).toBeDefined(); expect(result.type).toBe("write"); expect(result.solver).toBe("portals"); expect(result.data).toBeDefined(); expect(result.data.length).toBeGreaterThan(0); }); } }); });