iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
生成式 AI

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

Day 10 :大海撈針——用 Code 節點打造無懈可擊的巨鯨篩選器

  • 分享至 

  • xImage
  •  

為什麼要用 Code 節點取代 IF 節點?

在我們的除錯過程中發現,IF 節點雖然簡單直觀,但在處理從 API 來的、超長的數字字串時,其內部的自動類型轉換有時會不符合預期。為了 100% 的精確和可靠,我們改用 Code 節點,並利用 JavaScript 的 BigInt 功能,來進行無損的、純粹的數學比較。這是處理金融和區塊鏈數據時更專業的做法。

步驟一:建立我們的篩選器 (第一個 Code 節點)

這個節點是我們系統的「守門員」,負責攔截不符合條件的交易。

  1. 新增 Code 節點

    • 在你的 HTTP Request 節點右方點擊 +,搜尋並選擇 Code 節點。
    • 將這個節點命名為 Filter (篩選器),方便識別。
  2. 貼上篩選器程式碼

    將以下「健壯版」的程式碼完整地複製並貼到 JavaScript Code 區域:

    // ========================================================
    // 健壯版巨鯨篩選器:先檢查,再處理
    // ========================================================
    
    // 1. 在進行任何操作前,先檢查這筆交易是否有 value 欄位
    //    如果 value 是 undefined、null 或 0,就直接跳過這筆交易
    if (!$input.item.json.value || $input.item.json.value === "0") {
      // 為了方便除錯,我們可以在瀏覽器主控台印出一條訊息
      console.log("偵測到一筆無效或零金額的交易,已自動跳過。");
      // 回傳 null 來中止這一條路徑的執行
      return null;
    }
    
    // 2. 定義我們的「巨鯨門檻」(單位是 Wei)
    //    這裡我們設定為 0.5 ETH,你可以隨意調整這個數字
    const threshold = BigInt("500000000000000000");
    
    // 3. 只有在確定 value 存在時,才進行轉換和比較
    const txValue = BigInt($input.item.json.value);
    
    if (txValue > threshold) {
      // 如果交易金額大於門檻,就將這筆交易的完整資料傳遞給下一個節點
      return $input.item;
    } else {
      // 如果不符合條件,也回傳 null 來中止路徑
      return null;
    }
    
    

步驟二:格式化告警訊息 (第二個 Code 節點)

只有真正的巨鯨交易才能通過上一步的篩選。現在,我們要為這些珍貴的情報,製作一張精美的「快訊卡片」。

  1. 新增第二個 Code 節點

    • 在 Code (篩選器) 節點的唯一輸出端點擊 +,新增另一個 Code 節點。
    • 將這個節點命名為 Formatter (格式化工具)
  2. 貼上格式化程式碼

    將以下程式碼貼入 Code (格式化工具) 節點的 JavaScript Code 區域:

    // 獲取從篩選器流過來的這筆巨鯨交易資料
    const tx = $input.item.json;
    
    // 使用 BigInt 進行精確的單位換算 (Wei -> ETH)
    const ethValue = (Number(BigInt(tx.value) * 100n / (10n**18n)) / 100).toFixed(2);
    
    // 產生 Etherscan 的交易連結 (Markdown 格式)
    const txUrl = `https://etherscan.io/tx/${tx.hash}`;
    
    // 組裝最終要發送到 Discord 的告警訊息
    const message = `🐋 **巨鯨快訊!** 🐋\n\n` +
                    `偵測到一筆大額交易!\n\n` +
                    `**金額**: **${ethValue} ETH**\n` +
                    `**From**: \`${tx.from}\`\n` +
                    `**To**: \`${tx.to}\`\n\n` +
                    `[點此立即查看交易詳情](${txUrl})`;
    
    // 將組裝好的訊息,放入一個名為 discordMessage 的欄位中並輸出
    return {
      discordMessage: message
    };
    
    

https://ithelp.ithome.com.tw/upload/images/20250924/20178736yMHp4U48Be.png

步驟三:發送最終告警

  1. 新增 Discord 節點

    Code 節點後方新增一個 Discord 節點。

  2. 設定節點

    • 選擇我們之前建立好的 Webhook 憑證。

    • Message 欄位,使用表達式來引用 Code 節點的輸出:

      {{ $json.discordMessage }}

https://ithelp.ithome.com.tw/upload/images/20250924/201787363b02TUO8nL.png
現在,啟動你的工作流!只要被監控的地址發生了大於 0.5ETH 的交易,你的 Discord 就會立刻收到一條格式精美的告警通知!


總結

今天我們用更專業、更可靠的方式,從頭到尾打通了「Whale Alert」的核心流程。你學會了:

  • 如何用 Code 節點和 BigInt 建立一個無懈可擊的數字篩選器。
  • return null 在 n8n 中中止數據流的強大用法。
  • 如何組合多個 Code 節點,實現「篩選 -> 加工 -> 輸出」的標準資料處理管線。

我們的系統現在已經成為一個真正有價值、有深度的鏈上情報工具了!


上一篇
Day 9:實作你的第一個 Whale Alert——拉取並解析交易列表
下一篇
Day 11:全面進化——監控 ERC-20 代幣,捕捉真實資金流
系列文
「解放自動化新利器!深入了解 n8n 如何助你輕鬆打造專屬工作流程」11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言