如何通过 Hardhat 测试 RSK 测试网部署的智能合约?

Ire*_*ios 5 javascript mocha.js rsk hardhat

我正在使用 Hardhat 在 RSK 测试网上部署和测试我的智能合约。这是hardhat.config.js我正在使用的设置:

require('@nomiclabs/hardhat-waffle');

const mnemonic = fs.readFileSync('.mnemonic', 'utf8').toString().trim();
const minimumGasPriceTestnet = 65164000;
const TESTNET_GAS_MULT = 1;
module.exports = {
  solidity: '0.7.3',
  defaultNetwork: 'rsktestnet',
  networks: {
    hardhat: {},
    rsktestnet: {
      chainId: 31,
      url: 'https://public-node.testnet.rsk.co/',
      gasPrice: Math.floor(minimumGasPriceTestnet * TESTNET_GAS_MULT),
      gasMultiplier: TESTNET_GAS_MULT,
      accounts: {
        mnemonic,
        initialIndex: 0,
        count: 10,
      },
    },
  },
};

Run Code Online (Sandbox Code Playgroud)

不幸的是,我的测试失败,并且收到以下错误消息:

Error: Timeout of 20000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/ales/Work/IOV/demo-code-snippets/hardhat-tutorial/ethers-waffle/test/Token.js)
          at listOnTimeout (internal/timers.js:554:17)
          at processTimers (internal/timers.js:497:7)
Run Code Online (Sandbox Code Playgroud)

这里有什么问题?done()这里指的是什么?

Ale*_*hin 5

由于您要部署到公共区块链网络,因此需要考虑区块挖掘间隔。在 RSK 网络上,这大约需要 30 秒。Mocha(hardhat 使用的测试运行器框架)在测试时间超过 20 秒时会失败。

解决方案是将 Mocha 配置为使用更长的超时值,以免因花费太长时间而导致测试失败。这是参考安全帽配置文档

hardhat.config.js如果您希望设置超时,例如 10 分钟(60000 毫秒),请将以下行添加到您的。

mocha: {
    timeout: 600000,
},
Run Code Online (Sandbox Code Playgroud)

完整hardhat.config.js文件应如下所示:

module.exports = {
  solidity: '0.7.3',
  defaultNetwork: 'rsktestnet',
  networks: {
    rsktestnet: {
      chainId: 31,
      url: 'https://public-node.testnet.rsk.co/',
      gasPrice: Math.floor(minimumGasPriceTestnet * TESTNET_GAS_MULT),
      gasMultiplier: TESTNET_GAS_MULT,
      accounts: {
        mnemonic,
        initialIndex: 0,
        count: 10,
      },
    },
  },
  mocha: {
    timeout: 600000,
  },
};
Run Code Online (Sandbox Code Playgroud)