Solidity

從作為參數傳入的合約中呼叫函式

  • December 6, 2019

我正在嘗試創建一個具有兩個生成資產的契約的 DAPP。一個是充當其他契約的“工廠”。從後者我嘗試在工廠中呼叫一個函式而不知道它的地址,因此我想將它作為參數傳遞。這會在 Remix 中引發錯誤,因為該合約顯然還不存在。

為了簡化這種情況,請考慮 Remix 中的這種情況(兩個合約都寫在同一個文件中):

   contract AssetFactory{

   address[] deployedAssets;

     function createAsset(string name) public {
       address newAsset = new Asset(name);
       deployedAssets.push(newAsset);
       return newAsset;
     }

   }

   contract Asset{

    string name;

    function Asset(string name) public{
      name = name;
    }

    function ModifyAssetAndCreateNew(string name, address factory){
      factory.createAsset(name);
      name = name;
    }

  }

任何想法或其他方法?我意識到上述契約背後的想法在這個例子中沒有多大意義,但我試圖讓它盡可能短。

謝謝!

您的範常式式碼中有許多編譯錯誤,但是一旦我修復了這些錯誤並更改address factoryAssetFactory factory,一切看起來都很好。

(我只是猜測name您在該行中的意思factory.createAsset(name)。在製作一個簡單的範例時,請確保它是您實際測試過的範例。)

pragma solidity ^0.4.23;

contract AssetFactory {
   Asset[] deployedAssets;

   function createAsset(string name) public returns (Asset) {
       Asset newAsset = new Asset(name);
       deployedAssets.push(newAsset);
       return newAsset;
   }

}

contract Asset {
   string name;

   constructor(string _name) public {
       name = _name;
   }

   function modifyAssetAndCreateNew(string _name, AssetFactory factory) public {
       factory.createAsset(_name);
       name = _name;
   }
}

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