From 550e95f09158bfdece3536803569ae1d3eb6f8e5 Mon Sep 17 00:00:00 2001 From: sapthasurendran Date: Mon, 26 Jul 2021 12:38:52 +0530 Subject: [PATCH] Added blockEvent handler Signed-off-by: sapthasurendran --- .../rest-api-typescript/src/fabric.ts | 24 +++++++++++++++++-- .../rest-api-typescript/src/index.ts | 6 +++-- .../rest-api-typescript/src/server.ts | 4 ++-- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/asset-transfer-basic/rest-api-typescript/src/fabric.ts b/asset-transfer-basic/rest-api-typescript/src/fabric.ts index da6cc722..a2e08a8d 100644 --- a/asset-transfer-basic/rest-api-typescript/src/fabric.ts +++ b/asset-transfer-basic/rest-api-typescript/src/fabric.ts @@ -12,7 +12,10 @@ import { TxEventHandler, TxEventHandlerFactory, Wallets, - Network + Network, + BlockListener, + BlockEvent, + TransactionEvent, } from 'fabric-network'; import { Redis } from 'ioredis'; import * as config from './config'; @@ -25,7 +28,6 @@ import { TransactionNotFoundError, } from './errors'; - export const getNetwork = async (gateway: Gateway): Promise => { const network = await gateway.getNetwork(config.channelName); return network; @@ -354,3 +356,21 @@ const isDuplicateTransaction = (error: { return false; }; +export const blockEventHandler = (redis: Redis): BlockListener => { + const blockListner = async (event: BlockEvent) => { + logger.debug('Block event received '); + const transEvents: Array = event.getTransactionEvents(); + + for (const transEvent of transEvents) { + if (transEvent && transEvent.isValid) { + logger.debug( + 'Remove transation with txnId %s', + transEvent.transactionId + ); + await clearTransactionDetails(redis, transEvent.transactionId); + } + } + }; + + return blockListner; +}; diff --git a/asset-transfer-basic/rest-api-typescript/src/index.ts b/asset-transfer-basic/rest-api-typescript/src/index.ts index 12e167c0..9d65028e 100644 --- a/asset-transfer-basic/rest-api-typescript/src/index.ts +++ b/asset-transfer-basic/rest-api-typescript/src/index.ts @@ -2,10 +2,10 @@ * SPDX-License-Identifier: Apache-2.0 */ -import { Contract } from 'fabric-network'; +import { Contract, Network } from 'fabric-network'; import { Redis } from 'ioredis'; import * as config from './config'; -import { startRetryLoop } from './fabric'; +import { startRetryLoop, blockEventHandler } from './fabric'; import { logger } from './logger'; import { createServer } from './server'; @@ -14,6 +14,8 @@ async function main() { const contract: Contract = app.get('contracts').contract; const redis: Redis = app.get('redis'); + const network: Network = app.get('network'); + await network.addBlockListener(blockEventHandler(redis)); startRetryLoop(contract, redis); app.listen(config.port, () => { diff --git a/asset-transfer-basic/rest-api-typescript/src/server.ts b/asset-transfer-basic/rest-api-typescript/src/server.ts index 5d5f4269..e3ed3fb6 100644 --- a/asset-transfer-basic/rest-api-typescript/src/server.ts +++ b/asset-transfer-basic/rest-api-typescript/src/server.ts @@ -51,10 +51,10 @@ export const createServer = async (): Promise => { const gateway = await getGateway(); const contracts = await getContracts(gateway); - const network = await getNetwork(gateway) + const network = await getNetwork(gateway); app.set('contracts', contracts); app.set('redis', redis); - app.set('network',network) + app.set('network', network); // Health routes app.get('/ready', (_req, res) =>