Web3js

解碼乙太坊輸入數據

  • October 27, 2021

伙計們,我正忙著瀏覽記憶體池並試圖跟踪各種交易和部分交易。作為第一步,我想我會列出交易和我以後可能需要的位。問題來了。

我無法從交易輸入中獲取任何資訊。我已經嘗試了所有以前推薦的解決方案和軟體包,但無濟於事。

當我使用 web3.utils.toAscii 時,我會胡言亂語。當我使用 ethereum-tx-decoders decodeTx 時,我得到了無效的 arrayify 值。當我使用任何其他 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

謝謝,麻煩您了

你錯過了一個重要的部分。在您擁有用於 TX 輸入的“接收者”合約的 ABI 和用於日誌的 FROM 合約之前,您將無法解碼輸入或日誌。

要獲得 ABI:要麼使用 etherscan,要麼使用https://sourcify.dev/ ,或者通過讀取字節碼並解析出地址(如果允許 Solidity 編譯器上傳)在 IPFS/BZZ 中找到它。

獲得 ABI 後,將其傳遞給 ethersjs/web3js/web3py,這些庫將能夠解析輸入/輸出。

編輯:另外請記住:如果接收者合約是“代理”合約,那麼您將需要從內部交易中尋找“最終接收者”合約地址。

引用自:https://ethereum.stackexchange.com/questions/107632