如何在 Truffle 中配置不同的轮询间隔?

Posted

技术标签:

【中文标题】如何在 Truffle 中配置不同的轮询间隔?【英文标题】:How to configure a different polling interval in Truffle? 【发布时间】:2021-02-15 18:14:14 【问题描述】:

如何配置 Truffle 本身, 还是 Truffle 的 HDWalletProvider 这样轮询间隔不同?

我希望我的 Truffle 实例在 JSON-RPC 上不那么“健谈”, 当它提交了一个事务并等待结果时, 从默认值开始减少轮询间隔。

我无法在以下文档中找到此选项:

https://www.trufflesuite.com/docs/truffle/reference/configuration#networks https://github.com/trufflesuite/truffle/tree/master/packages/hdwallet-provider#instantiation

truffle-config.js 内,networks 内:

    testnet: 
      provider: () => new HDWalletProvider(
        SEED_PHRASE,
        'https://localhost:4444/',
      ),
      gasPrice: Math.floor(GAS_PRICE),
      networkCheckTimeout: 1e3,
    ,

【问题讨论】:

注意到了这一点 - 但不确定我将如何使用它 - 有什么想法吗? github.com/trufflesuite/truffle/blob/… 它是Web3Provider的一个字段,HDWalletProvider作为一个名为'engine'的字段导入,所以如果provider是你的HDWalletProvider,你可以使用provider.engine.pollingInterval来访问这个字段。 嗯,值得一试! - provider.engine.pollingInterval 创建问题:github.com/trufflesuite/truffle/issues/3498 伟大的工作。看到您不仅遵循您的问题的线索,而且在发现问题后参与解决问题,这让您印象深刻。您想要代码审查,还是与您交谈过的维护人员已经这样做了?此外,当您觉得您的问题在这里得到解决时,标记一个已接受的答案并可能使用说明最终解决方案的附录(在这种情况下是您的 PR)来编辑您的问题可以帮助这个问题在与您处于相同情况的人中脱颖而出当您发布问题时。 【参考方案1】:

不确定 HDWalletProvider,并且像您一样,找不到任何有关它的轮询率的文档。浏览源代码后,我得出的结论是 HDWalletProvider 不包含内置的 poll-rate 限制机制,尽管我可能不正确。

I have, however, found a wallet provider implementation that does support it, and has the usage documented.

抱歉,我无法找到您正在寻找的确切内容,但希望这能满足您的需求。本周末我将有更多时间查看源代码,如果我发现任何其他内容,我将更新此答案。

更新: 在看到您提到Web3ProviderEnginepollingInterval 字段后,您可以访问HDWalletProvider 实例的相应engine.pollingInterval 字段。如果您不清楚 TypeScript 中的对象实例化和字段,我建议您就该主题打开另一个问题,或仔细阅读现有资源,例如 this question。

祝你好运!

【讨论】:

该项目似乎处于非活动状态或未维护 - 最近一次更新几乎是 3 年前(2018 年 1 月)github.com/DigixGlobal/truffle-lightwallet-provider/commit/… ...所以我犹豫要不要使用它 我能理解;但是,如果最后一次更新是稳定的并且符合您的需求,那么是否积极维护一个包就变成了一个有争议的问题。这完全取决于您是否更适合使用完美运行的旧包或您必须做出让步才能使用的新鲜且积极维护的包。只有您可以做出选择(或相关的项目的高级工程师/团队负责人)。 啊哈,是的,我已经被烧伤了足够多的时间,对这种情况非常警惕!我认为这是值得修补的东西,无论是在 Truffle 套件中还是在其 HDWalletProvider 中 - 以确保它得到维护。 我完全同意。【参考方案2】:

修补了@truffle/hdwallet-provider 以添加pollingInterval。 现在可以在 truffle@5.1.52.

修补了truffle 以添加deploymentPollingInterval。 现在可以在 truffle@5.1.53.

例子:

    testnet: 
      provider: () => new HDWalletProvider(
        mnemonic: 
          phrase: SEED_PHRASE,
        ,
        providerOrUrl: 'http://localhost:4444',
        pollingInterval: 8000,
      ),
      gasPrice: Math.floor(GAS_PRICE),
      networkCheckTimeout: 8000,
      deploymentPollingInterval: 8000,
    ,

未指定时,pollingIntervaldeploymentPollingInterval 的默认值都是 4000;因此,上面的示例在轮询块时以及在运行truffle migrate 时将其 half 设置为 JSON-RPC 上的“聊天”。

【讨论】:

以上是关于如何在 Truffle 中配置不同的轮询间隔?的主要内容,如果未能解决你的问题,请参考以下文章

Java目录轮询策略

如何避免ehcache消耗内存过大

将 Jenkins 配置为少于每分钟轮询一次

实现一个简单的轮询算法

如何在固定时间间隔后使用 IntentService 实现进行轮询?

硬件中的轮询与握手