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 ...@@ -120,12 +120,16 @@ export function useSearchInactiveTokenLists(search: string | undefined, minResul
if (!list) continue if (!list) continue
for (const tokenInfo of list.tokens) { for (const tokenInfo of list.tokens) {
if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) { if (tokenInfo.chainId === chainId && tokenFilter(tokenInfo)) {
try {
const wrapped: WrappedTokenInfo = new WrappedTokenInfo(tokenInfo, list) const wrapped: WrappedTokenInfo = new WrappedTokenInfo(tokenInfo, list)
if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) {
addressSet[wrapped.address] = true addressSet[wrapped.address] = true
result.push(wrapped) result.push(wrapped)
if (result.length >= minResults) return result if (result.length >= minResults) return result
} }
} catch {
continue
}
} }
} }
} }
......
...@@ -16,6 +16,7 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok ...@@ -16,6 +16,7 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok
const [list, infos] = Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens] const [list, infos] = Array.isArray(tokens) ? [undefined, tokens] : [tokens, tokens.tokens]
const map = infos.reduce<Mutable<ChainTokenMap>>((map, info) => { const map = infos.reduce<Mutable<ChainTokenMap>>((map, info) => {
try {
const token = new WrappedTokenInfo(info, list) const token = new WrappedTokenInfo(info, list)
if (map[token.chainId]?.[token.address] !== undefined) { if (map[token.chainId]?.[token.address] !== undefined) {
console.warn(`Duplicate token skipped: ${token.address}`) console.warn(`Duplicate token skipped: ${token.address}`)
...@@ -26,6 +27,9 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok ...@@ -26,6 +27,9 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok
} }
map[token.chainId][token.address] = { token, list } map[token.chainId][token.address] = { token, list }
return map return map
} catch {
return map
}
}, {}) as ChainTokenMap }, {}) as ChainTokenMap
mapCache?.set(tokens, map) mapCache?.set(tokens, map)
return map return map
......
...@@ -14,21 +14,22 @@ export class WrappedTokenInfo implements Token { ...@@ -14,21 +14,22 @@ export class WrappedTokenInfo implements Token {
public readonly isNative: false = false public readonly isNative: false = false
public readonly isToken: true = true public readonly isToken: true = true
public readonly list?: TokenList public readonly list?: TokenList
public readonly tokenInfo: TokenInfo public readonly tokenInfo: TokenInfo
private _checksummedAddress: string
constructor(tokenInfo: TokenInfo, list?: TokenList) { constructor(tokenInfo: TokenInfo, list?: TokenList) {
this.tokenInfo = tokenInfo this.tokenInfo = tokenInfo
this.list = list 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 { public get address(): string {
if (this._checksummedAddress) return 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)
} }
public get chainId(): number { 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