市值: $2.203T 0.70%
體積(24小時): $36.1009B -32.41%
恐懼與貪婪指數:

39 - 害怕

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

選擇語言

選擇語言

選擇貨幣

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

Solidity 中的公共函數、私有函數、內部函數和外部函數有什麼區別?

Solidity's function visibility specifiers—public, private, internal, and external—control access to functions, impacting security, inheritance, and gas costs in smart contracts.

2025/11/20 22:39

了解 Solidity 中的函數可見性

Solidity 是以太坊智能合約的主要編程語言,通過函數可見性說明符強制執行嚴格的訪問控制。這些說明符決定誰可以調用函數——無論是來自合約內部、派生合約還是外部。四種類型——公共、私有、內部和外部——定義了可訪問性的範圍,並在保護合約邏輯方面發揮著至關重要的作用。

公共職能

1. 公共函數可以從任何地方訪問——合約內部、派生合約以及通過交易或調用外部。

2. 當一個函數被標記為public時,如果它是一個狀態變量或者允許通過合約接口直接調用,Solidity會自動生成一個getter函數。

3. 這些函數成為合約 ABI(應用程序二進制接口)的一部分,使其可由錢包、dApp 和其他智能合約調用。

4. 由於外部調用開銷和數據編碼要求,公共功能的 Gas 成本可能會更高。

5. 常見用例包括面向用戶的功能,例如 ERC-20 合約中的代幣轉移或餘額檢查。

私人職能

1. 私有函數只能在同一個合約內調用,派生合約或外部實體完全無法訪問。

2. 它們非常適合封裝不應公開或覆蓋的敏感邏輯。

3. 由於私有函數不是外部接口的一部分,因此不會出現在 ABI 中。

4. 開發人員經常將它們用於支持公共或內部操作的內部驗證、散列或清理例程。

5. 儘管是私有的,但他們的代碼在鏈上仍然可見;隱私僅指執行訪問,而不是源隱藏。

內部功能

1. 內部函數可以在定義合約和繼承它的任何合約中訪問。

2. 它們不能被外部賬戶或不相關的合約直接調用,即使通過基於地址的交互也是如此。

3. 繼承層次結構嚴重依賴內部函數來共享可重用邏輯,而無需將其公開。

4. 與私有函數一樣,它們不會對合約的外部 ABI 做出貢獻。

5. 示例包括 OpenZeppelin 的 SafeMath 庫中的實用程序函數或跨多個方法強制執行前提條件的修飾符。

外部函數

1. 外部函數只能從合約外部調用——要么通過另一個合約,要么通過 EOA(外部擁有賬戶)。

2. 即使合約本身也必須使用this.functionName()語法來調用自己的外部函數,這會產生消息調用開銷。

3. 當您想要確保函數永遠不會在內部執行時,這種可見性非常有用,從而促進模塊化並減少gas濫用。

4. 外部函數包含在 ABI 中,可以通過交易或合約到合約調用來調用。

5. 它們通常用於大數據輸入,因為 calldata(由外部函數使用)避免了與內部調用相關的內存複製成本。

常見問題解答

可以在派生合約中重寫私有函數嗎?不可以,私有函數不能被派生合約訪問或覆蓋。使用 virtual 和 override 關鍵字只能覆蓋內部和公共函數。

如果我不指定可見性修飾符會發生什麼?如果未指定可見性,Solidity 默認為函數的公開。對於狀態變量,默認為內部變量。出於安全性和清晰度的原因,不鼓勵依賴默認值。

內部函數調用和外部函數調用之間是否存在性能差異?是的。內部調用在相同的合約上下文中執行並使用最少的gas。外部調用,即使是自引用,也需要消息調用,由於堆棧隔離和 ABI 編碼而增加了 Gas 消耗。

外部函數可以修改狀態變量嗎?是的,外部函數可以修改狀態變量,除非受到 view 或 pure 等其他修飾符的限制。他們改變存儲的能力取決於邏輯,而不是可見性。

免責聲明:info@kdj.com

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

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

相關知識

AVAX 期貨保證金要求是如何計算的?

AVAX 期貨保證金要求是如何計算的?

2026-07-23 15:40:03

AVAX 期貨保證金結構1. AVAX期貨保證金由兩個不同的部分組成:初始保證金和維持保證金。這些是根據當前市場價格、波動性、未平倉合約和合約規模即時計算的。 2. 初始保證金作為履約保證金,以彌補短期(通常是一個交易時段)內潛在的不利價格變動。它以頭寸名義價值的百分比表示。 3. 維持保證金設定為...

ADA合約保證金率為何會觸發警告?

ADA合約保證金率為何會觸發警告?

2026-07-22 09:00:26

ADA 合約保證金比率機制1. 各大交易所的ADA永續合約採用根據持倉規模、槓桿水平和當前標記價格即時計算的動態保證金比例。 2. 保證金比率等於(錢包餘額+未實現損益)除以維持保證金要求,以百分比表示。 3. 當該比率低於交易所定義的維持門檻(通常為 5% 至 10%,取決於槓桿率)時,系統將啟動...

ADAUSDT永續合約資金費率是多少?

