Commit a55b0d52 authored by Eriksson Monteiro's avatar Eriksson Monteiro

update millix node

parent 01828f2c
......@@ -44,6 +44,22 @@ class _IBHgAmydZbmTUAe8 extends Endpoint {
}));
}
const parentSet = {};
_.each(data, row => parentSet[row.transaction_id_parent] = null);
const parentTransactionListID = Object.keys(parentSet);
return database.applyShards((shardID) => {
return database.getRepository('transaction', shardID)
.listTransactions({'transaction_id_in': parentTransactionListID});
}).then(parentTransactionList => {
_.each(parentTransactionList, parentTransaction => {
if(!parentSet[parentTransaction.transaction_id]) {
parentSet[parentTransaction.transaction_id] = parentTransaction.shard_id;
}
});
_.each(data, transaction => transaction.shard_id_parent = parentSet[transaction.transaction_id_parent] || null);
return data;
});
}).then(data => {
const normalization = database.getRepository('normalization');
const transaction = {};
_.extend(transaction, _.pick(data[0], 'transaction_id', 'shard_id', 'transaction_date', 'node_id_origin', 'node_id_proxy', 'version', 'payload_hash', 'stable_date', 'is_stable', 'parent_date', 'is_parent', 'timeout_date', 'is_timeout', 'status', 'create_date'));
......@@ -119,7 +135,7 @@ class _IBHgAmydZbmTUAe8 extends Endpoint {
if (row.transaction_id_parent && !parents.has(row.transaction_id_parent)) {
parents.add(row.transaction_id_parent);
transaction['transaction_parent_list'].push(_.mapKeys(_.pick(row, 'transaction_id_parent', 'transaction_id_child', 'transaction_parent_status', 'transaction_parent_create_date'), keyMapFunction));
transaction['transaction_parent_list'].push(_.mapKeys(_.pick(row, 'transaction_id_parent', 'shard_id_parent', 'transaction_id_child', 'shard_id_child', 'transaction_parent_status', 'transaction_parent_create_date'), keyMapFunction));
}
});
......
......@@ -772,7 +772,7 @@ export const DATABASE_ENGINE = 'sqlite';
export const DATABASE_CONNECTION = {};
export const MILLIX_CIRCULATION = 9e15;
export const NODE_MILLIX_BUILD_DATE = 1640009160;
export const NODE_MILLIX_VERSION = '1.14.3-tangled';
export const NODE_MILLIX_VERSION = '1.14.4-tangled';
export const DATA_BASE_DIR_MAIN_NETWORK = './millix-tangled';
export const DATA_BASE_DIR_TEST_NETWORK = './millix-tangled';
let DATA_BASE_DIR = MODE_TEST_NETWORK ? DATA_BASE_DIR_TEST_NETWORK : DATA_BASE_DIR_MAIN_NETWORK;
......
......@@ -45,7 +45,8 @@ export class Database {
if (where) {
_.each(_.keys(where), key => {
if (where[key] === undefined ||
((key.endsWith('_begin') || key.endsWith('_min') || key.endsWith('_end') || key.endsWith('_max')) && !where[key])) {
((key.endsWith('_begin') || key.endsWith('_min') || key.endsWith('_end') || key.endsWith('_max')) && !where[key]) ||
(key.endsWith('_in') && !(where[key] instanceof Array))) {
return;
}
......@@ -62,6 +63,13 @@ export class Database {
else if (key.endsWith('_end') || key.endsWith('_max')) {
sql += `${key.substring(0, key.lastIndexOf('_'))} <= ?`;
}
else if (key.endsWith('_in')) {
sql += `${key.substring(0, key.lastIndexOf('_'))} IN (${where[key].map(() => '?').join(',')})`;
for(let parameter of where[key]) {
parameters.push(parameter);
}
return;
}
else {
sql += `${key}= ?`;
}
......
......@@ -236,14 +236,14 @@ export default class Transaction {
this.database.all('SELECT * FROM (SELECT `transaction`.* FROM `transaction` ' +
'INNER JOIN transaction_input ON transaction_input.transaction_id = `transaction`.transaction_id ' +
'INNER JOIN transaction_output ON transaction_output.transaction_id = transaction_input.transaction_id ' +
'WHERE transaction_input.address_key_identifier = ?1 ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND transaction_output.is_stable = 0 ORDER BY transaction_date ASC LIMIT ' + config.CONSENSUS_VALIDATION_PARALLEL_PROCESS_MAX + ') ' +
'WHERE transaction_input.address_key_identifier = ?1 ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND transaction_output.is_stable = 0 ORDER BY transaction_date ASC LIMIT 100) ' +
'UNION SELECT * FROM (SELECT `transaction`.* FROM `transaction` ' +
'INNER JOIN transaction_output ON transaction_output.transaction_id = `transaction`.transaction_id ' +
'WHERE transaction_output.address_key_identifier = ?1 ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND transaction_output.is_stable = 0 ORDER BY transaction_date ASC LIMIT ' + config.CONSENSUS_VALIDATION_PARALLEL_PROCESS_MAX + ') ' +
'WHERE transaction_output.address_key_identifier = ?1 ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND transaction_output.is_stable = 0 ORDER BY transaction_date ASC LIMIT 100) ' +
'UNION SELECT * FROM (SELECT `transaction`.* FROM transaction_input ' +
'INNER JOIN `transaction` ON `transaction`.transaction_id = transaction_input.transaction_id ' +
'WHERE output_transaction_id IN (SELECT transaction_id FROM transaction_output WHERE address_key_identifier = ?1 ' +
'AND is_stable = 1 AND is_spent = 1 AND status = 2) ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND +`transaction`.is_stable = 0 ORDER BY transaction_date ASC LIMIT ' + config.CONSENSUS_VALIDATION_PARALLEL_PROCESS_MAX + ') ',
'AND is_stable = 1 AND is_spent = 1 AND status = 2) ' + (excludeTransactionIDList && excludeTransactionIDList.length > 0 ? 'AND `transaction`.transaction_id NOT IN (' + excludeTransactionIDList.map((_, idx) => `?${idx + 2}`).join(',') + ')' : '') + 'AND +`transaction`.is_stable = 0 ORDER BY transaction_date ASC LIMIT 100) ',
[
addressKeyIdentifier
].concat(excludeTransactionIDList),
......@@ -578,12 +578,6 @@ export default class Transaction {
addTransactionFromObject(transaction, isWalletTransaction) {
return new Promise((resolve, reject) => {
mutex.lock(['transaction' + (this.database.shardID ? '_' + this.database.shardID : '')], (unlock) => {
this.database.run('BEGIN TRANSACTION', (err) => {
if (err) {
reject(err);
return unlock();
}
let runPipeline = null;
let promise = new Promise(r => {
runPipeline = r;
......@@ -711,32 +705,23 @@ export default class Transaction {
promise = promise.then(() => this.addressRepository.addAddress(address.address, address.address_base, address.address_version, address.address_key_identifier));
});
promise.then(() => this.database.run('COMMIT', () => {
promise.then(() => {
eventBus.emit('transaction_new:' + transaction.transaction_id, transaction);
resolve(transaction);
unlock();
}))
.catch((err) => {
this.database.run('ROLLBACK', () => {
}).catch((err) => {
console.error(err);
reject(err);
unlock();
});
});
runPipeline();
});
});
});
}
addTransactionFromShardObject(transaction, isWalletTransaction) {
return new Promise((resolve, reject) => {
mutex.lock(['transaction' + (this.database.shardID ? '_' + this.database.shardID : '')], (unlock) => {
this.database.run('BEGIN TRANSACTION', (err) => {
if (err) {
reject(err);
return unlock();
}
let runPipeline = null;
let promise = new Promise(r => {
runPipeline = r;
......@@ -859,20 +844,17 @@ export default class Transaction {
promise = promise.then(() => new Promise(resolve => this.addTransactionSignature(transaction.transaction_id, transaction.shard_id, signature.address_base, signature.signature, signature.status, signature.create_date).then(resolve).catch(resolve)));
});
promise.then(() => this.database.run('COMMIT', () => {
promise.then(() => {
resolve(transaction);
unlock();
})).catch((err) => {
this.database.run('ROLLBACK', () => {
}).catch((err) => {
console.error(err);
reject(err);
unlock();
});
});
runPipeline();
});
});
});
}
......@@ -1019,7 +1001,10 @@ export default class Transaction {
});
})
.then(transaction => resolve(transaction))
.catch((e) => resolve(null));
.catch((e) => {
console.log('[transaction] cannot get transaction with id', transactionID, 'err:', e);
resolve(null);
});
});
}
......@@ -2423,12 +2408,12 @@ export default class Transaction {
'TIN.input_position, TIN.output_transaction_id AS input_output_transaction_id, TIN.output_shard_id AS input_output_shard_id, TIN.output_position AS input_output_position, TIN.output_transaction_date AS input_output_transaction_date, TIN.double_spend_date AS input_double_spend_date, TIN.is_double_spend AS input_is_double_spend, TIN.address AS input_address, TIN.address_key_identifier as input_address_key_identifier, TIN.status AS input_status, TIN.create_date AS input_create_date, ' +
'TOUT.output_position, TOUT.address AS output_address, TOUT.address_key_identifier AS output_address_key_identifier, TOUT.amount, TOUT.stable_date AS output_stable_date, TOUT.is_stable AS output_is_stable, TOUT.spent_date, TOUT.is_spent, TOUT.double_spend_date AS output_double_spend_date, TOUT.is_double_spend AS output_is_double_spend, TOUT.status AS output_status, TOUT.create_date AS output_create_date, ' +
'TOUTA.attribute_type_id AS output_attribute_type_id, TOUTA.value AS output_attribute_value, TOUTA.status AS output_attribute_status, TOUTA.create_date AS output_attribute_create_date, ' +
'TPP.transaction_id_parent, TPP.transaction_id_child, TPP.status AS transaction_parent_status, TPP.create_date AS transaction_parent_create_date ' +
'TPP.transaction_id_parent, TPP.transaction_id_child, TPP.shard_id AS shard_id_child, TPP.status AS transaction_parent_status, TPP.create_date AS transaction_parent_create_date ' +
'FROM `transaction` INNER JOIN transaction_signature AS TS ON `transaction`.transaction_id = TS.transaction_id ' +
'INNER JOIN transaction_input AS TIN ON `transaction`.transaction_id = TIN.transaction_id ' +
'INNER JOIN transaction_output AS TOUT ON `transaction`.transaction_id = TOUT.transaction_id ' +
'LEFT JOIN transaction_output_attribute AS TOUTA ON `transaction`.transaction_id = TOUTA.transaction_id ' +
'LEFT JOIN transaction_parent AS TPP ON `transaction`.transaction_id = TPP.transaction_id_child', where);
'LEFT JOIN transaction_parent AS TPP ON `transaction`.transaction_id = TPP.transaction_id_child ', where);
this.database.all(sql, parameters, (err, rows) => {
if (err) {
console.log(err);
......@@ -2489,11 +2474,15 @@ export default class Transaction {
return reject();
}
async.eachSeries(transactionList, (transaction, callback) => {
if(transaction.shard_id === 'AyAC3kjLtjM4vktAJ5Xq6mbXKjzEqXoSsmGhhgjnkXUvjtF2M') { /* do not prune this special shard id. TODO: refactor and activate shard */
if (transaction.shard_id === 'AyAC3kjLtjM4vktAJ5Xq6mbXKjzEqXoSsmGhhgjnkXUvjtF2M') { /* do not prune this special shard id. TODO: refactor and activate shard */
return callback();
}
this.getTransactionObject(transaction.transaction_id)
.then(transaction => {
if (!transaction) {
return;
}
if (database.getShard(transaction.shard_id)) {
// is supported shard? move transaction to
// shard
......
......@@ -126,6 +126,6 @@ db.initialize()
});
}
});
//millix v1.14.3-tangled
//millix v1.14.4-tangled
\ No newline at end of file
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