本文作者:bixia1994
參考鏈接:UUPSUpgradeableVulnerabilityPost-mortem-General/Announcements-OpenZeppelinCommunity
EIP-1967
在UUPS中,其實現了EIP-1967
作為一個實現EIP-897的代理合約,其在代理合約中會實現這兩個函數。
UUPSEIP-1822
EIP-1822討論的合約升級模式與Openzeppelin的透明合約升級模式的不同點在于:EIP-1822的代理合約只讀取實現合約的地址,并將所有的方法都代理給實現合約,包括修改實現合約地址的邏輯部分也在實現合約里。而透明合約升級模式中,proxy合約管理著實現合約的地址,要實現合約升級,只需要在proxy合約中更改實現合約的地址即可。其他的邏輯代理給實現合約。
也就是說EIP-1822的實現合約既包含了普通的業務邏輯處理,更包含了自身的升級邏輯處理。簡單來講就是EIP-1822的實現合約部分,都需要繼承自一個公共的可升級實現合約:proxiable
美國Cuustomers銀行招聘新團隊深化加密貨幣業務:金色財經報道,總部位于美國賓夕法尼亞州的Cuustomers銀行聘請了大量新員工,以擴大其新興數字資產銀行業務的專業知識。客戶銀行總裁兼首席執行官Sam Sidhu表示,我們承諾成為為商業加密貨幣和數字資產機構提供服務的頂級金融機構之一,我們了解加密貨幣客戶的所有要求、隱患和需求。這些客戶需要一個擁有技術和靈活性的金融合作伙伴,以便在整個生態系統中根據他們的要求進行擴展,而不僅僅是在他們業務的一個或兩個方面。
此前金色財經報道,賓夕法尼亞州的Cuustomers銀行在10月份表明了其在數字資產領域競爭的意圖,將加密貨幣公司作為客戶加入,并利用該銀行自己的內部數字法幣推出了實時加密貨幣對美元的支付平臺。(finextra)[2022/1/10 8:39:07]
functionupgradeToAndCall(addressnewImplementation,bytesmemorydata)externalpayablevirtual{}function_authorizeUpgrade(addressnewImplementation)internalonlyOwner(){}
S.Finance已上線收益穩定幣UU:S.Finance已于2月2日上線收益穩定幣UU,目前已得到Curve.fi和s.finance支持。目前已可以通過質押Curve 3池LPT和S.Finance 5池LPT得到UU和SFG獎勵。[2021/2/3 18:46:01]
其中,openzeppelin通過回滾檢測,來檢查是否升級成功,避免了EIP-1822中遇到的問題:
function_upgradeToAndCallSecure(addressnewImplementation,bytesmemorydata,boolforceCall)internal{//第一步:設置newImpl地址到實現合約地址addressoldImplementation=_getImplementation();_setImplementation(newImplementation);//第二步:針對新的實現合約地址進行初始化if(data
//第三步:執行回滾檢查//PerformrollbacktestifnotalreadyinprogressStorageSlot
庫幣Pool-X平臺將開啟Enecuum持倉挖礦:據庫幣KuCoin交易所消息,庫幣Pool-X平臺將于12月25日6點開啟Enecuum(ENQ)持倉挖礦功能,用戶將ENQ代幣轉入Pool-X錢包,即可獲得收益。[2020/12/24 16:24:50]
}
Openzepplin的實現漏洞分析
在上述的Openzeppelin的實現中,其通過回滾檢測避免了EIP-1822中遇到的問題:即升級到一個不滿足EIP-1822規范的合約時,此時代理合約和實現合約就完全被鎖死,無法繼續升級。但是其又引入了一個新的問題,即:回滾操作中事實上模擬了一遍新的實現合約地址中的upgradeTo操作,并且是通過delegatecall方式來進行調用。
通過delegatecall調用新合約地址的upgradeTo方法有什么問題呢?
查看黃皮書中關于delegatecall的定義為:
Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue
Tuur Demeester:比特幣價格超過5萬美元“一點也不瘋狂”:比特幣投資者和研究分析師Tuur Demeester推測獎勵減半后,比特幣比不會跌破6,000美元,甚至未來可能達到至少50,000美元的價格。
在5月18日發布給加密貨幣研究公司Messari的YouTube頻道的視頻中,Demeester表示,比特幣(BTC)減半后已“重返牛市”,過去的3,000-4,000美元觸底反彈,指的是3月加密市場崩盤。(Cointelegraph)[2020/5/19]
thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical
從黃皮書的定義來看,delegatecall事實上保存了當前賬戶的余額和msg
functionmint(addressto,uint256amount)publiconlyOwner{_mint(to,amount);}function_authorizeUpgrade(addressnewImplementation)internalonlyOwneroverride{}}
UUU(U Network)今日35.77%領漲Hadax:UUU(U Network)的愿景是成為全球“內容價值第一公鏈”,團隊認為內容產業的問題不僅是如何幫內容生產者牟利,更是如何幫用戶發現有價值的內容。UUU(U Network)的這一理念獲得超過30家中美一線機構和項目的投資和支持,包括硅谷殿堂級VCDraper Dragon,硅谷丹華資本DHVC,PreAngel,Qtum(量子鏈),D Fund等。[2018/5/15]
注意這里的TestToken是UUPS升級合約的實現合約部分,而不是代理合約部分。那么應該如何去做這個TestToken的POC呢?
POC
這里不能直接在malicious合約中的upgradeTo方法中寫selfdestruct,而是應該利用ForceCall部分的delegatecall,并通過寫入rollbackTesting
function_authorizeUpgrade(addressnewImplementation)internal{}}
討論
那么在openzeppelin的UUPS實現中,使用delegatecall來進行回滾測試有什么問題呢?
問題就是:
Address
}
上述openzeppelin實現的代碼中,最為核心的一條是理解:當delegatecall到一個selfdestruct方法后,程序所有的代碼都會被直接清空,不會繼續往下執行,也就不會去執行后面的require判斷條件。
然而在remix中執行時,發現delegatecall之后的require語句還是執行了:
這是不對的,需要進一步理解黃皮書中關于selfdestruct這個opcode的定義:
selfdestruct:Haltexecutionandregisteraccountforlaterdeletion
function_functionDelegateCall(addresstarget,bytesmemorydata)privatereturns(bytesmemory){require(AddressUpgradeable
當delegatecall到一個selfdestruct的方法時,其返回值為0,然后代碼繼續運行。如果此筆交易在后續的執行過程中成功,則上下文地址上的代碼將會被清空。如果該筆交易在后續的執行過程中失敗,則整體狀態會回滾。
參考資料
bixia1994-互聯網小工:https://learnblockchain.cn/people/3295
UUPSUpgradeableVulnerabilityPost-mortem-General/Announcements-OpenZeppelinCommunity:https://forum.openzeppelin.com/t/uupsupgradeable-vulnerability-post-mortem/15680
ContractsWizard-OpenZeppelinDocs:https://docs.openzeppelin.com/contracts/4.x/wizard
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/10378667.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
每周編輯精選WeeklyEditors'Picks
AMA地點:UmbrellaNetworkTelegramChannelAMA時間:2021年9月24日,星期五|時間:UTC時間下午2:00Umbrella是一個可擴展的、社區所有的預言機.
1900/1/1 0:00:00鏈聞消息,去中心化房地產融資平臺CitaDAO完成100萬美元融資,風險投資機構SoraVentures、SNZCapital、TurnCapital、OriginCapital及區塊鏈和DeF.
1900/1/1 0:00:00尊敬的用戶:?????? ??? BKEXGlobal即將上線CYS,并上線CYS/USDT聚合交易對.
1900/1/1 0:00:00尊敬的歐易OKEx用戶:歐易OKEx賺幣將于2021年9月29日11:00(HKT)正式開啟第十一期加息項目申購通道。歐易OKEx賺幣將不定期上線各類資產的加息活動,敬請期待.
1900/1/1 0:00:00聚焦區塊熱點,傳遞價值信息過去幾天,區塊鏈行業關注度不減。巨頭們仍在跑步布局中,意大利支付巨頭Nexi正與歐洲央行合作,騰訊搶注元宇宙商標,推特開啟BTC支付;ETH非零地址數創歷史新高,NFT.
1900/1/1 0:00:00尊敬的用戶:?????????????BKEXGlobal即將上線LSP,詳情如下:上線交易對:LSP/USDT幣種類型:XLM?充值功能開放時間:2021年9月27日21:00交易功能開放時間.
1900/1/1 0:00:00