Contract-Deployment
在 Quorum 中更新智能合約而不更改智能合約地址
了解智能合約地址是根據其創建者的地址以及創建者發送的交易數量確定性地計算出來的,因此每個新的智能合約部署都會生成一個新地址——這對公共乙太坊來說非常有意義。
在 Quorum 中,如果我需要對已經部署的智能合約進行更新(例如,添加/修改新的交易規則/邏輯),有沒有辦法確保連接到舊智能地址的 DApp 可以擺動無縫過渡到新的智能合約?即,無需停機即可將 DApp 重新連接到新的智能合約地址。
比如說,如果不允許停機(關鍵生產系統),交易將繼續發送到舊的智能合約地址,有沒有辦法遷移這段期間發送的所有 delta 交易?
Nathan Aw(新加坡)
不,不是以預先實施的方式。
發送事務或從 EVM 讀取是對特定地址的操作。創建新的智能合約將導致該合約出現新的空白儲存,並且預設情況下不會在乙太坊客戶端中實現將所有數據從智能合約發送到另一個合約。
所以從一個智能合約遷移到另一個智能合約會暴露兩個問題:
- 在託管 Dapp 中將舊地址更改為新地址。
- 將數據從舊合約儲存遷移到新合約。
第一個問題可以通過手動或先發製人的方式完成,方法是為地址創建類似鏈下 DNS 的命名系統(或訂閱現有的,它應該已經存在)。
第二個問題,只能通過先發製人的方法來解決,這些方法允許你從智能合約中提取所有數據,如果你不這樣做,那就很難了。
所有這些都適用於
ethereum
並且quorum
也適用。
不是原生的。。
但是有一個簡單的解決方案,稱為代理庫。
- 您編寫了一個將 bytes32 標識符與合約地址聯繫起來的合約系統資料庫
- 您編寫了一個包含您的邏輯的庫。
- 你寫了一個庫的介面。
- 您創建一個代理並將介面連結到它。
- 您編寫一個儲存合約,其中包含儲存並將呼叫委託給代理。
這樣,當您想要更新邏輯時,您只需部署新版本的庫並在合約系統資料庫中設置它的部署地址。
範例:https ://github.com/designisdead/blockchain-programmable-incentives/tree/master/contracts
我很確定我們在我們的項目中擁有可升級合約的最佳解決方案。