Contract-Design

更新區塊鏈合約的一般做法?

  • December 21, 2019

我一直在尋找很多,但找不到這個問題的答案。

我的理解是,一個乙太坊區塊鏈,應該有一種/多種類型的合約。一旦生效,這些合約是不可變的,沒有人可以添加另一種類型的合約。如果需要創建另一種類型的合約,應該在鏈中發生分叉。

這是真的?

在這種情況下,對於處理契約經常更改或經常有新產品的業務的一般建議是什麼?我們應該每次都旋轉一個新的區塊鏈嗎?

你的理解似乎不對,雖然很難完全理解你所說的。

在乙太坊中,新合約部署是一種交易,類似於加密貨幣的轉移,因此可以隨時部署新合約,無需分叉區塊鍊或啟動新合約。

一旦部署,合約的字節碼(控制合約行為的電腦程序)變得不可變,而合約狀態可能會改變。合約狀態包括合約持有的乙太幣數量、合約儲存的數據等。

只要字節碼可以分析合約狀態並基於此分析改變其行為,合約行為通常可能會改變,即使字節碼可能不會。例如,可以部署一個其字節碼實現(Forth)1解釋器的合約,在Forth中編寫實際的合約邏輯並將其放入合約的儲存中。

通過這種方式,人們將獲得具有完全可變程式碼的智能合約。

回到您的問題,有幾種方法可以隨著業務的發展而發展契約:

  1. 每次您的需求發生變化時,您都可以部署新契約。需要一些技巧來保存數據。有關詳細資訊,請參閱此問題
  2. 您可以使用可升級合約。通常這意味著,前端合約將實際工作委託給後端合約,後端合約的地址儲存在前端合約的儲存中。通過將前端指向不同的後端,可能會改變合約行為。
  3. 使用解釋技術,就像我上面的 Forth 範例一樣。

如果您需要有關某些選項的更多詳細資訊,請告訴我。

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