Solidity
用乙太實例化合約
我有一個工廠契約,我需要能夠使用一些 ETH 進行部署。我收到一個錯誤
TypeError: Member "transfer" not found or not visible after argument-dependent lookup in address.
我嘗試將契約地址實例化為應付但沒有任何運氣。
我哪裡錯了?
工廠契約
function createContract() public payable { NewContract myNewContract = new NewContract(); address newContractAddress = address(newContract); newContractAddress.transfer(msg.value); }
以下也不起作用:
function createContract() public payable { NewContract myNewContract = new NewContract(); address payable newContractAddress = address(newContract); newContractAddress.transfer(msg.value); }
建構合約
constructor() public payable { ... }
您使您的建構子應付,但這僅意味著您可以將資金附加到契約創建表達式:
NewContract myNewContract = (new NewContract).value(msg.value)();
為了可以將 ETH 轉移到合約中,請添加應付回退功能:
function () external payable { }
您只能
.transfer(..)
在 type 的值上使用address payable
。要將 an 轉換address
為 anaddress payable
,請轉換為uint160
然後再轉換為address
:address payable b = address(uint160(a));
將 ETH 附加到合約創建交易中比使用 0 ETH 創建然後轉移 ETH 更有效。
我希望這有幫助!
該錯誤意味著您正在嘗試使用不適用於類型地址的函式 transfer()。
它只能用於應付地址。