譯文出自:登鏈翻譯計劃
譯者:翻譯小組
校對:Tiny熊
使用OpenZeppelinUpgrades插件部署的智能合約可以被升級,可以在保留其地址、狀態和余額下,修改其合約代碼,同時。這允許你迭代地將新功能添加到項目中,或修復你在生產中可能發現的任何錯誤。
在本教程中,我們將展示使用OpenZeppelinHardhatUpgrades和GnosisSafe多簽錢包,進行合約創建、測試和部署,以及使用GnosisSafe多簽升級,教程包含以下內容:
創建一個可升級的合約
在本地測試該合約
將合約部署到公共網絡上
將升級的控制權轉移到Gnosis多簽賬號中
創建新的實現版本
在本地測試升級
部署新的實現
升級合約
設置環境
我們將首先創建一個新的npm項目。
mkdirmycontract&&cdmycontractnpminit-y
我們將安裝Hardhat。運行Hardhat時,選擇創建一個空的hardhat
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
在本地測試合約
記得應該始終適當地測試我們編寫的合約。為了測試可升級的合約,我們應該為實現合約創建單元測試,同時創建更高級別的測試,以測試通過代理的交互。
OpenAI:將在未來幾個月推出ChatGPT企業版訂閱服務:金色財經報道,OpenAI表示,正在研究推出新企業版ChatGPT訂閱服務,主要針對那些希望更多掌控數據的專業人士以及尋求管理終端用戶的企業。“我們計劃在未來幾個月內推出企業版”,該公司還表示,已經引入關閉ChatGPT聊天記錄的功能。[2023/4/26 14:26:39]
我們在測試中使用chaiexpect,所以也需要安裝以下:
npminstall--save-devchai
我們將為實現合約創建單元測試。在項目根目錄下創建一個test目錄,然后在test目錄下創建Box
);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//Storeavalueawaitbox
);});
我們還可以創建通過代理進行交互的測試。注意:我們不需要在這里重復我們的單元測試,這是為了測試代理交互和測試升級。
在你的test目錄下使用以下JavaScript創建Box
);//Testcaseit('retrievereturnsavaluepreviouslyinitialized',asyncfunction(){//Testifthereturnedvalueisthesameone//Notethatweneedtousestringstocomparethe256bitintegersexpect((awaitbox
NFT交易平臺OpenSea估值達到100億美元:金色財經報道,據兩位知情人士稱,NFT交易平臺OpenSea正在接受新的投資提議,這可能會使其估值增加大約6倍,達到100億美元或更高。這家總部位于紐約的公司并未啟動新的融資程序,僅僅四個月后,它就在安德森·霍洛維茨 (Andreessen Horowitz) 領導的 B 輪融資中以 15 億美元的估值籌集了 1 億美元。根據區塊鏈數據跟蹤器 DappRadar 的數據,這家成立四年的初創公司迄今已處理了超過 110 億美元的銷售額,其中包括價值 300 萬美元的 Bored Ape Yacht Club NFT。(the information)[2021/11/18 6:57:16]
);});
然后我們可以運行測試:
$npxhardhattestDownloadingcompiler0
main()
);
我們通常會先將合約部署到本地測試,然后手動與之交互。為了節省時間,將跳過直接部署到公共測試網絡。
在本教程中,將部署到Rinkeby網絡。如果你在配置方面需要幫助,請參閱連接到公共測試網絡和Hardhat:部署到真實網絡。注意:任何如助記符或AlchemyAPI密鑰都不應提交到版本控制中。
我們將使用以下hardhat
main()
);
我們可以在Rinkeby網絡上運行轉移:
$npxhardhatrun--networkrinkebyscripts/transfer_ownership
以太坊技術服務商Open Zeppelin開源智能合約安全注冊表,提供聯系人緊急通知及通信服務:11月9日消息,以太坊技術服務商Open Zeppelin宣布開源智能合約安全注冊表(SmartContractSecurityRegistry),該安全注冊表將識別智能合約屬性和在安全事件發生時尋找緊急聯系人,降低漏洞被利用的可能性,并且為去中心化項目間提供與適當聯系人通信的方式。
注冊表中的信息包括重要的聯系地址,如電子郵件地址或Telegram,Open Zeppelin表示不會因為安全以外的任何原因而聯系這個名單上的任何人。項目可以通過添加以下信息加入注冊表:項目標識符、項目名稱、Github組織、安全聯系人電子郵件、部署的網絡,以及使用Open Zeppelin的庫部署智能合約的地址。[2021/11/9 6:41:28]
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}//Incrementsthestoredvalueby1functionincrement()public{value=value1;emitValueChanged(value);}}
在本地測試升級
為了測試我們的升級,我們應該為新的實現合約創建單元測試,同時創建更高級別的測試,以測試通過代理進行的交互,檢查狀態是否在不同版本的升級中得到維護......
我們將為新的實現合約創建單元測試。我們可以添加到我們已經創建的單元測試中,以確保高覆蓋率。在你的test目錄下使用以下JavaScript創建BoxV2
NFT市場OpenSea總交易額突破55億美元創歷史新高:金色財經報道,據最新數據顯示,NFT市場OpenSea總交易額已突破55億美元(交易者數量突破49萬),創下歷史新高,位列NFT市場交易額排名第一位。排在第二名位置的是AxieInfinity,當前交易額達到18.9億美元(交易者數量超過55萬);第三名是CryptoPunks,交易額為12.3億美元(交易者數量4822)。值得一提的是,OpenSea平臺上約30億美元的交易額是在八月一個月內完成的,超過此前交易額總和。[2021/9/7 23:07:29]
);//Testcaseit('retrievereturnsavaluepreviouslystored',asyncfunction(){//StoreavalueawaitboxV2
);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2
);});
還可以創建升級后通過代理進行交互的測試。注意:我們不需要在這里重復單元測試,僅測試代理交互和測試升級后的狀態。
在你的test目錄下創建BoxV2
);//Testcaseit('retrievereturnsavaluepreviouslyincremented',asyncfunction(){//IncrementawaitboxV2
);});
然后我們可以運行我們的測試。
Openbazaar聯合創始人抨擊比特幣費用高:據Bitcoin news消息,Openbazaar聯合創始人Washington Sanchez認為過高的比特幣費用已經影響了其使用。盡管如此,BTC仍然是Openbazaar上最受歡迎的加密貨幣,約有1萬多家上市公司將比特幣作為支付手段。數據顯示,5月2日比特幣平均手續費為1.673美元,中間交易費用為0.326美元。而ETH平均手續費為0.411美元,中間交易費用為0.141美元。[2018/5/4]
$npxhardhattestCompiling1filewith0
main()
);
我們可以在Rinkeby網絡上運行遷移,部署新的實現:
$npxhardhatrun--networkrinkebyscripts/prepare_upgrade.jsPreparingupgrade...BoxV2at:0xE8f000B7ef04B7BfEa0a84e696f1b792aC526700
升級合約
為了在GnosisSafe中管理升級,使用OpenZeppelin應用。
首先,我們需要代理的地址和新實現的地址。我們可以從我們運行deploy.js和prepare_upgrade.js腳本時的輸出中得到這些。
在Apps標簽中,選擇OpenZeppelin應用程序,在合約地址欄中粘貼代理的地址,并在新實現地址欄中粘貼新實現的地址。
該應用程序應該顯示合約是EIP1967兼容的。
GnosisSafeOpenZeppelinUpgrade
仔細檢查這些地址,然后按下升級按鈕。我們將看到一個確認對話框,提交交易。
GnosisSafeOpenZeppelinUpgradeConfirm
然后,需要在MetaMask中簽署該交易。
現在可以與升級后的合約進行交互。需要使用代理的地址與BoxV2交互。注意:BoxV2.attach(PROXYADDRESS)獲取我們代理合約的地址。
然后,我們可以調用新的increment函數,可以觀察到整個升級過程中狀態保持了一致:
$npxhardhatconsole--networkrinkeby>constBoxV2=awaitethers.getContractFactory("BoxV2")undefined>constboxV2=awaitBoxV2.attach("0xFF60fd044dDed0E40B813DC7CE11Bed2CCEa501F")undefined>(awaitboxV2.retrieve()).toString()'42'>awaitboxV2.increment(){hash:...>(awaitboxV2.retrieve()).toString()'43'
接下來
我們已經創建了一個可升級的合約,將升級的控制權轉移到Gnosis多簽,并升級了合約。同樣的過程也可以在主網上進行。注意:我們應該首先在公共測試網中測試升級。
我們也可以使用OpenZeppelinDefender管理升級,參考:https://docs.openzeppelin.com/defender/admin#upgrades
本翻譯由CellETF贊助支持。
來源:https://forum.openzeppelin.com/t/openzeppelin-upgrades-step-by-step-tutorial-for-hardhat/3580
參考資料
登鏈翻譯計劃:https://github.com/lbc-team/Pioneer
翻譯小組:https://learnblockchain.cn/people/412
Tiny熊:https://learnblockchain.cn/people/15
GnosisSafe:https://learnblockchain.cn/article/2980
Hardhat:https://learnblockchain.cn/docs/hardhat/getting-started/
OpenZeppelin學習教程:https://docs.openzeppelin.com/learn/developing-smart-contracts#setting-up-a-solidity-project
initialize函數而不是構造函數:https://docs.openzeppelin.com/learn/upgrading-smart-contracts#initialization
連接到公共測試網絡:https://docs.openzeppelin.com/learn/connecting-to-public-test-networks
Hardhat:部署到真實網絡:https://learnblockchain.cn/docs/hardhat/tutorial/deploying-to-a-live-network.html
Rinkeby網絡上為自己創建一個GnosisSafe:https://rinkeby.gnosis-safe.io/
CreateaSafeMultisig:https://help.gnosis-safe.io/en/articles/3876461-create-a-safe-multisig
升級技術的限制更多細節,可以看這里:https://docs.openzeppelin.com/learn/upgrading-smart-contracts#upgrading
https://docs.openzeppelin.com/defender/admin#upgrades:_https://docs.openzeppelin.com/defender/admin#upgrades_
CellETF:https://celletf.io/?utm_souce=learnblockchain
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/10404921.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
每周編輯精選WeeklyEditors'Picks
尊敬的中幣用戶: ???中幣將于香港時間2021年10月21日16:00開啟ENVELOP福利申購.
1900/1/1 0:00:00據FintechFutures10月20日消息,亞洲數字銀行已與區塊鏈技術提供商Bianjie達成合作,以建設該行新的數字基礎設施,旨在彌合中心化和去中心化金融之間的差距.
1900/1/1 0:00:00尊敬的用戶:?????????????BKEXGlobal即將上線MONI,詳情如下:上線交易對:MONI/USDT幣種類型:BEP20?充值功能開放時間:已開放交易功能開放時間:2021年10.
1900/1/1 0:00:00親愛的ZT用戶: ZT創新板即將上線HXRO,並開啟HXRO/USDT交易對。具體上線時間如下:充值:已開啟;交易:2021年10月19日17:00; HXRO 項目簡介:HXRO是一種ERC-.
1900/1/1 0:00:00據Cointelegraph10月19日報道,彭博分析師EricBalchunas預測,Valkyrie基于比特幣期貨的ETF在上周獲得納斯達克交易所上市認證后,“可能”將在未來幾天推出.
1900/1/1 0:00:00公告編號2021101802各位關心ZBG的投資者們和項目方:ZBG平臺現已恢復VLX的充提幣.
1900/1/1 0:00:00