Mining
我可以依靠某個預言機來知道準確可靠的時間戳嗎?
我正在學習智能合約對系統屬性(如
block.timestamp
和)的安全影響block.number
。我知道block.timestamp
在一定程度上可以被礦工控制,因此在一些賭博遊戲中可能能夠“擊敗人群”。另外,由於每個區塊的挖礦時間可能會有所不同,嚴格來說,下面的程式碼片段也可能會給等待退款的使用者帶來一定的困惑(例如,使用者等到 99 分鐘才要求退款;但是,由於挖礦時間變得更快,時間視窗已經過去):// user can get refund with 100 minutes. if (block.number < refund_window_end_block) { // however, since block mining time may change from time to time // the "refund_window_end_block" may not precisely depict "100 minutes". refund(); }
我知道有一些第三方預言機可以安全地從中獲取一些隨機數。同樣,我可以利用某些預言機來獲得精確可靠的“時間戳”或持續時間嗎?謝謝你。
首先,您使用的任何預言機都是集中式服務,這意味著您必須信任公司/組織才能提供正確的資訊。這也意味著您必須相信他們的服務在您需要時已啟動並執行。這與乙太坊合約的去中心化和無需信任的性質相矛盾。
使用預言機獲取時間戳不是很可行。Oracle 不會在您請求數據的那一刻神奇地為您提供數據。當您等待預言機將數據送出到區塊鏈並等待您的合約獲取數據時,該過程可能需要一些時間。因此該方法不適用於獲取任何精確的時間戳資訊。
否則,您是正確的,礦工可以稍微玩弄時機*。*但在實踐中,除非獎勵足夠大,否則他們不會這樣做。
在乙太坊中沒有“準確時間”或測量準確時間的概念。您擁有的最好的是
block.number
andblock.timestamp
(等於now
)。