Commit 59d98533 authored by Eriksson Monteiro's avatar Eriksson Monteiro

update millix node

parent d7055843
......@@ -44,8 +44,10 @@ class _rKclyiLtHx0dx55M extends Endpoint {
unstable
},
network : {
online : network.initialized,
peer_count: network.registeredClients.length
online : network.initialized,
peer_count : network.registeredClients.length,
node_is_public: network.nodeIsPublic === undefined ? 'unknown' : network.nodeIsPublic,
node_public_ip: network.nodePublicIp
},
log : {
log_count : logManager.lastIdx,
......
......@@ -11,7 +11,7 @@ export const NODE_HOST = 'localhost';
export const NODE_HOST_FORCE = false;
export const NODE_BIND_IP = '0.0.0.0';
export const NODE_NAT_PMP = true;
export const NODE_NAT_PMP_CHECK = false;
export const NODE_NAT_PMP_CHECK = true;
export const WEBSOCKET_PROTOCOL = 'wss://';
export const RPC_INTERFACE = '0.0.0.0';
export const NODE_PUBLIC = true;
......@@ -772,7 +772,7 @@ export const DATABASE_ENGINE = 'sqlite';
export const DATABASE_CONNECTION = {};
export const MILLIX_CIRCULATION = 9e15;
export const NODE_MILLIX_BUILD_DATE = 1631097631;
export const NODE_MILLIX_VERSION = '1.11.11-tangled';
export const NODE_MILLIX_VERSION = '1.11.15-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;
......
......@@ -115,9 +115,10 @@ export class WalletSync {
database.applyShards(shardID => {
const transactionRepository = database.getRepository('transaction', shardID);
return transactionRepository.listTransactionInput({
output_transaction_id: transactionID,
output_shard_id : outputShardID,
output_position : outputPosition
output_transaction_id : transactionID,
output_shard_id : outputShardID,
output_position : outputPosition,
'``transaction`.status!': 3
}).then(inputList => {
const spendingInputs = [];
return new Promise((resolve) => {
......@@ -211,7 +212,8 @@ export class WalletSync {
return transactionRepository.listTransactionInput({
output_transaction_id: transactionID,
output_shard_id : outputShardID,
output_position : outputPosition
output_position : outputPosition,
'``transaction`.status!': 3
}).then(inputList => {
const spendingInputs = [];
return new Promise((resolve) => {
......@@ -261,7 +263,7 @@ export class WalletSync {
path : path.join(os.homedir(), config.DATABASE_CONNECTION.FOLDER + config.DATABASE_CONNECTION.FILENAME_TRANSACTION_SPEND_QUEUE),
setImmediate: global.setImmediate
}),
batchSize : config.NODE_CONNECTION_OUTBOUND_MAX,
batchSize : this.CARGO_MAX_LENGHT,
precondition : function(cb) {
if (network.registeredClients.length > 0) {
cb(null, true);
......@@ -583,7 +585,8 @@ export class WalletSync {
transaction_output_id: transactionOutputID
});
}
} else {
}
else {
if (!queuedTransactionOutputs.has(transactionOutputID)) {
this.transactionSpendQueue.push({
transaction_output_id: transactionOutputID
......
......@@ -147,15 +147,6 @@ export class WalletTransactionConsensus {
});
}
_updateDoubleSpendTransaction(transactions, doubleSpendTransactionInput) {
console.log('[wallet-transaction-consensus] setting ', transactions.length, ' transaction as double spend');
async.eachSeries(transactions, (transaction, callback) => {
database.getRepository('transaction')
.setTransactionAsDoubleSpend(transaction, doubleSpendTransactionInput)
.then(() => callback());
});
}
_validateTransaction(transaction, nodeID, depth = 0, transactionVisitedSet = new Set(), doubleSpendSet = new Set(), proxyTimeStart = null, proxyTimeLimit = null) {
let transactionID;
if (typeof (transaction) === 'object') {
......@@ -280,12 +271,6 @@ export class WalletTransactionConsensus {
data
}) => {
if (data && (responseType === 'transaction_double_spend' || responseType === 'transaction_valid')) {
let doubleSpendInputs = _.filter(doubleSpendTransactions, i => i.transaction_id !== data.transaction_id);
doubleSpendInputs.forEach(doubleSpendInput => doubleSpendSet.add(doubleSpendInput.transaction_id));
this._updateDoubleSpendTransaction(doubleSpendInputs, input);
}
if ((responseType === 'transaction_double_spend' && !data) ||
(responseType === 'transaction_valid' && data.transaction_id !== transaction.transaction_id)) {
return reject({
......@@ -417,7 +402,6 @@ export class WalletTransactionConsensus {
.then(() => callback(null, true))
.catch((err) => {
if (err && err.cause === 'transaction_double_spend' && !err.transaction_input_double_spend) {
this._updateDoubleSpendTransaction([transaction], srcTransaction);
err.transaction_input_double_spend = _.pick(srcTransaction, [
'output_transaction_id',
'output_position',
......
......@@ -472,7 +472,7 @@ export class Database {
}
if (orderBy) {
if(orderBy.trim().split(" ").length === 1) {
if (orderBy.trim().split(' ').length === 1) {
orderBy += ' asc';
}
const regExp = /^(?<column>\w+) (?<order>asc|desc)$/.exec(orderBy);
......@@ -661,7 +661,18 @@ export class Database {
else {
callback();
}
}, () => resolve());
}, () => {
async.eachSeries(_.keys(this.shards), (shardID, callback) => {
if (this.shards[shardID].checkup) {
this.shards[shardID].checkup().then(() => callback());
}
else {
callback();
}
}, () => {
resolve();
});
});
});
}
}
......
......@@ -2690,6 +2690,41 @@ export default class Transaction {
});
});
}
checkup() {
return new Promise(resolve => {
this.database.exec(`
create temporary table transaction_unspent as
with outputs
as (select o.transaction_id, o.output_position
from transaction_output o
inner join transaction_input i
on o.transaction_id =
i.output_transaction_id and
o.output_position =
i.output_position
where o.is_stable = 1
and o.status != 3
and o.is_spent = 1
and i.status = 3)
select distinct o.transaction_id, o.output_position
from outputs o
left join transaction_input i
on i.output_transaction_id =
o.transaction_id and
i.output_position =
o.output_position and
i.status != 3
where i.transaction_id is NULL;
update transaction_output
set is_spent = 0
where transaction_id in
(select transaction_id from transaction_unspent);
drop table if exists transaction_unspent;`, () => {
resolve();
});
});
}
}
......@@ -6,6 +6,8 @@ import path from 'path';
import {Database} from './database';
import eventBus from '../core/event-bus';
import os from 'os';
import async from 'async';
import _ from 'lodash';
export default class Shard {
constructor(databaseFile, shardID) {
......@@ -145,4 +147,17 @@ export default class Shard {
});
}
checkup() {
return new Promise(resolve => {
async.eachSeries(_.keys(this.repositories), (repositoryName, callback) => {
if (this.repositories[repositoryName].checkup) {
this.repositories[repositoryName].checkup().then(() => callback());
}
else {
callback();
}
}, () => resolve());
});
}
}
......@@ -126,6 +126,6 @@ db.initialize()
});
}
});
//millix v1.11.11-tangled
//millix v1.11.15-tangled
\ No newline at end of file
......@@ -34,6 +34,7 @@ class Network {
this._bidirectionaInboundConnectionCount = 0;
this._wss = null;
this.nodeID = null;
this.nodeIsPublic = undefined;
this.certificatePem = null;
this.certificatePrivateKeyPem = null;
this.nodeConnectionID = this.generateNewID();
......@@ -858,6 +859,7 @@ class Network {
_onNATCheckResponse(content, ws) {
console.log('[network] on natcheck response', content);
this.nodeIsPublic = content.is_valid_nat;
}
_natCheckTryConnect(url) {
......
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