【區塊鏈安全 | 第五篇】DeFi概念詳解

文章目錄

    • DeFi
      • 1. DeFi 生態概覽
      • 2. 去中心化交易所(DEX)
        • 2.1 AMM(自動做市商)模型
        • 2.2 訂單簿模式(現貨交易)
      • 3. 借貸協議
        • 3.1 Aave
        • 3.2 使用閃電貸(Flash Loan)
      • 4. 穩定幣(Stablecoins)
      • 5. DeFi 安全
        • 5.1 重入攻擊(Reentrancy Attack)
        • 5.2 價格操縱(Oracle Manipulation)
        • 5.3 智能合約漏洞

在這里插入圖片描述

DeFi

DeFi 是指基于區塊鏈的去中心化金融應用,允許用戶無需中介即可進行交易、借貸、衍生品交易等金融活動。

1. DeFi 生態概覽

DeFi 的核心組成部分
去中心化交易所(DEX):如 Uniswap、Curve、Balancer
借貸協議:如 Aave、Compound、MakerDAO
穩定幣:如 USDT、USDC、DAI
衍生品協議:如 dYdX、Synthetix
收益聚合器(Yield Aggregator):如 Yearn Finance
保險協議:如 Nexus Mutual、InsurAce

2. 去中心化交易所(DEX)

去中心化交易所(DEX) 允許用戶無需中介即可交易代幣,分為兩種主要模型。

  • AMM(自動做市商)模型
  • 訂單簿模式
2.1 AMM(自動做市商)模型

代表協議:Uniswap、Curve、Balancer

基本原理:依賴于流動性池和恒定乘積公式來計算交易的價格,并且通過交易費用激勵流動性提供者。

核心機制
1.流動性池(Liquidity Pool):用戶存入兩種資產(如 ETH/USDC),作為流動性提供者(LP)
2.定價機制:采用恒定乘積公式(如 Uniswap 的 x * y = k)
3.交易費用:LP 賺取交易手續費(如 Uniswap V2 是 0.3%)
4.無常損失(Impermanent Loss):由于價格波動,LP 可能遭受損失

假設你有 ETH,想要兌換成 USDC,使用 Uniswap 進行交易。讓我們看看交易是如何實現的。

1.Uniswap 上的每個交易對(如 ETH/USDC)都有一個流動性池,流動性池由流動性提供者(LP) 提供 ETH 和 USDC。假設當前池子中的流動性是ETH: 1000 ETH;USDC: 2,000,000 USDC,這些流動性資產的比例決定了交易價格。

2.假設你要用 10 ETH 來換取 USDC。根據 Uniswap 使用的 恒定乘積公式(x * y = k),其中 x 是 ETH 數量,y 是 USDC 數量,k 是常數,代表流動性池的總價值(k = 1000 ETH * 2,000,000 USDC = 2,000,000,000)

3.在交易中,你提供 10 ETH(即你想要兌換的 ETH 數量),因此你從池子中獲得相應的 USDC。

4.具體的計算方式是什么呢?由于新的流動性池狀態必須遵循恒定乘積公式,即:

(1000+10)?(2,000,000?x)=2,000,000,000

通過解方程可以算出你將獲得的 USDC 數量,即 x=19801.98。

5.由于你交易的是流動性池中的資產,因此交易的數量會影響價格。交易規模越大,流動性池中的資產變化越大,交易價格越不穩定。這就是所謂的滑點(Slippage)。

如果你交易了 10 ETH,但流動性池中的 ETH 和 USDC 比例突然發生變化,可能導致你收到的 USDC 少于預期。

6.每筆交易都會有交易費用,通常是 0.3%,這個費用會被分配給流動性提供者(LP)。例如,交易費用是:10 ETH?0.3%=0.03 ETH,這個費用不會影響你從流動性池中兌換到的實際金額,但它會進入池子并作為獎勵分配給 LP。

7.假設存在滑點,那么總流程是:

  • 一開始流動性池中的資產為 ETH: 1000 ETH;USDC: 2,000,000 USDC
  • 你進行了交易,但產生了滑點。
  • 你的池子中 10 ETH 已被扣除,并且由于你交易的滑點,你預期得到的 19801.98 USDC 中扣除了 3,000 USDC,所以你最終得到 16901.98 USDC
  • 池子中的資產變成ETH: 1010 ETH,USDC: 2,000,000 - 16901.98 USDC
  • 每筆交易會收取一定的費用(通常 0.3%),交易費用會從你兌換的金額中扣除,作為獎勵分配給 LP。所以實際上你收到的 USDC 更少。
