From e5cb94a53118b9819b767da5e0f06346294e6405 Mon Sep 17 00:00:00 2001 From: JD Date: Thu, 23 May 2024 17:56:48 +0200 Subject: [PATCH 1/3] feat: add swap quote interface --- src/quote/swap/adapters/zeroex.ts | 28 ++++++++++++--- src/quote/swap/interfaces.ts | 14 ++++++-- src/quote/zeroEx/componentsQuoteProvider.ts | 38 ++++++++++++--------- 3 files changed, 58 insertions(+), 22 deletions(-) diff --git a/src/quote/swap/adapters/zeroex.ts b/src/quote/swap/adapters/zeroex.ts index 3de09de3..c54d10e6 100644 --- a/src/quote/swap/adapters/zeroex.ts +++ b/src/quote/swap/adapters/zeroex.ts @@ -1,7 +1,12 @@ import axios, { AxiosRequestHeaders } from 'axios' import { ChainId } from 'constants/chains' -import { SwapQuoteProvider, SwapQuoteRequest } from 'quote/swap/interfaces' +import { + SwapQuote, + SwapQuoteProvider, + SwapQuoteRequest, +} from 'quote/swap/interfaces' +import { Exchange } from 'utils' type ZeroExApiSwapRequest = { buyAmount?: string @@ -103,8 +108,8 @@ export class ZeroExSwapQuoteProvider implements SwapQuoteProvider { */ public async getSwapQuote( request: SwapQuoteRequest - ): Promise { - const { chainId } = request + ): Promise { + const { chainId, inputToken, outputToken, slippage } = request const params = this.getParams(request) const path = this.swapPathOverride ?? '/swap/v1/quote' const query = new URLSearchParams(params).toString() @@ -118,7 +123,22 @@ export class ZeroExSwapQuoteProvider implements SwapQuoteProvider { try { const response = await axios.get(url, config) const res: ZeroExApiSwapResponse = response.data - return res + return { + chainId, + inputToken, + outputToken, + inputAmount: res.sellAmount, + outputAmount: res.buyAmount, + callData: res.data, + slippage: slippage ?? 0, + // TODO: add swap data + swapData: { + exchange: Exchange.UniV3, + path: ['', ''], + fees: [300], + pool: '0x0000000000000000000000000000000000000000', + }, + } } catch (err: unknown) { return null } diff --git a/src/quote/swap/interfaces.ts b/src/quote/swap/interfaces.ts index df560cae..4178dd59 100644 --- a/src/quote/swap/interfaces.ts +++ b/src/quote/swap/interfaces.ts @@ -1,7 +1,17 @@ -import { ZeroExApiSwapResponse } from 'utils' +import { SwapData } from 'utils' // eslint-disable-next-line @typescript-eslint/no-empty-interface -interface SwapQuote extends ZeroExApiSwapResponse {} +export interface SwapQuote { + chainId: number + inputToken: string + outputToken: string + inputAmount: string + outputAmount: string + callData: string + slippage: number + swapData: SwapData +} + export interface SwapQuoteRequest { chainId: number inputToken: string diff --git a/src/quote/zeroEx/componentsQuoteProvider.ts b/src/quote/zeroEx/componentsQuoteProvider.ts index 873a5f9e..f72b5368 100644 --- a/src/quote/zeroEx/componentsQuoteProvider.ts +++ b/src/quote/zeroEx/componentsQuoteProvider.ts @@ -1,8 +1,8 @@ import { BigNumber } from '@ethersproject/bignumber' -import { ZeroExApiSwapResponse } from 'utils/0x' import { QuoteToken } from '../quoteToken' -import { SwapQuoteProvider, SwapQuoteRequest } from 'quote/swap' +import { SwapQuote, SwapQuoteProvider, SwapQuoteRequest } from 'quote/swap' +import { Exchange } from 'utils' export type ComponentQuotesResult = { componentQuotes: string[] @@ -43,7 +43,7 @@ export class ComponentsQuoteProvider { const inputTokenAddress = this.getTokenAddressOrWeth(inputToken) const outputTokenAddress = this.getTokenAddressOrWeth(outputToken) - const quotePromises: Promise[] = [] + const quotePromises: Promise[] = [] for (let i = 0; i < components.length; i += 1) { const index = i @@ -55,7 +55,7 @@ export class ComponentsQuoteProvider { if (buyToken === sellToken) { const amount = isMinting ? buyAmount : sellAmount - const fakeResponse = this.getFakeZeroExResponse(amount) + const fakeResponse = this.getFakeSwapQuote(amount) quotePromises.push(fakeResponse) } else { const params: SwapQuoteRequest = { @@ -75,14 +75,14 @@ export class ComponentsQuoteProvider { } const resultsWithNull = await Promise.all(quotePromises) - const results: ZeroExApiSwapResponse[] = resultsWithNull.filter( + const results: SwapQuote[] = resultsWithNull.filter( (e): e is Exclude => e !== null ) if (results.length !== resultsWithNull.length) return null - const componentQuotes = results.map((result) => result.data) + const componentQuotes = results.map((result) => result.callData) const inputOutputTokenAmount = results .map((result) => - BigNumber.from(isMinting ? result.sellAmount : result.buyAmount) + BigNumber.from(isMinting ? result.inputAmount : result.outputAmount) ) .reduce((prevValue, currValue) => { return currValue.add(prevValue) @@ -94,19 +94,25 @@ export class ComponentsQuoteProvider { } /** - * This is just a helper function to return a fake ZeroEx response when the + * This is just a helper function to return a fake swap quote when the * component and input/output token are the same. */ - async getFakeZeroExResponse( - amount: BigNumber - ): Promise { + async getFakeSwapQuote(amount: BigNumber): Promise { return Promise.resolve({ - buyAmount: amount.toString(), - buyTokenAddress: '', - sellAmount: amount.toString(), - sellTokenAddress: '', + chainId: 1, + inputToken: '', + outputToken: '', + inputAmount: amount.toString(), + outputAmount: amount.toString(), // Needs valid formatted hash - as otherwise validation will fail - data: '0x0000000000000000000000000000000000000000', + callData: '0x0000000000000000000000000000000000000000', + slippage: 0, + swapData: { + exchange: Exchange.UniV3, + path: ['', ''], + fees: [300], + pool: '0x0000000000000000000000000000000000000000', + }, }) } From 389ae1ac7472abd4e7a6d83096ea6bc1bc9b7835 Mon Sep 17 00:00:00 2001 From: JD Date: Thu, 23 May 2024 18:04:04 +0200 Subject: [PATCH 2/3] test: fix zeroex provider tests --- src/quote/zeroEx/provider.test.ts | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/quote/zeroEx/provider.test.ts b/src/quote/zeroEx/provider.test.ts index 9af80c4e..9bcec1ce 100644 --- a/src/quote/zeroEx/provider.test.ts +++ b/src/quote/zeroEx/provider.test.ts @@ -1,11 +1,15 @@ import 'dotenv/config' -import { LocalhostProvider, QuoteTokens, ZeroExApiSwapQuote } from 'tests/utils' +import { + IndexZeroExSwapQuoteProvider, + LocalhostProvider, + QuoteTokens, +} from 'tests/utils' import { wei } from 'utils' import { ZeroExQuoteProvider } from './provider' const provider = LocalhostProvider -const zeroExApi = ZeroExApiSwapQuote +const swapQuoteProvider = IndexZeroExSwapQuoteProvider const { dpi, dseth, eth, mvi } = QuoteTokens @@ -18,7 +22,7 @@ describe('ZeroExQuoteProvider', () => { const indexTokenAmount = wei(1) const inputToken = eth const outputToken = dseth - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote({ isMinting: true, inputToken, @@ -37,7 +41,7 @@ describe('ZeroExQuoteProvider', () => { const indexTokenAmount = wei(1) const inputToken = dseth const outputToken = eth - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote({ isMinting: false, inputToken, @@ -67,7 +71,7 @@ describe('ZeroExQuoteProvider', () => { indexTokenAmount: wei(1), slippage: 0.5, } - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote(request) if (!quote) fail() expect(quote.componentQuotes.length).toBeGreaterThan(0) @@ -86,7 +90,7 @@ describe('ZeroExQuoteProvider', () => { indexTokenAmount: wei(1), slippage: 0.5, } - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote(request) if (!quote) fail() expect(quote.componentQuotes.length).toBeGreaterThan(0) @@ -105,7 +109,7 @@ describe('ZeroExQuoteProvider', () => { indexTokenAmount: wei(1), slippage: 0.5, } - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote(request) if (!quote) fail() expect(quote.componentQuotes.length).toBeGreaterThan(0) @@ -124,7 +128,7 @@ describe('ZeroExQuoteProvider', () => { indexTokenAmount: wei(1), slippage: 0.5, } - const quoteProvider = new ZeroExQuoteProvider(provider, zeroExApi) + const quoteProvider = new ZeroExQuoteProvider(provider, swapQuoteProvider) const quote = await quoteProvider.getQuote(request) if (!quote) fail() expect(quote.componentQuotes.length).toBeGreaterThan(0) From 6af9b11eeed9c713ec118e898828dcfca476dfb1 Mon Sep 17 00:00:00 2001 From: JD Date: Thu, 23 May 2024 18:19:48 +0200 Subject: [PATCH 3/3] test: fix tests adding new test factory config --- src/tests/arbitrum/btc2x.test.ts | 4 ++-- src/tests/arbitrum/btc3x.test.ts | 4 ++-- src/tests/arbitrum/eth2x.test.ts | 4 ++-- src/tests/arbitrum/eth3x.test.ts | 4 ++-- src/tests/arbitrum/ibtc1x.test.ts | 4 ++-- src/tests/arbitrum/ieth1x.test.ts | 4 ++-- src/tests/btc2x.test.ts | 5 ++--- src/tests/btc2xfli/index.test.ts | 5 ++--- src/tests/cdeti/index.test.ts | 5 ++--- src/tests/dseth/index.test.ts | 5 ++--- src/tests/eth2x.test.ts | 5 ++--- src/tests/eth2xfli/index.test.ts | 4 +++- src/tests/gtceth/index.test.ts | 5 ++--- src/tests/iceth.test.ts | 5 ++--- src/tests/icreth/index.test.ts | 10 ++++++---- src/tests/utils/factories.ts | 20 +++++++++++++++++--- src/tests/utils/index.ts | 19 +++++++++++++++++++ src/tests/wseth2/index.test.ts | 6 ++---- 18 files changed, 73 insertions(+), 45 deletions(-) diff --git a/src/tests/arbitrum/btc2x.test.ts b/src/tests/arbitrum/btc2x.test.ts index 975ea387..a44ec032 100644 --- a/src/tests/arbitrum/btc2x.test.ts +++ b/src/tests/arbitrum/btc2x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopBitcoin2xIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe('BTC2X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(3, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/arbitrum/btc3x.test.ts b/src/tests/arbitrum/btc3x.test.ts index 0444e52a..e60be15d 100644 --- a/src/tests/arbitrum/btc3x.test.ts +++ b/src/tests/arbitrum/btc3x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopBitcoin3xIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe.skip('BTC3X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(5, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/arbitrum/eth2x.test.ts b/src/tests/arbitrum/eth2x.test.ts index 3edc24e7..de171d6c 100644 --- a/src/tests/arbitrum/eth2x.test.ts +++ b/src/tests/arbitrum/eth2x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopEthereum2xIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe('ETH2X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(0, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/arbitrum/eth3x.test.ts b/src/tests/arbitrum/eth3x.test.ts index 7ed7bfb2..43a21a81 100644 --- a/src/tests/arbitrum/eth3x.test.ts +++ b/src/tests/arbitrum/eth3x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopEthereum3xIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe('ETH3X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(2, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test.only('can mint with ETH', async () => { diff --git a/src/tests/arbitrum/ibtc1x.test.ts b/src/tests/arbitrum/ibtc1x.test.ts index f5c4ed33..067ef97d 100644 --- a/src/tests/arbitrum/ibtc1x.test.ts +++ b/src/tests/arbitrum/ibtc1x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopInverseBitcoinIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe('iBTC1X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(4, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/arbitrum/ieth1x.test.ts b/src/tests/arbitrum/ieth1x.test.ts index ab557a53..0988e0b5 100644 --- a/src/tests/arbitrum/ieth1x.test.ts +++ b/src/tests/arbitrum/ieth1x.test.ts @@ -1,12 +1,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { IndexCoopInverseEthereumIndex } from 'constants/tokens' import { + getArbitrumTestFactory, getSignerAccount, LocalhostProviderArbitrum, QuoteTokens, TestFactory, wei, - ZeroExApiArbitrumSwapQuote, } from 'tests/utils' const { eth } = QuoteTokens @@ -21,7 +21,7 @@ describe('iETH1X (Arbitrum)', () => { beforeEach(async () => { const provider = LocalhostProviderArbitrum const signer = getSignerAccount(1, provider) - factory = new TestFactory(provider, signer, ZeroExApiArbitrumSwapQuote) + factory = getArbitrumTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/btc2x.test.ts b/src/tests/btc2x.test.ts index ebb9a73d..eba80d7c 100644 --- a/src/tests/btc2x.test.ts +++ b/src/tests/btc2x.test.ts @@ -1,21 +1,20 @@ import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount4, TestFactory, wei, - ZeroExApiSwapQuote, } from './utils' const { btc2x, eth } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote describe('BTC2X (mainnet)', () => { let factory: TestFactory beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount4 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/btc2xfli/index.test.ts b/src/tests/btc2xfli/index.test.ts index 758b6702..edbe6e55 100644 --- a/src/tests/btc2xfli/index.test.ts +++ b/src/tests/btc2xfli/index.test.ts @@ -1,12 +1,12 @@ import { BigNumber } from '@ethersproject/bignumber' import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount2, TestFactory, wei, - ZeroExApiSwapQuote, } from '../utils' const { btc2xfli, eth, usdc } = QuoteTokens @@ -16,8 +16,7 @@ describe('BTC2xFLI (mainnet)', () => { beforeEach(() => { const provider = LocalhostProvider const signer = SignerAccount2 - const zeroExApi = ZeroExApiSwapQuote - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('can mint BTC2xFLI', async () => { diff --git a/src/tests/cdeti/index.test.ts b/src/tests/cdeti/index.test.ts index 83ad1037..36c05ab1 100644 --- a/src/tests/cdeti/index.test.ts +++ b/src/tests/cdeti/index.test.ts @@ -1,22 +1,21 @@ import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount5, TestFactory, transferFromWhale, wei, - ZeroExApiSwapQuote, } from '../utils' const { cdeti, eth, usdc } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote describe('cdETI (mainnet)', () => { let factory: TestFactory beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount5 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('minting with ETH', async () => { diff --git a/src/tests/dseth/index.test.ts b/src/tests/dseth/index.test.ts index f2973e98..95f2a131 100644 --- a/src/tests/dseth/index.test.ts +++ b/src/tests/dseth/index.test.ts @@ -1,6 +1,7 @@ import { addLiquidityToLido, balanceOf, + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount3, @@ -10,18 +11,16 @@ import { wei, wrapETH, wrapStEth, - ZeroExApiSwapQuote, } from '../utils' const { dseth, eth, reth, seth2, steth, usdc, weth, wseth } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote describe('dsETH (mainnet)', () => { let factory: TestFactory beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount3 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test.only('minting with ETH', async () => { diff --git a/src/tests/eth2x.test.ts b/src/tests/eth2x.test.ts index b9725d15..6ac57d62 100644 --- a/src/tests/eth2x.test.ts +++ b/src/tests/eth2x.test.ts @@ -1,21 +1,20 @@ import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount4, TestFactory, wei, - ZeroExApiSwapQuote, } from './utils' const { eth, eth2x } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote describe('ETH2X (mainnet)', () => { let factory: TestFactory beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount4 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('can mint with ETH', async () => { diff --git a/src/tests/eth2xfli/index.test.ts b/src/tests/eth2xfli/index.test.ts index b9fffeeb..b167c0e5 100644 --- a/src/tests/eth2xfli/index.test.ts +++ b/src/tests/eth2xfli/index.test.ts @@ -6,10 +6,12 @@ import { wei, ZeroExApiSwapQuote, resetHardhat, + IndexZeroExSwapQuoteProvider, } from '../utils' import { swapQuote01, swapQuote02 } from './quotes' const { eth, eth2xfli } = QuoteTokens +const swapQuoteProvider = IndexZeroExSwapQuoteProvider const zeroExApi = ZeroExApiSwapQuote const zeroExMock = jest.spyOn(zeroExApi, 'getSwapQuote') zeroExMock @@ -27,7 +29,7 @@ describe('ETH2xFLI (mainnet)', () => { const provider = LocalhostProvider const signer = SignerAccount1 await resetHardhat(provider, blockNumber) - factory = new TestFactory(provider, signer, zeroExApi) + factory = new TestFactory(provider, signer, swapQuoteProvider, zeroExApi) }) test('can mint ETH2xFLI', async () => { diff --git a/src/tests/gtceth/index.test.ts b/src/tests/gtceth/index.test.ts index c7a58ae3..0a8a94f3 100644 --- a/src/tests/gtceth/index.test.ts +++ b/src/tests/gtceth/index.test.ts @@ -1,16 +1,15 @@ import { wei } from 'utils/numbers' import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount0, TestFactory, wrapETH, - ZeroExApiSwapQuote, } from '../utils' const { eth, gtcETH, weth } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote // Works locally, fails on github actions for some reason. describe.skip('gtcETH (mainnet)', () => { @@ -18,7 +17,7 @@ describe.skip('gtcETH (mainnet)', () => { beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount0 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('minting with ETH', async () => { diff --git a/src/tests/iceth.test.ts b/src/tests/iceth.test.ts index b1c30311..ea0d4d82 100644 --- a/src/tests/iceth.test.ts +++ b/src/tests/iceth.test.ts @@ -1,24 +1,23 @@ import { BigNumber } from '@ethersproject/bignumber' import { + getMainnetTestFactory, LocalhostProvider, QuoteTokens, SignerAccount4, TestFactory, wei, wrapETH, - ZeroExApiSwapQuote, } from './utils' const { eth, iceth, weth } = QuoteTokens -const zeroExApi = ZeroExApiSwapQuote describe('icETH (mainnet)', () => { let factory: TestFactory beforeEach(async () => { const provider = LocalhostProvider const signer = SignerAccount4 - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('can mint icETH-ETH', async () => { diff --git a/src/tests/icreth/index.test.ts b/src/tests/icreth/index.test.ts index 89381c74..f1ad0006 100644 --- a/src/tests/icreth/index.test.ts +++ b/src/tests/icreth/index.test.ts @@ -1,4 +1,5 @@ import { + IndexZeroExSwapQuoteProvider, LocalhostProvider, QuoteTokens, resetHardhat, @@ -19,6 +20,7 @@ import { const { eth, icreth, reth, usdc, weth } = QuoteTokens const signer = SignerAccount2 +const swapQuoteProvider = IndexZeroExSwapQuoteProvider const zeroExApi = ZeroExApiSwapQuote const zeroExMock = jest.spyOn(zeroExApi, 'getSwapQuote') @@ -26,7 +28,7 @@ describe('icRETH (mainnet) - ETH', () => { let factory: TestFactory beforeAll(async () => { const provider = LocalhostProvider - factory = new TestFactory(provider, signer, zeroExApi) + factory = new TestFactory(provider, signer, swapQuoteProvider, zeroExApi) }) test('can mint icRETH', async () => { @@ -56,7 +58,7 @@ describe.skip('icRETH (mainnet) - rETH', () => { let factory: TestFactory beforeAll(async () => { const provider = LocalhostProvider - factory = new TestFactory(provider, signer, zeroExApi) + factory = new TestFactory(provider, signer, swapQuoteProvider, zeroExApi) }) test('can mint icRETH', async () => { @@ -109,7 +111,7 @@ describe.skip('icRETH (mainnet) - USDC', () => { const blockNumber = 17940000 const provider = LocalhostProvider await resetHardhat(provider, blockNumber) - factory = new TestFactory(provider, signer, zeroExApi) + factory = new TestFactory(provider, signer, swapQuoteProvider, zeroExApi) }) test('can mint icRETH', async () => { @@ -147,7 +149,7 @@ describe('icRETH (mainnet) - WETH', () => { let factory: TestFactory beforeAll(async () => { const provider = LocalhostProvider - factory = new TestFactory(provider, signer, zeroExApi) + factory = new TestFactory(provider, signer, swapQuoteProvider, zeroExApi) }) test('can mint icRETH', async () => { diff --git a/src/tests/utils/factories.ts b/src/tests/utils/factories.ts index 9f98d145..e39e66c7 100644 --- a/src/tests/utils/factories.ts +++ b/src/tests/utils/factories.ts @@ -2,7 +2,12 @@ import { BigNumber } from '@ethersproject/bignumber' import { JsonRpcProvider } from '@ethersproject/providers' import { Wallet } from '@ethersproject/wallet' -import { FlashMintQuote, FlashMintQuoteProvider, QuoteToken } from 'quote' +import { + FlashMintQuote, + FlashMintQuoteProvider, + QuoteToken, + SwapQuoteProvider, +} from 'quote' import { ZeroExApi } from 'utils' import { approveErc20, balanceOf } from './' @@ -79,8 +84,17 @@ export class TestFactory { private quote: FlashMintQuote | null = null private quoteProvider: FlashMintQuoteProvider private txFactory: TxTestFactory - constructor(provider: JsonRpcProvider, signer: Wallet, zeroExApi: ZeroExApi) { - this.quoteProvider = new FlashMintQuoteProvider(provider, zeroExApi) + constructor( + provider: JsonRpcProvider, + signer: Wallet, + swapQuoteProvider: SwapQuoteProvider, + zeroExApi: ZeroExApi + ) { + this.quoteProvider = new FlashMintQuoteProvider( + provider, + swapQuoteProvider, + zeroExApi + ) this.txFactory = new TxTestFactory(provider, signer) } diff --git a/src/tests/utils/index.ts b/src/tests/utils/index.ts index 0e42424f..cde8be97 100644 --- a/src/tests/utils/index.ts +++ b/src/tests/utils/index.ts @@ -9,6 +9,7 @@ import { Wallet } from '@ethersproject/wallet' import { WETH } from 'constants/tokens' import { ZeroExSwapQuoteProvider } from 'quote' import { ZeroExApi } from 'utils/0x' +import { TestFactory } from './factories' export { wei } from 'utils/numbers' export * from './factories' @@ -28,6 +29,24 @@ export const LocalhostProviderArbitrum = new JsonRpcProvider( 'http://127.0.0.1:8548/' ) +// Pre-configured TestFactories +export function getArbitrumTestFactory(provider: JsonRpcProvider, signer: any) { + return new TestFactory( + provider, + signer, + IndexZeroExSwapQuoteProviderArbitrum, + ZeroExApiArbitrumSwapQuote + ) +} +export function getMainnetTestFactory(provider: JsonRpcProvider, signer: any) { + return new TestFactory( + provider, + signer, + IndexZeroExSwapQuoteProvider, + ZeroExApiSwapQuote + ) +} + export function getSignerAccount(num = 0, provider: JsonRpcProvider) { let privateKey = '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80' diff --git a/src/tests/wseth2/index.test.ts b/src/tests/wseth2/index.test.ts index 5df4125c..2bc1614f 100644 --- a/src/tests/wseth2/index.test.ts +++ b/src/tests/wseth2/index.test.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { sETH2, WETH, wsETH2 } from 'constants/tokens' import { + getMainnetTestFactory, LocalhostProvider, resetHardhat, SignerAccount17, @@ -8,11 +9,8 @@ import { TestFactory, wei, wrapETH, - ZeroExApiSwapQuote, } from '../utils' -const zeroExApi = ZeroExApiSwapQuote - describe.skip('wsETH2 (mainnet)', () => { let factory: TestFactory beforeAll(async () => { @@ -20,7 +18,7 @@ describe.skip('wsETH2 (mainnet)', () => { const provider = LocalhostProvider const signer = SignerAccount17 await resetHardhat(provider, blockNumber) - factory = new TestFactory(provider, signer, zeroExApi) + factory = getMainnetTestFactory(provider, signer) }) test('can mint wsETH2 w/ sETH2', async () => {