Commit ea8c7326 authored by Kaylee George's avatar Kaylee George Committed by GitHub

fix: crash on HOP token search (#3904) (#3928)

fix: ensure token address is checksummed on construction
parent dd5feaac
......@@ -120,12 +120,16 @@ export function useSearchInactiveTokenLists(search: string | undefined, minResul
if (!list) continue
for (const tokenInfo of list.tokens) {
if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) {
try {
const wrapped: WrappedTokenInfo = new WrappedTokenInfo(tokenInfo, list)
if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) {
addressSet[wrapped.address] = true
result.push(wrapped)
if (result.length >= minResults) return result
}
} catch {
continue
}
}
}
}
......
......@@ -16,6 +16,7 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok
const [list, infos] = Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens]
const map = infos.reduce<Mutable<ChainTokenMap>>((map, info) => {
try {
const token = new WrappedTokenInfo(info, list)
if (map[token.chainId]?.[token.address] !== undefined) {
console.warn(`Duplicate token skipped: ${token.address}`)
......@@ -26,6 +27,9 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok
}
map[token.chainId][token.address] = { token, list }
return map
} catch {
return map
}
}, {}) as ChainTokenMap
mapCache?.set(tokens, map)
return map
......
......@@ -14,21 +14,22 @@ export class WrappedTokenInfo implements Token {
public readonly isNative: false = false
public readonly isToken: true = true
public readonly list?: TokenList
public readonly tokenInfo: TokenInfo
private _checksummedAddress: string
constructor(tokenInfo: TokenInfo, list?: TokenList) {
this.tokenInfo = tokenInfo
this.list = list
const checksummedAddress = isAddress(this.tokenInfo.address)
if (!checksummedAddress) {
throw new Error(`Invalid token address: ${this.tokenInfo.address}`)
}
this._checksummedAddress = checksummedAddress
}
private _checksummedAddress: string | null = null
public get address(): string {
if (this._checksummedAddress) return this._checksummedAddress
const checksummedAddress = isAddress(this.tokenInfo.address)
if (!checksummedAddress) throw new Error(`Invalid token address: ${this.tokenInfo.address}`)
return (this._checksummedAddress = checksummedAddress)
return this._checksummedAddress
}
public get chainId(): number {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment