Tengo un contrato que me gustaría poder sumar números enviados por cualquier otra dirección:
contract UnitCounter {
mapping (address => uint256) public UnitsFrom;
uint256 public TotalUnits;
function submitUnits(uint256 Units) {
UnitsFrom[msg.sender] = Units;
TotalUnits += Units;
}
}
Usando esto como una guía aproximada, seguí los siguientes pasos en una red privada:
0x17d541b8aACFFe473e3dD32eBA83C82B51DB8EF9
en mi cadena de bloques privada.En una consola Geth:
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');
Entonces recibo los siguientes errores:
Error: dirección no válida
en web3.js:3887:15
en web3.js:3713:20
en web3.js:4939:28
en el mapa ()
en web3.js:4938:12
en web3.js:4964:18
en web3 .js:4989:23
en web3.js:4055:16
en aplicar ()
en web3.js:4141:16
¿Qué significan estos errores?
¿Cómo debo depurar desde este punto?
Debe agregar un objeto de transacción para decirle a geth qué cuenta usar para la transacción:
MyContractInstance.submitUnits('10', {from: eth.accounts[0], gas:3000000});
También puede hacer que este error desaparezca de esta manera, donde configura su cuenta predeterminada, para que no tenga que agregar opciones {desde:...} mientras interactúa con su contrato.
En tu consola geth :-
// default account set to first account in your geth accounts
eth.defaultAccount = eth.accounts[0]
// Note: If eth.accounts is empty, you can create a new account with personal.newAccount()
// default account set to coinbase(Etherbase), the default primary local account in geth
eth.defaultAccount = eth.coinbase
Si recibe este error a continuación: Error: se necesita autenticación: contraseña o desbloqueo , desbloquee su cuenta.
En tu consola geth :-
// unlocks your account for calls/transactions after you give password
personal.unlockAccount(eth.defaultAccount)