I'm trying to invoke a function by interacting 2 contracts. I defined 2 contracts ArrayTes
and CallFunction
within same file. CallFunction
is calling a function secfun
from contract ArrayTes
Intercontract.sol
pragma solidity ^0.4.23;
contract ArrayTes {
uint256 public l;
function secfun(uint256 a) public view returns(uint256) {
l = l+a;
return l;
}
}
contract CallFunction {
ArrayTes at;
function CallFunction(address _t) {
at = ArrayTes(_t);
}
function thirdfun(uint256 a) public view returns(uint256 c) {
c = at.secfun(a);
return c;
}
}
But c is always returned as zero. I tried defining contracts on seperate file and importing it.
ArrayTes.sol
pragma solidity ^0.4.23;
contract ArrayTes {
uint256 public l;
function secfun(uint256 a) public view returns(uint256) {
l = l + a;
return l;
}
}
CallFunction.sol
pragma solidity ^0.4.23;
import "./ArrayTes.sol";
contract CallFunction {
address useraddress;
constructor(address _t) public {
useraddress = _t;
}
function thirdfun(uint256 a) public view returns(uint256 c) {
ArrayTes instanceuser = ArrayTes(useraddress);
c = instanceuser.secfun(a);
return c;
}
}
2_deploy_contracts.js
var ArrayTes = artifacts.require("./ArrayTes.sol");
var CallFunction = artifacts.require("./CallFunction.sol");
module.exports = function(deployer) {
deployer.deploy(ArrayTes).then(function() {
return deployer.deploy(CallFunction, ArrayTes.address);
});
};
Still c
value is returned zero. useraddress
from CallFunction is returned as '0x'. When I commented code lines c = instanceuser.secfun(a);
from CallFunction correct contract address ie; useraddress was returned. This code worked for me around 6 months back. Now its not working. I can't figure out the issue.Help will be appreciated 🙂
Best Answer
1.
is declared as view, but tries modifying
l
address useraddress;
is not declared public, so of course it cannot be returned.
Here is my working solution, I think you can make it from here on:
CallFunction.sol
ArrayTes.sol
2_deploy_contracts.js
Have fun !