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,11 +120,15 @@ export function useSearchInactiveTokenLists(search: string | undefined, minResul ...@@ -120,11 +120,15 @@ 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)) {
const wrapped: WrappedTokenInfo = new WrappedTokenInfo(tokenInfo, list) try {
if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) { const wrapped: WrappedTokenInfo = new WrappedTokenInfo(tokenInfo, list)
addressSet[wrapped.address] = true if (!(wrapped.address in activeTokens) && !addressSet[wrapped.address]) {
result.push(wrapped) addressSet[wrapped.address] = true
if (result.length >= minResults) return result result.push(wrapped)
if (result.length >= minResults) return result
}
} catch {
continue
} }
} }
} }
......
...@@ -16,16 +16,20 @@ export function tokensToChainTokenMap(tokens: TokenList | TokenInfo[]): ChainTok ...@@ -16,16 +16,20 @@ 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) => {
const token = new WrappedTokenInfo(info, list) try {
if (map[token.chainId]?.[token.address] !== undefined) { const token = new WrappedTokenInfo(info, list)
console.warn(`Duplicate token skipped: ${token.address}`) if (map[token.chainId]?.[token.address] !== undefined) {
console.warn(`Duplicate token skipped: ${token.address}`)
return map
}
if (!map[token.chainId]) {
map[token.chainId] = {}
}
map[token.chainId][token.address] = { token, list }
return map
} catch {
return map return map
} }
if (!map[token.chainId]) {
map[token.chainId] = {}
}
map[token.chainId][token.address] = { token, list }
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