合約的內部儲存量可以永遠增加嗎?
換句話說,合約可以持有的儲存量是否有限制?
例如,假設一個欄位是一個數組,並且合約有一個添加項目的方法。我可以繼續呼叫合約以添加越來越多的數據嗎?
是的,合約有無限的內部儲存。
但實用性有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 字節時,這種衝突又是一個問題。這是一個需要考慮的非常大的儲存空間。