Solidity
在 ICO 的最後期限內依賴“現在”或“block.timestamp”是否安全?
我正計劃啟動一個 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。