在RSKRegtest上开发时如何提高块号?

我有一个智能合约,可以检查实际块编号是否高于执行某些功能的固定块编号,我需要编写一个单元测试来验证该行为。我在 Regtest 模式下使用 RSK 来执行测试,我需要增加块号而不实际等待时间过去。

智能合约使用区块编号,我需要增加区块编号,而无需实际等待时间过去。

context('once deployed', function () {
   it('can only be released after cliff', async function () {
     // TODO here I need to increment time or block number
     await this.lockup.release();
   });
)};

我怎样才能在像上面那样的松露(摩卡)测试中做到这一点?

回答

快速说明,强调这是不是可能在“实际” RSK blockchains(Mainnet和Testnet),因为它涉及到“假”开采。

然而,在Regtest,这的确是可能的:

(1)

使用evm_mineJSON-RPC 方法挖掘区块。

function evmMine () {
    return new Promise((resolve, reject) => {
        web3.currentProvider.send({
            jsonrpc: "2.0",
            method: "evm_mine",
            id: new Date().getTime()
            }, (error, result) => {
                if (error) {
                    return reject(error);
                }
                return resolve(result);
            });
    });
};

await evmMine(); // Force a single block to be mined.

这与以太坊开发工具中使用的方法一致,例如 Ganache。

(2)

使用evm_increaseTimeJSON-RPC 方法增加块的时间:

function evmIncreaseTime(seconds) {
    return new Promise((resolve, reject) => {
        web3.currentProvider.send({
            method: "evm_increaseTime",
            params: [seconds],
            jsonrpc: "2.0",
            id: new Date().getTime()
          }, (error, result) => {
            if (error) {
                return reject(error);
            }
            return asyncMine().then( ()=> resolve(result));
          });
    }); 
}

await evmIncreaseTime(600); // Force block to be mined such that ~10 minutes has passed


以上是在RSKRegtest上开发时如何提高块号?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>