Ethereum-Eingabedaten entschlüsseln

Howsit Leute, ich bin damit beschäftigt, den Mempool zu durchsuchen und zu versuchen, verschiedene Transaktionen und Teile von Transaktionen zu verfolgen. Als ersten Schritt dachte ich, ich würde Transaktionen und die Bits auflisten, die ich später brauchen könnte. Hier kommt das Problem.

Ich kann keine Informationen aus der Transaktionseingabe entnehmen. Ich habe alle zuvor empfohlenen Lösungen und Pakete ausprobiert, aber ohne Erfolg.

Wenn ich web3.utils.toAscii verwende, erhalte ich Kauderwelsch. Wenn ich ethereum-tx-decoders decodeTx verwende, erhalte ich einen ungültigen Arrayify-Wert. Wenn ich eines der anderen Web3-Tools verwende, erhalte ich eine Fehlermeldung.

Bitte finden Sie die neueste Iteration meines Codes unten, nachdem ich viele Stunden lang versucht habe, alle Lösungen zu finden, die ich finden konnte (oben sind die drei jüngsten Fehler).

const txDecoder = require("ethereum-tx-decoder");
const express = require("express");
require("dotenv").config();
const Web3 = require("web3");
const curl = `wss://mainnet.infura.io/ws/v3/${process.env.infuraProjId}`;
const web3 = new Web3(new Web3.providers.WebsocketProvider(curl));

let counter = 0;

const subscription = web3.eth.subscribe(
    "pendingTransactions",
    (error, transactionHash) => {
        if (!error) {
            web3.eth
                .getTransaction(transactionHash)
                .then((tx) => {
                    if (tx !== null) {
                        counter++;
                        // console.log(tx.hash);

                        const decodedInput = txDecoder.decodeTx(tx.input);
                        console.log(decodedInput);

                       
                    }
                })
                .catch((err) => console.error(err));
        } else {
            console.error(error);
        }
    }
);
// .on("data", (transactionHash) => {
//     web3.eth.getTransaction(transactionHash).then((transaction) => {
//         console.log("coming from data");
//         console.log(transaction.from, transaction.to);
//     });
// }); 

// ^^ this kept returning null

Bitte und Danke

Antworten (1)

Ihnen fehlt ein wichtiges Stück. Sie können die Eingabe oder die Protokolle erst entschlüsseln, wenn Sie die ABI des "Empfänger"-Vertrags für die TX-Eingabe und den FROM-Vertrag für die Protokolle haben.

Um die ABI zu erhalten: Verwenden Sie entweder etherscan, verwenden Sie https://sourcify.dev/ oder finden Sie sie in IPFS/BZZ, indem Sie den Bytecode lesen und die Adresse parsen, wenn der Solidity-Compiler sie hochladen durfte.

NACHDEM Sie die ABI haben, übergeben Sie sie an ethersjs/web3js/web3py und diese Bibliotheken können die Eingabe/Ausgabe analysieren.

Bearbeiten: Bitte denken Sie auch daran: Wenn der Empfängervertrag ein "Proxy" -Vertrag ist, müssen Sie die Vertragsadresse des "Endempfängers" aus den internen Transaktionen ermitteln.

Danke für Ihre Antwort. Wenn ich also einen ABI für den Vertrag bekomme, für den ich versuche, Transaktionen zu finden, und eine der ausstehenden Transaktionen in den ABI passen oder mit ihm übereinstimmen kann (Entschuldigung für die schlechte Terminologie), dann sollte ich die gewünschten Ergebnisse erhalten, aber nur für die Transaktionen, die mit Verträgen interagieren, für die ich bereits die ABI habe?
@streetrat Sie benötigen nur den "TO" -Vertrag ABI, der die Transaktion erhält. Das ist der ABI, den Sie verwenden werden, um den TX-Eingang zu decodieren. Also ja: Wenn Sie die empfangende ABI haben und Sie die TX haben, die an diesen Vertrag gesendet wird, dann dekodieren Sie Ihre Eingabedaten.
@streetrat hat auch die Antwort bearbeitet, wann/wenn Sie einen Proxy-Vertrag abgeschlossen haben.
vielen dank für eure antworten! Ich schätze die Hilfe sehr (: