-
bitcoin $87959.907984 USD
1.34% -
ethereum $2920.497338 USD
3.04% -
tether $0.999775 USD
0.00% -
xrp $2.237324 USD
8.12% -
bnb $860.243768 USD
0.90% -
solana $138.089498 USD
5.43% -
usd-coin $0.999807 USD
0.01% -
tron $0.272801 USD
-1.53% -
dogecoin $0.150904 USD
2.96% -
cardano $0.421635 USD
1.97% -
hyperliquid $32.152445 USD
2.23% -
bitcoin-cash $533.301069 USD
-1.94% -
chainlink $12.953417 USD
2.68% -
unus-sed-leo $9.535951 USD
0.73% -
zcash $521.483386 USD
-2.87%
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),我們將及時刪除。
- 比特幣、eCash 分叉和空投動態:深入探討加密貨幣的最新爭議
- 2026-05-03 12:55:01
- 2026 年邁阿密共識:Web3、區塊鏈、加密貨幣、NFT、Metaverse,會議,5 月 5 日 — 華爾街與數位前沿相遇的地方
- 2026-05-02 12:45:01
- 聯準會維持利率穩定,地緣政治緊張局勢引發比特幣價格下跌
- 2026-05-01 06:45:01
- 比特幣礦工為電網供電:收購俄亥俄州天然氣廠開啟數位黃金新時代
- 2026-05-01 00:45:01
- MegaETH的MEGA代幣登陸紐約:為即時區塊鏈設定新的效能基準
- 2026-05-01 00:55:01
- Solana 的滑坡:價格預測顯示阻力損失和潛在的進一步下跌
- 2026-05-01 06:45:01
相關知識
在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上設定風險管理規則來限制我的每日最大損失?
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而不平倉?
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交易如何選擇線性永續合約和反向永續合約?
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上設定風險管理規則來限制我的每日最大損失?
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而不平倉?
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....
看所有文章














