Mining

區塊時間戳是去中心化的嗎?

  • May 16, 2019

關於乙太坊協議,我不明白的一件事是時間戳是如何工作的。如果我,作為礦工,有理由擺弄時間戳(例如增加幾分鐘以降低探勘難度),我只需生成一個時間戳比目前 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) 塊驗證,則您可以傳播虛假塊等。因此,客戶端必須在相同的協議上操作 - 這可以確保所有客戶端之間的共識。

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