I have written a contract that has the mapping storage variable A & B. These variables get initialized with some values in constructor. A method getBalance returns the balance from mapping A & B.
In the method I declared another mapping - thinking that it would give a compilation error (since mapping allowed for storage only). Instead it lead to a strange behavior - appears that the new local mapping overwrites mappingA.
Result without local mapping (100, 200) as expected Result with local mapping (500, 200) <<< Why?
/** Tested in Truffle/TestRPC **/
contract Mapping {
mapping(address => uint) balancesA;
mapping(address => uint) balancesB;
function Mapping() {
// constructor
balancesA[msg.sender] = 100;
balancesB[msg.sender] = 200;
}
function getBalance(address addr) returns(uint, uint) {
// If these 2 lines are commented then behavior is as expected
mapping(address => uint) balancers;
balancers[msg.sender] = 500;
return (balancesA[addr], balancesB[addr]);
}
}
returns (uint, uint)
rather than being named, orbalanceA = balancesA[addr];
etc