原文鏈接
使用OpenZeppelin升級插件部署的智能合約可以通過升級來修改代碼,同時保留原合約地址、狀態和余額。這讓幫助我們為項目添加新功能,或修復在生產中可能發現的任何錯誤。
在本指南中,我們將學習:
為什么升級很重要
使用升級插件升級我們的盒子。
了解升級在引擎蓋下是如何工作的
學習如何編寫可升級合約
什么是可升級的合約
以太坊中的智能合約默認情況下是不可更改的。一旦創建了就無法改變,有效地為合約參與者扮演了不可篡改的合約的角色。
然而某些場景下,我們希望能夠修改它們。想想傳統合約:如果參與雙方都同意改變它,就可以去對齊進行改變。同樣在以太坊上,我們也希望能夠修改智能合約,以修復他們發現的bug,增加額外的功能,或者僅僅是改變它所執行的規則。
四川省擬出臺元宇宙產業發展行動計劃,計劃2025年規模達2500億元:8月17日消息,四川省經濟和信息化廳網站于8月15日發布公告,面向社會公開征求《四川省元宇宙產業發展行動計劃(2023-2025年)(征求意見稿)》。《行動計劃》提出:到2025年,全省元宇宙相關產業規模達到2500億元,賦能制造業數字化轉型智能化升級,初步建成具有重要影響力的元宇宙產業發展高地。
《行動計劃》還提出,提升區塊鏈基礎設施能力建設,強化隱私保護、跨鏈控制、互信互認、質量溯源、知識產權、跨境貿易等區塊鏈共性應用支撐;聚焦數字孿生、VR/AR/MR、人工智能、物聯網、區塊鏈等元宇宙核心技術領域,著力引進和培育優勢龍頭企業,支持國內外元宇宙行業領軍企業在我省建設區域總部,增強其在元宇宙產業中生態主導力。加強區塊鏈風險管理制度建設,探索創新監管模式,抓好合規引導,營造元宇宙開放可信發展生態。在依法合規的前提下積極鼓勵金融服務機構加大對元宇宙產業支持,探索數字資產質押方式,推動企業數字化發展。
此前,成都市新經濟發展工作領導小組辦公室也印發《成都市元宇宙產業發展行動方案(2022—2025年)》。到2025年,成都元宇宙產業體系初具雛形,相關產業規模達到1500億元。[2023/8/17 18:05:34]
以下是你需要做的事情,以修復你無法升級的合約中的錯誤。
安全公司:上周發生的15起安全事件造成約550萬美元的損失:金色財經報道,據CertiK官方推特發布消息稱,自上周五以來,記錄了15起安全事件,造成約550萬美元的損失。到目前為止,共發生17起Discord黑客攻擊事件、16起網絡釣魚攻擊事件和2起Twitter黑客攻擊事件。[2023/7/16 10:57:46]
部署一個新版本的合約
手動將所有的狀態從舊的合約遷移到新的合約
更新所有與舊合約交互的合約,使用新合約的地址
聯系你的所有用戶,并說服他們開始使用新的部署
為了避免出現這種亂象,我們將合約升級直接內置到我們的插件中。這讓我們可以改變合約代碼,同時保留狀態、余額和地址。讓我們來看看如何實現。
使用升級插件來升級合約
使用OpenZeppelin升級插件中的deployProxy部署一個新的合約時,該合約實例就可以實現可升級的功能。默認情況下,只有最初部署合約的地址才有權限執行升級操作。
報告:占全球經濟98%的130家央行正探索數字貨幣:6月29日消息,總部位于美國的大西洋理事會智庫發布報告稱,占全球經濟 98% 的 130 個國家和地區央行目前正在探索數字貨幣,其中近一半正處于進階開發、試點或啟動階段,除阿根廷以外的所有 G20 國家都已進入進階階段。
報告表示,過去六個月各國央行的數字貨幣探索尤為積極,包括加勒比海地區和尼日利亞在內的 11 個國家已經推出了央行數字貨幣(CBDC),而中國的數字人民幣試點測試現已覆蓋 2.6 億人口,涵蓋從電子商務到政府消費補貼的約 200 種支付場景。另外兩個大型新興經濟體印度和巴西也計劃明年推出數字貨幣。歐洲央行則有望在 2028 年啟動數字歐元試點,其他 20 多個國家也將在今年采取重大舉措進行試點。[2023/6/29 22:08:29]
deployProxy將創建以下事務;
部署執行合約
鏈上數據分析網站DefiLlama推出DEX聚合器:1月3日消息,鏈上數據分析網站DefiLlama將推出DEX聚合器,該產品仍處于測試階段,可從8種不同的聚合器中獲得最優惠的價格,包括1inch、Matcha、Paraswap、Cowswap等,具體報價和Gas成本由DefiLlama獨立核實,并支持私有模式以防泄露IP,還包括Approval控制,支持22條區塊鏈網絡。[2023/1/3 22:22:18]
部署ProxyAdmin合約
部署代理合約并運行初始化函數
讓我們看看它是如何工作的,通過部署我們的Box合約的可升級版本,使用與之前部署時相同的設置:
//contracts/Box
//Readsthelaststoredvaluefunctionretrieve()publicviewreturns(uint256){returnvalue;}}
安全團隊:跨鏈DEX聚合器Transit Swap因任意外部調用問題被黑,被盜資金規模超2300萬美元:10月2日消息,據慢霧安全團隊情報,2022年10月2號跨鏈DEX聚合器TransitSwap項目遭到攻擊,導致用戶資產被非預期的轉出。慢霧安全團隊分析評估此次被盜資金規模超過2300萬美元,黑客地址為0x75F2...FD46和0xfa71...90fb。接著對此次攻擊過程進行了分析:
1. 當用戶在Transit Swap進行swap時,會先通過路由代理合約(0x8785bb...)根據不同的兌換類型選擇不同的路由橋合約。隨后路由橋合約(0x0B4727...)會通過權限管理合約(0xeD1afC...)的 claimTokens 函數將用戶待兌換的代幣轉入路由橋合約中。因此在代幣兌換前用戶需要先對權限管理合約(0xeD1afC...)進行授權。
2. 而 claimTokens 函數是通過調用指定代幣合約的 transferFrom 函數進行轉賬的。其接收的參數都由上層路由橋合約(0x0B4727...)傳入,本身沒有對這些參數進行任何限制只檢查了調用者必須為路由代理合約或路由橋合約。
3. 路由橋合約(0x0B4727...)在接收到用戶待兌換的代幣后會調用兌換合約進行具體的兌換操作,但兌換合約的地址與具體的函數調用數據都由上層路由代理合約(0x8785bb...)傳入,路由橋合約并未對解析后的兌換合約地址與調用數據進行檢查。
4. 而代理合約(0x8785bb...)對路由橋合約(0x0B4727...)傳入的參數也都來自于用戶傳入的參數。且代理合約(0x8785bb...)僅是確保了用戶傳入的 calldata 內各數據長度是否符合預期與所調用的路由橋合約是在白名單映射中的地址,未對 calldata 數據進行具體檢查。
5. 因此攻擊者利用路由代理合約、路由橋合約與權限管理合約均未對傳入的數據進行檢查的缺陷。通過路由代理合約傳入構造后的數據調用路由橋合約的 callBytes 函數。callBytes 函數解析出攻擊者指定的兌換合約與兌換數據,此時兌換合約被指定為權限管理合約地址,兌換數據被指定為調用 claimTokens 函數將指定用戶的代幣轉入攻擊者指定的地址中。實現了竊取所有對權限管理合約進行授權的用戶的代幣。
此次攻擊的主要原因在于 Transit Swap 協議在進行代幣兌換時并未對用戶傳入的數據進行嚴格檢查,導致了任意外部調用的問題。攻擊者利用此任意外部調用問題竊取了用戶對Transit Swap授權的代幣。
截止到目前,黑客已將 2,500 BNB 轉移到 Tornado Cash,剩余資金分散保留在黑客地址中。經過黑客痕跡分析發現,黑客存在從 LATOKEN 等平臺存提款的痕跡。慢霧 MistTrack 將持續跟進被盜資金的轉移以及黑客痕跡的分析。[2022/10/2 18:37:27]
首先需要安裝升級插件。
安裝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意味著什么?
尊敬的用戶: 由于XQC將主網升級,幣虎平臺將于2021年1月14日18:00關閉充提,升級期間不影響正常交易。具體恢復時間請關注后續公告。關閉期間給您帶來的不便,敬請諒解.
1900/1/1 0:00:00羅斯柴爾德的話一如既往的響亮。在過去24小時內,市場有價值29億美元的資產遭到了清算。興奮感戛然而止,賭徒已經出局,現在誰還敢買?像往常一樣,很多人會說他們看到了這一點,其他人甚至會說他們知道暴.
1900/1/1 0:00:00公告編號2021011202各位關心ZBG的投資者們和項目方:ZBG將于HKT2021年1月26日上線CRU項目,并開放CRU/USDT交易對,具體時間如下,請投資人和項目方提前做好交易準備.
1900/1/1 0:00:00親愛的CoinW用戶: CoinW即將開啟“ETH充一贈一”活動,詳情如下:活動時間:2021年01月13日00:00-2021年01月18日24:00 充值幣種:ETH 獎勵幣種:CNYT E.
1900/1/1 0:00:00尊敬的虎符用戶, Hoopool加入Orion網絡并成為其節點運營者。ORION是基于Substrate開發的區塊鏈,集成全開發語言、WASM、EVM等先進技術,旨在打造一個通用區塊鏈開發平臺.
1900/1/1 0:00:00今天的封面是《埃塔普勒》,尤金·布丹再多的分析也比不上一句直白的抄底,昨天不知有多少人丟掉了籌碼.
1900/1/1 0:00:00