Full-Node

如果全節點發現錯誤會怎麼做?

  • November 12, 2017

全節點應該驗證區塊鏈中的每一筆交易和區塊,並為分發區塊提供有價值的連結。並且由於共識算法非常好,區塊鏈中不存在無效交易。

但是,如果一個無效的交易以某種方式在一個被探勘的塊上創建,並被一個完整的節點辨識,節點將如何響應?它會向本地使用者顯示錯誤嗎?在網路上發布某種警告或通知?簡單崩潰?

從本地使用者的角度來看,全節點最重要的功能是告訴他們何時收到並確認資金。例如,如果本地使用者是商家,那麼這就是他們在確定何時向客戶發貨時需要了解的資訊。

所以從這個角度來看,對於一個全節點來說,如果它發現一個無效的交易或區塊,最重要的事情就是忽略它。對於無效交易,它不需要交易作為收到資金報告給使用者。對於無效區塊,它不需要將其報告為對區塊中交易的確認,也不需要作為對先前區塊中確認的交易的額外確認。

商家認為無效交易與根本沒有交易相同。使用無效交易有效付款的使用者只是沒有付款,並且在他們拿出真實資金之前將被忽略。無效塊根本不是確認,如果我們在發貨前等待一定數量的確認,那麼我們只需要繼續等待。

當然,該節點可以禁止發送違規數據的其他節點,或記錄錯誤,或其他任何內容。就為有效數據節省頻寬、為使用者提供有關網路狀態的一般資訊或幫助調試而言,這是一個好主意。但這一切都是次要的。

當節點接收到無效交易時,它不會將其包含在記憶體池中,並禁止向其發送無效交易的對等方。我很確定它會在日誌中記錄有關收到無效交易的資訊。

當一個節點接收到一個帶有無效交易的塊時,它會在它執行的塊的完整驗證過程中註意到這一點。然後它將拒絕該塊,不將其添加到其區塊鏈並禁止中繼它的節點。

節點永遠不會中繼他們認為無效的資訊。節點在收到無效的區塊鏈數據時不會崩潰,這將是一個巨大的漏洞。我不認為它顯示錯誤消息,節點只是在日誌中記錄事件。

該節點不會分發警告。如果確實如此,並且其他節點將信任這樣的警告,那麼這種機制將很容易通過虛假警告來利用來誘導 DOS。相反,每個收到無效塊通知的節點都會得出相同的結論並禁止惡意節點。如果我們設法獲得防欺詐,我們可以證明一個區塊是無效的,並幫助輕量級客戶防禦它。

引用自:https://bitcoin.stackexchange.com/questions/62539