Solidity
從作為參數傳入的合約中呼叫函式
我正在嘗試創建一個具有兩個生成資產的契約的 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 factory
為AssetFactory 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; } }