我可以在智能合約中儲存多少數據,成本是多少以及如何實施?
如果我假設我使用智能合約作為數據庫,我可以儲存多少數據?只說字元串和整數,將它們保存在合約資料結構中,除了用於變數儲存的 gas 之外,它還需要花費嗎?
合約大小不得超過 24576 字節, 黃皮書也有寫,但指的是合約程式碼的權重;記憶體表示為 2 ^ 256 32 字節插槽的數組,但我真的可以使用所有這些記憶體嗎?
如果我有一個包含數千個元素的資料結構的合約,當我更新一個變數然後更改合約的狀態時,這個合約的更新是如何在所有節點上實現的?
呼叫保存大量數據的合約成本更高?
很抱歉有很多問題,我知道這種類型的操作很昂貴,但我想了解智能合約記憶體是如何管理的。
謝謝!
天然氣是您唯一的成本。沒有明確的“保留儲存”成本,因此如果您在智能合約中保存某些內容時支付 X 量的天然氣,那麼您將無需再次為該儲存支付費用。當然,當您保存新內容或使用數據時除外。
至於合約可以儲存的最大數據量,您可以檢查合約可以儲存的數據量是否有(理論上)限制?. 因此,理論上您可以儲存 2^261 個字節,但實際上您永遠無法接近該限制。正如 Vitalik 在他的文章中指出的那樣,在您達到硬限制之前,區塊鏈將停止執行;)
合約狀態的任何更新都由正常交易執行。因此,所有數據都正常傳播到所有節點。每當您的交易包含在已開採區塊中時,它就會成為區塊鏈的一部分,並且有關此新區塊的資訊會通過網路傳播。當然,由於共識問題,不確定該塊是否會繼續存在,但大多數情況下它會保持這種狀態。
訪問(僅讀取)任何合約中的數據都是免費的,因為您只從自己的節點讀取資訊,並且該操作不會在任何地方廣播。但是,如果您想訪問智能合約中的數據以進行處理,則必須為訪問(當然還有處理)付費。這個成本在很大程度上取決於儲存類型和訪問數據的方式,所以這裡不可能給出任何數字。但是更多的數據並不一定意味著更高的gas成本——例如
mapping
,無論有多少條目,讀取a總是相同數量的gas。