Skip to main content
1 of 2
migu
  • 951
  • 2
  • 10
  • 18

Why does a contract method that only returns a value doesn't use a constant and cost gas?

I set up a Truffle sample project, which contains the following contract:

    import "ConvertLib.sol";

    contract MetaCoin {
      mapping (address => uint) balances;

        event Transfer(address indexed _from, address indexed _to, uint256 _value);

        function MetaCoin() {
            balances[tx.origin] = 10000;
        }

        function sendCoin(address receiver, uint amount) returns(bool sufficient) {
            if (balances[msg.sender] < amount) return false;
            balances[msg.sender] -= amount;
            balances[receiver] += amount;
            Transfer(msg.sender, receiver, amount);
            return true;
        }
        function getBalanceInEth(address addr) returns(uint){
            return ConvertLib.convert(getBalance(addr),2);
        }
        function getBalance(address addr) returns(uint) {
            return balances[addr];
        }
    }

The two last functions only return a value and don't alter the state of the network. Why was there no constant used for these two functions? From what I can tell looking at the logs, in their current form, both functions need mining and cost gas when being called.

migu
  • 951
  • 2
  • 10
  • 18