You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Alchemy WebSocket获取指定钱包交易:过滤from字段无结果

问题分析与解决方案

核心问题排查

你遇到的from地址过滤无结果的情况,主要集中在订阅未启动、地址格式不匹配这两个常见问题上,以下是具体解决步骤:

1. 订阅函数未执行

你的代码仅定义了add订阅函数,但没有调用它,导致WebSocket监听根本没启动。需要在代码末尾手动调用add()来开启订阅。

2. 地址大小写/校验和不匹配

以太坊地址支持EIP-55校验和格式(大小写混合),直接用==做全等比较时,若目标地址与返回的from地址格式不一致(比如一个是全小写,一个是校验和格式),会导致匹配失败。

解决方法:用ethers的getAddress()方法标准化所有地址,统一格式后再比较:

// 先标准化目标钱包地址
const targetWallet = ethers.getAddress("替换成你的目标钱包地址");

// 在回调中标准化返回的from地址
const fromAddress = ethers.getAddress(tx.transaction.from);
if (fromAddress === targetWallet) {
    console.log("捕获到目标交易哈希:", tx.transaction.hash);
}

3. 调试验证建议

先在回调中打印所有返回的from地址和目标地址,确认格式差异:

(tx) => {
    console.log("返回的from地址:", tx.transaction.from);
    console.log("目标钱包地址:", "你的钱包地址");
    // 后续匹配逻辑
}

修正后的完整代码

const { Alchemy, Network, AlchemySubscription } = require("alchemy-sdk")
const {ethers} = require("ethers")
require("dotenv").config()

const ARBI_WS_KEY = process.env.ARBI_WS_KEY
// 标准化目标钱包地址
const TARGET_WALLET = ethers.getAddress("替换成你的目标钱包地址");

const settings = {
  apiKey: ARBI_WS_KEY,
  network: Network.ARB_MAINNET,
}

const alchemy = new Alchemy(settings)

const startSubscription = async () => {
    alchemy.ws.on(
        {
            method: AlchemySubscription.MINED_TRANSACTIONS,
        },
        (tx) => {
            try {
                const fromAddress = ethers.getAddress(tx.transaction.from);
                if (fromAddress === TARGET_WALLET) {
                    console.log("目标钱包发起的交易哈希:", tx.transaction.hash);
                }
            } catch (err) {
                console.error("地址解析错误:", err);
            }
        }
    )
}

// 启动订阅
startSubscription();

内容的提问来源于stack exchange,提问作者0xDegen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:15:39