Show contract calls as "Approve USDT" instead of "0.0000 ETH"
All checks were successful
check / check (push) Successful in 17s
All checks were successful
check / check (push) Successful in 17s
Contract interactions (approve, swap, etc.) now display the method name and token symbol instead of the meaningless 0 ETH value. Blockscout provides the method name and whether the target is a contract — parseTx uses these plus TOKEN_BY_ADDRESS to produce labels like "Approve USDT" or "Swap LINK". Added directionLabel field to parsed transactions so renderers don't need to know about the sent/received/contract distinction. Also: clicking a transaction on the home screen now opens the transaction detail view instead of navigating to the address detail view.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
const { formatEther, formatUnits } = require("ethers");
|
||||
const { log, debugFetch } = require("./log");
|
||||
const { KNOWN_SYMBOLS } = require("./tokenList");
|
||||
const { KNOWN_SYMBOLS, TOKEN_BY_ADDRESS } = require("./tokenList");
|
||||
|
||||
function formatTxValue(val) {
|
||||
const parts = val.split(".");
|
||||
@@ -22,21 +22,40 @@ function parseTx(tx, addrLower) {
|
||||
const to = tx.to?.hash || "";
|
||||
const rawWei = tx.value || "0";
|
||||
const toIsContract = tx.to?.is_contract || false;
|
||||
const method = tx.method || null;
|
||||
|
||||
// For contract calls, produce a meaningful label instead of "0.0000 ETH"
|
||||
let symbol = "ETH";
|
||||
let value = formatTxValue(formatEther(rawWei));
|
||||
let direction = from.toLowerCase() === addrLower ? "sent" : "received";
|
||||
let directionLabel = direction === "sent" ? "Sent" : "Received";
|
||||
if (toIsContract && method && method !== "transfer") {
|
||||
const token = TOKEN_BY_ADDRESS.get(to.toLowerCase());
|
||||
if (token) {
|
||||
symbol = token.symbol;
|
||||
}
|
||||
const label = method.charAt(0).toUpperCase() + method.slice(1);
|
||||
direction = "contract";
|
||||
directionLabel = label;
|
||||
value = "";
|
||||
}
|
||||
|
||||
return {
|
||||
hash: tx.hash,
|
||||
blockNumber: tx.block_number,
|
||||
timestamp: Math.floor(new Date(tx.timestamp).getTime() / 1000),
|
||||
from: from,
|
||||
to: to,
|
||||
value: formatTxValue(formatEther(rawWei)),
|
||||
value: value,
|
||||
valueGwei: Math.floor(Number(BigInt(rawWei) / BigInt(1000000000))),
|
||||
symbol: "ETH",
|
||||
direction: from.toLowerCase() === addrLower ? "sent" : "received",
|
||||
symbol: symbol,
|
||||
direction: direction,
|
||||
directionLabel: directionLabel,
|
||||
isError: tx.status !== "ok",
|
||||
contractAddress: null,
|
||||
holders: null,
|
||||
isContractCall: toIsContract,
|
||||
method: tx.method || null,
|
||||
method: method,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -45,6 +64,7 @@ function parseTokenTransfer(tt, addrLower) {
|
||||
const to = tt.to?.hash || "";
|
||||
const decimals = parseInt(tt.total?.decimals || "18", 10);
|
||||
const rawValue = tt.total?.value || "0";
|
||||
const direction = from.toLowerCase() === addrLower ? "sent" : "received";
|
||||
return {
|
||||
hash: tt.transaction_hash,
|
||||
blockNumber: tt.block_number,
|
||||
@@ -54,7 +74,8 @@ function parseTokenTransfer(tt, addrLower) {
|
||||
value: formatTxValue(formatUnits(rawValue, decimals)),
|
||||
valueGwei: null,
|
||||
symbol: tt.token?.symbol || "?",
|
||||
direction: from.toLowerCase() === addrLower ? "sent" : "received",
|
||||
direction: direction,
|
||||
directionLabel: direction === "sent" ? "Sent" : "Received",
|
||||
isError: false,
|
||||
contractAddress: (
|
||||
tt.token?.address_hash ||
|
||||
|
||||
Reference in New Issue
Block a user