Ethereum Address Observer
Ethereum addresses observer is part of poonkt.io cryptocurrency exchange. The library is used with combination of web3.js. You need to run a local or remote Ethereum node to use this library.
Installation
npm install eth-address-observer
Usage
const Web3 = require("web3");
const { EthAddressObserver } = require("eth-address-observer");
import { EthAddressObserver } from "eth-address-observer"; // or
/** Requires websocket or ipc provider */
const web3 = new Web3("ws://localhost:8546");
/** Optional config */
const config = {
confirmationsRequired: 12, // default
erc20: {
confirmationsRequired: 12 // default
}
};
const observer = new EthAddressObserver(web3, config);
Adding, removing and listing:
/** Adding ethereum address to observer */
observer.add("0x0000000000000000000000000000000000000000");
observer.add(["0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000001"]);
/** Removing ethereum address from observer */
observer.remove("0x0000000000000000000000000000000000000000");
observer.remove(["0x0000000000000000000000000000000000000000", "0x0000000000000000000000000000000000000001"]);
/** Show observable addresses */
console.log(observer.list);
Listening for incoming transactions:
/** Subscribing to changes */
/** Emits ever transaction in pending state */
observer.subscribe("pending", (transactionHash) => {
const transaction = await web3.eth.getTransaction(transactionHash);
console.log(
`${transaction.to}: Transaction: ${transaction.hash} in PENDING state`
);
});
/** Emits at every confirmation */
observer.subscribe("confirmation", (confirmationNumber, transactionHash) => {
const transaction = await web3.eth.getTransaction(transactionHash);
console.log(
`${transaction.to}: Transaction: ${transaction.hash} new CONFIRMATION: ${confirmationNumber}, in block ${transaction.blockHash}`
);
});
/** When transaction reach required amount of confirmations */
observer.subscribe("success", async (transactionHash) => {
const transaction = await web3.eth.getTransaction(transactionHash);
console.log(
`${transaction.to}: Transaction: ${transaction.hash} is CONFIRMED!`
);
});
Listening for incoming token transfers:
const tokens = new Map();
tokens.set("0x022E292b44B5a146F2e8ee36Ff44D3dd863C915c".toLowerCase(), {
name: "XEENUS",
decimals: 18
});
tokens.set("0x1f9061B953bBa0E36BF50F21876132DcF276fC6e".toLowerCase(), {
name: "ZEENUS",
decimals: 0
});
function getTokenInfo(address) {
return tokens.get(address.toLowerCase()) || { name: "unknown token", decimals: "unknown" };
}
/** For any valid erc20 tokens with Transfer(address,address,uint256) event interface */
observer.subscribe("transfer-pending", (transactionHash, erc20Transfer) => {
const { hash, address, from, to, value, log } = erc20Transfer;
const tokenInfo = getTokenInfo(address);
console.log(`${to}: ${tokenInfo.name} Transaction: ${transactionHash} in PENDING state`);
});
observer.subscribe("transfer-confirmation", (confirmationNumber, transactionHash, erc20Transfer) => {
const { hash, address, from, to, value, log } = erc20Transfer;
const tokenInfo = getTokenInfo(address);
console.log(
`${to}: ${tokenInfo.name} Transaction: ${transactionHash} new CONFIRMATION: ${confirmationNumber}, in block ${log.blockHash}`
);
});
observer.subscribe("transfer-success", (transactionHash, erc20Transfer) => {
const { hash, address, from, to, value, log } = erc20Transfer;
const tokenInfo = getTokenInfo(address);
console.log(`${to}: ${tokenInfo.name} Transaction: ${transactionHash} is CONFIRMED!`);
});
Sponsorship
If you like the product please donate:
- BTC: bc1q9l3h6fkg4pznglaeupl7j94vk3fs8k4ssvg6zz
- ETH: 0x4a90366BE03B1b0bAd024e833a18C8602a4291A0
- XRP: rwUmFRpwX69eTkMMGmity1TgC4FSvday7z
- BCH qrcyfuyr33lxvzjceuqq4sxnwwd3fxty0cg5fhpatm
- ERC-20 TOKENS: 0x4a90366BE03B1b0bAd024e833a18C8602a4291A0