Creé un contrato inteligente bastante simple que se implementó en la red de prueba de rinkeby. Puedes ver el código a continuación:
pragma solidity ^0.4.18;
contract KVStore {
mapping(address => mapping(string => string)) store;
uint MAX_STR_LENGTH = 1000;
function get(address _acct, string _key) public view returns(string) {
return store[_acct][_key];
}
function set(string _key, string _value) public {
if (bytes(_value).length <= MAX_STR_LENGTH) {
store[msg.sender][_key] = _value;
}
}
}
Estoy usando geth para llamar a la función set y luego a la función get. Sin embargo, cuando llamo a kvstore.get(dirección, clave) aparece el siguiente error:
Error: new BigNumber() not a base 16 number:
No estoy seguro de qué está pasando o cómo solucionarlo. La función set funciona bien y escribe en la cadena rinkeby.
Primero ejecuto esto:
geth --verbosity 0 console --rinkeby
Entonces
var kvstoreContract = web3.eth.contract([{"constant":false,"inputs":[{"name":"_key","type":"string"},{"name":"_value","type":"string"}],"name":"set","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_acct","type":"address"},{"name":"_key","type":"string"}],"name":"get","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]).at("0xf8daca377691c8f52b07ef77dfc0e7ca287622c5");
Entonces
kvstoreContract.set("fly","star",{from:eth.accounts[1]});
Que funciona bien y envía una transacción a la dirección del contrato.
Cuando trato de hacer
kvstoreContract.get(eth.accounts[1],"fly");
Recibo el error bigNumber. ¿Alguna idea de por qué? Realmente apreciaría la ayuda.
Lo descubrí finalmente. Estaba pasando la dirección de contrato incorrecta todo el tiempo... ¡eso te atrapará!