I have developed a EnergyExchange DApp in the Ganache local network with React that consist of one main contract "EnergyExchange". This main contract has a function to deploy new Agent contracts.

So what I do is to store the deployed agents contracts in a mapping so later on when I want to interact with them I call the next function:

    let contractInstance = await this.getAgentInstance();

The detail of the function can be seen here:

    async getAgentInstance(){
      var AgentContract = web3.eth.contract([
        {
          "inputs": [
            {
              "name": "_agentAddress",
              "type": "address"
            },
            {
              "name": "_agentID",
              "type": "uint256"
            },
            {
              "name": "_agentCreationDate",
              "type": "uint256"
            },
            {
              "name": "_agentAvailableEnergyToSell",
              "type": "uint256"
            },
            {
              "name": "_exchangeAddress",
              "type": "address"
            }
          ],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "anonymous": false,
          "inputs": [
            {
              "indexed": false,
              "name": "a",
              "type": "uint256"
            }
          ],
          "name": "onAvailableEnergyToSellUpdated",
          "type": "event"
        },
        {
          "constant": false,
          "inputs": [
            {
              "name": "_agentAvailableEnergyToSell",
              "type": "uint256"
            }
          ],
          "name": "updateAvailableEnergyToSell",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getAgentDetails",
          "outputs": [
            {
              "name": "",
              "type": "address"
            },
            {
              "name": "",
              "type": "uint256"
            },
            {
              "name": "",
              "type": "uint256"
            },
            {
              "name": "",
              "type": "uint256"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "name": "_pricePerUnit",
              "type": "uint256"
            },
            {
              "name": "_unit",
              "type": "uint256"
            }
          ],
          "name": "addSellOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": true,
          "inputs": [],
          "name": "getSellOffers",
          "outputs": [
            {
              "name": "",
              "type": "uint256[]"
            },
            {
              "name": "",
              "type": "address[]"
            },
            {
              "name": "",
              "type": "uint256[]"
            },
            {
              "name": "",
              "type": "uint256[]"
            },
            {
              "name": "",
              "type": "uint256[]"
            },
            {
              "name": "",
              "type": "bool[]"
            }
          ],
          "payable": false,
          "stateMutability": "view",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "name": "_sellOrderId",
              "type": "uint256"
            }
          ],
          "name": "cancelAddedSellOrder",
          "outputs": [],
          "payable": false,
          "stateMutability": "nonpayable",
          "type": "function"
        },
        {
          "constant": false,
          "inputs": [
            {
              "name": "_sellOrderId",
              "type": "uint256"
            },
            {
              "name": "_sellerAddress",
              "type": "address"
            }
          ],
          "name": "buyEnergy",
          "outputs": [],
          "payable": true,
          "stateMutability": "payable",
          "type": "function"
        }
      ]);
      return await AgentContract.at(this.state.agentInstance);
    };

That function returns the specific agent instance associated to the account is being used in the browser with metamask. See below the console.log of the instance:

[![instance retrieved image][1]][1]

As you can see, the getAgentInstance() function is returning the desired output.

The error appears when trying to interact with the deployed contract through the retrieved instance. For example when calling a get function:

    async agentGetDetails(){
      
      
      let contractInstance = await this.getAgentInstance();
      console.log(contractInstance);
      let details = await contractInstance.getAgentDetails({from:this.state.account});

      

      console.log('function get agentdetails executed');
      }

And here it goes the solidity function we are calling:


    function getAgentDetails() public view isOwner returns(address,uint,uint,uint){
        return (agentAddress,agentID,agentCreationDate,agentAvailableEnergyToSell);
        
    }

The error that i get is detailed next:

[![error image][2]][2]



Any ideas of what is happening? I already tested the contract and all its functions in both Remix and Truffle-test.

Thanks


  [1]: https://i.sstatic.net/trHA8.png
  [2]: https://i.sstatic.net/EtTma.png