買比特幣 買比特幣
Ctrl+D 買比特幣
ads
首頁 > 萊特幣 > Info

ION:全面理解智能合約升級_區塊鏈騙了多少人

Author:

Time:1900/1/1 0:00:00

譯文出自:登鏈翻譯計劃

譯者:Tiny熊

從技術角度對不同的以太坊智能合約升級模式和策略進行了調查,并提供了一套有關升級管理和治理的良好實踐和建議。

什么是智能合約升級?

對于以太坊開發人員來說,智能合約升級并不是一個新概念。最早的升級模式之一可以追溯到2016年5月的NickJohnson的gist,是在4年前的時間,幾乎覆蓋了整個以太坊的歷程。

從那時起,智能合約升級工作進行了很多的探索、出現了各種不用的實現方式。升級既可以用作在出現漏洞時進行修復,也可以用作逐步添加新功能來迭代系統開發。

但是,由于智能合約升級帶來的技術復雜性以及它們可能對真正的權力下放構成威脅,因此圍繞智能合約升級也存在很多爭議。在這篇文章中,我們將討論這兩個問題。我們將介紹不同的升級實現,并回顧一些成功的示例,并討論每個示例的優缺點。然后,我們將回顧一些用于治理和管理的良好實踐,以減輕向系統添加升級選項的中心化風險。

讓我們首先定義智能合約升級的含義:

什么是智能合約升級?智能合約升級是一種在保留存儲和余額的同時,而又可以任意更改在地址中執行代碼的操作。

但是在我們深入進行升級之前,我們將介紹一些無需實施全面升級即可更改系統的策略,這些策略可以作為升級的簡單補充。

請坐穩了,這將是一個很長的文章。

中國電信全面進軍元宇宙:11月14日消息,中國電信官微顯示其正在全面布局“元宇宙”。11月12日,中國電信5G創新應用合作論壇在廣州召開。論壇以“盤古開天地 創新拓未來”為主題。中國電信旗下上市公司新國脈以元宇宙新型基礎設施建設者為定位,啟動2022年“盤古計劃”。新國脈董事長李安民表示,新國脈致力打造元宇宙平臺及算力的建設整合者、元宇宙軟件及應用的服務集成者、元宇宙社會生態及內容建設的協同創新者。[2021/11/14 6:51:05]

升級替代方案

有許多策略可用于修改系統而無需完全升級。一個簡單的解決方案是通過遷移來更改系統:部署一組新合約,將必要狀態從舊合約復制到新合約(有時可以無信任地完成),根據社區共識,讓社區開始與新合約進行交互。

本節中列出的升級策略可用于以可預測的方式修改系統,這與升級不同。修改系統這是根據已有的規則來進行管理,在更改時系統的行為更加可預測。讓我們研究其中一些策略。

參數的配置

簡單地調整合約中的一組參數,可修改范圍非常有限,以至于我懷疑是否將其包含在此列表中。一個很好的例子是MakerDAO的穩定費率,這是在合約中可設置的數值,它會改變系統的行為。該值經常更改,并且由于其含義很清楚,因此可以放心地執行操作。

但是,重要的是要了解系統對這些參數中設置的極值的反應。任意高昂的費用或零費用都可能導致系統停止運行,甚至使攻擊者能夠竊取所有資金。在合約中硬編碼合理范圍的參數值通常是一個好主意,并以此作為保障措施。

獨立智庫ORF:G20 應全面掌握加密資產監管:金色財經報道,獨立智庫Observer Research Foundation (ORF)表示,G20國家有“機會也有責任”來協調圍繞加密資產和 DeFi 的政策,這樣有利于“可持續、平衡和包容的全球經濟架構”。ORF指出,BTC哎新興市場和發展中經濟體尤其受歡迎,包括一些G20經濟體,比如土耳其、巴西、阿根廷和印度尼西亞等,G20 應該全面掌握加密資產的監管,為國家監管機構提供有關技術性質和監管最佳實踐的指導。(orfonline)[2021/11/1 6:23:53]

合約注冊表

