Fehler bei der Verwendung von web3.eth.filter() und filter.get()

Ich ging auf die Website https://etherscan.io/txs?block=4067373

und wählen Sie mit diesen Informationen die folgende Adresse (dritte in der Reihe) zum Testen aus:

0x25f000254108a104A7127B5a5697cb3C12643e62

Und der folgende Code wurde getestet:

var options = {
  fromBlock: 4067373,
  toBlock: 4067373,
  address: "0x25f000254108a104A7127B5a5697cb3C12643e62",
};
var filter = web3.eth.filter(options);

filter.get(function(error, result){
  if (!error)
    console.log(JSON.stringify(result, null, 2));
});

Ich habe auch einen weiteren Test mit dem Optionsobjekt durchgeführt:

var options = {
  fromBlock: 4067372,
  toBlock: 4067374,
  address: "0x25f000254108a104A7127B5a5697cb3C12643e62",
};

In beiden Fällen war das Ergebnis ein leeres Array:

[]

Frage:

Ist oben etwas falsch gemacht worden? Ich habe erwartet, einige Werte im Ergebnisarray zu erhalten, und ich weiß nicht, warum es leer ist.

Antworten (1)

Als ich anfing, an Ethereum zu arbeiten, hatte sogar ich ähnliche Probleme und ich habe es auf die harte Tour gelernt. Ich werde teilen, was ich aus meinen Fehlern gelernt habe, und hoffen, dass Sie am Ende nicht dasselbe tun.

Antwort auf Ihre Frage:

Ist oben etwas falsch gemacht worden? Ich habe erwartet, einige Werte im Ergebnisarray zu erhalten, und ich weiß nicht, warum es leer ist.

Ich glaube, Sie haben das falsche Verständnis von FILTER. Sie verwenden die Themenfilter-API, die nach Ereignissen filtert, die von Verträgen ausgegeben werden; Daher werden darin nur Verträge angezeigt.

Als ich Ihren Code (auf meinem TESTNET) für eine zufällige Adresse ausprobiert habe:

var options = {
 fromBlock: 1535000,
 toBlock: 1535104,
 address: "0x76e0bb92b6f8d431af2fe1bafd304eb832241619" 
};

var filter = web3.eth.filter(options);

filter.get(function(error, result){
   if (!error)
      console.log(JSON.stringify(result, null, 2));
});

Das Ergebnis daraus war:

[]

Aber wenn ich den Wert des Schlüssels "Adresse" durch eine Vertragsadresse ersetze und eine Absenderadresse hinzufüge (dh von der Vertragsfunktionen aufgerufen wurden)

CODE:

var options = {
    fromBlock: 1535000,
    toBlock: 1535104,
    address: "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9", //CONTRACT ADDR
    from: "0x76e0bb92b6f8d431af2fe1bafd304eb832241619" //WALLET ADDR
};

var filter = web3.eth.filter(options);

filter.get(function(error, result){
  if (!error)
    console.log(JSON.stringify(result, null, 2));
});

ERGEBNIS:

{
  "address": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
  "topics": [
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
    "0x00000000000000000000000076e0bb92b6f8d431af2fe1bafd304eb832241619",
    "0x0000000000000000000000002b3425ce986f9f0f599758f4fb33158ca671e83e"
  ],
  "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
  "blockNumber": 1535088,
  "transactionHash": "0xf523285b652163f50f1d19ca08951f38b4bfe099d721a6e6d80ff7fd03a171eb",
  "transactionIndex": 4,
  "blockHash": "0x27a29bf153b302a5e8f24415ed1f2fac1829e845746bed9f3098f0b40cd232a5",
  "logIndex": 1,
  "removed": false
}
{
  "address": "0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9",
  "topics": [
    "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
    "0x00000000000000000000000076e0bb92b6f8d431af2fe1bafd304eb832241619",
    "0x0000000000000000000000002b3425ce986f9f0f599758f4fb33158ca671e83e"
  ],
  "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
  "blockNumber": 1535104,
  "transactionHash": "0x14632d129a6aac7365483a3000470ece443a19a73f242cba1f1944f78889a677",
  "transactionIndex": 7,
  "blockHash": "0x34ee516310a59407712455ec87bd76046a1e68f5c631dc8e6b4bb903b8c92834",
  "logIndex": 6,
  "removed": false
}

Das sind alle Transaktionen, die von dieser Adresse (0x76e0bb92b6f8d431af2fe1bafd304eb832241619) auf Vertrag (0x5c99dadde01ce61ab5b5536d566bf41ecd17e3a9) zwischen den Blöcken 1535000-1535104 durchgeführt werden.

NOTIZ:

Wenn Sie nicht vertragliche Transaktionen aus der Blockchain erhalten möchten, müssen Sie jeden Block auf Transaktionen untersuchen, die in diesem Blog stattgefunden haben, und dann mithilfe der web3-API Transaktionsdetails abrufen. Dieser Link (Allgemein nützliche JavaScript-Schnipsel für Geth) hat diesen Abschnitt Skript zum Suchen von Transaktionen zu/von einem Konto

Der obige Link hilft Ihnen nicht, die internen Transaktionen zu kennen, die innerhalb eines Vertrags stattfinden, hier ist der Link dazu. Hoffentlich hilft Ihnen das weiter.

Ich versuche, die eingehenden Transaktionen auf einem bestimmten Konto herauszufinden. Es steht in keinem Zusammenhang mit einem Vertrag. Daher habe ich den Filter wie folgt geändert: var filter = web3.eth.filter ({fromBlock: 1, toBlock: 'latest', zu: '0x5f677ba7b786411f406a314ca339783ad8d21acc'}); filter.get(function(error, result){ console.log(error, result); });
Der obige Filter zeigt das gleiche Ergebnis wie andere Filter. Wie kann ich den Filter für meine Anforderung ändern?
Ich würde empfehlen, wenn der Filter bei Ihnen nicht funktioniert, versuchen Sie, auf alle Transaktionen im Block zuzugreifen, und prüfen Sie dann, ob die Transaktion Ihnen gehört oder nicht.