Problem beim Ansehen von Ereignissen ohne Aufruffunktionen im Smart Contract

Ich habe ein Ereignis, das jedes Mal gesendet wird, wenn ein Vertrag bereitgestellt wird. Es wird im Konstruktor gestartet.

Ich habe eine Dapp, wo ich dieses Ereignis beobachten möchte, um jedes Mal, wenn ein intelligenter Vertrag bereitgestellt wird, eine tx zu senden (es ist dieselbe, aber "aktualisiert").

Jedes Mal, wenn ich meine DApp ausführe, beobachtet das Skript das Ereignis einmal, aber wenn meine DApp bereits ausgeführt wird und ich einen Vertrag bereitstelle, erhalte ich das neue Ereignis nicht, bis ich die DApp erneut ausführe.

Die Struktur meines Skripts ist die folgende:

    App = {
      web3Provider: null,
      contracts: {},

      init: function() {
        return App.initWeb3();
      },

      initWeb3: function() {
        //some code
        return App.initContract();
      },
      initContract: function(){
        $.getJSON("MyContract.json", function(mycontract) {
          App.contracts.MyContract= TruffleContract(mycontract);
          //some code
          listeningEvents();
          return sendTx();
        })
      }
      sendTX: function() { /*some code*/ }
      listeningEvents: function(){
        App.contracts.MyContract.deployed().then(function (instance) {
          instance.Event({}, {
              fromBlock: 0,
              toBlock: 'latest'
          }).watch(function (error, event) {
                console.log("WATCHED EVENT")
          })
        })
      }

$(function() {
  $(window).load(function() {
    App.init();
  });
});

Ich versuche auch, die Adresse des Vertrags mit dem gleichen Zweck zu beobachten, aber ich versuche so etwas wie:

instance.watch('address', function (new, old) { ... })

und es funktioniert nicht (err: instance.watch ist keine Funktion).

Es scheint, dass ich das Skript erneut ausführen muss, da es den vorherigen Smart Contract überwacht, nicht den neuen. Kann mir jemand in diesem Fall erklären, wie ich feststellen kann, dass der neue Vertrag bereitgestellt wird? Wie kann ich die Veranstaltung verfolgen? Was ist der richtige Weg, um Adresse zu sehen?

Antworten (1)

deployed()sucht in Ihrer .jsonDatei nach der Adresse, die dem von Ihnen verwendeten Netzwerk entspricht. Wenn Sie eine Adresse manuell übergeben möchten, können Sie .at()stattdessen verwenden und eine Adresse übergeben.

Beobachten Sie also diese Adresse in der .json-Datei, um zu prüfen, ob es einen neuen Vertrag gibt, sollte gut sein, oder? Was meinst du mit "Adresse manuell übergeben"? Ich kann die Adresse nicht manuell übergeben, sie sollte automatisch überwacht werden, wenn der Smart Contract bereitgestellt wird. @TovarishFin