買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > ICP > Info

RAC:DeFi 合約安全的新模式:關注協議不變性_DEF

Author:

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

不要只為特定的函數寫 require 語句;為你的協議寫 require 語句。函數遵循檢查 (requirements)- 生效 (Effects)- 交互 (INteractions)+ 協議不變性 (Invariants) 或 FREI-PI 模式可以幫助你的合約更加安全,因為它迫使開發人員除了關注函數級別的安全之外,還要關注協議級別的不變性。

2023 年 3 月,Euler Finance 被黑客攻擊,損失 2 億美元。Euler Finance 是一個借貸市場,用戶可以存入抵押品并以其為抵押進行借款。它有一些獨特的功能,實際上他們是一個可與 Compound Finance 和 Aave 媲美的借貸市場。

你可以閱讀關于這個黑客的事后總結。它的主要內容是在一個特定的函數中缺少健康檢查,允許用戶打破借貸市場的基礎不變性。

大多數 DeFi 協議的核心都有一個不變性,即程序狀態的一個屬性,它被期望永遠是真的。也可能有多個不變性,但一般來說,它們是圍繞著一個核心思想建立的。這里是一些例子:

如在借貸市場中:用戶不能采取任何行動,使任何賬戶處于不安全或更不安全的抵押品倉位(「更不安全」意味著它已經低于最低安全閾值,因此不能進一步提取)。

AMM DEX 中:x * y == k,x + y == k,等等。

流動性挖礦抵押中:用戶應該只能提取他們存入的抵押代幣數量。

Euler Finance 出錯的地方不一定是他們增加了功能,沒有寫測試,或者沒有遵循傳統的最佳實踐。他們對升級進行了審計,并有測試,但還是被漏掉了。核心問題是他們忘記了借貸市場的核心不變性(審計人員也是如此!)。

DeFi貸款協MYSO Finance宣布完成240萬美元種子輪融資:金色財經消息,MYSO Finance 宣布完成 240 萬美元種子輪融資,Huobi 、Nexo、Wintermute、GSR、Hashkey、CMT Digital、Nothing Research、Caballeros Capital等機構參與投資,團隊將利用這筆資金加速開發 MYSO 的零清算貸款協議“IKARUS”,允許用戶在沒有清算風險的情況下借款,同時為流動性提供者 (LP) 提供收益來承擔這種風險。[2022/4/30 2:41:12]

注:我不是要挑刺 Euler,他們是一個有才華的團隊,但這是一個最近的案例。

你可能在想「嗯,沒錯。這就是他們被黑的原因;他們忘了一個 require 語句」。是也不是。

但為什么他們會忘記 require 語句呢?

推薦給 solidity 開發者使用的一個常見模式是 Checks-Effects-Interactions(檢查 - 生效 - 交互)模式。它對于消除與重入有關的錯誤非常有用,而且通常會增加開發人員去執行輸入驗證的的數量。_但是_,它容易出現只見樹木不見森林的問題。

它教給開發人員的是:「首先我寫我的 require 語句,然后我做生效,然后也許我做任何交互,然后我就安全了」。問題是,通常情況下,它變成了檢查和效果的混合體 -- 不錯吧?交互仍然是最后的,所以重入性不是一個問題。但它迫使用戶關注更具體的功能和個別的狀態轉換,而不是全局的、更廣泛的背景。這就是說:

DeFi協議Delta One籌集910萬美元,Alameda Research等領投:4月19日消息,基于Solana的去中心化金融(DeFi)協議Delta One籌集了910萬美元的種子輪融資,由Alameda Research和DeFi開發商集體Ship Capital領投,本輪融資的其他參與者包括SolanaVentures、Solana聯合創始人RajGokal、投資公司Electric Capital和Alley Corp以及Race Capital聯合創始人Chris McCann和Alfred Chuang。資金將用于協議的核心開發和生態系統擴展。

據悉,Delta One由Paul和DJ Sengh兄弟于2021年10月在Solana Ignition Hackathon期間創立。Delta One協議為用戶提供了一種自動化、低風險的方式,通過投資一籃子或一攬子加密期權來賺取收益,這是一種衍生品,讓購買者有權以設定的價格購買或出售標的資產日期。(coindesk)[2022/4/20 14:34:34]

