市值: $2.1293T 1.44%
體積(24小時): $75.2309B -48.28%
恐懼與貪婪指數:

15 - 極度恐懼

  • 市值: $2.1293T 1.44%
  • 體積(24小時): $75.2309B -48.28%
  • 恐懼與貪婪指數:
  • 市值: $2.1293T 1.44%
加密
主題
加密植物
資訊
加密術
影片
頂級加密植物

選擇語言

選擇語言

選擇貨幣

加密
主題
加密植物
資訊
加密術
影片

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.調用函數調用另一個合約的函數,同時轉髮指定數量的以太幣並在被調用合約的上下文中執行代碼。

  1. 它使用被調用者的存儲、代碼和余額,這意味著任何狀態更改都發生在目標合約的範圍內。
  2. 當與編譯時可能不知道其 ABI 的外部合約交互時,通常會使用此方法。
  3. 開發人員必須仔細處理返回數據,因為調用會返回一個指示成功或失敗的布爾值以及可選的返回字節。
  4. 如果不遵循正確的檢查-效果-交互模式,濫用可能會導致重入漏洞。

委託調用

1. delegatecall執行來自不同合約的代碼,但保留調用者的存儲、上下文和余額。

  1. 它通常用於邏輯與數據分離的代理模式,從而實現可升級的合約。
  2. 由於狀態修改會影響調用合約的存儲,因此在代理和實現之間對齊存儲佈局時需要格外小心。
  3. call不同,除非通過其他機制顯式發送,否則在delegatecall期間不會傳輸 Ether。
  4. 安全風險包括惡意實施合約改變關鍵變量,例如代理中的所有權或餘額。

靜態調用

1. staticcall旨在調用不修改區塊鏈狀態的函數。

  1. 任何寫入存儲、發出事件或執行更改狀態的操作的嘗試都將導致調用恢復。
  2. 此功能對於安全地從外部合約讀取數據非常有用,而不會帶來意外副作用的風險。
  3. call一樣,它在目標合約的代碼中運行,但在執行時強制執行只讀模式。
  4. 其主要用例包括查詢代幣餘額、檢查配額或從第三方合約檢索不可變值。

常見問題

如果委託調用針對存儲佈局不匹配的合約,會發生什麼情況?如果調用合約中的存儲槽與被調用合約中的邏輯所期望的存儲槽不一致,則變量可能會被錯誤地覆蓋。例如,存儲在一個槽中的地址可能會被解釋為 uint256,從而導致數據損壞或未經授權的訪問。

staticcall可以用來與payable函數交互嗎?是的, staticcall可以針對應付函數,只要它們實際上不修改狀態。然而,通過staticcall發送 Ether 是多餘的,因為值傳輸本質上涉及狀態更改,並且會導致調用失敗。

為什麼在某些情況下 call 被認為比 staticcall 風險更大?由於調用允許狀態更改和以太傳輸,因此它打開了重入攻擊等攻擊向量。如果沒有嚴格的輸入驗證和控制流管理,外部合約可能會在回調期間遞歸地耗盡資金。

delegatecall 是否兼容所有類型的合約升級?雖然delegatecall可以實現可升級性,但它需要仔細的設計。存儲衝突、函數選擇器衝突和初始化問題可能會破壞功能。透明代理和 UUPS 模式有助於減輕這些風險,但需要嚴格的測試和審核。

免責聲明:info@kdj.com

所提供的資訊並非交易建議。 kDJ.com對任何基於本文提供的資訊進行的投資不承擔任何責任。加密貨幣波動性較大,建議您充分研究後謹慎投資!

如果您認為本網站使用的內容侵犯了您的版權,請立即聯絡我們(info@kdj.com),我們將及時刪除。

相關知識

在Bybit上進行BTC交易如何選擇線性永續合約和反向永續合約?

在Bybit上進行BTC交易如何選擇線性永續合約和反向永續合約?

2026-06-06 02:54:55

合約結算機制1. Bybit的線性永續合約以USDT結算,這意味著所有盈虧計算、保證金要求和清算門檻均以穩定幣單位計價。 2.反向永續合約以BTC本身結算,因此每筆交易都會直接影響交易者的BTC餘額-收益會增加BTC持有量,而損失會減少BTC持有量。 3. 反向合約的定價引擎使用 BTC/USDT ...

