I have a contract which I'd like to be able to sum numbers submitted by any other address:
contract UnitCounter {
mapping (address => uint256) public UnitsFrom;
uint256 public TotalUnits;
function submitUnits(uint256 Units) {
UnitsFrom[msg.sender] = Units;
TotalUnits += Units;
}
}
Using this as rough guidance, I followed the following steps on a private-net:
- Deploy the contract using mist
- Get the JSON Interface code using the "Show Interface" icon in mist
- Copy the address of the deployed contract
0x17d541b8aACFFe473e3dD32eBA83C82B51DB8EF9
on my private blockchain. -
On a Geth console:
var abi=[ { "constant": false, "inputs": [ { "name": "Units", "type": "uint256" } ], "name": "submitUnits", "outputs": [], "type": "function" }, { "constant": true, "inputs": [], "name": "TotalUnits", "outputs": [ { "name": "", "type": "uint256" } ], "type": "function" }, { "constant": true, "inputs": [ { "name": "", "type": "address" } ], "name": "UnitsFrom", "outputs": [ { "name": "", "type": "uint256", "value": "0" } ], "type": "function" } ]
var MyContract = web3.eth.contract(abi); var MyContractInstance = MyContract.at('0x17d541b8aACFFe473e3dD32eBA83C82B51DB8EF9'); MyContractInstance.submitUnits('10');
I then get the following errors:
Error: invalid address
at web3.js:3887:15
at web3.js:3713:20
at web3.js:4939:28
at map ()
at web3.js:4938:12
at web3.js:4964:18
at web3.js:4989:23
at web3.js:4055:16
at apply ()
at web3.js:4141:16
What do these errors mean?
How should I debug from this point?
Best Answer
You need to add a transaction object to tell geth what account to use for the transaction: