加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > USDC > Info

智能合約的調配模式:如何讓你的智能合約安全協作?_ELD:LSETH價格

Author:

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

本文來源:區塊鏈大本營

原文作者:AlbertoCuestaCa?ada

翻譯:火火醬

由于所有已部署合約都有24KB的硬限制,所以除了少數極其簡單的應用程序外,其他所有的Ethereum應用都是由多個智能合約組成的。

如何才能確保各智能合約間的安全協作呢?

在將代碼分解為多個可操作的合約后,我們便會發現有的合約中的函數需要通過另一個合約才能進行調用。

例如,在Uniswapv2中,只有合約工廠可以對UniswapPair進行初始化。

對于Uniswap團隊來說,只需要稍微檢查一下就可以解決的問題對于很多其他項目來說,卻需要從頭開始重新編寫調配解決方案。

在了解問題和開發模式的過程中,我們深入理解了如何借助多個智能合約來構建應用程序,從而使Yield更加健壯且安全。

QANplatform橋智能合約遭到攻擊,建議不要執行QANX代幣相關交易:10月11日消息,抗量子計算攻擊的Layer1區塊鏈QANplatform發推稱,其橋智能合約遭到攻擊,攻擊者設法提取了代幣,提醒用戶不要執行任何與QANX代幣相關的交易。目前團隊正在調查問題。目前 QANX 價格短線跳水跌超 90%。[2022/10/11 10:30:53]

在本文中,我們將借助幾個知名項目中的實例來深入分析智能合約的調配方式。希望大家在讀完本文之后可以對照自己項目的需求,選擇出最適合自己的方法。

背景知識

前文提到,我們首先要把項目分解成多個智能合約,這是出于技術和精神兩個層面的限制要求。

技術限制源于2016年11月發生的一項改變。當時,Ethereum主網實施了SpuriousDragon硬分叉。此舉將已部署的智能合約的大小限制在24576字節以內。

在沒有此項限制時,攻擊者可以在部署智能合約期間進行無限次的計算。此舉雖然不會對存儲在區塊鏈中的數據產生任何影響,但卻是一種針對Ethereum節點的拒絕服務攻擊。

聲音 | 智能合約先驅:盡管都存在缺陷 但會選擇ETC或RSK而非ETH:智能合約先驅尼克·薩博(Nick Szabo)近期在推特上回復推特網友提問時表示,ETC對PoW、DAO hack fork理念的堅守,都是人們支持ETC勝過ETH的好理由,它們反映了ETC支持者更加關注金融完整性。薩博稱,ETH和ETC都是有缺陷的,但相較于ETH,我會選擇ETC或RSK。我認為它們中沒有哪個已經為嚴肅的金融應用做好準備,但是,在ETH上運行的那些項目除了可能是簡單的代幣之外,或許存在很高的風險。此外,他還將ETH稱為“cult(邪教)”:一方面聲稱不變性和抗審查,另一方面攻擊信任最小化原則,聲稱權力下放但卻變得越來越集中化。[2019/10/17]

由于當時的區塊gas限制無法支持這種規模的智能合約,所以這項改變當時并沒有受到重視:

“該解決方案為儲存在區塊鏈中的對象大小設置了最高上限,并使其略高于當前gas上限值”

在DeFi大爆炸之前,我們為Yield編寫了2000行智能合約代碼,部署后的代碼加起來接近100KB,審核員完全沒有覺得項目過于復雜。

動態 | IOHK發布新電子書 以幫助開發人員為Cardano編寫高效智能合約:IOHK最近發布了一本名為《普路托斯:編寫可靠的智能合約》(Plutus: Writing reliable smart contract)的電子書。該書作者Lars Brunjes、Polina Vinogradova表示,他們的主要目標是幫助開發人員為Cardano網絡編寫高效的智能合約。Vinogradova補充表示,這本書提供了開發高效智能合約的逐行指導,同時簡要介紹了在Cardano的生態系統中會計是如何工作的。[2019/8/3]

但我們仍需把解決方案分解為多個合約。

復雜性和面向對象程序設計

將區塊鏈應用分解為多個智能合約的第二個原因與技術限制無關,而是與“人”的精神限制有關。

