Contract-Deployment
為什麼區塊鏈會儲存相同程式碼的多個副本?
基於joeykrug 在 Github 上的問題:如果相同的合約使用相同的程式碼,我們是否需要儲存多個程式碼副本?例如,如果一個合約被部署並且另一個合約創建了很多次,為什麼它會多次儲存程式碼而不是一次呢?
現在可能是為了簡化實現 - 因為正確保存一份副本需要引用計數。由於可以使用 SUICIDE 操作碼銷毀合約,如果多個合約共享相同的程式碼,但其中一個銷毀了自己,並且共享的單個程式碼副本從本地儲存中刪除,那麼它將破壞節點的共識,因為它不再能夠執行任何其他仍然有效的契約。
我想在未來,主要客戶端將為這些類型的對象實現引用計數,並儲存一個在所有活動實例之間共享的單個副本。
請注意:這並不像看起來那麼簡單,因為當您創建合約時,您會將交易發送到零地址,該地址執行一些返回最終合約程式碼的 EVM 程式碼。因此,在生成要送出到合約地址的最終程式碼之前,需要執行一組 EVM 指令。因此,比較這個“最終程式碼”返回到節點狀態下所有程式碼雜湊的數據庫將是創建合約的額外(計算)步驟。