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

15 - 極度恐懼

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

選擇語言

選擇語言

選擇貨幣

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

Solidity 中的付費函數和非付費函數有什麼區別?

In Solidity, only functions marked `payable` can receive Ether, preventing accidental or malicious fund transfers and ensuring secure contract design.

2025/11/14 13:59

了解 Solidity 中的函數修飾符

在 Solidity 中,可以為智能合約中的函數分配特定的修飾符,以決定它們如何與 Ether 交互。這些修飾符在確定函數在執行期間是否可以收到資金方面發揮著至關重要的作用。付費函數和非付費函數之間的區別在於它們接受以太幣作為交易一部分的能力。

應付功能:接受以太幣轉賬

1. payable 函數顯式地標記有payable修飾符,允許它在調用時接收 Ether。

  1. 當用戶發送以太幣以及調用應付函數的交易時,資金將被轉移到合約的餘額中。
  2. 如果沒有 payable 修飾符,嘗試將 Ether 發送到函數會導致交易失敗。
  3. Payable 函數對於眾籌、捐贈或用戶通過函數調用直接貢獻資金的任何機制至關重要。
  4. 在應付函數中,開發人員可以使用msg.value訪問發送的金額,其中包含收到的 wei 數量。

不可支付功能:拒絕傳入以太幣

1. 默認情況下,Solidity 中的函數是免付費的,除非另有說明。

  1. 如果交易嘗試將以太幣發送到非支付功能,則整個交易將被還原以防止意外的資金損失。
  2. 這種行為可以保護用戶和合約邏輯免受意外的以太傳輸的影響。
  3. 非付費函數適用於僅修改狀態或讀取數據而不需要財務投入的操作。
  4. 即使函數不需要 Ether,如果未標記為應付,使用msg.value > 0調用它也會導致運行時異常。

智能合約設計的實際意義

1. 當某個功能應該接受資金時,將其錯誤地標記為不可支付可能會破壞核心功能,例如代幣購買或質押機制。

  1. 相反,將不必要的函數標記為應付會增加攻擊面,特別是在缺少圍繞msg.value 的適當驗證的情況下。
  2. 開發人員必須仔細審核所有面向外部的功能,以確保正確處理以太流。
  3. 靜態分析器和測試框架等工具有助於在部署之前檢測應付修飾符的錯誤使用。
  4. 在復雜的合約中,區分資金接收函數和實用函數可以提高代碼的清晰度和安全性。

常見問題解答

建造師可以付費嗎?是的,構造函數可以標記為應付。這允許合約在部署期間接受以太幣。如果部署交易包含價值轉移,則必須向構造函數付費以避免恢復。

如果我用以太幣調用非付費函數會發生什麼?事務將自動恢復,並且不會發生狀態更改。以太坊在 EVM 級別強制執行此規則,以防止意外將以太幣傳輸到未設計用於處理它們的函數。

有沒有辦法讓合約中的所有功能都默認支付?不可以,每個功能必須單獨聲明為應付功能。沒有全局設置可以讓每個函數都接受以太幣。這種設計確保了資金接收的有意和安全處理。

如果不支付,後備函數可以接收以太幣嗎?不,即使是後備函數也必須標記為應付以接受以太幣。不可支付的回退函數將拒絕發送到合約的任何傳入以太幣,而不指定函數調用。

免責聲明: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