本文來源:區塊鏈大本營
原文作者:AlbertoCuestaCa?ada
翻譯:火火醬
由于所有已部署合約都有24KB的硬限制,所以除了少數極其簡單的應用程序外,其他所有的Ethereum應用都是由多個智能合約組成的。
如何才能確保各智能合約間的安全協作呢?
在將代碼分解為多個可操作的合約后,我們便會發現有的合約中的函數需要通過另一個合約才能進行調用。
例如,在Uniswapv2中,只有合約工廠可以對UniswapPair進行初始化。
對于Uniswap團隊來說,只需要稍微檢查一下就可以解決的問題對于很多其他項目來說,卻需要從頭開始重新編寫調配解決方案。
在了解問題和開發模式的過程中,我們深入理解了如何借助多個智能合約來構建應用程序,從而使Yield更加健壯且安全。
銀聯商務與上海文交所合作積極探索數字資產智能合約交易模式:4月9日消息,近日銀聯商務股份有限公司與上海文化產權交易所股份有限公司(簡稱上海文交所)簽署戰略合作協議,銀聯商務正式接入“國家級版權交易保護聯盟鏈”,加入國家級數字文創規范治理生態矩陣。
雙方在數字人民幣領域的合作將持續強化“國家級版權交易保護聯盟鏈”的服務功能,同時將共同推動和強化行業規范治理,引導數字文創、數字藝術、數字版權、虛擬世界與現實交互產業合理有序發展。
此次合作,雙方將充分發揮各自擅長的技術研發、渠道、資源等相關優勢,圍繞可追溯、實名性、透明公開的創新交易模式不斷探索優化,通過區塊鏈、智能合約等創新技術應用,共同打造穩定、合規、安全的數字資產交易環境,推動國家級數字文創規范治理生態矩陣內交易相關技術標準、安全規范的制定,為中國數字文化產業發展提供堅實保障。
銀聯商務此次不僅將自主研發的區塊鏈平臺接入國家級版權交易保護聯盟鏈,積極探索數字資產智能合約交易模式,為數字資產交易提供不可篡改、安全可信的技術保障,還將為聯盟鏈賦予完備的全渠道綜合支付受理能力,提升結算效能,助力數字資產交易體系建設。[2022/4/9 14:15:01]
在本文中,我們將借助幾個知名項目中的實例來深入分析智能合約的調配方式。希望大家在讀完本文之后可以對照自己項目的需求,選擇出最適合自己的方法。
DFINITY:Internet Computer已可通過Canister智能合約轉移ICP:11 月 25 日,DFINITY 宣布社區已通過 NNS 提案 #31471。該提案的通過,意味著 Internet Computer 用戶已可通過 Canister 智能合約持有或轉移 ICP,也意味著 Internet Computer 在 DeFi 領域獲得進一步的發展。DFINITY 表示,去中心化聊天應用 OpenChat 將很快允許用戶通過即時消息相互發送 ICP,一系列 DApps 和市場也將實現不同的集成。
此外,NNS 提案 #31471 也標志著完全在主權區塊鏈上運行的去中心化交易平臺時代的到來,近期一位社區開發者在 Internet Computer 上發布了 Uniswap 前端,以展示傳統 DeFi 解決方案如何完全運行在區塊鏈上。受益于 NNS 提案 #31471,甚至像 Coinbase、Binance 和 Crypto.com 這樣的中心化交易平臺也可以完全上鏈。[2021/11/26 7:11:39]
背景知識
前文提到,我們首先要把項目分解成多個智能合約,這是出于技術和精神兩個層面的限制要求。
比原鏈發布延遲滿足智能合約鎖倉計劃:比原鏈今公布鎖倉計劃,對基金會持有的4.2億BTM進行延遲滿足智能合約鎖倉處理,共鎖倉11年,分4個時間段釋放。據悉,比原鏈在2019年推出“流浪地球”計劃,計劃分“剎車時代、逃逸時代、先流浪時代、后流浪時代、新太陽時代”五個階段推進,第一階段“剎車時代”目標已經在2019年順利完成,當前處于第二階段“逃逸時代”,本次鎖倉計劃將從逃逸時代開始直到新太陽時代終止。經在2019年順利完成,當前處于第二階段“逃逸時代”[2020/7/17]
技術限制源于2016年11月發生的一項改變。當時,Ethereum主網實施了SpuriousDragon硬分叉。此舉將已部署的智能合約的大小限制在24576字節以內。
在沒有此項限制時,攻擊者可以在部署智能合約期間進行無限次的計算。此舉雖然不會對存儲在區塊鏈中的數據產生任何影響,但卻是一種針對Ethereum節點的拒絕服務攻擊。
由于當時的區塊gas限制無法支持這種規模的智能合約,所以這項改變當時并沒有受到重視:
“該解決方案為儲存在區塊鏈中的對象大小設置了最高上限,并使其略高于當前gas上限值”
聲音 | BM:ETH、TRON等智能合同平臺都應參照EOSIO身份認證器應用:據鯨交所消息,5月30日,BM連發推文表示,ETH、TRON和其他智能合同平臺都應參照EOSIO認證器應用(即B1錢包的代碼)。用戶賬戶安全取決于對簽名內容和可視圖標的理解,這比密鑰的安全更重要。如果用戶被誘騙進行交易簽名,那么用戶的私鑰是否安全就變得不關緊要了。圖標和通俗易懂的說明對于用戶進行正確簽名是有必要的,而盲目的簽名是可怕的。[2019/5/30]
在DeFi大爆炸之前,我們為Yield編寫了2000行智能合約代碼,部署后的代碼加起來接近100KB,審核員完全沒有覺得項目過于復雜。
但我們仍需把解決方案分解為多個合約。
復雜性和面向對象程序設計
將區塊鏈應用分解為多個智能合約的第二個原因與技術限制無關,而是與“人”的精神限制有關。
在特定的時間內,我們大腦中能儲存的信息量是一定的。相比于處理單一且涉及面廣的大問題,人們在處理多個相互間存在關聯的小問題時表現會更好。
實際上,Object-OrientedProgramming可以提高軟件的復雜性。通過定義代表某種概念的“對象”,并將變量和函數看作該對象的屬性,開發人員能夠在心里更好地描畫和理解需要解決的問題。
獨家 | 昨日新增188個代幣型智能合約 FoMoKiller long風險最高 ?:第三方大數據評級機構RatingToken最新數據顯示,2018年8月19日全球共新增1375個合約地址,其中188個為代幣型智能合約。
?
在RatingToken同時發布的“新增代幣型智能合約風險榜”中,FoMoKiller long(FoMoKiller)、Okami PK Soon(tm) Edition(Okami)和Partners.RPK.Capital_USD_2.0(RPK_USD_2.0)風險排名前三,其中FoMoKiller long(FoMoKiller)檢測得分1.5,存在22個安全風險。此外,此風險榜TOP10的其它合約還有BitLion Token(BOON)、DECENTURION Classic(DCNT)、Render It Coin(RNDIT)、Moonlight Token(LX)、zxl(朱學龍)、Yan Bo Coin(YBC)和
Scepter Advanced Blockchain Enterprise Rewards(SABER)。如需查看更多智能合約檢測結果,請點擊原文鏈接。[2018/8/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中使用了兩個訪問層以及函數限制以外,二者的實現方式是一樣的。可見,合約調配是一種一經實現即可重復使用的常見模式。
從審核員和用戶的角度出發,我們還開發了一個收集區塊鏈事件,并展現合約所有權和調配圖的腳本。
總結
智能合同的調配是一個在很多項目中反復出現的問題,在遇到此類問題,大家往往都會從零開始進行調配。但其實此類問題的解決方案都是十分類似的。
我們可以遵循以上標準來實現安全有效的調配,希望大家可以深入理解文中的示例原理,并形成適合自己的解決方案。
波瀾壯闊,日行千里。加密世界發展與變化速度極快,踏上加密世界浪潮的旅程充滿未知,「眾望所歸」到「眾矢之的」的轉變往往僅只有一步之遙.
1900/1/1 0:00:00原文:https://github.com/paritytech/polkadot/blob/master/roadmap/parachains.
1900/1/1 0:00:00本文將介紹一下Balancer的流動性引導池。智能池是屬于智能合約的受控、專用池,該智能合約可以構建多種類的任意邏輯.
1900/1/1 0:00:009月6日,南京市鼓樓區“區塊鏈八條”正式發布。根據政策,工商注冊地、稅務征管關系及統計關系在鼓樓區塊鏈先導區范圍內,并且滿足其他規定條件的區塊鏈企業或者機構,將能夠在多個方面享受到鼓樓區的扶持和.
1900/1/1 0:00:009月5日,“2020CHAINSIGHTS全球區塊鏈與數字金融峰會”在海南舉行,我受邀出席峰會,發表了主旨演講《DeFi:開啟可編程金融新紀元》.
1900/1/1 0:00:009月16日,重慶渝中區,來自全國各地的專家學者齊聚一堂討論區塊鏈。中國科學院院士陳純、中國信通院院長劉多等業內外專家學者發表演講。會上,重慶市數字經濟產業園正式揭牌,幾十家企業現場簽約.
1900/1/1 0:00:00