網路如何決定數據的儲存位置和契約的執行位置?
我試圖弄清楚(這裡的各種網際網路和特定搜尋都未能回答)是數據儲存和契約執行的位置。
我認為,最理想的情況是,所有“數據”(交易、合約、任何東西)都應該儲存在每個節點上,並且所有合約都應該由每個節點執行,以便就什麼是準確的維護“去中心化共識”乙太坊的本質。然而,實際上,我知道在每個節點上儲存每一位數據可能會很快變得非常昂貴(物理數據儲存硬體成本)。所以我認為網路有一些系統決定將契約和相關數據儲存在一定數量的節點上,並定期(每次生成新塊時(可能))決定是否需要將數據儲存在不同的節點上(因為目前的不再可用或數據被更頻繁地訪問)。
如果有幫助,這是我能做的最好的例子:我有一個契約(假設),它只是等待啟動然後吐出一些少量數據,例如“Hello World”。網路上的每個節點都有契約副本嗎?每個節點都會執行合約並通過網路發送結果進行比較以確定將記錄在區塊鏈中的共識結果嗎?什麼時候(如果有的話)上述任何數據被確定為“不再有用”並不再存在?
為了澄清我的一些假設(以防它們不准確),我確實在乙太坊文件的某個地方讀到了一些東西,這些東西給我的印像是並非每個節點都會執行合約,這對我來說意味著要麼他們不都儲存數據,或者他們根本不會處理每一個契約執行。另外,我確定以前有人問過這個問題,甚至在官方常見問題解答中似乎也有一個問題,但我在網上找不到明確的答案,常見問題解答的答案只是說“TODO”。
你的第一個假設是正確的。乙太坊節點都儲存每個合約,並且每個節點都在需要時執行合約。這不是很有效(相反),但這就是乙太坊在目前狀態下通過工作量證明工作的方式。數據永遠不會停止存在。它總是留在區塊鏈上……這就是整個想法。
當引入分片時,情況將不再如此。
這是 Vitalik 的影片,解釋了一些關於此的概念: https ://www.youtube.com/watch?v=-QIt3mKLIYU