Как, ребята, я занят прохождением мемпула и пытаюсь отслеживать различные транзакции и части транзакций. В качестве первого шага я решил перечислить транзакции и биты, которые мне могут понадобиться позже. Вот в чем проблема.
Я не могу получить какую-либо информацию из ввода транзакции. Я пробовал все предыдущие решения и рекомендуемые пакеты, но безрезультатно.
Когда я использую web3.utils.toAscii, я получаю тарабарщину. Когда я использую декодеры ethereum-tx-decodeTx, я получаю недопустимое значение массива. когда я использую любой из других инструментов web3, я получаю сообщение об ошибке.
Пожалуйста, найдите последнюю итерацию моего кода ниже после многих часов попыток найти все решения, которые я смог найти (выше приведены три самых последних сбоя)
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
Пожалуйста и спасибо
вам не хватает жизненно важной части. Вы не сможете декодировать ввод или журналы, пока у вас не будет ABI контракта «получатель» для ввода TX и контракта FROM для журналов.
Чтобы получить ABI: либо используйте etherscan, используйте https://sourcify.dev/ , либо найдите его в IPFS/BZZ, прочитав байт-код и проанализировав адрес, если компилятору Solidity было разрешено загрузить его.
ПОСЛЕ того, как у вас есть ABI, вы передаете его в ethersjs/web3js/web3py, и эти библиотеки смогут анализировать ввод/вывод.
Редактировать: также имейте в виду: если контракт получателя является «прокси-контрактом», вам нужно будет выследить адрес контракта «конечного получателя» из внутренних транзакций.
уличная крыса
Андрей Лысак
Андрей Лысак
уличная крыса