Remix
faucet = (new Faucet).value(0.5 ether)();不編譯
我正在練習 Andreas 的 Mastering Ethereum 書第 7 章中的程式碼範例。我不明白為什麼當我製作 Faucet 建構子 Payable 時它不能編譯。請參閱下面的圖片。
謝謝你。
從語法上講,如果您沒有為 Faucet 編寫建構子,則它具有預設的非付費建構子。因此,對於編譯器,您無法創建乙太幣並將其發送到合約。
constructor() { faucet = (new Faucet).value(0.5 ether)(); }
在solc v0.6.8之前存在一個錯誤,生成的程式碼沒有在建構子中進行檢查,因此您可以創建合約並發送乙太幣。
編譯器不讀取它只使用原始碼的字節碼,並且它假定建構子是不可支付的。