fix: history calls an execute or multicall a Swap only when sent to a router (closes #580)
The history labelled any call named execute or multicall a Swap, whatever contract it went to, so a multisig or smart account call showed as a Swap in the list and on TransactionDetail's Type line. Such a call is now a Swap only when sent to a Universal Router address listed for the network the transaction is on, the list the approval screen uses (routerRelease(), now exported from uniswap.js). Any other is labelled by its method name and its Type line reads Contract Call. The named router swap methods keep their label. Model: opus-5-5
This commit was merged in pull request #643.
This commit is contained in:
@@ -20,6 +20,7 @@ const { toDecimals } = require("./transferAmount");
|
||||
// truncation without the approval screens' nonzero floor: the transaction
|
||||
// detail view is the authoritative record and already shows exact precision.
|
||||
const { truncateAmount: formatTxValue } = require("./amountDisplay");
|
||||
const { routerRelease } = require("./uniswap");
|
||||
|
||||
// Ethereum addresses are case-insensitive: EIP-55 mixed case is a checksum
|
||||
// over the address, not part of its identity. Every address comparison in
|
||||
@@ -51,7 +52,6 @@ function parseTx(tx, addrLower, chainId) {
|
||||
}
|
||||
// Map known DEX methods to "Swap" for cleaner display
|
||||
const SWAP_METHODS = new Set([
|
||||
"execute",
|
||||
"swap",
|
||||
"swapExactTokensForTokens",
|
||||
"swapTokensForExactTokens",
|
||||
@@ -59,9 +59,16 @@ function parseTx(tx, addrLower, chainId) {
|
||||
"swapTokensForExactETH",
|
||||
"swapExactTokensForETH",
|
||||
"swapETHForExactTokens",
|
||||
"multicall",
|
||||
]);
|
||||
const label = SWAP_METHODS.has(method)
|
||||
// Multisigs, smart accounts and many other contracts also have an
|
||||
// `execute` or `multicall` method, so either is a swap only when sent
|
||||
// to a Universal Router on this transaction's network: the same
|
||||
// addresses the approval screen decodes a swap for.
|
||||
const isSwap =
|
||||
SWAP_METHODS.has(method) ||
|
||||
((method === "execute" || method === "multicall") &&
|
||||
routerRelease(to, chainId) !== null);
|
||||
const label = isSwap
|
||||
? "Swap"
|
||||
: method.charAt(0).toUpperCase() + method.slice(1);
|
||||
direction = "contract";
|
||||
|
||||
@@ -2237,4 +2237,4 @@ function decode(data, toAddress, chainId, sources, fromAddress) {
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { decode };
|
||||
module.exports = { decode, routerRelease };
|
||||
|
||||
Reference in New Issue
Block a user