由多個合約組成的系統可能依賴合約注冊中心。每當合約A需要與B進行交互時,它首先會查詢注冊表以獲得B的地址。通過對注冊表的修改,管理員可以將B替換為替代實現B',從而改變其行為。AAVE的早期版本使用了這種模式。

但是,此機制在切換到B'時不會保留B的狀態,如果需要手動遷移,則可能會出現問題。此模式的某些版本通過將邏輯和存儲合約解耦來緩解這種情況:狀態保持在不變的存儲合約中,并且只能根據需要更改的業務邏輯合約。我們將在本文后面部分深入探討邏輯和存儲合約分離。

這種模式的另一個缺點是,它也為外部客戶端帶來了額外的復雜性,這些外部客戶端在與系統交互之前也需要調用注冊表。可以通過添加具有不可變接口的外部包裝接口來減輕這種情況,該包裝接口負責管理注冊表查找。

策略模式

“青海要求全面關停虛擬貨幣挖礦項目”排名微博熱搜榜第11位:微博熱搜顯示,青海要求全面關停虛擬貨幣挖礦項目排名微博熱搜榜第11位。[2021/6/10 23:26:13]

策略模式是更改合約中部分特定功能函數的代碼的簡便方法。替代在調用合約中實現函數來執行特定功能,而是通過調用單獨的合約來處理該任務,通過切換該合約的實現,可以有效地在不同的“策略”之間進行切換。

Compound就是一個很好的例子,它具有不同的RateModel實現計算利率及其CToken合約可以在它們之間切換。由于已知更改僅限于系統的特定部分,這可以輕松地推出修復程序或在費率計算上改進gas消耗。當然,一個惡意利率模型實現可以設置為始終還原和停止系統,或為特定帳戶提供任意高的利率。盡管如此,限制系統更改的范圍仍使對這些更改的推理更加容易。

可插拔模塊

策略模式的一個更復雜的變體是可插拔模塊,其中每個模塊都可以向合約添加新函數。在此模型中,主合約提供了一組核心不變的函數,并允許注冊新模塊。這些模塊為核心合約增加了可調用的新函數。這種模式在錢包中最為常見,例如GnosisSafe或InstaDapp。用戶可以選擇將新模塊添加到自己的電子錢包中,然后每次調用錢包合約時都要求從特定模塊執行特定函數。

請記住,此模式要求核心合約沒有漏洞。無法通過在此方案中添加新模塊來修補管理模塊本身上的任何漏洞。此外,根據實現方式的不同,新模塊可能有權通過使用委托調用方式(DELEGATECALL,下面會進一步解釋)代表核心合約運行任何代碼,因此也應仔細檢查它們。

四川省級“蜀信鏈”全面接入“星火·鏈網”國家級區塊鏈基礎設施:據官方消息,3月12日在四川成都舉辦的第二屆區塊鏈創新與產業發展峰會上,四川省區塊鏈服務基礎設施“蜀信鏈”全面接入“星火·鏈網”。中國信息通信研究院總工程師胡堅波出席峰會并致辭表示,中國信息通信研究院作為“星火·鏈網”的牽頭建設單位,將與各方緊密合作,在成都推動“星火·鏈網”超級節點、骨干節點等落地建設,進一步促進四川省區塊鏈應用創新與產業集聚,為區塊鏈技術研究與應用發展、為推進西部經濟高質量發展形成的新格局貢獻力量。

“星火·鏈網”是區塊鏈新型基礎設施。此次,中國信息通信研究院工業互聯網與物聯網研究所、中國電子科技網絡信息安全有限公司、四川省區塊鏈行業協會、中關村區塊鏈產業聯盟將簽署四方合作協議,推進“蜀信鏈”與“星火·鏈網”的共同發展。[2021/3/12 18:38:46]

升級模式

在前面不太簡短的介紹之后,是時候進入實際的合約升級模式了。這些模式中的大多數都依賴于EVM原語(DELEGATECALL操作碼),因此讓我們從其工作原理的簡要概述開始。

委托調用

