Contract-Development

誰能解釋一下86400的這個功能和意義?

  • February 3, 2022

我有一個函式用於檢查 90 天是否在質押後過去了,但我不知道為什麼提到 86400,比如它是秒還是分鐘或其他任何東西,我怎樣才能將 90 天更改為我選擇的任何其他值。

       function getTimePassedSinceStake(address _owner, uint256 _index)
       public
       view
       returns (uint256)
   {
       return (block.timestamp - userInfo[_owner][_index].stakeTime) / 86400;
   }

文件中:

block.timestamp (uint): 目前區塊時間戳,自 unix 紀元以來的秒數

所以 :

block.timestamp - userInfo[_owner][_index].stakeTime

stakeTime是和之間的秒數block.timestamp。除以 86400 就是除以一天中的秒數(60 秒 * 60 分鐘 * 24 小時 = 86400)

return (block.timestamp - userInfo[_owner][_index].stakeTime) / 86400;

返回之間的天數stakeTimeblock.timstamp這與這裡的 90 天無關。

另一種語法可能是:

return (block.timestamp - userInfo[_owner][_index].stakeTime) / 1 days;

我怎樣才能將 90 天更改為我選擇的任何其他值。

我在這裡找到了一個具有相同程式碼的契約,它具有以下unstake功能,有 1 天的限制:

function unStake(uint256 _index) external {
   address unStaker = msg.sender;
   UserInfo storage userDetails = userInfo[unStaker][_index];
   uint256 tokenId1 = userDetails.tokenId1;
   uint256 timePassedSinceStaked = getTimePassedSinceStake(
       unStaker,
       _index
   );
   require(
       timePassedSinceStaked >= 1,
       "You can not unstake before 1 day"
   );
   userDetails = userInfo[unStaker][userInfo[unStaker].length - 1];
   userInfo[unStaker].pop();

   ERC721.safeTransferFrom(address(this), unStaker, tokenId1, "");
  

   GemToken.claimByLuckyDragon(unStaker, 0);
   emit UnStakedLuckyDragon(
       unStaker,
       tokenId1,
       block.timestamp
   );
}

在這裡,通過更改將等待時間限制為 1 天:

require(
   timePassedSinceStaked >= 1,
   "You can not unstake before 1 day"
);

到 :

require(
   timePassedSinceStaked >= 90,
   "You can not unstake before 90 day"
);

這將需要 90 天,當然您可以設置您選擇的值。

我希望這能回答你的問題。

引用自:https://ethereum.stackexchange.com/questions/120720