txlist
到 tokentx
在 Day 9,我們使用的 Etherscan API 是 action=txlist
,它專門用來查詢原生代幣 (ETH) 的普通交易。
今天要監控 ERC-20 代幣,我們需要使用一個全新的、更強大的 API:action=tokentx
。
這個 API 的作用是:「給我某個地址所有相關的 ERC-20 代幣轉帳紀錄。」
它的回傳資料與 txlist
非常相似,但多了幾個至關重要的欄位:
tokenName
: 代幣全名 (e.g., "Tether USD")tokenSymbol
: 代幣符號 (e.g., "USDT")tokenDecimal
: 代幣的小數位數 (e.g., "6")value
: 代幣的轉帳金額 (單位是該代幣的最小單位,需要用 tokenDecimal
來換算)為了保留我們原本的 ETH 監控系統,我們不直接修改它,而是複製一份來進行升級。
複製工作流:
修改 HTTP Request 節點:
HTTP Request
節點。URL
欄位中,將 action=txlist
修改為 action=tokentx
。0x247a3c96de4536641ece79a781d431c59086146e
。你的新 URL 看起來應該像這樣(記得替換地址和 API Key):
現在我們收到的不再只是 ETH,而是五花八門的各種代幣。我們的篩選器需要變得更聰明,能夠為不同的代幣設定不同的門檻。
將你的第一個 Code (篩選器)
節點中的程式碼,完整替換為下面這個「ERC-20 健壯版」篩選器:
// ========================================================
// ERC-20 健壯版篩選器:支援多代幣、多門檻
// ========================================================
// 1. 定義我們感興趣的代幣和它們各自的「巨鯨門檻」
// 這裡的金額單位是代幣的「常用單位」,例如 10000 USDC
const thresholds = {
"USDC": 10000,
"USDT": 10000,
"WETH": 5,
// 你可以在這裡繼續添加其他你感興趣的代幣,例如 "SHIB": 1000000000
};
const tx = $input.item.json;
// 2. 檢查這是不是我們感興趣的代幣
const tokenSymbol = tx.tokenSymbol;
if (!thresholds[tokenSymbol]) {
// 如果不是,就直接跳過
return null;
}
// 3. 進行精確的單位換算 (代幣最小單位 -> 常用單位)
const valueBigInt = BigInt(tx.value);
const decimals = parseInt(tx.tokenDecimal);
const divisor = 10n ** BigInt(decimals);
// 為了避免 JavaScript 的浮點數問題,我們先放大再縮小
const actualValue = Number(valueBigInt * 100n / divisor) / 100;
// 4. 將換算後的金額和我們設定的門檻進行比較
if (actualValue > thresholds[tokenSymbol]) {
// 如果大於門檻,就將這筆交易的資料,連同我們算好的 `actualValue` 一起傳下去
$input.item.json.actualValue = actualValue; // 附加一個新欄位
return $input.item;
} else {
// 如果不符合條件,就中止流程
return null;
}
我們的告警訊息也需要升級,以顯示代幣的符號和正確的金額。
Code (格式化工具)
節點中的程式碼,完整替換為以下版本:// 獲取從篩選器流過來的這筆巨鯨代幣交易資料
const tx = $input.item.json;
// 提取代幣符號和我們在上一步算好的實際金額
const tokenSymbol = tx.tokenSymbol;
const actualValue = tx.actualValue.toLocaleString('en-US', { maximumFractionDigits: 2 });
// 產生 Etherscan 的交易連結
const txUrl = `https://etherscan.io/tx/${tx.hash}`;
// 組裝全新的代幣告警訊息
const message = `💸 **代幣巨鯨快訊!** 💸\n\n` +
`偵測到一筆大額 **${tokenSymbol}** 轉帳!\n\n` +
`**金額**: **${actualValue} ${tokenSymbol}**\n` +
`**From**: \`${tx.from}\`\n` +
`**To**: \`${tx.to}\`\n\n` +
`[點此立即查看交易詳情](${txUrl})`;
// 將組裝好的訊息輸出
return {
discordMessage: message
};
現在,點擊畫布下方的「Test Workflow」,只要你監控的地址在最近有超過 10,000 USDC 或 USDT 的轉帳,你的 Discord 就會收到類似這樣的告警!
恭喜你完成了這次史詩級的系統升級!今天,你學會了:
action=tokentx
這個更強大的 API 來監控 ERC-20 代幣。tokenDecimal
欄位,進行精確的、動態的單位換算。你的監控系統現在真正擁有了洞察市場資金流動的能力,從一個「ETH 觀察哨」進化成了一個「全鏈資產雷達站」!