加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

GnosisSafe - 合約結構分析_MOD:ADD

Author:

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

本文作者:bixia1994-互聯網小工

上篇文章簡單分析GnosisSafe中的部分業務邏輯,主要是鏈下簽名與鏈上驗證的邏輯,關于方法執行,Gas費用扣減等并未涉及到。因為主要是目前也暫時用不到那一塊。這一篇文章主要是分析下GnosisSafe的合約結構。代碼以最新release的v1

enableModule-使能該模塊,實際上是添加該模塊到鏈表里

//sentinel->A<->AfunctionenableModule(addressmodule)publicauthorized{//要求該module不能重復添加。如果該module在鏈表尾部,則該module應該指向自己require(modules==address(0));//將該module->A<->Amodules=modules;//將哨兵重新指向module:sentinel->module->A<->Amodules=module;}

disableModule-廢棄該模塊,將該module移除鏈表

//sentinel->prevModule->module->B<->BfunctiondisableModule(addressprevModule,addressmodule)publicauthorized{//要求要廢除的module和該module前的preModule都在鏈表中,且prevModule->modulerequire(modules!=address(0)&&modules!=address&&modules=module);//sentinel->prevModule->B<->Bmodules=modules;//module->address(0)modules=address(0);}

趙長鵬:對內幕交易零容忍,Gnosis交易相關錢包均與員工無關:5月22日消息,華爾街日報報道稱“加密資產投資或存在內幕交易問題”,對此,幣安CEO趙長鵬發推回應,我們奉行零容忍政策,并堅持最高標準。3名調查人員已查看相關錢包,沒有一個與幣安員工有關。這就是為什么我們甚至盡量不讓項目團隊知道其代幣什么時間會上線。但是當我們在錢包集成等方面需要技術協助時,有時是無法完全避免的。如果有人發現任何可疑行為,請發送電子郵件至audit@binance.com舉報。

據此前華爾街日報報道,公開數據顯示,一些匿名的加密資產投資者可能借助交易所上線代幣的內幕信息獲取收益。去年8月,一個加密錢包在6天的時間里囤積價值36萬美元的Gnosis代幣,幣安交易所在第7天表示將上線這一代幣。據Argus公司分析,上述加密錢包在幣安發布公告后的4分鐘后開始賣出并在4小時內結算全部持倉,回報率約40%。[2022/5/22 3:33:27]

getModulesPaginated-拿到所有的模塊列表

