This looks like a bug to me. I was able to find a solution, but this only works if you call sendToAnother() from Another first, and then call it from Test. pragma solidity 0.4.25; contract Another { uint public balance; function sendToAnother() public returns (bool success) { balance += 10; return true; } } contract Test { function send(address another) public { Another(another).sendToAnother(); } } Even though this solution works, I'm not 100% clear as to why it worked for the Javascript VM and not for Ganache. It looks like while using Remix, Ganache is searching for a return first, thus the immediate revert being thrown. My guess is it's a bug, but would love to hear some more ideas/theories if anyone has them.