本文來源:區塊鏈大本營
原文作者:AlbertoCuestaCa?ada
翻譯:火火醬
由于所有已部署合約都有24KB的硬限制,所以除了少數極其簡單的應用程序外,其他所有的Ethereum應用都是由多個智能合約組成的。
如何才能確保各智能合約間的安全協作呢?
在將代碼分解為多個可操作的合約后,我們便會發現有的合約中的函數需要通過另一個合約才能進行調用。
例如,在Uniswapv2中,只有合約工廠可以對UniswapPair進行初始化。
對于Uniswap團隊來說,只需要稍微檢查一下就可以解決的問題對于很多其他項目來說,卻需要從頭開始重新編寫調配解決方案。
在了解問題和開發模式的過程中,我們深入理解了如何借助多個智能合約來構建應用程序,從而使Yield更加健壯且安全。
0x推出用于鏈上治理的新智能合約系統ZEIP:2月21日消息,去中心化交易基礎設施0x將推出用于完全鏈上綁定治理的新智能合約系統ZEIP。ZEIP可以完全控制0x協議、金庫和治理,并計劃推出在0x協議治理中激勵積極的鏈上投票參與(單獨和委托)的正式計劃。
此外還將推出0x協議安全理事會,并計劃推出0x協議Grants,更新并擴大0x協議的成功實驗,以幫助管理社區擁有的金庫,旨在使0x協議成為全球價值交換的標準結算層。[2023/2/21 12:18:31]
在本文中,我們將借助幾個知名項目中的實例來深入分析智能合約的調配方式。希望大家在讀完本文之后可以對照自己項目的需求,選擇出最適合自己的方法。
背景知識
前文提到,我們首先要把項目分解成多個智能合約,這是出于技術和精神兩個層面的限制要求。
技術限制源于2016年11月發生的一項改變。當時,Ethereum主網實施了SpuriousDragon硬分叉。此舉將已部署的智能合約的大小限制在24576字節以內。
在沒有此項限制時,攻擊者可以在部署智能合約期間進行無限次的計算。此舉雖然不會對存儲在區塊鏈中的數據產生任何影響,但卻是一種針對Ethereum節點的拒絕服務攻擊。
Parity發布ink! 3.0:基于Rust的WASM智能合約語言的重大更新:金色財經消息,Parity基于Rust用來編寫Web Assembly(Wasm)智能合約的一種編程語言ink!剛剛推出了迄今為止最大的更新。Polkadot和Substrate生態中的開發者可以使用ink!為Wasm虛擬機構建高效、高性能的智能合約和去中心化應用程序,它們是以太坊 (EVM/Solidity)智能合約的一種替代方案。
除了發布了ink! 3.0版本,團隊還改進了合約模塊(Contracts pallet)以提高平行鏈性能,并添加了一些新功能以提高跨合約調用和性能提升,使開發者更容易編寫更復雜的邏輯。最后,隨著 `cargo-contract` 1.0的發布,開發者使用的工具也發生了一些變化。(PolkaWorld)[2022/3/18 14:05:09]
由于當時的區塊gas限制無法支持這種規模的智能合約,所以這項改變當時并沒有受到重視:
“該解決方案為儲存在區塊鏈中的對象大小設置了最高上限,并使其略高于當前gas上限值”
在DeFi大爆炸之前,我們為Yield編寫了2000行智能合約代碼,部署后的代碼加起來接近100KB,審核員完全沒有覺得項目過于復雜。
NFT項目We Like The Rocks使用EtherRock廢棄的智能合約重啟:NFT項目We Like The Rocks使用EtherRock廢棄的智能合約重啟,該項目通過巖石編號來控制稀缺性,允許任何人鑄造巖石。連續創業者Gary Vaynerchuk以60 ETH (19.4萬美元)買入三塊石頭,目前其網站上掛售的前100個巖石最低價為100 ETH。
NFT項目EtherRock的匿名開發人員于2017年部署了兩個幾乎相同的NFT合約,第一個合約代碼存在漏洞,允許任何人支付Gas費創建無限多個NFT,開發人員采用第二個合約建立了NFT項目EtherRock,使EtherRock NFT的總數限制為100 個,如今該項目的巖石交易價格高達170萬美元。一位名為James William的區塊鏈開發人員于8月5日重啟了存在漏洞的第一個合約,推出NFT項目We Like The Rocks,EtherRock的匿名開發者對此感到不滿,We Like The Rocks此前于8月8日在OpenSea上線幾天后下架。(decrypt)[2021/8/29 22:44:47]
但我們仍需把解決方案分解為多個合約。
OpenZeppelin智能合約開發庫更新3.2版本:區塊鏈開發工具提供商OpenZeppelin發布智能合約開發庫OpenZeppelinContracts的3.2版本,此次最大的變更是將代理合約(proxycontract)從OpenZeppelinSDK遷移到了OpenZeppelinContracts項目中。另外對于智能合約編程語言Solidity0.7版本的用戶而言,OpenZeppelin已經在npm上發布了較新的編譯器版本支持,最新版本為3.2.0-solc-0.7。[2020/9/14]
復雜性和面向對象程序設計
將區塊鏈應用分解為多個智能合約的第二個原因與技術限制無關,而是與“人”的精神限制有關。
在特定的時間內,我們大腦中能儲存的信息量是一定的。相比于處理單一且涉及面廣的大問題,人們在處理多個相互間存在關聯的小問題時表現會更好。
實際上,Object-OrientedProgramming可以提高軟件的復雜性。通過定義代表某種概念的“對象”,并將變量和函數看作該對象的屬性,開發人員能夠在心里更好地描畫和理解需要解決的問題。
動態 | 瑞士安全公司Kudelski Security與智能合約審計公司Hosho達成合作:據Cointelegraph消息,3月19日,瑞士網絡安全解決方案提供商Kudelski Security宣布與智能合約審計公司Hosho建立戰略合作伙伴關系,以為區塊鏈生態系統提供更高的安全性。[2019/3/20]
Solidity在合約層面使用了面向對象的編程技術。我們可以將合約看作是一個具有變量和函數的“對象”,在腦海中將復雜的區塊鏈應用程序想象成多個合約的集合,每個合約代表一個單獨的實體。
例如,在MakerDAO中,每種加密貨幣都有單獨的合約,此外還有記錄債務的合約、表示債務和外界間網關的單獨合約等等。我們不可能將所有內容都編寫在同一個合約中——即使可能,也會異常困難。
把一整個大問題分解成具有內在聯系的多個小問題可以幫助我們更快地找出解決方案。
實現
接下來,讓我們一起來研究一下Uniswap、MakerDAO以及?Yield?的實現方式。
從簡單的例子開始——Uniswap和Ownable.sol
我很喜歡Uniswapv2,因為它非常簡單。開發人員用410行智能合約代碼就成功建立了去中心化交易所。僅部署了兩類合約:工廠和不限數量的配對交換合約。
其工廠合約的設計方式決定了其配對交易合約的部署需要經過兩個步驟。首先部署合約,然后用將要進行交易的兩個代幣對其進行初始化。
由于需要確保只有創建配對交易合約的工廠才能對合約進行初始化,所以他們重新實施了Ownable模式。
此舉取得的效果還不錯,如果你也遇到了同樣的問題,可以借鑒這個方法。如果你知道自己的合約只需要給另一個合約開通訪問特權的話,可以使用Ownable.sol。甚至都用不到Uniswap這種工廠。你可以在一個用戶中部署兩個合同,然后執行minion.transferOwnership(address(boss))。
更為完善的例子——Yield
Yield的解決方案就沒有Uniswapv2那么簡單了。其核心由五個合約組成,并且特權訪問關系并不是一一對應的。部分合約具備的限制功能可以幫助我們訪問其他核心合約。
因此,我們只需擴展Ownable.sol以生成兩個訪問層,其中一層有多個成員:
合約所有者可以向特權列表中添加地址。繼承合約可以包含onlyOrchestrated修改器以限制對授權地址的訪問。
每個地址都會與一個函數簽名共同注冊,從而收緊對函數的訪問權限,增強安全性。
由于我們會在期間部署orchestrate合約,所以沒有取消訪問權限的函數,owner會通過調用所有合約上的transferOwnership(adress(0))來放棄其特權訪問。
我們自己的平臺代幣yDai,將從Orchestrated繼承并限制mint在owner放棄其特權之前建立的特定合約:
這種模式相對容易實現和調試,并且可以實現我們合約中的函數。
極具迷惑性的例子——MakerDAO
大家都非常討厭MakerDAO中各種難以理解的術語。但在搞清楚Yield的調配模式后,我才發現它們二者的實現方式幾乎是完全相同的。
1.合約部署者是wards的原成員。
2.wards可以rely其他人,并使其同樣成為watds。
3.可以限制函數,只有wards可以執行函數。
例如,MakerDAO的Vat.sol合約中的fold函數可被用于更新利率累加器,并且只能被其集合中的另一函數調用。如果我們觀察一下該函數的話,便會發現用于調配的auth修改器,
從某種程度上來說,auth和其他調配實現是對private和internal函數概念的擴展,僅適用于在合約間進行訪問控制。
MakerDAO與我們項目的實現方式非常類似。
1.合約部署者是wards原成員。在Yield中,即owner。
2.wards可以rely其他人并使其成為wards。在Yield中,只有owner可以orchestrate其他地址并authorized。
3.函數受限制,因此只有wards可以執行受限函數。在Yield中,我們提到onlyOrchestrated地址可以調用標記函數。進一步限制對函數的訪問。
除了在Yield中使用了兩個訪問層以及函數限制以外,二者的實現方式是一樣的。可見,合約調配是一種一經實現即可重復使用的常見模式。
從審核員和用戶的角度出發,我們還開發了一個收集區塊鏈事件,并展現合約所有權和調配圖的腳本。
總結
智能合同的調配是一個在很多項目中反復出現的問題,在遇到此類問題,大家往往都會從零開始進行調配。但其實此類問題的解決方案都是十分類似的。
我們可以遵循以上標準來實現安全有效的調配,希望大家可以深入理解文中的示例原理,并形成適合自己的解決方案。
Tags:TRATHEETHOWNXTRA幣togetherbnb手游下載中文版Kino Token ETHETHDOWN
摘要 Uniswap自入夏以來呈現爆發式增長,上月占DEX總成交量的58%。TheBlock采訪了Uniswap的創始人HaydenAdams,講述了該公司在協議升級方面的工作,以及其在競爭中保.
1900/1/1 0:00:00近日,國產自主可控區塊鏈底層平臺FISCOBCOS完成與銀河麒麟操作系統的兼容性互認證測試。這不是區塊鏈產品與銀河麒麟操作系統的第一次“牽手”,巴比特注意到,在此之前,溪塔科技、紙貴科技、眾享比.
1900/1/1 0:00:00撰文:MohamedFouda,加密貨幣投資機構VoltCapital合伙人,TokenDaily研究團隊成員DeFi爆炸式增長的核心在于DeFi的治理代幣。COMP、LEND等都是治理代幣.
1900/1/1 0:00:00最近,CNBC的MadMoney節目主持人JimCramer表示,他可能會將其凈資產的1%投資于比特幣。這位著名的投資者將比特幣和黃金進行了比較,并提到了對沖通脹的重要性.
1900/1/1 0:00:00本文來自?Hackernoon,原文作者:MonicaHernandez,由Odaily星球日報譯者Katie辜編譯新的宇宙紀元已經到來,我們見證著新興事物的涌現和太空任務先進的技術發展.
1900/1/1 0:00:00轉自:深潮 作者:杜蘭特 正當DeFi代幣紛紛開啟跳水表演時,維權聲漸漸多了。而DeFi摧毀區塊鏈傳統體系的同時,也為維權帶來了新挑戰.
1900/1/1 0:00:00