如何使用truffle控制台中的testrpc`evm_increaseTime`参数?

时间:2017-04-11 09:14:50

标签: javascript ethereum solidity truffle

我正在与松露和testrpc建立智能合约。在编写单元测试时,我希望更改块时间,以模拟可以调用智能合约的不同时间。如何在松露控制台内设置evm_increaseTime

2 个答案:

答案 0 :(得分:2)

通过示例扩展OP的答案(取自Status

我建议创建一个getTime()函数,以便在正常情况下返回now,并在测试时返回可设置的时间。

SNTPlaceHolder.sol

/// @notice This function is overriden by the test Mocks.
function getTime() internal returns (uint256) {
    return now;
}

SNTPlaceHolderMock.sol

uint256 mock_time;

function SNTPlaceHolderMock(...)
        SNTPlaceHolder(...) {
    mock_time = now;
}

function getTime() internal returns (uint256) {
    return mock_time;
}

function setMockedTime(uint256 _t) public {
    mock_time = _t;
}

我们现在可以使用await sntPlaceHolderMock.setMockedTime(t);

设置模拟时间

答案 1 :(得分:-2)

解决方案是覆盖now关键字的可靠性,将其设置为值,然后在应用程序中稍后使用该值(用于测试目的)。