Mining
區塊時間戳是去中心化的嗎?
關於乙太坊協議,我不明白的一件事是時間戳是如何工作的。如果我,作為礦工,有理由擺弄時間戳(例如增加幾分鐘以降低探勘難度),我只需生成一個時間戳比目前 UNIX 時間大幾分鐘的塊。
我想這是不可能的,但我不明白這是如何執行的。網路是否根本不允許與目前時間相比漂移時間過大的塊?或者是否有某種協議不鼓勵礦工創建無效的時間戳?
雖然所有節點都在它們的本地時間(即它們正在執行的電腦的本地時間)上執行,但節點之間的時間差異很大是不允許的。如果您真的與 NTP 伺服器不同步,您將遇到同步塊、共識等問題。因此,雖然沒有嚴格執行,但必須有準確的本地時間。
至於你描述的攻擊,乙太坊有一些檢查:
- 在PoW (Ethash)中,如果您領先 15 秒(或更少),您的區塊將被接受。如果您嘗試傳播具有過時時間戳的塊,該塊將立即被拒絕。
var ( ... allowedFutureBlockTime = 15 * time.Second ... ) ... if header.Time > uint64(time.Now().Add(allowedFutureBlockTime).Unix()) { return consensus.ErrFutureBlock } ... ... if header.Time <= parent.Time { return errZeroBlockTime }
- 在PoA(Clique)中,節點沒有任何餘地來傳播“來自未來的區塊”。
// Don't waste time checking blocks from the future if header.Time > uint64(time.Now().Unix()) { return consensus.ErrFutureBlock }
總而言之:您絕對正確地認為網路不允許具有過大時間增量的塊。
編輯。評論澄清:這真的是關於大多數客戶(51%)。如果大多數客戶端禁用 dagger-hashimoto (PoW) 塊驗證,則您可以傳播虛假塊等。因此,客戶端必須在相同的協議上操作 - 這可以確保所有客戶端之間的共識。