Solidity
Geth 從私有區塊鏈中的另一個合約呼叫一個合約中的函式
我在使用 Geth 在私有區塊鏈中使用 Remix solidity 開發智能合約時遇到問題。我有兩個智能合約,例如工廠合約和合約合約。
我創建了工廠契約,然後呼叫了 createContract 和 getContract 函式,它可以正常工作,但是當我呼叫 getNum 函式時,我無法獲取數字。
我通過 JavaScript VM 在 Remix solidity 中執行此程式碼,通過 Ganache 或 TestRPC 測試網路工作正常,但是當我使用 Geth 將它與私有區塊鏈一起使用時,它有這個問題
這是我的程式碼。
contract Factory { address[] newContracts; function createContract(uint num) { address newContract = new Contract(num); newContracts.push(newContract); } function getContract() view public returns(address[]) { return newContracts; } function getNum(address _add) view public returns(uint) { return Contract(_add).getNum(); } } contract Contract { uint public Num; function Contract(uint num) { Num = num; } function getNum() public returns(uint) { return Num; } }
在
Contract
添加視圖修飾符到getNum
function getNum() public view returns(uint) { return Num; }
您的呼叫在 ganache/testrpc/remix 中有效,因為測試 EVM 本質上是同步的。即,您將能夠獲得交易的返回值,因為
sendTransaction
呼叫會立即執行。