2.2 訂單簿模式(現貨交易)

訂單簿模式的交易通常被稱為現貨交易(Spot Trading),因為它涉及的是即期交易,也就是交易在即時(或短期內)進行結算。

在 dYdX 或 Loopring 這類去中心化交易所(DEX)中,交易是通過訂單簿來完成的。用戶發布買單(買入某資產的請求)和賣單(賣出某資產的請求),交易所通過撮合買賣雙方的訂單來完成交易。

假設你在 dYdX 或 Loopring 上進行交易,涉及到 ETH/USDC 交易對。讓我們看看交易是如何實現的。

1.你想用 ETH 買入 USDC,并決定以 1 ETH = 2000 USDC 的價格進行購買。
2.你提交一個買入訂單,表示你愿意購買 10 ETH,每個 ETH 的價格是 2000 USDC。
3.市場上有用戶發布了一個賣單,表示他愿意以 1 ETH = 2000 USDC 的價格出售 5 ETH。
4.在訂單簿中,你的買單和賣單會分別列出,形成一個掛單列表:
在這里插入圖片描述
5.dYdX 或 Loopring 將自動將買單和賣單按照價格和時間順序進行匹配。你的買單會與市場上的賣單進行撮合,因為價格一致。
6.由于你的買單數量是 10 ETH,但市場上只有 5 ETH 的賣單,所以你還剩下 5 ETH 的買單沒有被成交,這部分 5 ETH 會繼續掛單在訂單簿上,等待賣單的出現。
7.如果你想盡快成交,通常選擇市場單(Market Order),即以當前的最佳賣單價格買入。若使用限價單(Limit Order),則只有在出現符合你價格的賣單時才能成交。

訂單簿模式的交易需要更高的吞吐量,因為每個交易都需要在鏈上進行撮合和確認。因此一些平臺(如 Loopring)通過 ZK-Rollups 等 Layer 2 技術來提升吞吐量,并減少手續費。

3. 借貸協議

借貸協議允許用戶存入資產賺取利息,或者借入資產并支付利息。

主要協議
1.Aave:支持閃電貸(Flash Loan)、抵押借貸
2.Compound:通過 cToken 機制管理存款和貸款
3.MakerDAO:用于生成去中心化穩定幣 DAI

3.1 Aave

讓我們看看 Aave 的抵押借貸流程。

1.你有 ETH,你希望借取 USDT。

2.你將 10 ETH 存入 Aave 作為抵押品,按照 150% 的抵押率,你能夠借到 6,000 USDT(10 ETH * 150% = 15,000 USDT,抵押率 1:1.5)。

3.你選擇借取 6,000 USDT 并同意支付利息。

4.你的 10 ETH 繼續在 Aave 中作為抵押品,平臺會根據市場情況來確定你需要支付的利率。

5.一段時間后,你將 6,000 USDT 歸還,并支付利息(利率根據借款時長和市場情況浮動)。

6.如果 ETH 的價格下跌,導致抵押率低于 150%,Aave 會啟動清算程序,將你的 ETH 部分或全部出售以償還貸款,避免借款人違約。

因此,為了降低清算風險,你(借款人)可以存入大于借款金額的資產(如 150% 抵押率),這稱為過度抵押(Overcollateralization)。例如,你的 10 ETH 最多可以借取 6,000 USDT,但你抵押 10 ETH 后,只借取 4,000 USDT,此時 ETH 價格下跌,并不會快速導致被清算。

3.2 使用閃電貸(Flash Loan)

閃電貸是一種無需抵押的貸款,通常用于套利或借款還款。整個過程發生在一個區塊內,借款人必須在交易完成前還款。

1.假設你想利用市場的價格差異進行套利。你發現一個交易所的 ETH/USDT 價格比另一個交易所低 1%。

2.你可以在 Aave 上借入 1,000000 USDT 的閃電貸。你不需要提供任何抵押品,因為閃電貸在同一交易內借入并償還。

3.你借到 1,000000 USDT 后,立即在一個 ETH 價格較低的交易所買入1000個 ETH,并在另一個 ETH 價格較高的交易所賣出 1000個 ETH,此時你擁有的 USDT 不止 1,000000 USDT。

4.在同一交易內,你將借來的 USDT 歸還給 Aave,并支付相應的閃電貸費用(通常為 0.09%),假設這里支付了 9000 USDT 的費用。

