原文鏈接
使用OpenZeppelin升級插件部署的智能合約可以通過升級來修改代碼,同時保留原合約地址、狀態和余額。這讓幫助我們為項目添加新功能,或修復在生產中可能發現的任何錯誤。
在本指南中,我們將學習:
為什么升級很重要
使用升級插件升級我們的盒子。
了解升級在引擎蓋下是如何工作的
學習如何編寫可升級合約
什么是可升級的合約
以太坊中的智能合約默認情況下是不可更改的。一旦創建了就無法改變,有效地為合約參與者扮演了不可篡改的合約的角色。
然而某些場景下,我們希望能夠修改它們。想想傳統合約:如果參與雙方都同意改變它,就可以去對齊進行改變。同樣在以太坊上,我們也希望能夠修改智能合約,以修復他們發現的bug,增加額外的功能,或者僅僅是改變它所執行的規則。
數據:2023 Q2比特幣Ordinals協議的NFT銷售額超2億美元:金色財經報道,加密數據分析公司Dapprader最新數據顯示2023年二季度 Ordinals協議的NFT銷售額從2023年一季度的718萬美元飆升至二季度的2.107億美元,環比增長幅度達到2834%。此外,比特幣Ordinals的歷史交易量和獨立交易者數量也分別達到554,215筆和150,969個,顯示加密市場以及新交易者對比特幣鏈上數字資產的興趣日益濃厚。[2023/7/12 10:49:13]
以下是你需要做的事情,以修復你無法升級的合約中的錯誤。
部署一個新版本的合約
手動將所有的狀態從舊的合約遷移到新的合約
更新所有與舊合約交互的合約,使用新合約的地址
聯系你的所有用戶,并說服他們開始使用新的部署
《富爸爸窮爸爸》作者:第三家美國銀行即將倒閉:金色財經報道,《富爸爸窮爸爸》作者羅伯特·清崎在社交媒體發文稱,硅谷銀行的倒閉和Silvergate銀行的自愿清算之后,又一家銀行即將面臨倒閉,但他沒有透露第三家面臨困境的銀行名稱,此外他還預測一旦第三家銀行出現問題,黃金和白銀價格可能會走高,而ETF產品可能會面臨困境,羅伯特·清崎曾在2008年在CNN采訪時預測雷曼兄弟倒閉。[2023/3/12 12:57:48]
為了避免出現這種亂象,我們將合約升級直接內置到我們的插件中。這讓我們可以改變合約代碼,同時保留狀態、余額和地址。讓我們來看看如何實現。
使用升級插件來升級合約
使用OpenZeppelin升級插件中的deployProxy部署一個新的合約時,該合約實例就可以實現可升級的功能。默認情況下,只有最初部署合約的地址才有權限執行升級操作。
Binance Custody集成區塊鏈分析公司TRM Labs風險管理工具:10月24日消息,據區塊鏈智能和分析公司 TRM Labs 官方報道,機構級數字資產托管解決方案 Binance Custody 已集成 TRM Labs 的風險管理工具,確保客戶監管合規和風險管理計劃,旨在減輕金融犯罪風險,Binance Custody將使用TRM 篩選高風險錢包,并監控和調查可疑交易,解決機構投資者在數字資產領域面臨的安全、監管和運營挑戰。[2022/10/24 16:36:33]
deployProxy將創建以下事務;
部署執行合約
部署ProxyAdmin合約
部署代理合約并運行初始化函數
讓我們看看它是如何工作的,通過部署我們的Box合約的可升級版本,使用與之前部署時相同的設置:
馬斯克與Twitter將在本周綜合聆訊上交鋒:金色財經消息,負責審理馬斯克和推特(TWTR.N)之間訴訟的特拉華州法官安排在本周舉行一次聆訊,就一系列問題進行口頭陳述,其中包括馬斯克修改其反訴的要求。法官Kathaleen McCormick在上周五的一份文件中說,她將考慮雙方提出的幾項懸而未決的法律動議,例如,馬斯克最近要求將Twitter前安全主管Pieter Zatko的舉報人投訴中的指控加入到他的反訴中。馬斯克還要求將為期五天的無陪審團審判從今年10月推到11月。(金十)[2022/9/6 13:10:23]
//contracts/Box
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
首先需要安裝升級插件。
摩根士丹利和高盛認為美股公司利潤前景黯淡:8月8日消息,摩根士丹利和高盛的策略師認為,黯淡的盈利前景與近期美股反彈走勢不一致。摩根士丹利策略師Michael J. Wilson和高盛策略師David J. Kostin分別在報告中寫道,鑒于巨大的成本壓力,預計公司利潤率將在明年萎縮。一直是最堅定美股空頭之一的Wilson表示,“漲勢中最好的部分已經結束。雖然CPI仍在快速上漲,但PPI正在以兩倍的速度上漲。”Kostin表示贊同,稱投入成本增加將削弱明年的利潤率,盡管營收繼續增長,但速度將放緩。預計2023年凈利潤率將下降0.25%,各個行業都將萎縮,以材料、能源和醫療保健行業最為顯著。(金十)[2022/8/8 12:10:13]
安裝HardhatUpgrades插件。
npminstall--save-dev
在創建Solidity文件后,我們現在使用upgradeProxy函數升級之前部署的實例。
upgradeProxy將創建以下事務:
部署執行合約
調用ProxyAdmin來更新代理合約以應用新的實現
創建一個腳本,使用upgradeProxy將Box合約升級為使用BoxV2。把這個文件保存為scripts/upgrade_box
main();
然后就可以部署我們的可升級合約。
使用run命令,可以在development網絡中部署升級Box合約。
$npxhardhatrun--networklocalhostscripts/upgrade_box
//Storesanewvalueinthecontractfunctionstore(uint256newValue)public{require(msg
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
部署合約時,我們需要指定initializer函數名,并提供一個管理員地址。
//scripts/deploy_upgradeable_adminbox
main();
出于實踐目的,initializer作為構造函數。然而,請記住,由于它是一個常規函數,你將需要手動調用所有基礎合約的初initializer。
要了解更多關于這一點以及編寫可升級合約時的其他注意事項,請查看我們的WritingUpgradeableContracts指南。
升級
由于技術上的限制,當你將一個合約升級到新版本時,你不能改變該合約的存儲布局。
這意味著,如果你已經在合約中聲明了一個狀態變量,你就不能刪除它,不能改變它的類型,也不能在它之前聲明其他變量。在我們的Box例子中,這意味著我們只能在value之后添加新的狀態變量。
//contracts/Box.solcontractBox{uint256privatevalue;//Wecansafelyaddanewvariableaftertheoneswehaddeclaredaddressprivateowner;//...}
幸運的是,這種限制只影響狀態變量。你可以隨心所欲地改變合約的功能和事件。
注意如果你不小心弄亂了合約的存儲布局,當嘗試升級時,升級插件提出警告。
前往ModifyingYourContracts指南了解更多限制。
測試
為了測試可升級的合約,我們應該為實現合約創建單元測試,同時創建更高級別的測試,來測試與代理的交互。可以在測試中使用deployProxy,就像我們部署時一樣。
當要升級時,我們應該為新的實現合約創建單元測試,同時創建更高級別的測試,以便在升級后使用upgradeProxy通過代理測試交互,檢查在升級過程中是否保持狀態一致。
接下來的步驟
現在你已經知道如何升級智能合約,并且可以迭代開發你的項目,是時候把你的項目帶到測試網和正式網中去了。你可以放心,如果出現bug,你有工具來修改你的合約并修復它。
_請戳↓“閱讀原文”↓獲取文中鏈接_
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/9579147.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
幣安為何推出第三條鏈?這對BNB意味著什么?
尊敬的ZT用戶: ZT將于今日新增匿名幣板塊,并將開啟交易瓜分8888USDT。活動期間內,參與匿名幣板塊交易的用戶,可根據累計交易量占比瓜分8888USDT.
1900/1/1 0:00:00鏈聞消息,合成資產協議Synthetix公布向以太坊二層擴容方案OptimisticEthereum遷移的主網部署過渡計劃,遷移將從本周開始分為以下幾個階段,階段0為.
1900/1/1 0:00:00親愛的BKEXer: BKEXGlobal將于2021年1月15日14:00于SeedIncubatorPro開啟九折認購BCH五倍杠桿ETP產品福利活動.
1900/1/1 0:00:00LTC5L為LTC多倍做多ETF產品,LTC5S為LTC多倍做空ETF產品,漲跌幅為LTC市場的多倍.
1900/1/1 0:00:00Stacks2.0推出比特幣上的應用和智能合約,終于可以在比特幣上編寫智能合約創建dapp。在最有價值、最安全的網絡上創建dapp:https://www.stacks.coViciNFT推出R.
1900/1/1 0:00:00親愛的庫幣用戶: 我們很高興的宣布,庫幣將上線HydraChain(HYDRA)項目并支持交易對HYDRA/USDT.
1900/1/1 0:00:00