Skip to content
This repository has been archived by the owner on Jun 11, 2024. It is now read-only.

Commit

Permalink
🐛 Add error handlings
Browse files Browse the repository at this point in the history
  • Loading branch information
sameersubudhi committed Jan 10, 2024
1 parent 42d7def commit a0c2b8d
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 38 deletions.
86 changes: 50 additions & 36 deletions services/blockchain-connector/events/controller/blockchain.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,15 @@ const appNetworkEventController = async cb => {
};

const txpoolNewTransactionController = async cb => {
const txpoolNewTransactionListener = async payload =>
cb({
...payload,
transaction: formatTransaction(payload.transaction),
});
const txpoolNewTransactionListener = async payload => {
try {
const transaction = formatTransaction(payload.transaction);
cb({ ...payload, transaction });
} catch (_) {
// No actions necessary
// Safety check added in case txpool_newTransaction event arrives before init is called
}
};
Signals.get('txpoolNewTransaction').add(txpoolNewTransactionListener);
};

Expand All @@ -73,46 +77,56 @@ const formatBlock = payload =>

const chainNewBlockController = async cb => {
const chainNewBlockListener = async payload => {
const { blockHeader } = payload;
let transactions = [];
let assets = [];

if (
blockHeader.transactionRoot !== EMPTY_TREE_ROOT_HASH ||
blockHeader.assetRoot !== EMPTY_TREE_ROOT_HASH
) {
try {
const block = await getBlockByID(blockHeader.id);
transactions = block.transactions;
assets = block.assets;
} catch (err) {
logger.warn(
`Could not fetch block ${blockHeader.id} within chainNewBlockListener due to: ${err.message}`,
);
logger.debug(err.stack);
try {
const { blockHeader } = payload;
let transactions = [];
let assets = [];

if (
blockHeader.transactionRoot !== EMPTY_TREE_ROOT_HASH ||
blockHeader.assetRoot !== EMPTY_TREE_ROOT_HASH
) {
try {
const block = await getBlockByID(blockHeader.id);
transactions = block.transactions;
assets = block.assets;
} catch (err) {
logger.warn(
`Could not fetch block ${blockHeader.id} within chainNewBlockListener due to: ${err.message}`,
);
logger.debug(err.stack);
}
}
}

cb(
formatBlock({
blockHeader,
assets,
transactions,
}),
);

// Reload validators cache on pos module transactions
if (transactions.some(t => t.module === MODULE_NAME_POS)) {
Signals.get('reloadAllPosValidators').dispatch();
cb(
formatBlock({
blockHeader,
assets,
transactions,
}),
);

// Reload validators cache on pos module transactions
if (transactions.some(t => t.module === MODULE_NAME_POS)) {
Signals.get('reloadAllPosValidators').dispatch();
}
} catch (_) {
// No actions necessary
// Safety check added in case txpool_newTransaction event arrives before init is called
}
};
Signals.get('chainNewBlock').add(chainNewBlockListener);
};

const chainDeleteBlockController = async cb => {
const chainDeleteBlockListener = async payload => {
cb(formatBlock(payload));
Signals.get('reloadAllPosValidators').dispatch();
try {
cb(formatBlock(payload));
Signals.get('reloadAllPosValidators').dispatch();
} catch (_) {
// No actions necessary
// Safety check added in case txpool_newTransaction event arrives before init is called
}
};
Signals.get('chainDeleteBlock').add(chainDeleteBlockListener);
};
Expand Down
2 changes: 1 addition & 1 deletion services/blockchain-connector/shared/sdk/client.js
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ const getApiClient = async poolIndex => {
`Dispatched 'resetApiClient' signal from getApiClient for API client ${apiClient.poolIndex}.`,
);
}
return waitForIt(getApiClient, 10);
return waitForIt(getApiClient, Math.ceil(WS_SERVER_PING_INTERVAL / MAX_CLIENT_POOL_SIZE));
})();
};

Expand Down
8 changes: 7 additions & 1 deletion services/blockchain-connector/shared/sdk/pos.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,13 @@ const getAllPosValidators = async isForceReload => {
return allPosValidators;
};

Signals.get('reloadAllPosValidators').add(() => getAllPosValidators(true));
Signals.get('reloadAllPosValidators').add(() =>
getAllPosValidators(true).catch(err => {
logger.warn(
`Could not force reload the PoS validators list. Will retry again later.\nError: ${err.message}`,
);
}),
);

const getPosValidatorsByStake = async limit => {
const validators = await invokeEndpoint('pos_getValidatorsByStake', { limit });
Expand Down

0 comments on commit a0c2b8d

Please sign in to comment.