eth-ear
Version:
Ethereum blockchain event and transaction listener.
93 lines (78 loc) • 2.69 kB
JavaScript
const ethers = require('ethers');
// ERC-20 transfer event
function transferListener(contractAddress, abi, network) {
let provider = new ethers.getDefaultProvider(network);
let contract = new ethers.Contract(contractAddress, abi, provider);
console.log("Listening to event 'Transfer' on contract " + contractAddress +
" on the " + network + " network: \n");
(async function() {
new Promise((resolve, reject) => {
contract.on('Transfer', (from, to, amount) => {
console.log("From : " + from);
console.log("To : " + to);
console.log("Amount: " + amount);
console.log("\n");
});
});
})();
}
// ERC-20 approval event
function approvalListener(contractAddress, abi, network) {
let provider = new ethers.getDefaultProvider(network);
let contract = new ethers.Contract(contractAddress, abi, provider);
console.log("Listening to event 'Approval' on contract " + contractAddress +
" on the " + network + " network: \n");
(async function() {
new Promise((resolve, reject) => {
contract.on('Approval', (owner, spender, amount) => {
console.log("Owner : " + owner);
console.log("Spender: " + spender);
console.log("Amount : " + amount);
console.log("\n");
});
});
})();
}
// Transaction listener
function transactionListener(txHash, network) {
let provider = new ethers.getDefaultProvider(network);
console.log("Listening to transaction " + txHash +
" on the " + network + " network: \n");
(async () => {
let receipt = await provider.waitForTransaction(txHash);
console.log('Transaction Mined: ' + receipt.transactionHash);
console.log('Transaction Receipt:');
console.log(receipt);
})();
}
module.exports = {
transferListener,
approvalListener,
transactionListener,
}
// TODO:
// More generic function below to call ANY event
// ---------------------------------------------
// function eventListener(eventName, eventParams, contractAddress, abi, network) {
// let provider = new ethers.getDefaultProvider(network);
// let contract = new ethers.Contract(contractAddress, abi, provider);
// let eventParamsLocal = eventParams.slice();
//
// console.log("Listening to event \'" + eventName +
// "\' on contract " + contractAddress +
// " on the " + network + " network: \n");
//
// (async function() {
// new Promise((resolve, reject) => {
//
// contract.on(eventName, (...eventParams) => {
//
// eventParams.forEach((arg, i) => {
// console.log(eventParamsLocal[i] + ": " + arg);
// })
// console.log("\n");
//
// });
// });
// })();
// }