Devolución de llamada de Web3.js

Tengo un método de contrato:

function setFile(string fName, string fileHash) public {
    File memory file = File({fileName:fName,fileHash:fileHash});
    files.push(file);
    return something;
}

Código Web3.js:

ContractInstance.setFile(file.name,hashResult,function(error, result) {
    if(!error)
    {
        console.log("Transaction submitted");
    }
    else {
        console.log("Error");
    }
});

Cuando llamo ContractInstance.setFile(browser side), metamask se abre y pregunta por el precio de la gasolina. Al enviar, console.log("Transaction submitted");se ejecuta incluso cuando la transacción no se completa.

¿Hay alguna manera de implementar una devolución de llamada en web3.js de modo que cuando se complete la transacción (método de contrato call), se debe ejecutar un método de devolución de llamada? El método de contrato podría devolver algo que debería guardarse en la base de datos.

Respuestas (1)

Dos caminos:

1) resultdebe contener el ID de la transacción. Captura eso y crea un watchpara que aparezca en un bloque.

2) Registre un evento en su setFilefunción y escuche eso.

Tenga en cuenta que incluso si uno de esos resultados le dice que su transacción se ha metido en un bloque, posteriormente puede desaparecer de nuevo si el bloque en el que estaba queda huérfano. Si esto le importa, es posible que prefiera esperar varios bloques y asegurarse de que su archivo aún esté allí antes de notificar al usuario que está listo.

Gracias. Creo que solidity events es una buena idea. ¿Es similar a las devoluciones de llamada que nuestro código web3.js del lado del servidor puede escuchar? Además, ¿se ejecutan las transacciones en el mismo orden en que se envían? ¿O se pueden recoger (pendientes) en cualquier orden?
Puede obtener eventos como devoluciones de llamadas o mediante sondeos, y puede hacerlo del lado del cliente o del lado del servidor. Las transacciones de la misma cuenta se ejecutan en el orden en que se envían o no se ejecutan en absoluto, controladas por la cuenta nonce, pero aparte de eso, las transacciones se pueden extraer en el orden que deseen los mineros. En la práctica, primero extraen principalmente cosas con tarifas de transacción más altas, pero esto puede variar debido a los caprichos de la propagación de la red y los reinicios de los nodos.