Solidity - 更新已部署合约中的时间戳值

Solidity - Updating timestamp value in a deployed contract

我有一份拍卖合同,应该 运行 比如说 20 分钟。

为方便起见,我有一个 auctionEndTime 变量,我在 constructor 中初始化如下:

  auctionEndTime = block.timestamp + 20 minutes;

但是如果我想通过增加一些额外的分钟数来更新 auctionEndTime 怎么办?

我编写了一个函数,让我可以将我想添加到 auctionEndTime 变量的额外分钟数的值传递给 auctionEndTime 变量,如下所示:

function changeAuctionEndTime(uint extraTimeAmount) public {
    require(msg.sender == contractOwner, "ONLY THE CONTRACT's OWNER CAN CALL THIS FUNCTION!");  
    auctionEndTime += newEndTime minutes;  
}

但这立即给我以下错误:

Expected ';' but got 'minutes'

它在 minutes 一词下方给了我一条弯曲的红线。 所以它显然不喜欢那里的东西。 (请注意,此错误会立即出现 - 实际上,这并不是我编译并收到此错误,而是我什至无法编译 运行 代码原样。)

所以这是怎么回事?我该如何解决这个问题?

  1. 您的变量是 extraTimeAmount 而不是 newEndTime
  2. secondsminuteshoursdaysweeks 文字 数字后缀可以用于指定时间单位。 (来自官方文档)。
  3. 所以你需要做 extraTimeAmount * 1 minutes 而不是 extraTimeAmount minutes

这是您的代码片段,可以按照上述几点运行 -

function changeAuctionEndTime(uint extraTimeAmount) public {
    require(msg.sender == contractOwner, "ONLY THE CONTRACT's OWNER CAN CALL THIS FUNCTION!");  
    auctionEndTime += extraTimeAmount * 1 minutes;  
}