在特定的時間內,我們大腦中能儲存的信息量是一定的。相比于處理單一且涉及面廣的大問題,人們在處理多個相互間存在關聯的小問題時表現會更好。

實際上,Object-OrientedProgramming可以提高軟件的復雜性。通過定義代表某種概念的“對象”,并將變量和函數看作該對象的屬性,開發人員能夠在心里更好地描畫和理解需要解決的問題。

紐約州試圖引入澄清區塊鏈及智能合約法律地位的法案:據ethnews消息,昨天紐約加入越來越多的州,試圖澄清區塊鏈和EDCC(又名智能合同)的法律地位,引入了一項名為“修改與區塊鏈技術和智能合同相關的州級技術法”的法案。上周,與此類似的一項法案——參議院第300號法案被提交給了俄亥俄州立法機關的委員會。[2018/5/31]

Solidity在合約層面使用了面向對象的編程技術。我們可以將合約看作是一個具有變量和函數的“對象”,在腦海中將復雜的區塊鏈應用程序想象成多個合約的集合,每個合約代表一個單獨的實體。

例如,在MakerDAO中,每種加密貨幣都有單獨的合約,此外還有記錄債務的合約、表示債務和外界間網關的單獨合約等等。我們不可能將所有內容都編寫在同一個合約中——即使可能,也會異常困難。

把一整個大問題分解成具有內在聯系的多個小問題可以幫助我們更快地找出解決方案。

實現

接下來,讓我們一起來研究一下Uniswap、MakerDAO以及?Yield?的實現方式。

從簡單的例子開始——Uniswap和Ownable.sol

AIDOC官方團隊發布聲明:AIDOC智能合約安全:近期部分幣種爆出以太坊ERC20智能合約漏洞,只是該幣種編寫技術存在問題,并非整個以太坊問題。為此,天醫AIDOC官方技術團隊在第一時間對AIDOC的以太坊ERC20智能合約代碼進行檢測,通過技術社區論證結果展示AIDOC代碼是安全可靠的,并沒有發現任何漏洞,特此公告說明。AIDOC友情提醒:智能合約產生批量交易代碼時需要考慮三重溢出檢測來保證智能合約安全,天醫已經采用三重檢測保證安全。[2018/4/25]

我很喜歡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:ELDOWNETHYIELDZeusshieldIOWN價格LSETH價格Yieldara

USDC
DeFi行業“撕逼”事件大盤點_EFI:Defigram

除非DeFi社區里各大項目領導者不再互撕,否則這一新興行業的最終結果很可能會走向“內爆”。如果我們看看Twitter上那些DeFi行業里極具市場影響力的“大咖”推文,會發現里面充斥著各種相互攻擊.

1900/1/1 0:00:00
Miniswap的DEX之路_MIN:miniswap幣最新消息

Bancor是最早進行AMM模式實踐的DEX項目,不過第一個真正實踐成功出來的項目是Uniswap.

1900/1/1 0:00:00
CEX保衛戰:DeFi咄咄逼人,中心化交易所“慌”了嗎?_EFI:DEF

作者:Nancy 來源:PANews 伴隨著熱火朝天的農民種田潮,DeFi這趟高速列車正以驚人的速度向CeFi逼近.

1900/1/1 0:00:00
“鏈”上南京,六朝古都的區塊鏈之路_區塊鏈:區塊鏈證據保全怎么操作流程

9月6日,南京市鼓樓區“區塊鏈八條”正式發布。根據政策,工商注冊地、稅務征管關系及統計關系在鼓樓區塊鏈先導區范圍內,并且滿足其他規定條件的區塊鏈企業或者機構,將能夠在多個方面享受到鼓樓區的扶持和.

1900/1/1 0:00:00
Medalla測試網平穩運行一周,以太坊2.0距主網啟動還差些啥 ?_以太坊:MED

安靜的測試網,實際上是值得懷疑的。如果你在過去的幾周里一直關注著Medalla,你會非常清楚8月14日發生的事件.

1900/1/1 0:00:00
我在Voice上發帖半個月,最怕無緣無故被禁言_ICE:EOS

轉自:區塊律動 社交的機會十分誘人,即便Facebook和微信已經是現代人「標配」一般的存在,但每一年,相關概念的新產品總會在市場上掀起一陣又一陣的討論.

1900/1/1 0:00:00
ads