如何侦听ETH(原生令牌)的传输事件/日志



我正在使用ethers.js和Infura,侦听ERC-20传输USDT等事件。从我所看到的,我需要得到每个块的trx来获得ETH的传输。

const { ethers, Contract } = require("ethers");
const { addEvent } = require('./events');
const tokens = require('./contracts/tokenConfigs.json');
const provider = new ethers.providers.JsonRpcProvider(`xxx`);
const main = async ({
name,
symbol,
address,
eventType,
threshold,
decimals,
blockExplorerUrl,
ABIpath,
}) => {
const ERC20_ABI = require(ABIpath);
const contract = new Contract(address, ERC20_ABI, provider);
contract.on('Transfer', async (from, to, amount, data) => {
if (amount.toNumber() >= threshold) {
console.log(`Whale transfer alert for ${name} ${blockExplorerUrl}${data.transactionHash}`);
await addEvent({...});
}
});
}

本地令牌传输通常不产生事件日志除非传输是EVM消息调用的一部分(也称为内部事务),并且该事件在合约代码中明确指定。

event Transferred(address indexed recipient, uint256 amount);
function transferETH(address payable recipient) external payable {
recipient.transfer(msg.value);
emit Transferred(recipient, msg.value);
}

如果你想获得一个地址的本地传输,你需要使用一个现有的聚合数据库,或者通过循环所有区块中的所有交易收据来自己构建一个数据库。请注意,内部交易在收据中不可用,您需要重建它们-例如使用debug_traceTransaction方法。

相关内容

  • 没有找到相关文章

最新更新