【问题标题】:How to subscribe to Multiple Eth addresses on USDT token transfer events如何在 USDT 代币转账事件中订阅多个 Eth 地址
【发布时间】:2022-06-25 03:41:35
【问题描述】:

我有一份 Eth 用户存款地址列表。他们可以向这些地址进行外部 USDT 转账。如何订阅 USDT 合约并过滤我拥有的所有存款用户地址。我的用户数量会不断增长。

我知道我可以过滤 1 上的传输事件来解决。但是如何过滤数千个地址?

【问题讨论】:

    标签: javascript node.js ethereum solidity web3js


    【解决方案1】:

    您可以使用 web3 事件处理程序 options 对象 (docs) 来订阅仅发送给指定收件人的传输。

    例子:

    usdtContract.events.Transfer({
        filter: {
            // `to` is the name of the indexed Solidity event topic, as in
            // `event Transfer(address indexed from, address indexed to, uint value)`
            to: ["0x123", "0x456", "0x789"]
        }
    }, (err, data) => {
        // ...
    });
    

    【讨论】:

    • 我能否随着越来越多的用户加入而动态更新此列表?
    • @Manjush08 要更新列表,您需要使用新列表重新初始化处理程序。目前,您只能通过破坏 usdtContract 对象并再次调用处理程序来做到这一点......或者您可以使用通用 web3 subscribe 处理程序及其方法 unsubscribe() (docs) 允许您取消订阅和重新订阅再次。
    • 非常感谢您的回答。还有一个疑问,您认为侦听器是否能够处理列表中的一百万个用户地址(在内存中?)。我想知道这是否真的是监控用户存款地址的正确方法。
    • @Manjush08 我从来没有在实践中尝试过这个,但我猜它适用于那个大数组。不是因为 JS 应用程序中的内存问题,而是这些过滤器参数实际上是发送到您的应用程序连接到的节点。所以我猜大多数节点对它们可以过滤的值有一个任意限制,它可能低于一百万。也许最多几百或一千? ... 对于如此大量的地址,我建议将您的应用扩展到多个实例(每个实例用于地址子集)并连接到多个节点(每个应用实例一个节点)。
    猜你喜欢
    • 2018-08-08
    • 1970-01-01
    • 2018-04-21
    • 2018-09-16
    • 2021-08-06
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多