diff --git a/lib/webserver.js b/lib/webserver.js
index 2c72a80..3edf2c8 100644
--- a/lib/webserver.js
+++ b/lib/webserver.js
@@ -10,6 +10,8 @@ const bodyParser = require('body-parser');
const fsreadline = require('./fs-readline.js');
+const blockChart = require('./blockChart.js');
+
function timestampToDatetime(timestamp) {
// Convertir le timestamp en datetime
let tmptimestampExpireCertif = new Date(timestamp*1000);//tmpQueryGetTimeWrittenCert[0].medianTime)*1000);
@@ -50,11 +52,12 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
***************************************/
app.get('/willMembers', (req, res) => co(function *() {
-
+ //var willMembersMod=willMembers.willMembers_(req, res, duniterServer, sigValidity, msValidity, sigWindow, idtyWindow);
try {
// get blockchain timestamp
- let resultQueryCurrentBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime` FROM block ORDER BY `medianTime` DESC LIMIT 1 ');
+ let resultQueryCurrentBlock = yield duniterServer.dal.peerDAL.query('SELECT `medianTime`,`number` FROM block ORDER BY `medianTime` DESC LIMIT 1 ');
const currentBlockchainTimestamp = resultQueryCurrentBlock[0].medianTime;
+ const currentBlockNumber = resultQueryCurrentBlock[0].number;
// Initaliser les variables
var contenu = "";
@@ -106,7 +109,7 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
// récupérer l'ensemble des certifications en attente destinées à l'identité courante
let tmpQueryPendingCertifsList = yield duniterServer.dal.peerDAL.query(
- 'SELECT `from`,`block_number`,`expires_on` FROM certifications_pending WHERE `to`=\''+resultQueryIdtys[i].pubkey+'\' AND `target`=\''+resultQueryIdtys[i].hash+'\' ORDER BY `expires_on` DESC');
+ 'SELECT `from`,`block_number`,`block_hash`,`expires_on` FROM certifications_pending WHERE `to`=\''+resultQueryIdtys[i].pubkey+'\' AND `target`=\''+resultQueryIdtys[i].hash+'\' ORDER BY `expires_on` DESC');
// Calculer le nombre de certifications en attentes destinées au membre courant
let nbPendingCertifs = tmpQueryPendingCertifsList.length;
@@ -134,31 +137,32 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
{
validBlockStamp = true;
}
-
- // Vérifier que l'identité courant n'a pas déjà reçu d'autre(s) certification(s) de la part du même membre
- let doubloonPendingCertif = false;
- for (const idtyPendingCertifsList of idtysPendingCertifsList[i])
- {
- if (idtyPendingCertifsList.from == tmpQueryGetUidIssuerPendingCert[0].uid)
+
+ // Vérifier que l'identité courant n'a pas déjà reçu d'autre(s) certification(s) de la part du même membre ET dans le même état de validité du blockstamp
+ let doubloonPendingCertif = false;
+ for (const idtyPendingCertifsList of idtysPendingCertifsList[i])
{
- doubloonPendingCertif = true;
+ if (idtyPendingCertifsList.from == tmpQueryGetUidIssuerPendingCert[0].uid && idtyPendingCertifsList.validBlockStamp == validBlockStamp)
+ {
+ doubloonPendingCertif = true;
+ }
}
- }
- if (!doubloonPendingCertif)
- {
- // Stoker la liste des certifications en piscine qui n'ont pas encore expirées
- if (tmpQueryPendingCertifsList[j].expires_on > currentBlockchainTimestamp)
+ if (!doubloonPendingCertif)
{
- idtysPendingCertifsList[i].push({
- from: tmpQueryGetUidIssuerPendingCert[0].uid,
- blockNumber: tmpQueryPendingCertifsList[j].block_number,
- timestampExpire: tmpQueryPendingCertifsList[j].expires_on,
- timestampWritable: certTimestampWritable,
- validBlockStamp: validBlockStamp
- });
- nbValidPendingCertifs++;
+ // Stoker la liste des certifications en piscine qui n'ont pas encore expirées
+ if (tmpQueryPendingCertifsList[j].expires_on > currentBlockchainTimestamp)
+ {
+ idtysPendingCertifsList[i].push({
+ from: tmpQueryGetUidIssuerPendingCert[0].uid,
+ blockNumber: tmpQueryPendingCertifsList[j].block_number,
+ timestampExpire: tmpQueryPendingCertifsList[j].expires_on,
+ timestampWritable: certTimestampWritable,
+ validBlockStamp: validBlockStamp
+ });
+ nbValidPendingCertifs++;
+ }
}
- }
+
}
}
@@ -207,7 +211,7 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
blockNumber: idtysPendingCertifsList[i][idMin].blockNumber,
timestampExpire: idtysPendingCertifsList[i][idMin].timestampExpire,
timestampWritable: idtysPendingCertifsList[i][idMin].timestampWritable,
- validBlockStamp: idtysPendingCertifsList[i][idMin].validBlockStamp
+ validBlockStamp: idtysPendingCertifsList[i][idMin].validBlockStamp
});
// Exclure la valeur min avant de poursuivre le tri
@@ -364,7 +368,8 @@ module.exports = (host, port, duniterServer, sigValidity, msValidity, sigWindow,
contenu += '
';
contenu += '
' + (e.stack || e.message) + ''); } })); + + /**************************************** + * Lister les blocs calculés par membres + ***************************************/ + + app.get('/blockMembers', (req, res) => co(function *() { + try { + // get GET parameters + var begin = 0;// Default Value + if( typeof(req.query.begin) != 'undefined' ) { begin = req.query.begin; } + var end = -1;// Default Value is current timestamp + if( typeof(req.query.end) != 'undefined' ) { begin = req.query.end; } + + // get full blockchain + if (end >= begin && begin >= 0) + { + var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` < '+end+' AND `number` > '+begin+' ORDER BY `medianTime` ASC'); + } + else + { + var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `number` > '+begin+' ORDER BY `medianTime` ASC'); + } + //var blockchain = yield duniterServer.dal.peerDAL.query('SELECT `issuer`,`membersCount`,`medianTime`,`dividend`,`number`,`nonce` FROM block WHERE `medianTime` < '+end+' AND `medianTime` > '+begin+' ORDER BY `medianTime` ASC'); + + // get blockchain timestamp + const currentBlockNumber = blockchain.length-1; + const currentBlockchainTimestamp = blockchain[currentBlockNumber].medianTime; + + // get idtys list + var idtys = yield duniterServer.dal.peerDAL.query('SELECT `uid`,`pub` FROM i_index WHERE `wasMember`=1'); + + // get current membersCount + const currentMembersCount = blockchain[currentBlockNumber].membersCount; + //console.log("blockchain[currentBlockNumber].membersCount %s", blockchain[currentBlockNumber].membersCount); + + // create and initialize tabNbBlockByMember and tabIndexMembers + var tabNbBlockByMember = [ [] ]; + var tabIndexMembers = []; + for (let i=0;i