Solidity

在 ICO 的最後期限內依賴“現在”或“block.timestamp”是否安全?

  • March 16, 2018

我正計劃啟動一個 ICO,並且一直在閱讀有關編寫 Solidity 合約的安全建議。

我的 ICO 檢查是否已通過使用

if(now >= deadline){ 
   isClosed = true; 
}

通過查看此處的其他答案,我得出結論,如果有這樣的動機(即如果契約取決於時間戳),那麼擁有強大權力的礦工可以操縱時間。

如果只是檢查時間是否已超過截止日期,在我的契約中使用“現在”是否安全?反過來,這將只向特定的人發放資金(因此礦工沒有動機惡意更改時間)?

PS:我知道那裡有類似的問答,但鑑於最近對 ICO 的炒作,我認為在指定截止日期的情況下為我自己和未來的 ICO 開發人員澄清這一點可能是合適的。

謝謝大家。

為了澄清 OpenZeppelin 在已成功用於多個 ICO 的契約中使用“現在”。

因此,我相信在驗證時間時使用“現在”功能是可以接受的。我相信這是因為,就像問題中所述,攻擊者沒有經濟動機來惡意更改時間,並且由於觸發“X 之後的任何時間”的截止日期,如果時間戳稍微偏離也沒關係。

https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/crowdsale/Crowdsale.sol

兩者沒有區別。他們都將目前區塊時間戳稱為自 unix 紀元以來的秒數。測量時間的另一個選項是使用 block.number。

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