Skip to content

Commit 639dc32

Browse files
committed
chore: small optimization for isSwappable and getSwappableTokenOptions
1 parent f42448d commit 639dc32

File tree

1 file changed

+22
-16
lines changed

1 file changed

+22
-16
lines changed

src/config/tokens.ts

+22-16
Original file line numberDiff line numberDiff line change
@@ -204,32 +204,38 @@ export function isNativeStableToken(tokenId: string) {
204204
}
205205

206206
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+
207210
const sdk = await getMentoSdk(chainId)
208211
const tradablePairs = await sdk.getTradablePairs()
209212
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)
211216

212217
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)
216221
)
217222
}
218223

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)
221226

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),
226235
}))
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)
233239
}
234240

235241
export function getTokenOptionsByChainId(chainId: ChainId): TokenId[] {

0 commit comments

Comments
 (0)