diff --git a/app/lib/rules/local_rules.ts b/app/lib/rules/local_rules.ts index 93b8e4aa19df8131ab24ec43599e4a926badf6ce..d2f62c6c80fd36aeb09b1827c15920fd3fadca4c 100644 --- a/app/lib/rules/local_rules.ts +++ b/app/lib/rules/local_rules.ts @@ -346,9 +346,13 @@ export const LOCAL_RULES_FUNCTIONS = { }, checkTxAmounts: async (block:BlockDTO) => { + let result = true; for (const tx of block.transactions) { - LOCAL_RULES_HELPERS.checkTxAmountsValidity(tx); + if (!LOCAL_RULES_HELPERS.checkTxAmountsValidity(tx)) { + result = false; + } } + return result; }, checkTxRecipients: async (block:BlockDTO) => { @@ -430,21 +434,26 @@ function checkSingleMembershipSignature(ms:any) { return verify(ms.getRaw(), ms.signature, ms.issuer); } -function checkBunchOfTransactions(transactions:TransactionDTO[], conf:ConfDTO, options?:{ dontCareAboutChaining?:boolean }){ +function checkBunchOfTransactions(transactions:TransactionDTO[], conf:ConfDTO, options?:{ dontCareAboutChaining?:boolean }):Promise<boolean>{ const block:any = { transactions, identities: [], joiners: [], actives: [], leavers: [], revoked: [], excluded: [], certifications: [] }; const index = Indexer.localIndex(block, conf) - return (async () => { - let local_rule = LOCAL_RULES_FUNCTIONS; - await local_rule.checkTxLen(block); - await local_rule.checkTxIssuers(block); - await local_rule.checkTxSources(block); - await local_rule.checkTxRecipients(block); - await local_rule.checkTxAmounts(block); - await local_rule.checkTxSignature(block); - if (!options || !options.dontCareAboutChaining) { - await local_rule.checkMaxTransactionChainingDepth(block, conf, index); - } - })() + let local_rule = LOCAL_RULES_FUNCTIONS; + return Promise.all([ + local_rule.checkTxLen(block), + local_rule.checkTxIssuers(block), + local_rule.checkTxSources(block), + local_rule.checkTxRecipients(block), + local_rule.checkTxAmounts(block), + local_rule.checkTxSignature(block), + local_rule.checkMaxTransactionChainingDepth(block, conf, index), + ]).then(function(values) { + for (const value of values) { + if (!value) { + return false; + } + } + return true; + }); } export const LOCAL_RULES_HELPERS = { @@ -509,6 +518,7 @@ export const LOCAL_RULES_HELPERS = { } deltas[i] = delta; } + return true; }, getMaxPossibleVersionNumber: async (current:DBBlock) => { diff --git a/app/modules/prover/lib/blockGenerator.ts b/app/modules/prover/lib/blockGenerator.ts index fc98c01e124e18b4b7c023cd2ad76e1a70aa5e15..5ed9d9b413c443d8271b03b37a8eb00a495ccbaf 100644 --- a/app/modules/prover/lib/blockGenerator.ts +++ b/app/modules/prover/lib/blockGenerator.ts @@ -104,7 +104,7 @@ export class BlockGenerator { return [cur, newWoTMembers, finalJoinData, leavers, updates]; } - private async findTransactions(current:DBBlock, options:{ dontCareAboutChaining?:boolean }) { + private async findTransactions(current:DBBlock, options:{ dontCareAboutChaining:boolean }) { const ALSO_CHECK_PENDING_TXS = true const versionMin = current ? Math.min(CommonConstants.LAST_VERSION_FOR_TX, current.version) : CommonConstants.DOCUMENTS_VERSION; const txs = await this.dal.getTransactionsPending(versionMin); @@ -113,26 +113,23 @@ export class BlockGenerator { for (const obj of txs) { obj.currency = this.conf.currency const tx = TransactionDTO.fromJSONObject(obj); - try { - /*const tx_check_1 = Promise.all([await LOCAL_RULES_HELPERS.checkBunchOfTransactions(passingTxs.concat(tx), this.conf, options)]) const nextBlockWithFakeTimeVariation = { medianTime: current.medianTime + 1 }; - const tx_check_2 = Promise.all([await GLOBAL_RULES_HELPERS.checkSingleTransaction(tx, nextBlockWithFakeTimeVariation, this.conf, this.dal, ALSO_CHECK_PENDING_TXS)]) - const tx_check_3 = Promise.all([await GLOBAL_RULES_HELPERS.checkTxBlockStamp(tx, this.dal)]) - if (tx_check_1 && tx_check_2 && tx_check_3) { + let logger = this.logger; + Promise.all([ + await LOCAL_RULES_HELPERS.checkBunchOfTransactions(passingTxs.concat(tx), this.conf, options), + await GLOBAL_RULES_HELPERS.checkSingleTransaction(tx, nextBlockWithFakeTimeVariation, this.conf, this.dal, ALSO_CHECK_PENDING_TXS), + await GLOBAL_RULES_HELPERS.checkTxBlockStamp(tx, this.dal) + ]).then(function(values) { + if (values[0] && values[1]) transactions.push(tx); passingTxs.push(tx); - this.logger.info('Transaction %s added to block', tx.hash); - }*/ - } catch (err) { - this.logger.error(err); - const currentNumber = (current && current.number) || 0; - const blockstamp = tx.blockstamp || (currentNumber + '-'); - const txBlockNumber = parseInt(blockstamp.split('-')[0]); - // 10 blocks before removing the transaction - if (currentNumber - txBlockNumber + 1 >= CommonConstants.TRANSACTION_MAX_TRIES) { - await this.dal.removeTxByHash(tx.hash); - } - } + logger.info('Transaction %s added to block', tx.hash); + }).catch (function(err) { + logger.error(err); + const currentNumber = (current && current.number) || 0; + const blockstamp = tx.blockstamp || (currentNumber + '-'); + const txBlockNumber = parseInt(blockstamp.split('-')[0]); + }); } return transactions; }