如何辨識避免停損、欺騙等期貨市場操弄行為?

如何辨識避免停損、欺騙等期貨市場操弄行為?

2026-06-07 14:20:10

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...

如何在Bybit上設定風險管理規則來限制我的每日最大損失?

如何在Bybit上設定風險管理規則來限制我的每日最大損失?

2026-06-04 16:40:15

帳戶級損失限額配置1. 使用雙重認證透過網路或行動應用程式登入您的 Bybit 帳戶。 2. 導覽至「資產」部分,然後從左側選單中選擇「風險管理」。 3. 選擇「每日損失限制」並將該功能切換為「開」以啟動控制。 4. 輸入代表目前交易日 USDT 最大允許淨虧損的數值。 5. 使用您的電子郵件驗證碼...

如何在幣安上啟用投資組合保證金模式以降低我的保證金要求?

如何在幣安上啟用投資組合保證金模式以降低我的保證金要求?

2026-06-05 04:59:43

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少每個區塊新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下一次減少將使其達到 3.1...

如何將我的未平倉期貨部位從幣安遷移到Bybit而不平倉?

如何將我的未平倉期貨部位從幣安遷移到Bybit而不平倉?

2026-06-04 03:59:47

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...

如何處理美國加密貨幣期貨交易利潤的稅務影響?

如何處理美國加密貨幣期貨交易利潤的稅務影響?

2026-05-29 18:19:59

Bitcoin 減半機制1. Bitcoin 的協議強制規定 2,100 萬枚代幣的固定供應上限,並透過區塊獎勵引入新單位。 2. 每 21 萬個區塊(大約每四年)區塊獎勵就會減少一半,這個過程稱為減半。 3. 最近一次減半發生在 2024 年 4 月,每個區塊的獎勵從 6.25 BTC 減少到3....

在Bybit上進行BTC交易如何選擇線性永續合約和反向永續合約?

在Bybit上進行BTC交易如何選擇線性永續合約和反向永續合約?

2026-06-06 02:54:55

合約結算機制1. Bybit的線性永續合約以USDT結算,這意味著所有盈虧計算、保證金要求和清算門檻均以穩定幣單位計價。 2.反向永續合約以BTC本身結算,因此每筆交易都會直接影響交易者的BTC餘額-收益會增加BTC持有量,而損失會減少BTC持有量。 3. 反向合約的定價引擎使用 BTC/USDT ...

如何辨識避免停損、欺騙等期貨市場操弄行為?

如何辨識避免停損、欺騙等期貨市場操弄行為?

2026-06-07 14:20:10

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...

如何在Bybit上設定風險管理規則來限制我的每日最大損失?

如何在Bybit上設定風險管理規則來限制我的每日最大損失?

2026-06-04 16:40:15

帳戶級損失限額配置1. 使用雙重認證透過網路或行動應用程式登入您的 Bybit 帳戶。 2. 導覽至「資產」部分,然後從左側選單中選擇「風險管理」。 3. 選擇「每日損失限制」並將該功能切換為「開」以啟動控制。 4. 輸入代表目前交易日 USDT 最大允許淨虧損的數值。 5. 使用您的電子郵件驗證碼...

如何在幣安上啟用投資組合保證金模式以降低我的保證金要求?

如何在幣安上啟用投資組合保證金模式以降低我的保證金要求?

2026-06-05 04:59:43

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少每個區塊新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下一次減少將使其達到 3.1...

如何將我的未平倉期貨部位從幣安遷移到Bybit而不平倉?

如何將我的未平倉期貨部位從幣安遷移到Bybit而不平倉?

2026-06-04 03:59:47

Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...

如何處理美國加密貨幣期貨交易利潤的稅務影響?

如何處理美國加密貨幣期貨交易利潤的稅務影響?

2026-05-29 18:19:59

Bitcoin 減半機制1. Bitcoin 的協議強制規定 2,100 萬枚代幣的固定供應上限,並透過區塊獎勵引入新單位。 2. 每 21 萬個區塊(大約每四年)區塊獎勵就會減少一半,這個過程稱為減半。 3. 最近一次減半發生在 2024 年 4 月,每個區塊的獎勵從 6.25 BTC 減少到3....

看所有文章

User not found or password invalid

Your input is correct