Llamar a la función de escritura, que no cambia el valor del contrato

Soy nuevo en contratos inteligentes y me enfrento a un problema. Después de implementar el contrato en mi red blockchain local de prueba, trato de establecer un nuevo valor a través del setter, luego llamo al método get of contract y devuelve el valor anterior.

Este es mi contrato,

pragma solidity ^0.4.10;

contract Storage {
    uint256 storedData;

    function set(uint256 data) {
        storedData = data;
    }

    function get() constant returns (uint256) {
        return storedData;
    }
}

Que pasos hice:

  1. Implemente el contrato a través de web3j en código Java, después de implementar veo la dirección de mi contrato, por lo que está implementado
  2. Después de eso, en la consola geth, cree la variable abi: var abi = [{"constante":falso,"entradas":[{"nombre":"datos","tipo":"uint256"}],"nombre":"conjunto ","salidas":[],"de pago":falso,"estadomutabilidad":"no pagadero","tipo":"función"},{"constante":verdadero,"entradas":[],"nombre": "get","outputs":[{"name":"","type":"uint256"}],"payable":false,"statemutability":"view","type":"function"}] ;
  3. contrato de carga: var almacenamiento = eth.contrato(abi)
  4. cargar contrato por dirección: var contractInstance = storage.at("0x45564fe8d90e542f3f896dd43b374210bc109299");
  5. intente llamar al método get(): var result = contractInstance.get(); es salida 0
  6. luego intente establecer un nuevo valor: var result = contractInstance.set(566); After that I see something like this: INFO [09-07|08:42:07] Submitted transaction fullhash=0x7110b3fdfc8005187ed367beb8275a6f4b926f4852f726784219a5a3aa9c8d9e recipient=0x45564fe8d90e542f3f896dd43b374210bc109299 "0x7110b3fdfc8005187ed367beb8275a6f4b926f4852f726784219a5a3aa9c8d9e"
  7. A continuación, empiezo a minar: miner.start(), al comienzo de la extracción, veo un registro como este: INFO [09-07|08:44:15] Confirmar nuevo número de trabajo de minería = 38 txs = 1 tíos = 0 transcurrido = 1.044 ms INFO [09-07|08:44:15] Número de bloque sellado con éxito = 38 hash=e62548…39ad89 INFO [09-07|08:44:15] 🔗 el bloque alcanzó el número de cadena canónica=33 hash=9a6ae1…9cb82d INFO [09-07|08:44:15] 🔨 número de bloque potencial extraído=38 hash=e62548…39ad89 INFO [09-07|08:44:15] Confirmar nuevo trabajo de minería número=39 txs=0 tíos=0 transcurrido =182.5µs INFO [09-07|08:44:15] Número de bloque sellado con éxito = 39 hash=87b682…f52e39 INFO [09-07|08:44:15] 🔗 el bloque alcanzó el número de cadena canónica=34 hash=cc9a2d …36838a INFO [09-07|08:44:15] 🔨 número de bloque potencial minado=39 hash=87b682…f52e39 INFO [09-07|08:44:15] Minería demasiado en el futuro espera=2s
  8. Luego dejo de minar: miner.stop() 9. Luego llamo a contractInstance.get(): y veo el mismo valor 0

Estoy confundido (¡Gracias a todos por la ayuda!

Su código es correcto, y pruebo que todo está bien. ¿Confirmas que la minería es un éxito?
@BinGoBinBin Creo que sí. Ahí está mi registro, cuando empiezo a minar. Iniciando operación minera INFO [09-06|18:10:01] Confirmar nuevo trabajo minero número=1400 txs=6 tíos=0 transcurridos=1.092ms INFO [09-06|18:10:01] Sellado exitoso nuevo bloque número= 1400 hash=8cd59b…0bb28c INFO [09-06|18:10:01] 🔗 el bloque alcanzó el número de cadena canónica=1395 hash=81696a…5fc7fa INFO [09-06|18:10:01] 🔨 número de bloque potencial extraído=1400 hash=8cd59b…0bb28c
¿Puede agregar la forma exacta en que llama a estas funciones a través de web3? Además, entre miner.start() y llamar a estas funciones, debería ver algo como "Transacción agregada al grupo". ¿Puedes confirmar que ves algo así?
@ wtk219 Actualizo mi pregunta y proporciono pasos más detallados que hice.
Intente dar storedDataun valor predeterminado antes de intentar cambiarlo, eso le dirá si su problema es la lectura o la escritura.
@EdmundEdgar agregó un valor predeterminado, todavía devuelve 0 , creo que los problemas están en la biblioteca web3j, parece que es incorrecto crear un contenedor para un contrato inteligente
@EdmundEdgar Incluso alteré la función get, que devuelve literal (256), pero aún devuelve 0, tal vez sea un error en la versión del contrato o algún problema complicado, estoy realmente confundido
Consejos generales: 1. Utilice la versión reciente de Solidity, 2. No olvide la constructor()función.

Respuestas (1)

Use los siguientes comandos:

storage.get.call() 0 storage.set.sendTransaction(42, {from: eth.accounts[0], gas: 1000000}) "0x7a54ab329fcbf551432eb78c4b2a1ff48fc8b9f9aa23d94fa86330e5c1d711f3" storage.get.call() 42

Enlace de referencia: https://medium.com/@gus_tavo_guim/deploying-a-smart-contract-the-hard-way-8aae778d4f2a