functiongetModulesPaginated(addressstart,uint256pageSize)externalviewreturns(addressmemoryarray,addressnext){array=newaddress(pageSize"""""""");//遍歷鏈表,不包括哨兵addresscurrentModule=modules;uintmoduleCount=0;while(currentModule!=address(0)&&currentModule!=SENTINEL_MODULES&&moduleCount<pageSize){array=currentModule;moduleCount=1;currentModule=modules;}next=currentModule;//設置正確的array大小assembly{mstore(array,moduleCount。

多簽錢包Gnosis Safe已完成第二次回溯空投快照:金色財經消息,Gnosis團隊產品經理Lukas Schor在推特上表示,多簽錢包Gnosis Safe已完成面向用戶的第二次回溯空投快照,但并未透露快照的具體區塊高度。

此前消息,GnosisDAO關于分拆Gnosis Safe并推出SAFE代幣的提案已通過,SAFE代幣將用來管理Gnosis Safe生態系統和基礎設施。同時,GnosisDAO將在瑞士設立獨立的Safe基金會,以保護戰略性的鏈下資產(IP、Github存儲庫、戰略投資)。根據該提案,Safe基金會將鑄造10億枚SAFE代幣。[2022/5/21 3:31:36]

execTransactionFromModuleReturnData-通過模塊執行方法

functionexecTransactionFromModuleReturnData(addressto,uint256value,bytesmemorydata,Enum

modifierauthorized(){require(msg

思考3:代理合約通過delegatecall來訪問主合約,而調用主合約中的執行模塊方法時,可以選擇用call來執行傳入的to地址上的方法,那么delegatecall的上下文環境里,再使用call,最后它的狀態變化發生在哪里?是代理合約里呢還是call中的to地址上?

問題實質是msg

可以看到在構造函數里有一個參數address_singleton,作為工廠合約,最簡單的生產一個Proxy的方法如下:

functioncreateProxy(addresssingleton,bytesmemorydata)publicreturns(GnosisSafeProxyproxy){proxy=newGnosisSafeProxy(singleton);//初始化(boolsuccess,bytesmemoryres)=address(proxy)

Cosmos創始人Jae Kwon新項目Gno.land空投快照時間提前至5月19日:4月30日消息,Cosmos創始人Jae Kwon在Twitter上表示,其新項目Gno.land空投快照時間由原本的7月4日提前至5月19日。[2022/4/30 2:42:35]

在上面的創建Proxy合約的過程中,其實質是調用了create這一opcode。又因為create這一個opcode的創建合約的地址僅與Factory合約的地址和nonce有關,故導致錢包地址可被人手動推算出來。導致任何通過Factory合約這一方法創建錢包的人的錢包地址都可以被推斷,出現安全隱患。

地址的推算方法如下:

//首先拿到工廠合約的地址:addressfactory=0xa6b71e26c5e0845f74c812102ca7114b6a896ab2;假設nonce=1,則RLP((s,n))為:ethers.utils.RLP.encode()=>RLP((factory,nonce))=0xd694a6b71e26c5e0845f74c812102ca7114b6a896ab201Keccak256(RLP((factory,nonce)))=0x4c2134364fb2823682748fe543e77ba9f5e59cefb97d55cf58641ebb7beb22c4address=0x43e77ba9f5e59cefb97d55cf58641ebb7beb22c4

使用create2這一OPCODE就沒有這個問題,但使用create2時,需要理解構造函數中的參數應該怎么傳入進去:

Argumentsfortheconstructorofacontractaredirectlyappendedattheendofthecontract’scode,alsoinABIencoding.Theconstructorwillaccessthemthroughahard-codedoffset,andnotbyusingthecodesizeopcode,sincethisofcoursechangeswhenappendingdatatothecode.

Gnosis和Sushi合作提供高達6000美元的共享Safe App贈款:官方消息,Gnosis和Sushi正在合作提供高達6000美元的共享安全應用(Safe App)贈款,其中包括3000美元的DAI和相應的3000美元的SUSHI。此贈款對為以下APP開發Safe App的任何個人或團隊開放:SushiSwap App、Sushi Liquidity Management App、Cream、yGift(包括支持V2)和Bento (即將發布)。

Safe Apps允許用戶直接從Gnosis Safe Multisig界面與以太坊應用程序交互。[2021/2/4 18:54:55]

即將contructor里的參數直接以ABI編碼后貼在contract.creationCode里。

bytesmemorydata=abi.encode(type(GnosisSafeProxy).creationCode,uint256(uint160(singleton)))

注意點2:代理合約與實現合約的Storage插槽排布是否一致

由于代理合約GnosisSafeProxy與實現合約GnosisSafe是通過delegatecall來調用,故需要仔細檢查兩邊的插槽排布,需讓其保持一致。

首先是GnosisSafeProxy代理合約:

slot_00=>singleton

然后是GnosisSafe實現合約

contractGnosisSafeisEtherPaymentFallback,Singleton,ModuleManager,OwnerManager,SignatureDecoder,SecuredTokenTransfer,ISignatureValidatorConstants,FallbackManager,StorageAccessible,GuardManagerEtherPaymentFallback=>無全局變量Singleton=>有全局變量slot_00=>singletonModuleManagerisSelfAuthorized,ExecutorSelfAuthorized=>無全局變量Executor=>無全局變量ModuleManager=>有全局變量mapping(address=>address)internalmodulesOwnerManagerisSelfAuthorizedSelfAuthorized=>無全局變量OwnerManager=>有全局變量mapping(address=>address)internalowners;uint256internalownerCount;uint256internalthreshold;SignatureDecoder=>無全局變量SecuredTokenTransfer=>無全局變量ISignatureValidatorConstants=>無全局變量FallbackManagerisSelfAuthorizedSelfAuthorized=>無全局變量FallbackManager=>有全局變量keccak256("fallback_manager.handler.address")=>fallback_handlerStorageAccessible=>無全局變量GuardManagerisSelfAuthorizedSelfAuthorized=>無全局變量GuardManager=>有全局變量keccak256("guard_manager.guard.address")=>set_guardGnosisSafe=>有全局變量uint256publicnonce;bytes32private_deprecatedDomainSeparator;mapping(bytes32=>uint256)publicsignedMessages;mapping(address=>mapping(bytes32=>uint256))publicapprovedHashes;

比特幣價格預言大神 “Luka_Magnotta” :比特幣價格在2021年達到100萬美元:國外網友發現比特幣價格預言大神,他們發現一名叫做“Luka_Magnotta”的人在2013年8月就登陸Reddit論壇發表了對比特幣價格的精準預測,這位“Luka_Magnotta”稱比特幣會在2017年突破1萬美元,2019年突破10萬美元,2021年達到100萬美元。有人估計這位“Luka_Magnotta”真身是諾貝爾獎得主,經濟學家米爾頓·弗里德曼(Milton Friedman),他早在1999年就預言了數字貨幣現象。[2017/12/25]

將上面的GnosisSafe實現合約的插槽整理如下:

slot_00=>singletonslot_01=>mapping(address=>address)internalmodulesslot_02=>mapping(address=>address)internalowners;slot_03=>uint256internalownerCount;slot_04=>uint256internalthreshold;slot_05=>uint256publicnonce;slot_06=>bytes32private_deprecatedDomainSeparator;slot_07=>mapping(bytes32=>uint256)publicsignedMessages;slot_08=>mapping(address=>mapping(bytes32=>uint256))publicapprovedHashes;keccak256("fallback_manager.handler.address")=>fallback_handlerkeccak256("guard_manager.guard.address")=>set_guard

可以看到代理合約Proxy和實現合約GnosisSafe的插槽并不完全一致,但是在代理合約Proxy的插槽排布中,slot_00位置處的值都是singleton,并未出現碰撞。可能是Gnosis想讓proxy合約盡可能小,所以這樣設計。

注意點3:與compound的Unitroller部分對比

Compound中的Unitroller是一個可升級合約架構,即其對應的實現comptrollerImplementation合約地址可以通過Unitorller中的方法去更改,從而實現合約升級。而GnosisSafeProxy并不是一個可升級合約架構,它對應的實現singleton是在初始化時就寫死的,沒有辦法去更改實現。

作為一個代理合約,其實現地址通常需要在創建時就傳入進去,然后再調用init方法來進行初始化。

參考資料

上篇文章:https://learnblockchain.cn/article/2980

Gas費用:https://learnblockchain.cn/2019/06/11/gas-mean

多簽:https://learnblockchain.cn/article/1127

免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。

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

登鏈社區

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

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

入駐指南:

/apply_guide/

本文網址:

/news/10362787.html

免責聲明:

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

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

上一篇:

每周編輯精選WeeklyEditors&#039;Picks

Tags:MODESSRESADDMODICMetaChessMetaResetDADDYCAKE價格

萊特幣價格
Xfinite (XET)_FIN:XFI

一、項目介紹 Xfinite旨在通過為客戶體驗、數據驅動的參與和生態系統經濟帶來創新來革新數字媒體,以造福社區。它是一種技術支持的解決方案,可確保透明度并重新建立對數字世界的信任.

1900/1/1 0:00:00
幣安合約將上線BTC、ETH次季1231U本位交割合約_NTS:ANTS

親愛的用戶:幣安將於2021年09月22日11:30上線BTC、ETH次季1231U本位交割合約。當季0924U本位交割合約將於2021年09月24日16:00交割,敬請留意.

1900/1/1 0:00:00
Gate.io 關于完成投票和上線 Shirtum (SHI) 交易的公告_GATE:Gate.io

本期投票上幣活動已圓滿結束,感謝廣大用戶的參與和支持。Gate.io投票上幣活動將持續帶來更多有潛力的優質項目,敬請期待.

1900/1/1 0:00:00
幣安流動性挖礦支持ICP,并開放2個新流動性池_USDT:usdt幣怎么交易

親愛的用戶: 幣安流動性挖礦現已支持ICP資產,并開放2個新 流動性池: ICP/BNBICP/USDT注意:幣安流動性挖礦是一種非保本收益產品.

1900/1/1 0:00:00
歐易OKEx上線CherrySwap (CHE),充值抽取200枚限量NFT_okex:有多少人被okex被騙過

尊敬的歐易OKEx用戶:歐易OKEx上線CherrySwap(CHE),具體時間如下:1.CHE充值:9月23日15:00(HKT)2.CHE/USDT的市場交易:9月23日15:30(HKT).

1900/1/1 0:00:00
幣安將上線CELO、AR USDT 1-25倍 永續合約_SDT:USDT

親愛的用戶:幣安將上線CELO、ARUSDT永續合約,具體安排如下:2021年09月27日11:30上線CELOUSDT1-25倍永續合約2021年09月28日11:30上線ARUSDT1-25.

1900/1/1 0:00:00
ads