ADAUSDT永續合約資金費率是多少?

2026-07-24 20:19:46

ADAUSDT永續合約資金費率定義及目的1. ADAUSDT永續合約資金費率是卡爾達諾(ADA)與主要加密貨幣交易所Tether(USDT)衍生性商品部位之間採用的定期費用兌換機制。 2. 作為價格錨定工具,確保ADAUSDT永續合約價格與基礎ADA/USDT現貨指數價格保持緊密一致。 3.與傳統期...

TON永續交易建議使用多少槓桿?

TON永續交易建議使用多少槓桿?

2026-07-27 17:20:10

TON 永續交易機制1. TON永續合約在去中心化和中心化交易所運行,保證金模式各異。 2. 資金費率以小時計算,取決於現貨價格和永續價格之間的基礎,影響多頭/空頭成本動態。 3. 當維持保證金低於交易所定義的門檻(通常以頭寸價值的百分比表示)時,就會觸發強平。 4. TON 區塊鏈的原生速度可實現...

TON 期貨強平價格公式是?

TON 期貨強平價格公式是?

2026-07-23 09:19:45

TON 期貨強平機制1. 當交易者的保證金餘額低於交易所設定的維持保證金要求時,TON 期貨就會被清算。 2.保證金比例低於或等於100%時,系統自動觸發強制平倉,計算公式為(可用保證金/所需保證金)×100%。 3. 強平價格不是固定的,它會隨著市場趨勢、部位規模、槓桿水準和資金費率的調整而動態變...

TONUSDT永續合約資金費率是多少?

TONUSDT永續合約資金費率是多少?

2026-07-27 02:39:50

定義和核心機制1. TONUSDT永續合約資金費率是專門適用於各大交易所交易的TON/USDT永續合約的定期費用兌換機制。 2. 作為價格錨定工具,防止TONUSDT永續市場價格與基礎TON/USDT現貨指數價格持續背離。 3. 費率每 8 小時計算一次,採用綜合平均保費指數和利息成分的公式計算,通...

AVAX 期貨保證金要求是如何計算的?

AVAX 期貨保證金要求是如何計算的?

2026-07-23 15:40:03

AVAX 期貨保證金結構1. AVAX期貨保證金由兩個不同的部分組成:初始保證金和維持保證金。這些是根據當前市場價格、波動性、未平倉合約和合約規模即時計算的。 2. 初始保證金作為履約保證金,以彌補短期(通常是一個交易時段)內潛在的不利價格變動。它以頭寸名義價值的百分比表示。 3. 維持保證金設定為...

ADA合約保證金率為何會觸發警告?

ADA合約保證金率為何會觸發警告?

2026-07-22 09:00:26

ADA 合約保證金比率機制1. 各大交易所的ADA永續合約採用根據持倉規模、槓桿水平和當前標記價格即時計算的動態保證金比例。 2. 保證金比率等於(錢包餘額+未實現損益)除以維持保證金要求,以百分比表示。 3. 當該比率低於交易所定義的維持門檻(通常為 5% 至 10%,取決於槓桿率)時,系統將啟動...

ADAUSDT永續合約資金費率是多少?

ADAUSDT永續合約資金費率是多少?

2026-07-24 20:19:46

ADAUSDT永續合約資金費率定義及目的1. ADAUSDT永續合約資金費率是卡爾達諾(ADA)與主要加密貨幣交易所Tether(USDT)衍生性商品部位之間採用的定期費用兌換機制。 2. 作為價格錨定工具,確保ADAUSDT永續合約價格與基礎ADA/USDT現貨指數價格保持緊密一致。 3.與傳統期...

TON永續交易建議使用多少槓桿?

TON永續交易建議使用多少槓桿?

2026-07-27 17:20:10

TON 永續交易機制1. TON永續合約在去中心化和中心化交易所運行,保證金模式各異。 2. 資金費率以小時計算,取決於現貨價格和永續價格之間的基礎,影響多頭/空頭成本動態。 3. 當維持保證金低於交易所定義的門檻(通常以頭寸價值的百分比表示)時,就會觸發強平。 4. TON 區塊鏈的原生速度可實現...

TON 期貨強平價格公式是?

TON 期貨強平價格公式是?

2026-07-23 09:19:45

TON 期貨強平機制1. 當交易者的保證金餘額低於交易所設定的維持保證金要求時,TON 期貨就會被清算。 2.保證金比例低於或等於100%時,系統自動觸發強制平倉,計算公式為(可用保證金/所需保證金)×100%。 3. 強平價格不是固定的,它會隨著市場趨勢、部位規模、槓桿水準和資金費率的調整而動態變...

TONUSDT永續合約資金費率是多少?

TONUSDT永續合約資金費率是多少?

2026-07-27 02:39:50

定義和核心機制1. TONUSDT永續合約資金費率是專門適用於各大交易所交易的TON/USDT永續合約的定期費用兌換機制。 2. 作為價格錨定工具,防止TONUSDT永續市場價格與基礎TON/USDT現貨指數價格持續背離。 3. 費率每 8 小時計算一次,採用綜合平均保費指數和利息成分的公式計算,通...

看所有文章

User not found or password invalid

Your input is correct