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
一词下方给了我一条弯曲的红线。
所以它显然不喜欢那里的东西。 (请注意,此错误会立即出现 - 实际上,这并不是我编译并收到此错误,而是我什至无法编译 运行 代码原样。)
所以这是怎么回事?我该如何解决这个问题?
- 您的变量是
extraTimeAmount
而不是 newEndTime
。
seconds
、minutes
、hours
、days
和 weeks
等 文字 数字后缀可以用于指定时间单位。 (来自官方文档)。
- 所以你需要做
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;
}
我有一份拍卖合同,应该 运行 比如说 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
一词下方给了我一条弯曲的红线。
所以它显然不喜欢那里的东西。 (请注意,此错误会立即出现 - 实际上,这并不是我编译并收到此错误,而是我什至无法编译 运行 代码原样。)
所以这是怎么回事?我该如何解决这个问题?
- 您的变量是
extraTimeAmount
而不是newEndTime
。 seconds
、minutes
、hours
、days
和weeks
等 文字 数字后缀可以用于指定时间单位。 (来自官方文档)。- 所以你需要做
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;
}