僅僅是檢查 - 生效 - 交互模式就會使開發者忘記他們協議的核心不變性。

對于開發者來說,它仍然是一個出色的模式,但總是應該確保(服務于)協議的不變性(說真的,你還是應該使用 CEI!)。

以 dYdX 的 SoloMargin 合約(源碼)中的這個片段為例,它是借貸市場和杠桿交易合約。這是一個很好的例子,我稱之為 功能檢查 - 生效 - 交互 + 協議不變性(Function Requirements-Effects-Interactions + Protocol Invariants )模式,或 FREI-PI 模式。

波卡DeFi項目Acala將集成Chainlink喂價:金色財經報道,波卡DeFi項目Acala宣布將集成Chainlink喂價。Acala透露,已經與Chainlink團隊合作進行了一段時間的整合。Chainlink Oracle Pallet的推出推動了這一過程。據悉,Chainlink Oracle Pallet是一種即插即用的解決方案,于4月在Polkadot生態系統中可用。Acala還將Chainlink喂價集成到其在Kusama上的姊妹網絡Karura中。[2021/9/10 23:14:01]

因此,我相信這是早期借貸市場中唯一沒有任何市場相關漏洞的借貸市場。Compound 和 Aave 沒有直接出現問題,但他們的分叉代碼有關于過問題。而 bZx 則被黑了多次。

檢查下面的代碼,注意以下的抽象概念:

檢查輸入參數(_verifyInputs)。

動作(數據轉換,狀態操作)

檢查最終狀態(_verifyFinalState)。

仍然執行常用的 Checks-Effects-Interactions。值得注意的是,帶有額外 檢查的 檢查 - 生效 - 交互并不等同于 FREI-PI-- 它們是相似的,但服務于根本不同的目標。因此,開發者應該認為它們是不同的:FREI-PI 作為一個更高的抽象,旨在實現協議安全,而 CEI 旨在實現功能安全。

比特幣基金會主席Brock Pierce:對DeFi隱私持謹慎樂觀態度:比特幣基金會主席Brock Pierce分享對DeFi的看法,他表示相信DeFi的整體增長和趨勢是不可阻擋的。Brock在接受Crypto AM采訪時說,去中心化金融缺乏隱私的問題很早就被提出來了,盡管對此有所擔憂,但DeFi空間仍然從一年前的接近零增長到今天的超過500億,并且我預計它會繼續增長。“其中一些風險包括,雖然一些地址可能是匿名的,但個人和實體仍然能夠跟蹤和識別擁有某些地址和錢包的個人和機構,以及他們在DeFi中的行為。”[2021/8/21 22:28:14]

這個合約的結構真的很有趣 -- 用戶可以在一連串的行動中執行他們想要的行動(存款、借款、交易、轉讓、清算等)。想存入 3 個不同的代幣,提取第 4 個,并清算一個賬戶?這是一個單一的調用。

這就是 FREI-PI 的力量:用戶可以在協議內做任何他們想做的事情,只要核心借貸市場的不變性在調用結束時成立:一個用戶不能采取任何行動,將任何賬戶置于不安全或更不安全的抵押品倉位。對于這個合約,這是在_verifyFinalState 中執行的,檢查每個受影響賬戶的抵押情況,確保協議比交易開始時更好。

該函數中包括一些額外的不變性,這些不變性是對核心不變性的補充,有助于實現關閉市場等附屬功能,但真正保持協議安全的是核心檢查。

FREI-PI 的另一個問題是以實體為中心的概念。以一個借貸市場和假定的核心不變性為例:

聲音 | 姜富耀:BTC將取代ETH成為被鎖定在DeFi中的主力軍:1月8日20:00,張力紅人說對話Polkadot早期社區成員姜富耀,金色財經戰略支持直播。姜富耀指出:BTC將取代ETH成為被鎖定在DeFi中的主力軍。目前,BTC作為BitMEX等衍生品市場的主要抵押品,其年交易額已超過1萬億美元。市場上更多的頭部資本都聚集在BTC市場,BTC 流動性是ETH的3倍,市值是ETH的8倍,歷史上的波動性遠小于ETH。這樣看來,若是開放 BTC 抵押,DeFi 市場將會引來前所未有的繁榮。[2020/1/8]

