我有一个利用当前时间(now
)的函数。合约作为一个整体是众筹代币,代币的成本因购买代币的日期和时间而异。
在测试智能合约时如何模拟不同的时间?例如,对于下面的代码,我想做单元测试,看看设置价格的代码是否正确,但我无法更改now
.
now
简单地将关键字替换为另一个临时测试变量,例如now_sim
然后now_sim
在模拟期间手动更改,这是一个很好的解决方案吗?
if (now < (startTime + 1 days)) {
currentPrice = safeDiv(safeMul(price, 80), 100); // 20 % discount (x * 80 / 100)
}
else if (now < (startTime + 2 days)) {
currentPrice = safeDiv(safeMul(price, 90), 100); // 10 % discount (x * 90 / 100)
}
else if (now < (startTime + 12 days)) {
// 1 % reduction in the discounted rate from day 2 until day 12 (sliding scale per second)
// 8640000 is 60 x 60 x 24 x 100 (100 for 1%) (60 x 60 x 24 for seconds per day)
currentPrice = price - safeDiv(safeMul((startTime + 12 days) - now), price), 8640000);
}
else {
currentPrice = price;
}