6.扣除閃電貸費用后,你凈賺差價。

7.此時整個交易在一個區塊內完成,且無需提供任何抵押品。

有沒有可能帶走閃電貸資金呢?
在閃電貸中,智能合約會檢查資金是否已償還,如果未能在同一個區塊內歸還,交易就會回滾,借款、轉賬等所有操作都會被撤銷,USDT 根本不會轉到你的賬戶。

4. 穩定幣(Stablecoins)

穩定幣(Stablecoin)是一種價格穩定的加密貨幣,通常錨定法幣(如 USD)、大宗商品(如黃金)或采用算法調控供應。它的主要作用是降低加密市場的價格波動性,使區塊鏈上的交易更加穩定和實用。

舉個例子,比特幣(BTC)和以太坊(ETH)等加密貨幣價格波動劇烈,一天內可能漲跌 10% 以上,因此投資者和商家很難接受高波動的資產,例如:你今天用 1 BTC 買了一輛車,明天 BTC 價格上漲 20%,相當于虧了 20% 。你接受 BTC 作為工資,但下個月 BTC 價格暴跌,導致你的實際收入減少。

穩定幣主要分為三類:

在這里插入圖片描述

5. DeFi 安全

DeFi(去中心化金融)應用運行在智能合約上,而智能合約的安全性至關重要。常見的 DeFi 漏洞及攻擊都是基于智能合約的。

5.1 重入攻擊(Reentrancy Attack)

攻擊原理
當合約在發送 ETH 或調用外部合約時,沒有先更新自身的狀態,就允許外部合約(攻擊者)重新調用它,從而導致資金被多次提取。

案例:The DAO 攻擊(2016)
1.The DAO 是一個去中心化投資基金,運行在以太坊上。
2.攻擊者發現了一個漏洞,在調用 withdraw(提款)時,合約先發送 ETH,后更新余額。
3.由于攻擊者的合約在收到 ETH 后遞歸調用 The DAO 合約,它可以反復提取資金,直到合約被耗盡。
4.結果導致 360 萬 ETH 被盜,促使以太坊進行了硬分叉,分裂出 ETH 和 ETC。

5.2 價格操縱(Oracle Manipulation)

攻擊原理
1.DeFi 協議依賴預言機(Oracle)提供的資產價格進行清算、借貸、交易等操作。
2.攻擊者通過操縱喂價影響 DeFi 協議的決策,從而獲利。
3.常見手段包括操縱去中心化交易所(DEX)上的價格或惡意控制預言機數據源。

案例:閃電貸價格操縱攻擊(bZx 2020)
bZx 是一個基于以太坊的去中心化借貸協議,2020 年 2 月,該協議遭受了兩次閃電貸攻擊,攻擊者利用Uniswap 價格操縱和bZx 預言機漏洞,成功獲利約 1193 ETH(約 24 萬美元)。

漏洞成因
1.Uniswap 采用 x * y = k 自動做市商(AMM)機制,價格受流動性影響,交易量過大會導致價格劇烈波動。由于 Uniswap 無法抗閃電貸攻擊,攻擊者可以利用瞬時大額交易操縱價格。
2.bZx 的清算邏輯基于預言機價格,若價格突然大跌,借款人的抵押品可能被系統清算。攻擊者可以人為制造價格暴跌,并以低價購買清算資產獲利。

攻擊流程
1.攻擊者使用 dYdX 進行閃電貸:借入 10,000 ETH,5,500 ETH 存入 Compound 作為抵押品。其余 4,500 ETH 用于操縱 Uniswap 價格。
2.在 Uniswap 上,攻擊者用 4,500 ETH 大量買入 wBTC,導致 ETH 價格暴漲。
3.由于 Uniswap 采用自動做市商(AMM),此時 ETH/wBTC 匯率大幅上升。
4.由于 ETH 價格暴漲,bZx 認為用戶的借款不足抵押,自動觸發清算。
5.攻擊者用少量資金低價清算其他用戶的 wBTC 貸款,獲利數千 wBTC。
6.攻擊者將獲利的 wBTC 以高價賣出,換回 ETH。
7.償還 dYdX 的閃電貸,剩余部分為攻擊者利潤。

5.3 智能合約漏洞

舉個整數溢出/下溢(Integer Overflow/Underflow)的案例。

Solidity 低版本(<0.8.0)中,整數計算可能導致溢出,例如 uint256 超出最大值,或 uint8 變成 255 → 0。攻擊者可以通過特殊輸入觸發溢出,導致意外行為,如繞過余額檢查或惡意增發代幣。

