Solidity
乙太坊網路是否有一種實用的方法來處理大量契約使用的大量數據?
單個合約可能儲存大量數據(1、2 )並不是什麼秘密。當然,這需要一些燃料,但似乎並沒有嚴格限制要儲存在整個網路中的數據總量。也有推薦的方法來避免這種情況(如 IPFS / Swarm),但它們也不是限制性的。即使效率低下,這些數據消耗合約也可以創建並填充數據,並多次保存在網路深處。
現在,假設區塊鍊是分佈式的,我們將如何處理例如幾個 TB 的重契約?這是否意味著,網路需要在所有節點上分配這些 TB 才能正常執行?也許對這種“失去的石頭”有某種保留?
還是我錯過了一點?
一個
SSTORE
非零值的成本為 20,000 gas。每個SSTORE
可以儲存 32 個字節的資訊。仔細檢查我的數學:
1TB / 32 bytes = 31,250,000,000 31,250,000,000 * 20,000 gas * 1 gwei/gas = 625,000 ether * $750/ether = $468,750,000
所以是的,合約可以儲存 TB 的數據並要求所有節點複製它。但這樣做需要花費數億美元。
合約儲存的數據實際上並不是主要區塊鏈結構的一部分,因為它可以通過重新執行所有交易來計算。因此,可以想像節點在需要數據之前根本無法儲存該數據(此時重建的計算成本會很高)。也就是說,根據最初創建數據的方式,交易本身可能同樣繁重。(請注意,還必須為交易的有效負載支付 gas。)
我不知道計劃中的分片工作的細節,但我想它包括不需要每個節點都儲存所有數據。這也可能減輕每個節點的儲存成本。