diff --git a/transfers/index.js b/transfers/index.js
index 84291936f829200740a3b78965da63a7e1d74446..661651ab3b5b5ffa987974d1a045f3b7284c842c 100644
--- a/transfers/index.js
+++ b/transfers/index.js
@@ -1,6 +1,11 @@
 const { ApiPromise, WsProvider } = require('@polkadot/api');
 require('dotenv').config();
 
+/**
+ *
+ * @param {number} ms miliseconds
+ * @returns
+ */
 async function wait(ms) {
   return new Promise((resolve) => {
     setTimeout(resolve, ms);
@@ -9,7 +14,7 @@ async function wait(ms) {
 
 /**
  * Connect to xxNetwork Public Node thorugh a websocket
- * @return {api} chain api
+ * @return {Promise} chain api
  */
 async function connect() {
   const provider = new WsProvider(process.env.WS_CHAIN);
@@ -20,11 +25,20 @@ async function connect() {
   return api;
 }
 
+/**
+ * Check if node is in sync
+ * @param {Promise} api
+ * @returns {boolean}
+ */
 async function checkSynching(api) {
   const health = await api.rpc.system.health();
   return health.isSyncing.toHuman();
 }
 
+/**
+ * Get api of synchronized xxNetwork Public Node
+ * @returns {Promise} chain api
+ */
 async function getAPI() {
   // Connect to the node
   const api = await connect();
@@ -39,6 +53,12 @@ async function getAPI() {
   }
   return api;
 }
+
+/**
+ * Get all transfers in the latest finalized block
+ * @param {Object} blockEvents list of events
+ * @returns {Object} list of transfers
+ */
 function getTransfers(blockEvents) {
   const transfers = blockEvents
     .filter((record) => (record.event.section === 'balances' && record.event.method === 'Transfer'))
@@ -50,37 +70,58 @@ function getTransfers(blockEvents) {
   return transfers;
 }
 
-async function main() {
-  const api = await getAPI();
+/**
+ * Get receipt of successful transfer sent/received by a specified address
+ * @param {Promise} api chain api
+ * @param {string} address xx network address
+ * @param {boolean} sender true if address is the sender
+ * @returns {Promise}
+ */
+async function getReceipt(api, address, sender) {
+  console.log('Starting finalized blocks listener...');
+
+  return new Promise((reject, resolve) => {
+    api.rpc.chain.subscribeFinalizedHeads(async (header) => {
+      // Get block number
+      const blockNumber = header.number.toNumber();
+      console.log(blockNumber);
 
-  const address = '1qnJN7FViy3HZaxZK9tGAA71zxHSBeUweirKqCaox4t8GT7';
+      // Get block hash
+      const blockHash = await api.rpc.chain.getBlockHash(blockNumber);
 
-  // Subscribe to new blocks
-  console.log('Starting block listener...');
-  const unsub = await api.rpc.chain.subscribeNewHeads(async (header) => {
-  // Get block number
-    const blockNumber = header.number.toNumber();
-    console.log(blockNumber);
+      // Get block events
+      const blockEvents = await api.query.system.events.at(blockHash);
+      const transfers = getTransfers(blockEvents);
+      let transfer;
+      if (sender) {
+        transfer = transfers.filter((tx) => (tx.from === address));
+      } else {
+        transfer = transfers.filter((tx) => (tx.to === address));
+      }
+      if (transfer.length) {
+        console.log(`Found Transfer in block #${blockNumber} ${sender ? 'from' : 'to'} Address: `, transfer);
+        resolve();
+      }
+    });
+  });
+}
 
-    // Get block hash
-    const blockHash = await api.rpc.chain.getBlockHash(blockNumber);
+/**
+ * Listen to all new finalized blocks after making sure node is in sync
+ * and get receipt of latest committed transfer sent/received by input address
+ */
+async function main() {
+  const api = await getAPI();
 
-    // Get block events
-    const blockEvents = await api.query.system.events.at(blockHash);
-    const transfers = getTransfers(blockEvents);
+  // Insert address of which you want to get a receipt
+  const Alice = '6a6XHUGV5mu33rX1vn3iivxxUR4hwoUapsuECGyHpPzfaNtt';
+  // const Bob = '6YXN1Q6Lx3u8tr2WVr5myb3zNa3pVG5FL3ku8uqckR5RoA21';
 
-    const fromAddr = transfers.some((transfer) => (transfer.from === address));
-    const toAddr = transfers.some((transfer) => (transfer.to === address));
-    if (fromAddr) {
-      unsub();
-      console.log('Found Transfer From Address: ', address);
-    }
+  // Define if that address is the sender or recipient of the transfer
+  const sender = true;
 
-    if (toAddr) {
-      unsub();
-      console.log('Found Transfer To Address: ', address);
-    }
-  });
+  // Subscribe to new finalized blocks
+  await getReceipt(api, Alice, sender);
 }
 
 main().catch((err) => console.error(err)).finally(() => process.exit());