在常規的CALL-消息調用中,合約A向B發送payload數據。合約B響應此payload數據執行其代碼,可能會從其自己的存儲中讀取或寫入數據,然后將響應返回給A。當B執行其代碼時,它可以訪問有關調用本身的信息,例如msg

}

由于代理在實現中使用了委托調用,因此就好像它自己在運行實現的代碼一樣。實現代碼可以修改自己的存儲和余額,并保留了調用的原始msg

動態 | 韓國將采用區塊鏈和AI技術對國家綜合采購系統全面重組:韓國國家綜合電子采購系統“國家集市”將在2023年之前采用人工智能(AI)和區塊鏈技術等智能信息技術對其進行全面進行重組。據調配廳25日透露,“新一代國家集市”首先將重新設計落后的基礎技術,以便用戶更容易使用,同時提高運營穩定性。整頓多達700多種的電子文件,減少文件容量等,減少文件流通量,以云為基礎,解決用戶增加帶來的障礙、錯誤、速度低下等穩定性問題。(韓聯社)[2020/2/25]

functionupgrade(addressnewImplementation)external{require(msg

}

此版本通常還包含函數用來將代理的所有權轉賬到其他地址。Compound將這種模式與額外的twist一起使用:新的實現合約需要能_接受_轉賬,以防止意外升級到無效合約。

這種模式的好處是,與升級相關的所有邏輯都包含在代理中,并且實現合約不需要任何特殊邏輯即可充當委派目標(除實現合約限制和初始化程序中列出的一些例外)。但是,這種實現模式容易受到函數選擇器沖突導致的漏洞的攻擊。

選擇器沖突和透明代理

以太坊中的所有函數調用都由有效載荷payload前4個字節來標識,稱為“函數選擇器”。選擇器是根據函數名稱及其簽名的哈希值計算得出的。然而,4字節不具有很多熵,這意味著兩個函數之間可能會發生沖突:具有不同名稱的兩個不同函數最終可能具有相同的選擇器。如果你偶然發現這種情況,Solidity編譯器將足夠聰明,可以讓你知道,并且拒絕編譯具有兩個不同函數名稱,但具有相同4字節標識符的合約。

//這個合約無法通過編譯,兩個函數具有相同的函數選擇器contractFoo{functioncollate_propagate_storage(bytes16)external{}functionburn(uint256)external{}}

但是,對于實現合約而言,完全有可能具有與代理的升級函數具有相同的4字節標識符的函數。這可能會導致嘗試調用實現合約時,管理員無意中將代理升級到隨機地址。這個帖子由PatricioPalladino解釋了該漏洞,然后MartinAbbatemarco說明如何將其用于做惡.

這個問題可以通過開發用于可升級智能合約的適當工具解決,也可以通過代理本身解決。特別是,如果將代理設置為僅管理員能調用升級管理函數,而所有其他用戶只能調用實現合約的函數,則不可能發生沖突。

//Samplecode,donotuseinproduction!contractTransparentAdminUpgradeableProxy{addressimplementation;addressadmin;fallback()externalpayable{require(msg

functionupgrade(addressnewImplementation)external{if(msg

}

該模式被稱為“透明代理合約”(請勿與EIP1538混淆),在這篇文章中有很好的解釋。這是OpenZeppelin升級(以前稱為ZeppelinOS)現在使用的模式。它通常與ProxyAdmin合約結合使用,以允許管理員EOA與管理代理合約進行互動(管理員只能管理代理合約交互)。

讓通過一個例子看看是怎么工作的。假定代理具有owner()函數和upgradeTo()函數,該函數將調用委派給具有owner()和transfer()函數的ERC20合約。下表涵蓋了所有導致的情況:

msg

}abstractcontractUUPSProxiable{addressimplementation;addressadmin;functionupgrade(addressnewImplementation)external{require(msg

}

這種方法有幾個好處。首先,通過在實現合約上定義所有函數,它可以依靠Solidity編譯器檢查任何函數選擇器沖突。此外,代理的大小要小得多,從而使部署更便宜。在每次調用中,從存儲中需要讀取的內容更少,降低了開銷。

這種模式有一個主要缺點:如果將代理升級到沒有可升級函數的實現上,那就永久鎖定在該實現上,無法再更改它。一些開發人員更喜歡保持可升級邏輯不變,以防止出現這些問題,而這樣做的最佳方式是放在代理合約本身。

代理存儲沖突和非結構化存儲

在所有代理模式變體中,代理合約都需要至少一個狀態變量來保存實現合約地址。默認情況下,Solidity存儲變量在智能合約存儲中的順序是:聲明的第一個變量移至插槽0,第二個變量移至插槽1,依此類推(映射和動態大小數組是此規則的例外)。這意味著,在以下代理合約中,實現合約地址將保存到存儲插槽零。

//Samplecode,donotuseinproduction!contractProxy{addressimplementation;}

現在,如果我們將該代理與以下看似無害的實現合約結合使用,會發生什么?

//Samplecode,donotuseinproduction!contractBox{addresspublicvalue;functionsetValue(addressnewValue)public{value=newValue;}}

遵循Solidity存儲布局規則,通過代理對Box

}

盡管有效,但它有一個缺點,即要求所有委托目標合約都添加此額外的虛擬變量。這限制了可重用性,因為普通合約不能用作實現合約。這也容易出錯,因為很容易忘記在合約中添加該額外變量。

我是廣告

本文來源于非小號媒體平臺:

登鏈社區

現已在非小號資訊平臺發布105篇作品,

非小號開放平臺歡迎幣圈作者入駐

入駐指南:

/apply_guide/

本文網址:

/news/9562977.html

免責聲明:

1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險

2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場

上一篇:

幣安為何推出第三條鏈?這對BNB意味著什么?

Tags:IONRES區塊鏈DDRMINION幣REST幣區塊鏈騙了多少人DDR價格

萊特幣
ETH:金色早報 | 中國已經成為數字貨幣發展的領跑者_5.19比特幣暴跌的真相

頭條 ▌觀點:中國已經成為數字貨幣發展的領跑者韓國先驅報12月27日報道,相關專家們表示,隨著中國央行數字貨幣發展的迅速推進,韓國需要為其日益增長的使用帶來的影響做好準備.

1900/1/1 0:00:00
TPS:螞蟻鏈在中國信通院的測試中同比提升 40%,CTPS 突破 3.3 萬_區塊鏈技術最早應用于

鏈聞消息,在中國信息通信研究院最新發布的可信區塊鏈測試結果中,螞蟻鏈在4節點性能測試中取得第一名,較去年最好結果提升40%達到33,491CTPS.

1900/1/1 0:00:00
COI:比特幣站穩25000美元,持續創歷史新高, 現在挖礦囤幣晚不晚?_UTI Coin

親愛的礦工朋友們,如果說,大家挖礦的速度已經比不過機構買比特幣的速度了。應該有很多人覺得難以置信,但這已經成為現實了.

1900/1/1 0:00:00
300:12.28比特幣瘋漲劍指3萬大關 以太坊跟漲能否突破前高_以太坊

大家晚上好,我是玩幣隊長。沒有陷入困局的人生,只有陷入困局的思維,把危機化解轉變成機遇是智者,而把危機轉化成災難而后萎靡不振才是一個真正的失敗者.

1900/1/1 0:00:00
DIGI:財哥談幣:比特幣三天拉升5500點止漲了 接下來將進入震蕩區間_DigiFinex

三天,5500點拉升,財哥分析比特幣這么久以來沒見過這么瘋狂的時候,今晚央行兩次報導比特幣。那么最重要的,比特幣的拉升停止沒有?財哥認為已經停止了,圖中我在超短5M級別來敘述一下本次拉升的階段瑞.

1900/1/1 0:00:00
EFI:除了1inch還有哪些聚合器值得關注?概覽常見聚合器應用_My Defi Legends

1inch的豪華空投,讓DeFi玩家們度過了一個難忘的圣誕節。這篇文章,一起看下1inch所在的DeFi聚合器領域是什么,想解決什么問題,有什么有意思的項目。也許下一個空投的項目就在里面.

1900/1/1 0:00:00
ads