-
bitcoin $77146.398531 USD
-0.23% -
ethereum $2514.088317 USD
-0.37% -
tether $0.999674 USD
0.00% -
bnb $722.500739 USD
-1.34% -
xrp $1.361192 USD
-0.23% -
usd-coin $0.999776 USD
-0.01% -
solana $101.320251 USD
-0.42% -
tron $0.339801 USD
0.16% -
hyperliquid $78.899137 USD
-0.02% -
zcash $1141.149289 USD
-0.18% -
dogecoin $0.084480 USD
-0.05% -
monero $530.834712 USD
-1.66% -
chainlink $11.453705 USD
-0.73% -
unus-sed-leo $9.056535 USD
-0.61% -
cardano $0.207439 USD
-0.31%
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),我們將及時刪除。
- 日本、XRP 與 XRP 大軍:全球金融的一場悄悄革命?
- 2026-09-13 20:35:02
- 未經證實的傳言:Chainlink 鯨魚、10M LINK 和 17% 的修正 – 到底發生了什麼事?
- 2026-09-13 16:55:01
- 卡爾達諾價格預測、分析與變動:因應市場波動與未來潛力
- 2026-09-13 16:25:01
- Revolut 資料外洩:虛假政府要求利用安全漏洞,揭露客戶數據
- 2026-09-13 09:00:02
- Blockstream、Liquid Network、比特幣:「被盜」資金的僵局
- 2026-09-13 08:35:01
- Ripple RLUSD 流通量達到 24 億美元:仔細觀察穩定幣的軌跡
- 2026-09-13 04:50:01
相關知識
如何查看SOL期貨成交量和持倉量?
2026-09-14 00:40:03
存取 SOL 期貨市場數據1. 前往SOL永續合約或季度合約上市的官方交易平台,例如Bybit、OKX或Bitget。 2. 找到SOL/USDT或SOL/USD期貨交易對頁面,切換到「合約概覽」或「市場資料」標籤。 3. 識別標記為「交易量(24 小時)」和「未平倉合約」的即時字段,這兩個字段通常...
如何查看DOGE期貨成交量及持倉量?
2026-09-12 08:39:38
了解 DOGE 期貨交易量1. 期貨交易量是指在特定時間範圍內交易的DOGE份期貨合約的總數,通常以每天或每小時計算。 2. 高成交量通常表示市場參與度較高,並且可以顯示潛在的趨勢延續或逆轉,這取決於價格走勢背景。 3. 交易者監控交易量高峰以及突破或崩潰,以評估合法性-交易量上升支持的持續價格變動...
如何查看BTC期貨交易量及持倉量?
2026-09-12 15:19:55
BTC期貨指標的資料來源1. CoinGlass API v4 提供 30 多個交易所的即時融資利率、清算熱圖和精細的未平倉合約細分。 2. 幣安期貨 API 提供買賣深度、合約特定交易量歷史記錄和保證金比率快照的本機存取。 3. OKX 資料入口網站提供可下載的 CSV 檔案,其中包含每日結算價格...
如何看懂DOGEUSDT永續合約圖表?
2026-09-11 19:19:48
了解 DOGEUSDT 永續圖表上的價格走勢1. 蠟燭圖的形成揭示了直接的市場情緒-綠色蠟燭表示買盤占主導地位,而紅色蠟燭則反映該區間內的拋售壓力。 2. 實體上方和下方的燈芯訊號拒絕更高或更低的價格;在波動較大的迷因幣市場中,長上影線通常會先於短期反轉。 3. 接近關鍵水平的連續小實體蠟燭表明在突...
如何閱讀幣安上的ETHUSDT期貨圖表?
2026-09-13 05:20:26
Bitcoin 減半機制1. 每產生 21 萬個區塊,Bitcoin 個礦工的區塊獎勵減半。 2. 此事件大約每四年發生一次,並被硬編碼到 Bitcoin 的協定中。 3. 最近一次減半將每個區塊的獎勵從 6.25 BTC 減少到 3.125 BTC。 4. 總供應上限仍固定在 2,100 萬 BT...
如何查詢幣安Bitcoin合約資金費用?
2026-09-13 18:00:17
Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...
如何查看SOL期貨成交量和持倉量?
2026-09-14 00:40:03
存取 SOL 期貨市場數據1. 前往SOL永續合約或季度合約上市的官方交易平台,例如Bybit、OKX或Bitget。 2. 找到SOL/USDT或SOL/USD期貨交易對頁面,切換到「合約概覽」或「市場資料」標籤。 3. 識別標記為「交易量(24 小時)」和「未平倉合約」的即時字段,這兩個字段通常...
如何查看DOGE期貨成交量及持倉量?
2026-09-12 08:39:38
了解 DOGE 期貨交易量1. 期貨交易量是指在特定時間範圍內交易的DOGE份期貨合約的總數,通常以每天或每小時計算。 2. 高成交量通常表示市場參與度較高,並且可以顯示潛在的趨勢延續或逆轉,這取決於價格走勢背景。 3. 交易者監控交易量高峰以及突破或崩潰,以評估合法性-交易量上升支持的持續價格變動...
如何查看BTC期貨交易量及持倉量?
2026-09-12 15:19:55
BTC期貨指標的資料來源1. CoinGlass API v4 提供 30 多個交易所的即時融資利率、清算熱圖和精細的未平倉合約細分。 2. 幣安期貨 API 提供買賣深度、合約特定交易量歷史記錄和保證金比率快照的本機存取。 3. OKX 資料入口網站提供可下載的 CSV 檔案,其中包含每日結算價格...
如何看懂DOGEUSDT永續合約圖表?
2026-09-11 19:19:48
了解 DOGEUSDT 永續圖表上的價格走勢1. 蠟燭圖的形成揭示了直接的市場情緒-綠色蠟燭表示買盤占主導地位,而紅色蠟燭則反映該區間內的拋售壓力。 2. 實體上方和下方的燈芯訊號拒絕更高或更低的價格;在波動較大的迷因幣市場中,長上影線通常會先於短期反轉。 3. 接近關鍵水平的連續小實體蠟燭表明在突...
如何閱讀幣安上的ETHUSDT期貨圖表?
2026-09-13 05:20:26
Bitcoin 減半機制1. 每產生 21 萬個區塊,Bitcoin 個礦工的區塊獎勵減半。 2. 此事件大約每四年發生一次,並被硬編碼到 Bitcoin 的協定中。 3. 最近一次減半將每個區塊的獎勵從 6.25 BTC 減少到 3.125 BTC。 4. 總供應上限仍固定在 2,100 萬 BT...
如何查詢幣安Bitcoin合約資金費用?
2026-09-13 18:00:17
Bitcoin 減半機制1. Bitcoin 的協議強制執行固定的發行時間表,其中大約每 210,000 個區塊,區塊獎勵就會減少一半。 2. 該事件大約每四年發生一次,直接減少了新進入流通的 BTC 數量。 3.截至2020年減半,礦工每區塊獲得6.25 BTC;下次減少將達到 3.125 BTC...
看所有文章














