eth-address-observer

Ethereum addresses observer for poonkt.io

Usage no npm install needed!

<script type="module">
  import ethAddressObserver from 'https://cdn.skypack.dev/eth-address-observer';
</script>

README

poonkt

Ethereum Address Observer

GitHub Workflow Status npm GitHub npm

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