Solidity
合約呼叫另一個合約中的函式:TypeError
我有三個契約
Ignition.sol
,,,, Ignition 應該在工廠契約Factory.sol
中Cookie.sol
呼叫函式’factoryStart()’。newCookie()Cookie.sol
根據傳遞的參數創建新合約。為便於閱讀,省略了部分程式碼。
點火.溶膠:
pragma solidity ^0.7.0; contract Ignition { uint256 attr1; uint256 attr2; constructor(uint256 _attr1, uint256 _attr2){ attr1 = _attr1; attr2 = _attr2; } // do stuff... function factoryStart() public { Factory.newCookie( attr1, attr2 ); } }
工廠.sol:
pragma solidity ^0.7.0; contract Factory { uint256 attr1; uint256 attr2; constructor(uint256 _attr1, uint256 _attr2){ attr1 = _attr1; attr2 = _attr2; } // do stuff... function newCookie() public { Cookie newCookie = new Cookie(attr1, attr2); } }
現在,我得到一個編譯錯誤;
TypeError:無法通過合約類型名稱呼叫函式。
我知道我的解決方案一定是錯誤的,因為我需要
Factory
在 Ignition 中的 ABI/地址,以便可以進行互動,但我不知道如何。任何幫助表示讚賞。
我知道我的解決方案一定是錯誤的,因為我需要 in 的 ABI/地址
Factory
才能Ignition
進行互動,但我不知道如何進行。不,您的解決方案是錯誤的,因為您需要通過合約實例呼叫合約函式,而不是通過合約名稱。
給定的合約可以在多個不同的地址部署多個實例,因此通過合約名稱呼叫合約函式是沒有意義的。
從技術上講,您需要執行以下操作:
function factoryStart(Factory factory) public { factory.newCookie(attr1, attr2); }
或者,
Factory factory
可以是合約中的全域變數,您需要Factory
在呼叫 function 之前對其進行初始化以指向實例factoryStart
,例如:Factory factory; uint256 attr1; uint256 attr2; constructor(Factory _factory, uint256 _attr1, uint256 _attr2) public { factory = _factory; attr1 = _attr1; attr2 = _attr2; }