從技術上講,這不是唯一的不變性,但它是針對用戶實體的(它仍然是核心協議不變性,通常用戶不變性是核心協議不變性)。借貸市場通常也會有 2 個額外的實體:

預言機

管理 / 治理

對于預言機,以 1.3 億美元的 Cream Finance 漏洞為例。預言機實體的核心不變性:

事實證明,用 FREI-PI 在運行時驗證預言機是很棘手的,但是可以做到,需要一些預先考慮。一般來說,Chainlink 是一個很好的選擇,可以主要依靠,滿足大部分的不變性。在極少數的操縱或意外情況下,有一些保障措施可能是有益的,這些保障措施可以減少靈活性,而有利于準確性(比如檢查最后知道的值是否比當前值大百分數百)。同樣,dYdX 的 SoloMargin 系統在他們的 DAI 預言機方面做得很好, 這里是代碼(如果你看不出來,我認為這是歷史上寫得最好的復雜智能合約系統)。

關于預言機評估的更多內容,以及突出 Euler 團隊的能力,他們寫了一篇關于計算操縱 Uniswap V3 TWAP 預言機價格的好文章。

為管理實體創建不變性是最棘手。這主要是由于他們的大部分作用是去改變現有的其他不變性。也就是說,如果你能避免使用管理角色,你應該這樣做。

從根本上說,一個管理實體的核心不變性可能是:

解讀:管理員可以做一些應該結果不會破壞不變性的事情,除非他們為了保護用戶的資金而大幅改變事情(例如:將資產轉移到救援合約中是對不變性的移除)。管理員也應該被認為是一個用戶,所以核心借貸市場的用戶不變性也應該對他們成立(意味著他們不能對其他用戶或協議進行攻擊)。目前,一些管理員的行為不可能在運行時通過 FREI-PI 進行驗證,但如果在其他地方有足夠強大的不變性,希望大多數問題可以得到緩解。我說目前,因為人們可以想象使用 zk 證明系統可能會檢查合約的整個狀態(每個用戶、每個預言機等)。

作為一個管理員破壞不變性的例子,以發生在 2022 年 8 月的 borked the cETH market 的 Compound 治理行動為例。從根本上說,這次升級破壞了 Oracle 的不變性:Oracle 提供準確和 ( 相對 ) 實時的信息。由于功能的缺失,Oracle 可以提供不對的信息。一個運行時的 FREI-PI 驗證,檢查受影響的 Oracle 能否提供實時信息,可以防止升級的發生這樣的情況。這可以納入_setPriceOracle,檢查所有資產是否收到實時信息。FREI-PI 對管理角色的好處是,管理角色對價格相對不敏感 ( 或者至少應該是這樣 ),所以更多的 Gas 使用量不應該是個大問題。

因此,雖然最重要的不變性是協議的核心不變性,但也可以有一些以實體為中心的不變性,這些不變性必須為核心不變性所持有。但是,最簡單(和最小)的不變性集可能是最安全的。簡單就是好的一個光輝榜樣是 Uniswap ...

AMMs 可以有任何 DeFi 原語中最簡單的基本不變性:tokenBalanceX * tokenBalanceY == k(例如常量乘積模型)。Uniswap V2 中的每個函數都是圍繞這個簡單的不變性:

Mint:添加到 k 中

Burn:從 k 中減去

Swap:轉移 x 和 y,不動 k。

Skim:重新調整 tokenBalanceX * tokenBalanceY,使其等于 k,移除多余的部分。

Uniswap V2 的安全秘訣:核心是一個簡單的不變性,所有功能都是為它服務的。唯一可以爭論的其他實體是治理,它可以打開一個收費開關,這并不觸及核心不變性,只是代幣余額所有權的分配。他們的安全聲明中的這種簡單性是 Uniswap 從未被黑過的原因。簡單其實并不是對 Uniswap 的智能合約的優秀開發者的輕視,相反需要出色的工程師來找到簡單性。

我的 Twitter 上已經充滿了優化論者關于這些檢查是不必要的和低效的恐怖和痛苦的尖叫聲。關于這個問題有兩點:

