iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
生成式 AI

「解放自動化新利器!深入了解 n8n 如何助你輕鬆打造專屬工作流程」系列 第 11

Day 11:全面進化——監控 ERC-20 代幣,捕捉真實資金流

  • 分享至 

  • xImage
  •  

思維升級:從 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 來換算)

步驟一:複製並修改我們的「Whale Alert」工作流

為了保留我們原本的 ETH 監控系統,我們不直接修改它,而是複製一份來進行升級。

  1. 複製工作流

    • 回到 n8n 主儀表板,找到「ETH Whale Alert」工作流。
    • 點擊右側的「...」選單,選擇「Duplicate」。
    • 將新複製的工作流重新命名為「ERC-20 Whale Alert」。
  2. 修改 HTTP Request 節點

    • 打開新工作流中的 HTTP Request 節點。
    • 在 URL 欄位中,將 action=txlist 修改為 action=tokentx
    • 為了能穩定地看到結果,我們建議監控一個交易所的熱錢包,例如 KuCoin 70x247a3c96de4536641ece79a781d431c59086146e

    你的新 URL 看起來應該像這樣(記得替換地址和 API Key):

https://api.etherscan.io/api?module=account&action=tokentx&address=0x247a3c96de4536641ece79a781d431c59086146e&page=1&offset=50&sort=desc&apikey=[你的API_KEY]

步驟二:升級我們的篩選器 (第一個 Code 節點)

現在我們收到的不再只是 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 節點)

我們的告警訊息也需要升級,以顯示代幣的符號和正確的金額。

  • 將你的第二個 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 觀察哨」進化成了一個「全鏈資產雷達站」!


上一篇
Day 10 :大海撈針——用 Code 節點打造無懈可擊的巨鯨篩選器
系列文
「解放自動化新利器!深入了解 n8n 如何助你輕鬆打造專屬工作流程」11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言