Verwenden von getTransactionReceipt, um cumulativeGasUsed in Trüffel-Javascript zu erhalten

Der Versuch, das Transaktionsergebnis zu analysieren, beispielsweise das genaue Gas, das von einer Transaktion verwendet wird. Wie kann ich das mit Javascript machen?

Das unten funktioniert übrigens nicht, hast du eine Idee?

return metaInstance.deposit({ from: accounts[0], value: web3.toWei(5, "ether") }).then(function (tx) {
  var rcpt = web3.eth.getTransactionReceipt(tx).then(function (rcpt) {
    console.log(rcpt.cumulativeGasUsed.toString());
  });

Antworten (2)

Ihr Beispiel funktioniert nicht, da die Transaktion zum Zeitpunkt des Aufrufs von getTransactionReceipt(tx) noch nicht abgebaut wurde. Der Transaktionshash ist vor dem Mining bekannt, die Quittung erst danach. Wenn Sie auf das Mining der Transaktion warten und dann die Quittung erhalten möchten, verwenden Sie web3 1.0 oder truffle-contract . Beide bieten nette Wrapper, die ein Versprechen mit der Transaktionsquittung beim Mining des TX auflösen. (Obwohl ich noch in der Beta-Phase bin, empfehle ich web3).

/BEARBEITEN

Wenn Sie bereits Trüffel verwenden, ist das obige nicht das Problem, aber Sie werden mit dem js-Versprechen verwirrt, denke ich. Versuchen:

     return metaInstance.deposit({ from: accounts[0], value: web3.toWei(5, "ether") }).then(function (tx) {
       return web3.eth.getTransactionReceipt(tx);
     }).then((_rcpt) => {
       console.log(_rcpt.cumulativeGasUsed.toString());
       return;
     });
Ich dachte bei Truffle Unit Tests, es verwendet Instant Mining! Ist es nicht der Fall? Warum ich frage, sind alle anderen Schritte darunter, abhängig davon, ob diese Transaktion erfolgreich ist, einschließlich eines Kontostands.
Yup, das war von einem Truffle-Unit-Test. Übrigens, das Problem war ein Missverständnis über die Parameter.

Die Transaktionsantwort ist nicht der Hash, der Hash muss aus der Antwort entnommen werden. Siehe unten.

Übrigens funktioniert dies nur in Trüffel-Testfällen, in realen Szenarien, wie @theo-port sagte, müssen wir warten, bis das Mining abgeschlossen ist, um den Transaktionsbeleg zu erhalten.

      return metaInstance.deposit({ from: accounts[0], value: web3.toWei(5, "ether") }).then(function (resp) {
        var rcpt = web3.eth.getTransactionReceipt(resp.tx);

        console.log("cumulativeGasUsed: " + rcpt.cumulativeGasUsed);