当我在 RSK Regtest 上开发时如何增加区块编号?

How to advance block number when I’m developing on RSK Regtest?

我有一个智能合约来检查实际块数是否高于固定块数以执行某些功能,我需要编写一个单元测试来验证该行为。我在 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 区块链(主网和测试网), 因为它涉及“假”挖矿。

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

(1)

使用evm_mine JSON-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.

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

(2)

使用evm_increaseTime JSON-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