-
bitcoin $95287.552237 USD
-3.84% -
ethereum $3154.217846 USD
-1.14% -
tether $0.999197 USD
-0.05% -
xrp $2.274321 USD
-1.51% -
bnb $925.256722 USD
0.29% -
solana $141.222065 USD
-2.00% -
usd-coin $0.999854 USD
0.00% -
tron $0.294110 USD
0.88% -
dogecoin $0.160840 USD
-1.89% -
cardano $0.506959 USD
-3.82% -
hyperliquid $37.911624 USD
0.05% -
zcash $648.427736 USD
27.55% -
chainlink $14.104939 USD
-2.38% -
bitcoin-cash $484.928732 USD
-5.04% -
unus-sed-leo $9.199660 USD
0.23%
Solidity 中的 call、delegatecall 和 staticcall 有什麼區別?
Understanding `call`, `delegatecall`, and `staticcall` is crucial for secure Solidity development, as each alters execution context, state access, and security risks differently.
2025/11/14 18:59
了解 call、delegatecall 和 staticcall 之間的區別對於 Solidity 中安全高效的智能合約開發至關重要。這些低級函數允許與其他合約或外部帳戶交互,但在上下文、狀態修改和執行環境方面表現不同。
稱呼
1.調用函數調用另一個合約的函數,同時轉髮指定數量的以太幣並在被調用合約的上下文中執行代碼。
- 它使用被調用者的存儲、代碼和余額,這意味著任何狀態更改都發生在目標合約的範圍內。
- 當與編譯時可能不知道其 ABI 的外部合約交互時,通常會使用此方法。
- 開發人員必須仔細處理返回數據,因為調用會返回一個指示成功或失敗的布爾值以及可選的返回字節。
- 如果不遵循正確的檢查-效果-交互模式,濫用可能會導致重入漏洞。
委託調用
1. delegatecall執行來自不同合約的代碼,但保留調用者的存儲、上下文和余額。
- 它通常用於邏輯與數據分離的代理模式,從而實現可升級的合約。
- 由於狀態修改會影響調用合約的存儲,因此在代理和實現之間對齊存儲佈局時需要格外小心。
- 與call不同,除非通過其他機制顯式發送,否則在delegatecall期間不會傳輸 Ether。
- 安全風險包括惡意實施合約改變關鍵變量,例如代理中的所有權或餘額。
靜態調用
1. staticcall旨在調用不修改區塊鏈狀態的函數。
- 任何寫入存儲、發出事件或執行更改狀態的操作的嘗試都將導致調用恢復。
- 此功能對於安全地從外部合約讀取數據非常有用,而不會帶來意外副作用的風險。
- 與call一樣,它在目標合約的代碼中運行,但在執行時強制執行只讀模式。
- 其主要用例包括查詢代幣餘額、檢查配額或從第三方合約檢索不可變值。
常見問題
如果委託調用針對存儲佈局不匹配的合約,會發生什麼情況?如果調用合約中的存儲槽與被調用合約中的邏輯所期望的存儲槽不一致,則變量可能會被錯誤地覆蓋。例如,存儲在一個槽中的地址可能會被解釋為 uint256,從而導致數據損壞或未經授權的訪問。
staticcall可以用來與payable函數交互嗎?是的, staticcall可以針對應付函數,只要它們實際上不修改狀態。然而,通過staticcall發送 Ether 是多餘的,因為值傳輸本質上涉及狀態更改,並且會導致調用失敗。
為什麼在某些情況下 call 被認為比 staticcall 風險更大?由於調用允許狀態更改和以太傳輸,因此它打開了重入攻擊等攻擊向量。如果沒有嚴格的輸入驗證和控制流管理,外部合約可能會在回調期間遞歸地耗盡資金。
delegatecall 是否兼容所有類型的合約升級?雖然delegatecall可以實現可升級性,但它需要仔細的設計。存儲衝突、函數選擇器衝突和初始化問題可能會破壞功能。透明代理和 UUPS 模式有助於減輕這些風險,但需要嚴格的測試和審核。
免責聲明:info@kdj.com
所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!
如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。
- Aave、穩定幣和 MiCA 批准:歐洲 DeFi 的新時代
- 2025-11-16 07:15:01
- Starknet 的 STRK 代幣抵抗市場流失:TVL 在山寨幣輪換中飆升
- 2025-11-16 07:10:01
- TGL 股票、區塊鍊和 UNIRWA 代幣:最新動態的紐約一分鐘
- 2025-11-16 07:10:01
- BGIN 區塊鏈的狂野之旅:未經審計的報告揭示了戰略轉變
- 2025-11-16 07:05:01
- 比特幣價格下跌:解讀推動下跌的因素
- 2025-11-16 07:05:01
- 加密貨幣過山車:比特幣的下跌、卡爾達諾的崛起和人工智能通配符
- 2025-11-16 07:00: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 在二級市場轉售時都能獲得補償。...
什麼是 DeFi 中的三明治攻擊以及它如何利用交易?
2025-11-15 18:39:40
了解去中心化金融中的三明治攻擊1. 三明治攻擊是一種在依賴自動做市商 (AMM) 的去中心化交易所 (DEX) 中常見的前置運行和後台運行操縱形式。當惡意行為者在受害者的交易之前進行兩筆交易,一筆在受害者的交易之後進行交易時,就會發生這些攻擊,以從目標交易造成的價格影響中獲利。攻擊者有效地將受害者的...
什麼是智能合約中的拒絕服務 (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 在二級市場轉售時都能獲得補償。...
什麼是 DeFi 中的三明治攻擊以及它如何利用交易?
2025-11-15 18:39:40
了解去中心化金融中的三明治攻擊1. 三明治攻擊是一種在依賴自動做市商 (AMM) 的去中心化交易所 (DEX) 中常見的前置運行和後台運行操縱形式。當惡意行為者在受害者的交易之前進行兩筆交易,一筆在受害者的交易之後進行交易時,就會發生這些攻擊,以從目標交易造成的價格影響中獲利。攻擊者有效地將受害者的...
看所有文章














