Web3.js-Rückruf

Ich habe eine Vertragsmethode:

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

Web3.js-Code:

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

Wenn ich anrufe ContractInstance.setFile(browser side), öffnet sich Metamask und fragt nach dem Gaspreis. Wird beim Senden console.log("Transaction submitted");ausgeführt, auch wenn die Transaktion nicht abgeschlossen ist.

Gibt es eine Möglichkeit, einen Rückruf in web3.js zu implementieren, sodass nach Abschluss der Transaktion (Vertragsmethode call) eine Rückrufmethode ausgeführt werden sollte. Die Vertragsmethode gibt möglicherweise etwas zurück, das in der Datenbank gespeichert werden sollte.

Antworten (1)

Zwei Wege:

1) resultsollte die Transaktions-ID enthalten. Fangen Sie das auf und erstellen Sie ein watchdafür, das in einem Block angezeigt wird.

2) Protokollieren Sie ein Ereignis in Ihrer setFileFunktion und hören Sie darauf.

Beachten Sie, dass selbst wenn eines dieser Ergebnisse Ihnen mitteilt, dass Ihre Transaktion in einen Block geraten ist, diese später wieder verschwinden kann, wenn der Block, in dem sie sich befand, verwaist ist. Wenn Ihnen das wichtig ist, warten Sie vielleicht lieber mehrere Blöcke und vergewissern Sie sich, dass Ihre Datei noch da ist, bevor Sie den Benutzer benachrichtigen, dass sie fertig ist.

Danke. Solidity Events finde ich eine gute Idee. Ist es Callbacks ähnlich, die unser serverseitiger web3.js-Code abhören kann? Werden Transaktionen in der gleichen Reihenfolge ausgeführt, in der sie eingereicht wurden? Oder können sie (ausstehende) in beliebiger Reihenfolge abgeholt werden?
Sie können Ereignisse entweder als Rückrufe oder per Abfrage erhalten, und Sie können dies auf der Client- oder der Serverseite tun. Transaktionen von demselben Konto werden in der Reihenfolge ausgeführt, in der sie eingereicht werden, oder gar nicht, kontrolliert durch die Konto-Nonce, aber abgesehen davon können Transaktionen in jeder beliebigen Reihenfolge abgebaut werden, die die Miner mögen. In der Praxis schürfen sie meistens zuerst Dinge mit höheren Transaktionsgebühren, aber dies kann aufgrund der Unwägbarkeiten der Netzwerkausbreitung und der Knotenneustarts variieren.