TimeCrowdsale.open() 总是 returns 在部署到开发网络后关闭

TimeCrowdsale.open() always returns as closed after deployed to development network

简而言之,我不明白为什么我部署的 TimedCrowdsale 永远不会打开

将 TimeCrowdsale 合约部署到 Truffle 开发网络

在我的迁移脚本中,我部署了 TimeCrowdsale 合同。 部署后,我意识到众筹永远不会进入开放状态。每次我 运行 调试脚本都会得到相同的结果。

Executing crowdsale_debug.js
crowdsale open?: false
crowdsale opening time: 1641354700
crowdsale closing time: 1641355000

Latest block timestamp: 1641354615

TimedCrowdsale.sol的isOpen()函数如下

function isOpen() public view returns (bool) {
        return block.timestamp >= _openingTime && block.timestamp <= _closingTime;
    }

我知道在测试中您可以使用 openzep testhelpers 来提前时间。但是我将如何在测试之外这样做呢?

区块时间戳低于开盘时间。所以这部分表达式 returns false

// 1641354615 >= 1641354700 // false
block.timestamp >= _openingTime

导致 isOpen() 函数 return false.


您可以使用 evm_increaseTime JSON-RPC 方法增加 Ganache(Truffle 开发网络)时间,将秒数作为唯一参数传递给它。

在测试脚本之外,您可以向本地 Ganache 网络发送 CURL 请求:

curl -X POST \
  http://localhost:7545 \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc": "1.0",
    "id": "curltest",
    "method": "evm_increaseTime",
    "params": [
      100000
  ]
}'