Remix

faucet = (new Faucet).value(0.5 ether)();不編譯

  • October 4, 2020

我正在練習 Andreas 的 Mastering Ethereum 書第 7 章中的程式碼範例。我不明白為什麼當我製作 Faucet 建構子 Payable 時它不能編譯。請參閱下面的圖片。

謝謝你。

在此處輸入圖像描述

在此處輸入圖像描述

從語法上講,如果您沒有為 Faucet 編寫建構子,則它具有預設的非付費建構子。因此,對於編譯器,您無法創建乙太幣並將其發送到合約。

constructor() {
   faucet = (new Faucet).value(0.5 ether)();
}

solc v0.6.8之前存在一個錯誤,生成的程式碼沒有在建構子中進行檢查,因此您可以創建合約並發送乙太幣。

編譯器不讀取它只使用原始碼的字節碼,並且它假定建構子是不可支付的。

引用自:https://ethereum.stackexchange.com/questions/88010