Contract-Design

合約的內部儲存量可以永遠增加嗎?

  • December 18, 2017

換句話說,合約可以持有的儲存量是否有限制?

例如,假設一個欄位是一個數組,並且合約有一個添加項目的方法。我可以繼續呼叫合約以添加越來越多的數據嗎?

是的,合約有無限的內部儲存。

但實用性有2 個限制gas 成本塊 gas 限制

Gas 成本在以下文章中討論: 有什麼阻止我使用乙太坊區塊鏈作為數據儲存?

此外,塊氣體限制將限制可以對數據執行多少計算、搜尋、迭代等。

不,合約的內部儲存不能永遠增加。但是,對於所有類型的目的來說,它已經綽綽有餘了。

所有儲存變數的限制為:

2^256 個 32 字節的密鑰 = 2^261 字節。

這是:115,792,089,237,316,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 個 32 字節的密鑰。

這等於:3,705,346,855,594,120,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 個字節。

女巫以 TB 為單位:3,705,346,855,594,120,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000 TB

參考:合約可以儲存的數據量是否有(理論上的)限制?

有 2^256 個不同的 key,每個 key 可以儲存 32 個字節,所以總共可以儲存 2^261 個字節。也就是說,屆時乙太坊區塊鏈可能會因雜湊衝突而中斷

但是,正如@eth♦ 建議的那樣,您還應該考慮 gas 成本和塊 gas 限制。

此外,如果您使用映射,則可能會發生衝突,因為值鍵的位置是使用散列函式計算的sha3(key, p)。在此處查看更多詳細資訊:映射是否有最大條目數?. 但是,當您的數據大小約為 2^160 或 2^80 字節時,這種衝突又是一個問題。這是一個需要考慮的非常大的儲存空間。

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