Aktualisieren Sie dapp, nachdem die Vertragstransaktion abgebaut wurde

Ich habe mit Truffle Unbox Webpack eine Web-App erstellt, die mit einem Smart Contract interagiert. Mein Vertrag hat eine Variable namens Summe und 2 Funktionen: eine namens Antwort, die die Summenvariable erhöht, nachdem sie ausgeführt wurde, und eine weitere Funktion namens Summe, die den Wert der Variablensumme zurückgibt. In meiner app.js habe ich den Code:

SmartContract.deployed().then(function(contractInstance) {

contractInstance.answer(1, {gas: 140000, from: web3.eth.accounts[0]}).then(function(v) {
    return contractInstance.total.call().then(function(total){
                                    $("#total").html(total.toString());
            });
});

}

Meine Frage ist, ob der Aufruf contractInstansce.total ausgeführt wird, nachdem der Transaktionsaufruf contractInstance.answer abgebaut wurde, sodass die Variable total in meiner index.html den aktualisierten Wert hat. Außerdem ist das Wort "return" nach einem Transaktionsaufruf erforderlich Funktion, wie answer in diesem Beispiel, damit die folgende Vertragsaufruffunktion, wie total in diesem Beispiel, ausgeführt wird, nachdem die Transaktion abgebaut wurde?

Ich habe testrpc verwendet, um zu testen, ob meine Webanwendung wie erwartet funktioniert, aber in testrpc werden die Blöcke sofort abgebaut, daher bin ich mir nicht sicher, ob der von mir geschriebene Code korrekt ist, wenn ich diese Anwendung im Testnet-Netzwerk verwende.

Vielen Dank für Ihre Zeit!

Antworten (1)

Meine Frage ist, ob der Aufruf contractInstansce.total ausgeführt wird, nachdem die Transaktion call contractInstance.answer abgebaut wurde,

Nein, contractInstance.answergibt den Hash der Transaktion zurück (der möglicherweise noch nicht abgebaut wurde).

Erwägen Sie, die Version web3 1.0.x zu verwenden. Es hat Ereignisse, die Sie anhören können http://web3js.readthedocs.io/en/1.0/web3-eth-contract.html?highlight=contract#id15

contractInstance.methods.answer().send({from: '_address'})
.on('transactionHash', function(hash){
    ...
})
.on('receipt', function(receipt){
    ...// your transaction is mined here
})
.on('confirmation', function(confirmationNumber, receipt){
    ...
})
.on('error', console.error);
Auf der Webseite heißt es, dass web3 1.0 noch nicht veröffentlicht wurde. In meinem Truffle-Projekt in package.json heißt es web3 Version 0.20.0. Also wird Ihre Lösung auf mein Problem angewendet?
Überprüfen Sie die neueste web3-Version npm view web3, aktualisieren Sie Ihre package.json damit und installieren Sie sie
Leider konnte ich nicht updaten. Ich habe versucht, die package.json zu aktualisieren und dann sudo npm install auszuführen (wie hier erwähnt [link] github.com/trufflesuite/truffle/issues/562 für eine ältere Version), aber ich habe viele Fehler erhalten. Vielleicht liegt es daran, dass ich Truffle Webpack für das Projekt verwendet habe. Gibt es also in web0.20 eine Möglichkeit zu wissen, wann die Quittung zurückgegeben wird, und dann eine weitere Aufruffunktion für den aktualisierten Vertrag durchzuführen?
Sie können die Transaktion nach ihrem Hash abhören, bis sie abgebaut ist, wie getTxCallBackdie Funktion hier: ethereum.stackexchange.com/questions/18884/…
Wäre es eine gute Idee, ein Ereignis innerhalb des Smart Contracts zu verwenden, das ausgelöst wird, nachdem jemand die neuen Werte festgelegt hat, und dann einen Filter zu verwenden, um dieses Ereignis zu überprüfen? Wird der Code in filter.watch ausgeführt, nachdem die Transaktion abgebaut wurde?
@kathi Sie sollten den Vertragscode nicht ändern, nur weil es Ihnen das Schreiben einer Benutzeroberfläche erleichtert. Der Hauptvertragscode sollte nur die Kerngeschäftslogik enthalten.