Web3js
解碼乙太坊輸入數據
伙計們,我正忙著瀏覽記憶體池並試圖跟踪各種交易和部分交易。作為第一步,我想我會列出交易和我以後可能需要的位。問題來了。
我無法從交易輸入中獲取任何資訊。我已經嘗試了所有以前推薦的解決方案和軟體包,但無濟於事。
當我使用 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,這些庫將能夠解析輸入/輸出。
編輯:另外請記住:如果接收者合約是“代理”合約,那麼您將需要從內部交易中尋找“最終接收者”合約地址。