Das Beobachten von Ereignissen gibt 0 Blocknummer zurück

Ich versuche, auf kürzlich abgebaute Ereignisse von einem Live-Smart-Contract ( EtherDelta ) zu hören.

      //https://github.com/praneethmendu/ethualizer/blob/master/backnd.js

      tradeEvent = contractIns.Trade({}, {fromBlock: '4221476', toBlock: 'latest'});

      tradeEvent.watch(function (error, eventResult) {
          if (error) {
              console.error(error);
          } else {
              loco.play();
              console.log(JSON.stringify(eventResult, null, 4));
          }

Ich erhalte Ergebnisse vom Watch-Callback, aber Blocknummer und andere Hashes und Indizes sind 0, obwohl Argumente echt erscheinen, vermute ich, dass ich ausstehende Transaktionen betrachte

{
    "address": "0x8d12a197cb00d4747a1fe03395095ce2a5cc6819",
    "blockNumber": 0,
    "transactionHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "transactionIndex": 0,
    "blockHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "logIndex": 0,
    "removed": false,
    "event": "Trade",
    "args": {
        "tokenGet": "0x0000000000000000000000000000000000000000",
        "amountGet": "3909184320983949755",
        "tokenGive": "0xe41d2489571d322189246dafa5ebde1f4699f498",
        "amountGive": "4.093386723543402884816e+21",
        "get": "0x798888341bfc01b30196091d27613fc6c68df159",
        "give": "0xafe15d1c5baab8f6fc9ba107a90a5729964ea14c"
    }
}

Ich kann den aktuellen neuesten Block abrufen und mit Gettern im Vertrag interagieren. Ich verwende einen Geth-Lightnode im RPC-Modus, um eine Verbindung herzustellen, also keine Verbindungsprobleme.

andere Details: Betriebssystem: Ubuntu 17.04

Bearbeiten: Verbesserte Frage mit der Antwort von @ farhankhwaja .

Antworten (1)

Ich denke, Sie haben hier etwas verpasst. Ich konnte das EREIGNIS meines Vertrags erfassen, das ich im TestNet bereitgestellt habe.

Anforderungen

1. ABI - The contract ABI
2. Contract Address 
3. Web3js

Code

var myContractInstance = web3.eth.contract(JSON.parse(*<ABI>*)).at(*<CONTRAC_ADDRESS>*);

// Watching for MyEvent
var myEvent = myContractInstance.MyEvent({}, {fromBlock: '0', toBlock: 'latest'});

myEvent.get(function (error, eventResult) {
    if (error) {
         console.error(error);
    }
    else {
        loco.play();
        console.log(JSON.stringify(eventResult, null, 4));
    }
});

Wenn der obige Code ausgeführt wird, gibt er Ihnen alle Transaktionen zurück, in denen das Ereignis aufgerufen wurde.

Beispieltransaktion

{
        "address": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
        "blockNumber": 1495157,
        "transactionHash": "0x41fe9e995dba27c422ac5d0e9f1c8360ac512c3767c2217a0e729ed0b6098aa6",
        "transactionIndex": 0,
        "blockHash": "0x833c293455edb27c266fc2a0fbdab97431137c2f3d690c19835ddcf59ed4fe8a",
        "logIndex": 0,
        "removed": false,
        "event": "MyEevent",
        "args": {
            "_from": "0xb1aa0ac057639e534a89b095853befc4d6d264cf",
            "_to": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
            "_value": "1",
            "_tokenAddress": "0x85c02a9957f87445298eadffce717b7d256d6542",
            "_tokenName": "CC Series",
            "_tokenSymbol": "CC"
        }
}

Lassen Sie mich wissen, wenn dies nicht zum gewünschten Ergebnis führt.

Mein Code befindet sich unter github.com/praneethmendu/ethualizer/blob/master/backnd.js . Ich kann den neuesten Block abrufen und mit Gettern interagieren, sodass die Anforderungen erfüllt sind. Trotz der Verwendung Ihres Codes erhalte ich immer noch Ergebnisse, wie in der Frage gezeigt, mit Blocknummer, Hashes und Index als 0. Ich achte auf „Handels“-Ereignisaufrufe von EtherDelta. Also arbeite ich mit dem Hauptnetz. Ich vermute, dass ich auf "ausstehende" Ereignisse statt auf "neueste" Transaktionen lausche
@praneethmendu Ich habe Ihren Code ausgeführt und konnte die Protokolle für das Ereignis abrufen. Einige Fragen: 1. Ist Ihr Client 'geth/parity' mit dem MainNet synchronisiert? Was ist die Ausgabe, wenn Sie web3.eth.blockNumbernach dem Verbinden mit Ihrem Client laufen. Der Wert/die Ausgabe des obigen Befehls sollte die Blocknummer sein, die auf EtherScan angezeigt wird
Ich verwende: geth --syncmode "light" --cache=1024 -rpc --rpcapi="db,eth,net,web3,personal,web3" und ich schaffe es, den neuesten Block in Ordnung zu bringen
Dies kann daran liegen, dass Geth im Light-Modus ausgeführt wird.
Ich denke, Sie müssen "schnell" verwenden. ** Vollständige Synchronisierung: ** Ruft die Blockheader und die Blockkörper ab und validiert jedes Element aus dem Genesis-Block. Fast Sync: Erhält die Blockheader, die Blockkörper, es führt keine Validierung bis zum aktuellen Block – 1024 durch. Dann erhält es einen Snapshot-Status und geht wie eine vollständige Synchronisierung. Light Sync : Ruft nur den aktuellen Status ab. Um Elemente zu verifizieren, muss es bei vollständigen (Archiv-)Knoten nach den entsprechenden Baumblättern fragen. Hinweis : Bei der obigen Beschreibung müssen Sie fast/full verwenden