Web3js

訂閱整個區塊鏈的所有代幣轉賬

  • February 19, 2022

我正在尋找如何訂閱整個區塊鏈中的所有令牌傳輸事件。我想知道這是如何在 etherscan.io 上實現的

https://ropsten.etherscan.io/tokentxns

我搜尋了 web3.js api 並蒐索了網際網路上的任何地方,但在我看來,沒有簡單的解決方案。我是否可以通過任何可用的 API 以某種方式獲取這些數據,或者我必須更深入地執行我自己的帶有嵌入式偵聽器的 EVM?

好的,經過一番鬥爭,我找到了解決方案

var Web3 = require('web3');

var web3 = new Web3('ws://127.0.0.1:8585');
console.log('Initiated');

// Track all the token transactions in whole blockchain
var subscription = web3.eth.subscribe('logs', { fromBlock: 1, topics: ["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"] }, function() {})
.on("data", function(trxData){
 function formatAddress(data) {
   var step1 = web3.utils.hexToBytes(data);
   for (var i = 0; i < step1.length; i++) if (step1[0] == 0) step1.splice(0, 1);
   return web3.utils.bytesToHex(step1);
 }

 console.log("Register new transfer: " + trxData.transactionHash);
 console.log("Contract " + trxData.address + " has transaction of " + web3.utils.hexToNumberString(trxData.data) + " from " + formatAddress(trxData.topics['1']) + " to " + formatAddress(trxData.topics['2']));
 //console.log(trxData);
 web3.eth.getTransactionReceipt(trxData.transactionHash, function(error, reciept) {
   console.log('Sent by ' + reciept.from + ' to contract ' + reciept.to);
 });
});

腳本將以下列格式輸出數據:

Register new transfer: 0x3bb3d83fa26560002cad0e920b78979eee5c5652a623f98cea5460dbb8d8fc94
Contract 0x0F5B3e7B0074F43c8C9C5324fabF83942c1FEf5c has transaction of 1 from 0x3cd40959e6fa78d4636cad472fdd4fa15d9867c7 to 0xd5142d2778f26471c1017f79687a91783636cfeb
Sent by 0xc270d8a6cf39b560c2746d4efdb24290fed76123 to contract 0x2c09402b4a1a42321160fd5af7737ca432e68c90

它包含關於誰觸發了轉賬的 ifo,哪個合約是交易的主要入口點,代幣合約地址是什麼,轉賬了多少 kone,從哪個地址到哪個地址以及交易雜湊。

您現在可以監視整個區塊鏈!快樂的黑客!

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