Solidity

用乙太實例化合約

  • December 16, 2019

我有一個工廠契約,我需要能夠使用一些 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為 an address payable,請轉換為uint160然後再轉換為address

address payable b = address(uint160(a));

將 ETH 附加到合約創建交易中比使用 0 ETH 創建然後轉移 ETH 更有效。

我希望這有幫助!

該錯誤意味著您正在嘗試使用不適用於類型地址的函式 transfer()。

它只能用於應付地址。

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