Transactions

當惡意/行為不端的礦工在新區塊中重新引入舊交易時,節點如何檢測重複交易

  • March 5, 2017

我已經閱讀了關於 Race 攻擊、Finney 攻擊的資訊,在這種攻擊中,商家應該採取預防措施,在傳遞貨物之前等待幾個區塊確認。我正在檢查驗證序列,然後是更新其分類帳副本的節點,例如以下(來自乙太坊白皮書:https ://github.com/ethereum/wiki/wiki/White-Paper )

"

  1. 檢查上一個引用的塊是否存在並且有效。
  2. 檢查區塊的時間戳是否大於引用的前一個區塊的時間戳,並且距離未來不到 15 分鐘
  3. 檢查區塊號、難度、交易根、叔根和氣體限制(各種低級乙太坊特定概念)是否有效。
  4. 檢查區塊上的工作證明是否有效。
  5. 讓我們$$ 0 $$成為前一個塊結束時的狀態。
  6. 設 TX 為區塊的交易列表,有 n 筆交易。對於 0…n-1 中的所有 i,設置 S$$ i+1 $$= 申請(S$$ i $$,TX$$ i $$)。如果任何應用程序返回錯誤,或者在此之前塊中消耗的總氣體超過 GASLIMIT,則返回錯誤。
  7. 令 S_FINAL 為 S$$ n $$,但增加了支付給礦工的區塊獎勵。8.檢查狀態S_FINAL的Merkle樹根是否等於塊頭中提供的最終狀態根。如果是,則該塊有效;否則無效。

"

我想知道上述序列如何防止以下攻擊:

  1. 礦工創建一個交易 100 的區塊,比如區塊是 27000
  2. 創建幾個塊後,當礦工有機會創建一個新塊(當選)時,它再次重新引入事務 100,例如塊 27100

比如說,發件人帳戶中有大量的乙太幣。上述攻擊是否允許接收方從發送方獲得兩倍的金額。

驗證是否包括從根塊檢查跨塊的重複交易 ID?隨著時間的推移,這似乎需要做很多工作。

我確定我錯過了一些東西。區塊鏈以及上述序列中的哪個驗證點如何保護這一點。

謝謝

每個帳戶都有一個稱為nonce的數字。它從零開始,在每個處理過的事務之後,它都會遞增。

每筆交易也有一個隨機數。對於要處理的交易,帳戶必須具有完全相同的交易隨機數。這不僅會強制所有事務按照發送的順序發生,而且還可以防止重複事務。如果礦工再次嘗試執行交易,則該塊將無效,因為隨機數不匹配。

但是,如果有多個區塊鏈在執行,這種保護就沒有那麼強大了。攻擊者可以在另一個區塊鏈上重放發生在一個區塊鏈上的交易,因為另一個區塊鏈上的隨機數不會增加。這最終由EIP 155修復。

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