fix: the bundled token list names tokens on Ethereum Mainnet only (closes #632)
bundledToken(address, chainId) in tokenList.js answers only for Ethereum Mainnet's chain id. Every reader of TOKEN_BY_ADDRESS now goes through it, with the chain id of the transaction, balance or history entry it draws. The token sources the screens build carry that chain id. The Uniswap decoder sets the transaction's chain id on them. fetchTokenBalances() takes the chain id of the network it asks about. isSpoofedSymbol() takes the chain id of the token's network. It checks the bundled list's symbols only on Ethereum Mainnet. The native asset's labels stay reserved on every network. Eighteen existing tests and three shared test helpers read the bundled list without naming a network. Each now names Ethereum Mainnet. Model: opus-5-5
This commit is contained in:
@@ -67,13 +67,15 @@ beforeEach(() => {
|
||||
});
|
||||
|
||||
describe("resolveTokenSymbol", () => {
|
||||
// The bundled list is read only for a token on Ethereum Mainnet.
|
||||
test("reads the bundled list", () => {
|
||||
expect(resolveTokenSymbol(USDC, state)).toBe("USDC");
|
||||
expect(resolveTokenSymbol(USDC, { chainId: "0x1" })).toBe("USDC");
|
||||
});
|
||||
|
||||
test("prefers the bundled list over a tracked entry", () => {
|
||||
state.trackedTokens = [{ address: USDC, symbol: "NOTUSDC" }];
|
||||
expect(resolveTokenSymbol(USDC, state)).toBe("USDC");
|
||||
const sources = { chainId: "0x1", trackedTokens: state.trackedTokens };
|
||||
expect(resolveTokenSymbol(USDC, sources)).toBe("USDC");
|
||||
});
|
||||
|
||||
test("reads a token the user tracks", () => {
|
||||
@@ -104,7 +106,19 @@ describe("resolveTokenSymbol", () => {
|
||||
test("rejects a tracked entry claiming a bundled ticker it is not", () => {
|
||||
// NOVEL_TOKEN is not the real USDC contract, so it may not wear USDC.
|
||||
state.trackedTokens = [{ address: NOVEL_TOKEN, symbol: "USDC" }];
|
||||
expect(resolveTokenSymbol(NOVEL_TOKEN, state)).toBeNull();
|
||||
const sources = { chainId: "0x1", trackedTokens: state.trackedTokens };
|
||||
expect(resolveTokenSymbol(NOVEL_TOKEN, sources)).toBeNull();
|
||||
});
|
||||
|
||||
// The bundled list holds mainnet contracts, so on Sepolia any contract may
|
||||
// carry one of its symbols.
|
||||
test("on Sepolia, reads a tracked entry carrying a bundled ticker", () => {
|
||||
state.trackedTokens = [{ address: NOVEL_TOKEN, symbol: "USDC" }];
|
||||
const sources = {
|
||||
chainId: "0xaa36a7",
|
||||
trackedTokens: state.trackedTokens,
|
||||
};
|
||||
expect(resolveTokenSymbol(NOVEL_TOKEN, sources)).toBe("USDC");
|
||||
});
|
||||
|
||||
test("rejects an explorer entry claiming the native ETH ticker", () => {
|
||||
|
||||
Reference in New Issue
Block a user