@@ -204,32 +204,38 @@ export function isNativeStableToken(tokenId: string) {
204
204
}
205
205
206
206
export async function isSwappable ( token_1 : string , token_2 : string , chainId : number ) {
207
+ // Exit early if the same token was passed in two times
208
+ if ( token_1 === token_2 ) return false
209
+
207
210
const sdk = await getMentoSdk ( chainId )
208
211
const tradablePairs = await sdk . getTradablePairs ( )
209
212
if ( ! tradablePairs ) return false
210
- if ( token_1 === token_2 ) return false
213
+
214
+ const token1Address = getTokenAddress ( token_1 as TokenId , chainId )
215
+ const token2Address = getTokenAddress ( token_2 as TokenId , chainId )
211
216
212
217
return tradablePairs . some (
213
- ( assets ) =>
214
- assets . find ( ( asset ) => asset . address === getTokenAddress ( token_1 as TokenId , chainId ) ) &&
215
- assets . find ( ( asset ) => asset . address === getTokenAddress ( token_2 as TokenId , chainId ) )
218
+ ( pair ) =>
219
+ pair . find ( ( asset ) => asset . address === token1Address ) &&
220
+ pair . find ( ( asset ) => asset . address === token2Address )
216
221
)
217
222
}
218
223
219
- export async function getSwappableTokenOptions ( token : string , chainId : ChainId ) {
220
- const options = getTokenOptionsByChainId ( chainId )
224
+ export async function getSwappableTokenOptions ( inputTokenId : string , chainId : ChainId ) {
225
+ const allTokenOptions = getTokenOptionsByChainId ( chainId )
221
226
222
- const swappableOptions = await Promise . all (
223
- options . map ( async ( tkn ) => ( {
224
- token : tkn ,
225
- isSwappable : await isSwappable ( tkn , token , chainId ) ,
227
+ // Filter out the input token first
228
+ const tokenOptions = allTokenOptions . filter ( ( tokenId ) => tokenId !== inputTokenId )
229
+
230
+ // Check which tokens are swappable with the input token
231
+ const swappableChecks = await Promise . all (
232
+ tokenOptions . map ( async ( tokenId ) => ( {
233
+ tokenId,
234
+ swappable : await isSwappable ( tokenId , inputTokenId , chainId ) ,
226
235
} ) )
227
- ) . then ( ( results ) => {
228
- return results
229
- . filter ( ( result ) => result . isSwappable && result . token !== token )
230
- . map ( ( result ) => result . token )
231
- } )
232
- return swappableOptions
236
+ )
237
+
238
+ return swappableChecks . filter ( ( { swappable } ) => swappable ) . map ( ( { tokenId } ) => tokenId )
233
239
}
234
240
235
241
export function getTokenOptionsByChainId ( chainId : ChainId ) : TokenId [ ] {
0 commit comments