漏洞代碼:

contract OverflowExample {uint8 public value = 255;  // uint8 最大值為 255function add() public {value += 1;  // 這里會溢出,value 變為 0}
}

再看一個以太坊 Parity Wallet 漏洞(2017),漏洞的成因是多重簽名錢包的 initOwner() 函數被錯誤地設為公開(public)。攻擊者調用此函數重置管理員權限,隨后提取所有資金。

contract AdminControl {address public admin;function setAdmin(address _admin) public {  admin = _admin;  // 任何人都可以更改 admin,存在風險}
}

常見的 DeFi 代碼審計工具有以下幾種,在后面的文章中會介紹:
1.Slither(靜態分析)
2.MythX(智能合約掃描)
3.CertiK、PeckShield等

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/73920.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/73920.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/73920.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

問題:md文檔轉換word,html,圖片,excel,csv

文章目錄 問題&#xff1a;md文檔轉換word&#xff0c;html&#xff0c;圖片&#xff0c;excel&#xff0c;csv&#xff0c;ppt**主要職責****技能要求****發展方向****學習建議****薪資水平** 方案一&#xff1a;AI Markdown內容轉換工具打開網站md文檔轉換wordmd文檔轉換pdfm…

代碼隨想錄刷題day53|(二叉樹篇)106.從中序與后序遍歷序列構造二叉樹(▲

目錄 一、二叉樹理論知識 二、構造二叉樹思路 2.1 構造二叉樹流程&#xff08;給定中序后序 2.2 整體步驟 2.3 遞歸思路 2.4 給定前序和后序 三、相關算法題目 四、易錯點 一、二叉樹理論知識 詳見&#xff1a;代碼隨想錄刷題day34|&#xff08;二叉樹篇&#xff09;二…

前端知識點---用正則表達式判斷郵箱(javascript)

// 全面的正則&#xff08;兼容大多數情況&#xff09; const emailRegex /^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/;// 或直接使用瀏覽器內置驗證 <input type"email" required>/&#xff1a;正則表達式的起始和結束標志。 ^&#xff1a;匹配字符串的…

PyQt6實例_批量下載pdf工具_界面開發

目錄 前置&#xff1a; 代碼&#xff1a; 視頻&#xff1a; 前置&#xff1a; 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭&#xff0c;放在 【PyQt6實例】 專欄 2 本系列涉及到的PyQt6知識點&#xff1a; 線程池&#xff1a;QThreadPool,QRunnable&#xff1b; 信號…

在word中使用zotero添加參考文獻并附帶超鏈接

一、引言 在寫大論文時&#xff0c;為了避免文中引用與文末參考文獻頻繁對照、修改文中引用順序/引用文獻時手動維護參考文獻耗易出錯&#xff0c;擬在 word 中使用 zotero 插入參考文獻&#xff0c;并為每個參考文獻附加超鏈接&#xff0c;實現交互式閱讀。 版本&#xff1a…

Selenium文件上傳

在 Web 自動化測試中,文件上傳是一項常見的任務。不同的網站和前端技術可能導致上傳方式有所不同,因此需要采用不同的方法進行處理。 方法 1:使用 send_keys() 直接上傳(最常用) 適用場景: 頁面中 有標準的 <input type="file"> 標簽。 不需要彈出 Wind…

線程概念與控制(中)

線程概念與控制&#xff08;上&#xff09;https://blog.csdn.net/Small_entreprene/article/details/146464905?sharetypeblogdetail&sharerId146464905&sharereferPC&sharesourceSmall_entreprene&sharefrommp_from_link我們經過上一篇的學習&#xff0c;接…

【Unity】 鼠標拖動物體移動速度跟不上鼠標,會掉落

錯誤示范&#xff1a; 一開始把移動的代碼寫到update里去了&#xff0c;發現物體老是掉(總之移動非常不流暢&#xff0c;體驗感很差&#xff09; void Update(){Ray ray Camera.main.ScreenPointToRay(Input.mousePosition);if (Physics.Raycast(ray, out RaycastHit hit, M…

MATLAB 控制系統設計與仿真 - 30

用極點配置設計伺服系統 方法2-反饋修正 如果我們想只用前饋校正輸入&#xff0c;從而達到伺服控制的效果&#xff0c;我們需要很精確的知道系統的參數模型&#xff0c;否則系統輸出仍然具有較大的靜態誤差。 但是如果我們在誤差比較器和系統的前饋通道之間插入一個積分器&a…

VMware Windows Tools 存在認證繞過漏洞(CVE-2025-22230)

漏洞概述 博通公司&#xff08;Broadcom&#xff09;近日修復了 VMware Windows Tools 中存在的一個高危認證繞過漏洞&#xff0c;該漏洞編號為 CVE-2025-22230&#xff08;CVSS 評分為 9.8&#xff09;。VMware Windows Tools 是一套實用程序套件&#xff0c;可提升運行在 VM…

羅杰斯特回歸

定義 邏輯回歸其實就是原來的線性回歸加了激活函數&#xff0c;這個函數其實就是sigmoid函數&#xff0c;把一個回歸的連續數值壓縮到了0到1的空間&#xff0c;其實只要有函數能夠滿足把數值壓縮到0,1之間就可以&#xff08;因為0到1之間的數值就是概率值&#xff09; 對于分類…

Java多線程與JConsole實踐:從線程狀態到性能優化!!!

目錄 一、前言二、JConsole 使用教程二、線程的基本狀態2.1新建狀態&#xff08;New&#xff09;2.2就緒狀態&#xff08;Ready&#xff09;2.3運行狀態&#xff08;Running&#xff09;2.4 阻塞狀態&#xff08;Blocked&#xff09;2.5. 等待狀態&#xff08;Waiting&#xff…

基于django優秀少兒圖書推薦網(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 時代在飛速進步&#xff0c;每個行業都在努力發展現在先進技術&#xff0c;通過這些先進的技術來提高自己的水平和優勢&#xff0c;圖書推薦網當然不能排除在外。本次開發的優秀少兒圖書推薦網是在實際應用和軟件工程的開發原理之上&#xff0c;運用Python語言、爬蟲技術…

《網絡管理》實踐環節01:OpenEuler22.03sp4安裝zabbix6.2

蘭生幽谷&#xff0c;不為莫服而不芳&#xff1b; 君子行義&#xff0c;不為莫知而止休。 1 環境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix網絡規劃&#xff08;用你們自己的特征網段規劃&#xff09; 主機名 IP 功能 備注 zbx6svr 19…

Axure項目實戰:智慧城市APP(七)我的、消息(顯示與隱藏交互)

親愛的小伙伴&#xff0c;在您瀏覽之前&#xff0c;煩請關注一下&#xff0c;在此深表感謝&#xff01; 課程主題&#xff1a;智慧城市APP 主要內容&#xff1a;我的、消息、活動模塊頁面 應用場景&#xff1a;消息頁設計、我的頁面設計以及活動頁面設計 案例展示&#xff…

晶晨S905L3A(B)-安卓9.0-開啟ADB和ROOT-支持IPTV6-支持外置游戲系統-支持多種無線芯片-支持救磚-完美通刷線刷固件包

晶晨S905L3A(B)-安卓9.0-開啟ADB和ROOT-支持IPTV6-支持外置游戲系統-支持多種無線芯片-支持救磚-完美通刷線刷固件包 適用型號&#xff1a;M401A、CM311-1a、CM311-1sa、B863AV3.1-M2、B863AV3.2-M、UNT403A、UNT413A、M411A、E900V22C、E900V22D、IP112H等等晶晨S905L3A(B)處…

【免費】2007-2019年各省地方財政科學技術支出數據

2007-2019年各省地方財政科學技術支出數據 1、時間&#xff1a;2007-2019年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;行政區劃代碼、地區、年份、地方財政科學技術支出 4、范圍&#xff1a;31省 5、指標說明&#xff1a;地方財政科學技術支出是指地方…

樹形結構的工具類TreeUtil

這個地方是以null為根節點&#xff0c;相關以null或者0自己在TreeUtil中加代碼&#xff0c;就行 基礎類 package com.jm.common.entity;import lombok.Data;import java.util.ArrayList; import java.util.List;/*** Author:JianWu* Date: 2025/3/26 9:02*/ Data public clas…

視頻聯網平臺智慧運維系統:智能時代的城市視覺中樞

引言&#xff1a;破解視頻運維的"帕累托困境" 在智慧城市與數字化轉型浪潮中&#xff0c;全球視頻監控設備保有量已突破10億臺&#xff0c;日均產生的視頻數據量超過10萬PB。然而&#xff0c;傳統運維模式正面臨三重困境&#xff1a; 海量設備管理失序&#xff1a;…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌套表格拖拽排序

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌…