為什麼從創世至今的交易歷史必須儲存在區塊鏈上以防止雙重支出?
我開始了解比特幣區塊鏈的機制,我想知道一些事情。
交易歷史代表比特幣在任何時候的“狀態”(或根據乙太坊白皮書的 EVM)。
區塊鏈通過記錄從創世至今使用區塊鏈中特定貨幣完成的所有交易來解決雙重支出問題。不可避免地,鏈條的大小會不斷增加,並將無限期地繼續增加。
我的問題是,為什麼需要跟踪交易?為什麼我們不能只跟踪每個帳戶的餘額?
我了解雙重支出的問題,以及一個人如何嘗試將同樣的錢花兩次。我們將賬戶餘額與賬戶的公鑰相關聯。交易歷史為我們提供了一種跟踪餘額的方法。
但是為什麼我們不能丟棄交易,只在驗證交易後儲存餘額呢?為什麼“錢是怎麼到那裡的”很重要?
為什麼這種方法存在雙重支出問題(因為如果交易被驗證,那麼賬戶中的餘額必須下降?)我要問的是,為什麼我們不能跟踪所有賬戶而不是所有交易?(這樣區塊鏈大小是節點數量的函式,而不是交易數量)
為什麼需要跟踪交易?為什麼我們不能只跟踪每個帳戶的餘額?
好吧,首先,比特幣協議沒有賬戶或餘額的概念。
將比特幣更改為基於餘額的工作會引發一些有趣的問題
- 節點首先如何計算餘額?
- 我們如何將交易與餘額聯繫起來?
- 如何在全球去信任的點對點系統中創建、管理和驗證帳戶?
任何解決這些問題的加密貨幣顯然都與比特幣大不相同,以至於它不能被合理地命名為比特幣。
比特幣節點不需要儲存整個交易歷史。這就是存在修剪節點的原因。然而,修剪節點需要處理所有事務,以便它可以丟棄其輸出隨後全部被花費的事務。在您假設的基於帳戶的加密貨幣中,節點還必須處理所有交易以計算正確的餘額。主要的替代方案是信任其他人執行的一些其他節點,並希望他們是誠實的。
雙花也給基於賬戶的點對點加密貨幣帶來了一些有趣的問題。全球節點網路不能保證所有節點都以相同的順序看到相同的塊或事務。必須有一種確定性的方法來調和差異,以保證收斂於一個共同的結果。
如果一個節點首先收到一筆減少其他人賬戶的交易(例如 A 將 5 個 BTC 中的 4 個給 B),而另一個節點首先收到一個衝突交易(例如 A 將 5 個 BTC 中的 3 個給 C),第一個節點大概是拒絕了 AC 交易(餘額不足),而第二個節點出於同樣的原因拒絕了 AB 交易。
儲存具有未使用輸出的所有交易的列表可能看起來像是一件苦差事。但是,讓每個節點為 70 億人中的每一個人儲存並持續更新至少一個賬戶餘額也可能是一個挑戰。
將會有解決這些問題的加密貨幣,但那些不是比特幣。所以問比特幣是否可以做到這一點是不明智的。如果是這樣,它就不會是比特幣。