你知道還有什么是低效的嗎?不得不通過 etherscan 向~~Laurence~~朝鮮黑客發送信息,使用 ETH 轉賬,并威脅說 FBI 會介入。

你可能已經從存儲中加載了所有需要的數據,所以在調用結束時,只是對這些熱數據加一點點 require 檢查。你想讓你的協議貴那么一點忽略不計的費用,還是讓它死于非命?

如果成本過高,請重新考慮核心變量,并嘗試簡化。

作為一個開發者,要在開發過程中盡早地定義并表達出核心不變性。作為一個具體的建議:讓自己寫的第一個函數是_verifyAfter,在每次調用你的合約后驗證你的不變性。把它放在你的合約中,并在那里進行部署。用更廣泛的不變性測試來補充這個不變性(以及其他以實體為中心的不變性),這些測試在部署前就被檢查過了(Foundry guide)。

瞬時存儲開啟了一些有趣的優化和改進,Nascent 將對此進行實驗 -- 我建議你考慮如何將瞬時存儲作為一種工具,以實現更好的跨調用上下文更安全。

在這篇文章中,沒有花太多時間在 FREI-PI 模式的介紹輸入驗證,但這也是非常重要的。定義輸入的邊界是一項具有挑戰性的任務,以避免溢出和類似情況。可以考慮查看并關注我們的工具的進展:pyrometer(目前處于測試階段,請給我們一個星星)。它可以深入了解并幫助找到你可能沒有進行輸入驗證的地方。

在任何朗朗上口的縮寫(FREI-PI)或模式名稱之上,真正重要的一點是:

在你的協議的核心不變性中找到簡單性。并拼命工作以確保它永遠不會被破壞(或在它被破壞之前就被捕獲)。

登鏈社區

個人專欄

閱讀更多

金色早8點

Odaily星球日報

金色財經

Block unicorn

DAOrayaki

曼昆區塊鏈法律

Tags:DEFIDEFEFIRACStingDefiPieDAO DEFIgamefi幣種KRAC幣

ICP
加密貨幣:Binance會和SEC和解嗎?看看歷史上被SEC罰過的知名項目們_NAN

6月5日,Binance 及其 CEO「CZ」因涉嫌違反證券交易規則被美國證券交易委員會(以下簡稱「SEC」或「委員會」)起訴.

1900/1/1 0:00:00
USD:最硬核的穩定幣?關于crvUSD信息的最全整理_VUSD幣

原文作者:Poopman,加密研究員 原文編譯:Leo,BlockBeatscrvUSD 于一個半月前推出,關于其討論和文章可能很多.

1900/1/1 0:00:00
MAS:去了一趟非洲 我現在相信區塊鏈的機會在印太地區_區塊鏈存證是什么意思

6 月 20 日至 24 日,我受新加坡金管局(MAS)的邀請參加了在盧旺達首都基加利舉辦的首屆“普惠金融科技論壇”,并且在往返途中在新加坡和迪拜停留數日,前后整整兩周時間.

1900/1/1 0:00:00
CYB:金色早報 | 香港金管局與阿聯酋央行同意就金融基建、虛擬資產監管和發展等加強合作_EOS

▌香港金管局與阿聯酋央行同意就金融基建、虛擬資產監管和發展等加強合作香港金管局發布新聞稿表示,阿拉伯聯合酋長國中央銀行(阿聯酋央行)與香港金融管理局(金管局)于 5 月 29 日(阿布扎比時間).

1900/1/1 0:00:00
FER:從FERC-20的鏈上數據 看新概念在當前市場的活躍度曲線_REEFER

作者:@DodoResearch,編譯:Odaily星球日報小飛上周,@jackygu 2020 在以太坊上推出了公平概念的 FERC 20 .

1900/1/1 0:00:00
PRO:Opside ZK-PoW V2 版本:多礦工場景下 ZKP計算可縮短至不到一分鐘_Proof

Opside 是一個去中心化的ZK-RaaS (ZK-Rollup as a Service)平臺,也是業內領先的ZKP(零知識證明)挖礦網絡.

1900/1/1 0:00:00
ads