Solidity

Geth 從私有區塊鏈中的另一個合約呼叫一個合約中的函式

  • April 25, 2018

我在使用 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呼叫會立即執行。

在此處輸入圖像描述

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