-
bitcoin $99097.524802 USD
-3.18% -
ethereum $3190.458287 USD
-7.51% -
tether $0.999648 USD
-0.03% -
xrp $2.309178 USD
-4.17% -
bnb $921.186688 USD
-3.96% -
solana $144.106489 USD
-6.12% -
usd-coin $0.999837 USD
-0.02% -
tron $0.291415 USD
-1.32% -
dogecoin $0.163935 USD
-4.54% -
cardano $0.526269 USD
-4.77% -
hyperliquid $37.814277 USD
-2.92% -
bitcoin-cash $509.826264 USD
-1.40% -
chainlink $14.448349 USD
-5.83% -
stellar $0.267630 USD
-4.87% -
unus-sed-leo $9.178879 USD
0.52%
什麼是整數溢出和下溢漏洞以及 SafeMath 如何預防它們?
Integer overflow and underflow in smart contracts can lead to critical vulnerabilities, enabling attackers to manipulate balances and disrupt decentralized economies.
2025/11/14 09:59
了解智能合約中的整數溢出和下溢
1. 在區塊鏈開發中,特別是在用 Solidity 編寫的以太坊智能合約中,算術運算直接對無符號整數執行。當計算超過數據類型可以容納的最大值時,就會發生整數溢出。例如,如果 uint8 變量保存 255 並且加 1,它會迴繞到 0,而不是變成 256。
2. 相反,當減法運算的結果低於最小可表示值時,就會發生整數下溢。如果 uint8 變量包含 0 並減 1,它將迴繞到 255。這些行為源於以太坊虛擬機 (EVM) 中低級算術的工作方式,該虛擬機不會自動檢查此類邊界違規。
3.此類漏洞可能被惡意利用。攻擊者可能會操縱代幣餘額、誇大所有權或觸發意外的邏輯流。 BeautyChain 代幣發生了一個著名的案例,溢出使攻擊者能夠生成大量代幣,從而破壞經濟穩定。
4. 這些缺陷通常潛伏在代碼中,直到被特定輸入觸發。由於它們在正常 EVM 執行下不會產生運行時錯誤,因此它們在基本測試期間保持不可見。它們的存在破壞了去中心化應用程序中金融運營的完整性。
5. 影響不僅限於個人合同。基於溢出或下溢的漏洞可能會削弱用戶信任,導致資金損失,並損害基於受影響協議構建的整個平台的聲譽。
SafeMath 庫在降低風險方面的作用
1. 為了解決這些風險,引入了 SafeMath 庫作為防禦性編程工具。它提供了加法、減法、乘法和除法的包裝函數,其中包括在執行任何操作之前的顯式檢查。
2. 使用 SafeMath.add(a, b) 時,該函數首先驗證總和不會超過給定類型的最大值。如果結果溢出,事務將通過 require 語句恢復,從而阻止執行。
3. 同樣,SafeMath.sub(a, b) 在減法之前確保 a 大於或等於 b。如果不是,操作將恢復,從而阻止可能破壞餘額跟踪或訪問控制機制的潛在下溢情況。
4. SafeMath.mul(a, b) 檢查大數相乘時出現的溢出情況。即使兩個操作數單獨看起來都是安全的,它們的乘積也可能會超出存儲限制,特別是在基於乘法器鑄造代幣等擴展操作中。
5. 通過恢復條件強制算術安全,SafeMath 有效地消除了整個類別的漏洞利用。在幾次引人注目的黑客攻擊強調了金融邏輯中輸入驗證的必要性之後,它的採用變得廣泛。
算術保障措施的整合與演變
1. 開發人員通過導入庫並使用“using”指令將其附加到 uint 類型來集成 SafeMath。應用後,標準操作員將在整個合同範圍內自動替換為已檢查的對應操作員。
2. 雖然 SafeMath 增加的 Gas 開銷最小,但其安全效益遠遠超過成本。每次檢查都會消耗額外的計算量,但這種投資可以防止可能導致不可逆轉的資產損失的災難性故障。
3. 現代版本的 Solidity(從 0.8.0 開始)已將上溢和下溢檢查原生集成到語言中。這意味著算術運算現在默認恢復,無需外部庫,從而減少了對較新代碼庫中 SafeMath 的依賴。
4. 儘管有本機支持,但由於向後兼容性要求,許多遺留系統仍然依賴 SafeMath。作為漏洞評估的一部分,審計員會定期檢查舊合同是否缺少 SafeMath 的使用。
5. 向更安全的違約的過渡反映了更廣泛的行業學習。曾經需要手動干預的內容現在已嵌入到編譯器行為中,說明了現實世界中的漏洞如何推動語言設計和開發人員工具的改進。
正確使用算術保護措施可以防止對余額和津貼等關鍵值進行未經授權的操縱,從而保護去中心化應用程序的經濟模型。
常見問題解答
當 SafeMath 檢查失敗時會發生什麼?當 SafeMath 操作檢測到不安全的算術條件時,它會觸發恢復。這將取消事務並將狀態恢復到執行開始之前的狀態,確保不會永久記錄任何更改。
有符號整數也會發生溢出嗎?是的,有符號整數也容易受到攻擊。根據操作,它們可以溢出到負範圍或下溢到正範圍。儘管在餘額跟踪中不太常見,但它們在控制邏輯和索引方面帶來了類似的風險。
Solidity 0.8+ 中還需要 SafeMath 嗎?在大多數情況下,不會。 Solidity 0.8 及更高版本包含針對所有算術運算的內置溢出和下溢保護。但是,為了明確清晰度或在使用未經檢查的塊時,開發人員仍然可以使用 SafeMath。
SafeMath 是否存在性能成本?每個 SafeMath 函數都包含條件檢查,與原始算術相比,這些條件檢查會消耗額外的 Gas。雖然每次操作的增量很小,但它可能會在涉及循環或頻繁更新的複雜計算中累積。
免責聲明:info@kdj.com
所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!
如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。
- 加密貨幣大屠殺:在狂野的市場中應對拋售和清算
- 2025-11-14 16:50:01
- 穆罕默德·西拉傑 (Mohammed Siraj) 的第一個法術困境:一位印度隊友的批評
- 2025-11-14 14:40:02
- BTC、ETH 和山寨幣精選:探索加密貨幣格局
- 2025-11-14 14:50:01
- 拋硬幣故事:Temba Bavuma 的賭注以及印度與南非的對決
- 2025-11-14 12:50:01
- 舒布曼·吉爾 (Shubman Gill)、WTC 決賽和拋硬幣:紐約人的看法
- 2025-11-14 15:05:01
- Aerodrome 起飛:統一跨鏈以太坊 DeFi 流動性
- 2025-11-14 15:10:02
相關知識
什麼是智能合約中的拒絕服務 (DoS) 攻擊?其常見形式有哪些?
2025-11-10 05:20:08
了解智能合約中的拒絕服務1. 智能合約中的拒絕服務(DoS)攻擊是指惡意行為者阻止合法用戶訪問或使用合約功能的情況。這通常是通過利用允許攻擊者阻止關鍵操作的設計缺陷來實現的。與針對 Web 服務器的傳統 DoS 攻擊不同,基於區塊鏈的 DoS 攻擊利用了智能合約的不可變和透明特性。 2. 這些攻擊的...
交易簽名中使用的加密隨機數是什麼?
2025-11-11 05:59:39
了解區塊鏈交易中的加密隨機數1. 加密隨機數是在區塊鍊網絡中的交易簽名上下文中僅使用一次的隨機數或偽隨機數。其主要功能是確保每筆交易都是唯一的並且不會被惡意行為者重播。如果沒有隨機數,相同的交易可能會被多次提交,從而導致意外的轉賬或餘額差異。 2. 在以太坊等系統中,隨機數直接與發送者的帳戶綁定,並...
Solidity 智能合約中的繼承是如何工作的?
2025-11-11 22:40:12
Solidity 的繼承:構建模塊化智能合約1. Solidity 中的繼承允許一個合約採用另一個合約的屬性和功能,從而實現代碼重用和結構化設計。派生合約可以從基礎合約繼承,獲得對其狀態變量、函數和修飾符的訪問權限,前提是它們沒有標記為私有。該機制支持邏輯的分層組織,減少多個合約之間的冗餘。 2. ...
外部擁有賬戶 (EOA) 和合約賬戶有什麼區別?
2025-11-13 04:00:32
了解外部擁有賬戶 (EOA) 1. 外部擁有的賬戶由私鑰直接控制,這意味著只有該密鑰的持有者才能從該賬戶發起交易。 EOA 沒有任何關聯代碼;它們是用於在區塊鏈上發送和接收交易的簡單地址。這些帳戶通常是在用戶使用 MetaMask 或 Ledger 等工俱生成錢包時創建的,從而產生公共地址和相應的私...
什麼是 ERC-2981 NFT 版稅標準以及它如何運作?
2025-11-13 05:39:54
了解 ERC-2981 NFT 版稅標準1. ERC-2981 標準是一項擬議的以太坊徵求意見稿,它引入了非同質代幣 (NFT) 的版稅機制。與 ERC-721 和 ERC-1155 等早期 NFT 標準缺乏對版稅的內置支持不同,ERC-2981 使創作者每次 NFT 在二級市場轉售時都能獲得補償。...
什麼是最小代理合約 (EIP-1167) 以及它如何在部署時節省 Gas?
2025-11-12 11:39:42
什麼是最小代理合同 (EIP-1167)? 1. 最小代理合約,根據以太坊改進提案 (EIP) 1167 進行標準化,是一種輕量級合約,旨在將調用委託給現有的實施合約。它充當代理,將所有函數調用和交易轉發到主合約,而無需在其內部存儲邏輯。 2. 核心機制依賴於低級SUCCESS、RETURNDATA...
什麼是智能合約中的拒絕服務 (DoS) 攻擊?其常見形式有哪些?
2025-11-10 05:20:08
了解智能合約中的拒絕服務1. 智能合約中的拒絕服務(DoS)攻擊是指惡意行為者阻止合法用戶訪問或使用合約功能的情況。這通常是通過利用允許攻擊者阻止關鍵操作的設計缺陷來實現的。與針對 Web 服務器的傳統 DoS 攻擊不同,基於區塊鏈的 DoS 攻擊利用了智能合約的不可變和透明特性。 2. 這些攻擊的...
交易簽名中使用的加密隨機數是什麼?
2025-11-11 05:59:39
了解區塊鏈交易中的加密隨機數1. 加密隨機數是在區塊鍊網絡中的交易簽名上下文中僅使用一次的隨機數或偽隨機數。其主要功能是確保每筆交易都是唯一的並且不會被惡意行為者重播。如果沒有隨機數,相同的交易可能會被多次提交,從而導致意外的轉賬或餘額差異。 2. 在以太坊等系統中,隨機數直接與發送者的帳戶綁定,並...
Solidity 智能合約中的繼承是如何工作的?
2025-11-11 22:40:12
Solidity 的繼承:構建模塊化智能合約1. Solidity 中的繼承允許一個合約採用另一個合約的屬性和功能,從而實現代碼重用和結構化設計。派生合約可以從基礎合約繼承,獲得對其狀態變量、函數和修飾符的訪問權限,前提是它們沒有標記為私有。該機制支持邏輯的分層組織,減少多個合約之間的冗餘。 2. ...
外部擁有賬戶 (EOA) 和合約賬戶有什麼區別?
2025-11-13 04:00:32
了解外部擁有賬戶 (EOA) 1. 外部擁有的賬戶由私鑰直接控制,這意味著只有該密鑰的持有者才能從該賬戶發起交易。 EOA 沒有任何關聯代碼;它們是用於在區塊鏈上發送和接收交易的簡單地址。這些帳戶通常是在用戶使用 MetaMask 或 Ledger 等工俱生成錢包時創建的,從而產生公共地址和相應的私...
什麼是 ERC-2981 NFT 版稅標準以及它如何運作?
2025-11-13 05:39:54
了解 ERC-2981 NFT 版稅標準1. ERC-2981 標準是一項擬議的以太坊徵求意見稿,它引入了非同質代幣 (NFT) 的版稅機制。與 ERC-721 和 ERC-1155 等早期 NFT 標準缺乏對版稅的內置支持不同,ERC-2981 使創作者每次 NFT 在二級市場轉售時都能獲得補償。...
什麼是最小代理合約 (EIP-1167) 以及它如何在部署時節省 Gas?
2025-11-12 11:39:42
什麼是最小代理合同 (EIP-1167)? 1. 最小代理合約,根據以太坊改進提案 (EIP) 1167 進行標準化,是一種輕量級合約,旨在將調用委託給現有的實施合約。它充當代理,將所有函數調用和交易轉發到主合約,而無需在其內部存儲邏輯。 2. 核心機制依賴於低級SUCCESS、RETURNDATA...
看所有文章














