Commit fdc0e3b8 authored by Eriksson Monteiro's avatar Eriksson Monteiro

update millix node: improve consensus

parent 0c07764b
...@@ -902,11 +902,22 @@ export class WalletTransactionConsensus { ...@@ -902,11 +902,22 @@ export class WalletTransactionConsensus {
consensusData.active = false; consensusData.active = false;
this._transactionValidationRejected.add(transactionID); this._transactionValidationRejected.add(transactionID);
console.log('[wallet-transaction-consensus] the transaction', transactionID, 'was not validated (due to double spend) during consensus round number', consensusData.consensus_round_count); console.log('[wallet-transaction-consensus] the transaction', transactionID, 'was not validated (due to double spend) during consensus round number', consensusData.consensus_round_count);
return database.applyShardZeroAndShardRepository('transaction', transaction.shard_id, transactionRepository => { return database.applyShards(shardID => {
return transactionRepository.updateTransactionAsDoubleSpend(transaction.transaction_id, data.transaction_input_double_spend /*double spend input*/) const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.updateTransactionAsDoubleSpend(transactionID, data.transaction_input_double_spend /*double spend input*/)
.then(() => transactionRepository.clearTransactionObjectCache(transactionID)); .then(() => transactionRepository.clearTransactionObjectCache(transactionID));
}).then(() => { }).then(() => {
if (transaction) {
return transaction;
}
return database.firstShards(shardID => database.getRepository('transaction', shardID)
.getTransactionObject(transactionID));
}).then(transaction => {
return new Promise(resolve => { return new Promise(resolve => {
if (!transaction) {
return resolve();
}
async.eachSeries(transaction.transaction_input_list, (input, callback) => { async.eachSeries(transaction.transaction_input_list, (input, callback) => {
if (this._transactionValidationRejected[input.output_transaction_id]) { if (this._transactionValidationRejected[input.output_transaction_id]) {
...@@ -951,15 +962,11 @@ export class WalletTransactionConsensus { ...@@ -951,15 +962,11 @@ export class WalletTransactionConsensus {
callback(); callback();
} }
}); });
}, () => resolve()); }, () => resolve(transaction));
});
}).then(() => wallet._checkIfWalletUpdate(new Set(_.map(transaction.transaction_output_list, o => o.address_key_identifier))))
.then(() => {
consensusData.resolve();
})
.catch(() => {
consensusData.resolve();
}); });
}).then(transaction => wallet._checkIfWalletUpdate(new Set(_.map(transaction?.transaction_output_list || [], o => o.address_key_identifier))))
.then(() => consensusData.resolve && consensusData.resolve())
.catch(() => consensusData.resolve && consensusData.resolve());
} }
} }
else if (isNotFound) { else if (isNotFound) {
...@@ -971,11 +978,12 @@ export class WalletTransactionConsensus { ...@@ -971,11 +978,12 @@ export class WalletTransactionConsensus {
console.log('[wallet-transaction-consensus] the transaction', transactionID, 'was not validated (due to not found reply) during consensus round number', consensusData.consensus_round_count); console.log('[wallet-transaction-consensus] the transaction', transactionID, 'was not validated (due to not found reply) during consensus round number', consensusData.consensus_round_count);
this._transactionValidationRejected.add(transactionID); this._transactionValidationRejected.add(transactionID);
this._transactionRetryValidation[transactionID] = Date.now(); this._transactionRetryValidation[transactionID] = Date.now();
return database.applyShardZeroAndShardRepository('transaction', transaction.shard_id, transactionRepository => { return database.applyShards(shardID => {
const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.timeoutTransaction(transactionID) return transactionRepository.timeoutTransaction(transactionID)
.then(() => transactionRepository.clearTransactionObjectCache(transactionID)); .then(() => transactionRepository.clearTransactionObjectCache(transactionID));
}).then(() => { }).then(() => {
consensusData.resolve(); consensusData.resolve && consensusData.resolve();
}); });
} }
} }
...@@ -993,12 +1001,12 @@ export class WalletTransactionConsensus { ...@@ -993,12 +1001,12 @@ export class WalletTransactionConsensus {
const transactionRepository = database.getRepository('transaction', shardID); const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.invalidateTransaction(transactionID) return transactionRepository.invalidateTransaction(transactionID)
.then(() => transactionRepository.clearTransactionObjectCache(transactionID)); .then(() => transactionRepository.clearTransactionObjectCache(transactionID));
}).then(() => wallet._checkIfWalletUpdate(new Set(_.map(transaction.transaction_output_list, o => o.address_key_identifier)))) }).then(() => wallet._checkIfWalletUpdate(new Set(_.map(transaction?.transaction_output_list || [], o => o.address_key_identifier))))
.then(() => consensusData.resolve()) .then(() => consensusData.resolve && consensusData.resolve())
.catch(() => consensusData.resolve()); .catch(() => consensusData.resolve && consensusData.resolve());
} }
else { else {
consensusData.resolve(); consensusData.resolve && consensusData.resolve();
} }
} }
} }
...@@ -1011,21 +1019,27 @@ export class WalletTransactionConsensus { ...@@ -1011,21 +1019,27 @@ export class WalletTransactionConsensus {
cache.removeCacheItem('validation', transactionID); cache.removeCacheItem('validation', transactionID);
consensusData.active = false; consensusData.active = false;
console.log('[wallet-transaction-consensus] transaction object no present for tx id:', transactionID);
return (() => {
if (transaction) {
return Promise.resolve(transaction);
}
return database.firstShards(shardID => database.getRepository('transaction', shardID)
.getTransactionObject(transactionID));
})().then(transaction => {
if (transaction) { if (transaction) {
walletSync.syncTransactionSpendingOutputs(transaction, config.MODE_NODE_SYNC_FULL); walletSync.syncTransactionSpendingOutputs(transaction, config.MODE_NODE_SYNC_FULL);
} }
else { else {
console.log('[wallet-transaction-consensus] unexpected null transaction object detected'); console.log('[wallet-transaction-consensus] unexpected null transaction object detected');
} }
console.log('[wallet-transaction-consensus] transaction object no present for tx id:', transactionID);
return database.applyShards(shardID => { return database.applyShards(shardID => {
const transactionRepository = database.getRepository('transaction', shardID); const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.updateTransactionAsStable(transactionID) return transactionRepository.updateTransactionAsStable(transactionID)
.then(() => transactionRepository.clearTransactionObjectCache(transactionID)); .then(() => transactionRepository.clearTransactionObjectCache(transactionID));
}).then(() => wallet._checkIfWalletUpdate(new Set(_.map(transaction?.transaction_output_list || [], o => o.address_key_identifier)))) }).then(() => wallet._checkIfWalletUpdate(new Set(_.map(transaction?.transaction_output_list || [], o => o.address_key_identifier))));
.then(() => consensusData.resolve()) }).then(() => consensusData.resolve && consensusData.resolve())
.catch(() => consensusData.resolve()); .catch(() => consensusData.resolve && consensusData.resolve());
} }
} }
this._nextConsensusRound(transactionID); this._nextConsensusRound(transactionID);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment