Не похоже на проблему web3, скорее на проблему Rx JS или какую-либо библиотеку, которую вы используете для этих звонков по подписке ... Вы подписываетесь дважды, поэтому я думаю, что именно поэтому вы видя, как вещи запускаются дважды.
const subscription = web3Subs.eth.subscribe('pendingTransactions'); // You subscribe here
subscription.subscribe((error, txHash) => { // And you subscribe again to that subscription
if (error) console.log(error);
console.log(txHash + " received.");
})
Я мог бы представить, что это даст вам лучшие результаты, если вы напишите это так, поскольку вы не подписываетесь дважды и по-прежнему назначаете подписку на переменную в случае необходимости для ссылки на него:
const subscription = web3Subs.eth.subscribe((error, txHash) => {
if (error) console.log(error);
console.log(txHash + " received.");
});