Solidity

創建合約 Solidity 0.5

  • March 19, 2019

我的程式碼適用於編譯器 0.4.25,但不適用於最新版本。我想跟踪“契約 1”創建的每個“契約 2”。

契約一

uint public countContract;
address[] public deployedContracts;

function createContract(string memory _name) 
public{       
   address newContract = new Contract2(countContract++, _name);
   deployedContracts.push(newContract);
}

契約 2

uint public id;
string public name; 

constructor(uint _id, string memory _name) 
public{
   id = _id;
   name = _name;
}

我在 Remix 上收到的錯誤是:

browser/temp.sol:9:5: TypeError: 類型合約 Contract2 不能隱式轉換為預期的類型地址。地址 newContract = new Contract2(countContract++, _name);

在 Solidity 0.5 中,您需要顯式儲存正在創建的合約的類型(而不是簡單地使用address類型)。使用以下程式碼來實現您的目標:

契約一:

uint public countContract;
Contract2[] public deployedContracts;

function createContract(string memory _name) 
   public
{       
   Contract2 newContract = new Contract2(countContract++, _name);
   deployedContracts.push(newContract);
}

契約二:

uint public id;
string public name; 

constructor(uint _id, string memory _name) 
   public
{
   id = _id;
   name = _name;
}

注意:您仍將合約的地址添加到數組中,就像您在 0.4 中所做的那樣。

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