diff --git a/lib/constants.js b/lib/constants.js index dd32fd94859b8d38c918845847149d838a66eb00..1bf2b0270fbcacd8f02df3d1a9df59865d360865 100755 --- a/lib/constants.js +++ b/lib/constants.js @@ -1,7 +1,6 @@ "use strict"; module.exports = { - USE_WOTB6: true, DEFAULT_LANGUAGE: "fr", MIN_WILLMEMBERS_UPDATE_FREQ: 180, MIN_MEMBERS_UPDATE_FREQ: 180, diff --git a/package.json b/package.json index 61bb46fc9c0f3ce85c3c9d05c8ff3d2e9ee6f1e0..b7d5868e94953195cc9c32e1d39e7a8c37df0875 100755 --- a/package.json +++ b/package.json @@ -13,17 +13,13 @@ "node-pre-gyp": "^0.6.34", "q": "1.5.0", "request": "^2.81.0", - "request-promise": "4.2.0", - "wotb": "^0.6.2" + "request-promise": "4.2.0" }, "devDependencies": { - "duniter": "1.3.14", - "duniter-bma": "1.3.x", - "duniter-crawler": "1.3.x", - "duniter-keypair": "1.3.x", - "duniter-prover": "1.3.x" + "duniter": "1.4.8", + "duniter-prover": "1.4.x" }, "peerDependencies": { - "duniter": "1.3.14" + "duniter": "1.4.8" } } diff --git a/routes/gaussianWotQuality.js b/routes/gaussianWotQuality.js index c8ce9d55999ce7e0ef1c7d9c08fb837c0b6a96d3..091da7f69fc63b6d928d2dc33f6df90beb5fb394 100644 --- a/routes/gaussianWotQuality.js +++ b/routes/gaussianWotQuality.js @@ -6,8 +6,6 @@ const constants = require(__dirname + '/../lib/constants') const membersQuality = require(__dirname + '/tools/membersQuality') const getLang = require(__dirname + '/../lib/getLang') -const wotb = (constants.USE_WOTB6) ? require('wotb'):null; - // gaussianWotQuality cache var previousNextYn = "no"; @@ -16,17 +14,6 @@ module.exports = (req, res, next) => co(function *() { var { duniterServer } = req.app.locals try { - if (!constants.USE_WOTB6) - { - res.locals = { - host: req.headers.host.toString(), - form: `gaussianWotQuality page require wotb 0.6.2 or superior, but this version of wotb will be integrated only into duniter 1.4, be patient !`, - chart: '[]' - } - next() - } - else - { // get GET parameters const format = req.query.format || 'HTML'; const sentries = req.query.sentries || 'yes'; @@ -60,7 +47,7 @@ module.exports = (req, res, next) => co(function *() { if (nextYn == "yes") { dSen++; } // récupérer la wot - const wot = wotb.newFileInstance(duniterServer.home + '/wotb.bin'); + const wot = duniterServer.dal.wotb; // Initialiser le cache des données de qualité membersQuality(-1, dSen, conf.stepMax, conf.xpercent, wot.memCopy()); @@ -247,7 +234,6 @@ module.exports = (req, res, next) => co(function *() { } next() } - } } catch (e) { // En cas d'exception, afficher le message res.status(500).send(`<pre>${e.stack || e.message}</pre>`); diff --git a/routes/members.js b/routes/members.js index a10a0ec94cf6a4e13fe4d14b018136395bb8560c..7148b063a2ca870d5473bfe3f51a3ed2d41cc8a5 100755 --- a/routes/members.js +++ b/routes/members.js @@ -4,8 +4,6 @@ const co = require('co') const constants = require(__dirname + '/../lib/constants') -const wotb = (constants.USE_WOTB6) ? require('wotb'):null; - const timestampToDatetime = require(__dirname + '/../lib/timestampToDatetime') const membersQuality = require(__dirname + '/tools/membersQuality') @@ -77,7 +75,7 @@ module.exports = (req, res, next) => co(function *() { if (lastUpgradeTimeDatas > 0 && dSenCache > dSen) { previousNextYn=="yes"; } // Alimenter wotb avec la toile actuelle - const wotbInstance = (constants.USE_WOTB6) ? wotb.newFileInstance(duniterServer.home + '/wotb.bin'):duniterServer.dal.wotb; + const wotbInstance = duniterServer.dal.wotb; // Vérifier si le cache doit être Réinitialiser let reinitCache = (Math.floor(Date.now() / 1000) > (membersLastUptime + constants.MIN_MEMBERS_UPDATE_FREQ)); @@ -199,17 +197,7 @@ module.exports = (req, res, next) => co(function *() { let tmpWot = wotbInstance.memCopy(); // Récupérer les informations détaillés de distance pour le membre courant - let detailedDistance = null; - if (constants.USE_WOTB6) - { - detailedDistance = tmpWot.detailedDistance(membersList[m].wotb_id, dSen, conf.stepMax, conf.xpercent); - } - else - { - detailedDistance = { - isOutdistanced: tmpWot.isOutdistanced(membersList[m].wotb_id, dSen, conf.stepMax, conf.xpercent) - }; - } + let detailedDistance = tmpWot.detailedDistance(membersList[m].wotb_id, dSen, conf.stepMax, conf.xpercent); // Calculer le nombre de membres référents if (currentMemberIsSentry) @@ -217,38 +205,19 @@ module.exports = (req, res, next) => co(function *() { countSentries++; } - if (constants.USE_WOTB6) - { - // Calculate membersNbSentriesUnreached - membersNbSentriesUnreached[membersList[m].uid] = parseInt(detailedDistance.nbSentries)-parseInt(detailedDistance.nbSuccess); - - // Récupérer les informations détaillés de distance pour une nouvelle identité qui ne serait certifiée que par le membre courant (ce qui équivaut à récupérer les informations de distance pour le membre courant en décrémentant stepMax de 1) - //let detailedDistanceQualityExt = tmpWot.detailedDistance(membersList[m].wotb_id, dSen, conf.stepMax-1, conf.xpercent); - - // Calculer la qualité du membre courant - //membersQuality(membersList[m].wotb_id); - //membersQualityExt[membersList[m].uid] = ((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)/conf.xpercent).toFixed(2); - if (membersQuality(membersList[m].wotb_id, (currentMemberIsSentry) ? 1:0) >= 1.0) - { - proportionMembersWithQualityUpper1++; - } - - // Calculer la qualité du membre courant s'il n'y avait pas de référents (autrement di si tout les membres était référents) - //let membersQualityIfNoSentries = ((detailedDistanceQualityExt.nbReached/membersList.length)/conf.xpercent).toFixed(2); - //console.log("membersQualityIfNoSentries[%s] = %s", membersList[m].uid, membersQualityIfNoSentries); - if (membersQuality(membersList[m].wotb_id, -1) >= 1.0) - { - proportionMembersWithQualityUpper1IfNoSentries++; - } - - // Calculate meanSentriesReachedBySentriesInSingleExtCert, meanMembersReachedBySentriesInSingleExtCert, meanSentriesReachedByMembersInSingleExtCert and meanMembersReachedByMembersInSingleExtCert - /*if (currentMemberIsSentry) - { - meanSentriesReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); - meanMembersReachedBySentriesInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2)); - } - meanSentriesReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)*100).toFixed(2)); - meanMembersReachedByMembersInSingleExtCert += parseFloat(((detailedDistanceQualityExt.nbReached/membersList.length)*100).toFixed(2));*/ + // Calculate membersNbSentriesUnreached + membersNbSentriesUnreached[membersList[m].uid] = parseInt(detailedDistance.nbSentries) - parseInt(detailedDistance.nbSuccess); + + // Calculer la qualité du membre courant + if (membersQuality(membersList[m].wotb_id, (currentMemberIsSentry) ? 1 : 0) >= 1.0) { + proportionMembersWithQualityUpper1++; + } + + // Calculer la qualité du membre courant s'il n'y avait pas de référents (autrement di si tout les membres était référents) + //let membersQualityIfNoSentries = ((detailedDistanceQualityExt.nbReached/membersList.length)/conf.xpercent).toFixed(2); + //console.log("membersQualityIfNoSentries[%s] = %s", membersList[m].uid, membersQualityIfNoSentries); + if (membersQuality(membersList[m].wotb_id, -1) >= 1.0) { + proportionMembersWithQualityUpper1IfNoSentries++; } // Nettoyer la wot temporaire @@ -556,24 +525,9 @@ module.exports = (req, res, next) => co(function *() { if (reinitCache) { - if (constants.USE_WOTB6) - { - /*// Calculate mean Members/Sentries ReachedBy Members/Sentries InSingleExtCert - if (countSentries > 0) - { - meanSentriesReachedBySentriesInSingleExtCert = parseFloat((meanSentriesReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); - meanMembersReachedBySentriesInSingleExtCert = parseFloat((meanMembersReachedBySentriesInSingleExtCert/countSentries).toFixed(2)); - } - if (membersList.length > 0) - { - meanSentriesReachedByMembersInSingleExtCert = parseFloat((meanSentriesReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); - meanMembersReachedByMembersInSingleExtCert = parseFloat((meanMembersReachedByMembersInSingleExtCert/membersList.length).toFixed(2)); - }*/ - - //Calculate proportionMembersWithQualityUpper1 and proportionMembersWithQualityUpper1IfNoSentries - proportionMembersWithQualityUpper1 /= membersList.length; - proportionMembersWithQualityUpper1IfNoSentries /= membersList.length; - } + //Calculate proportionMembersWithQualityUpper1 and proportionMembersWithQualityUpper1IfNoSentries + proportionMembersWithQualityUpper1 /= membersList.length; + proportionMembersWithQualityUpper1IfNoSentries /= membersList.length; // recalculate meanCentrality and meanShortestsPathLength if (centrality=='yes') @@ -603,7 +557,6 @@ module.exports = (req, res, next) => co(function *() { res.locals = { host: req.headers.host.toString(), - USE_WOTB6: constants.USE_WOTB6, // get parameters days, mode, sort_by, order, pendingSigs, centrality, nextYn, diff --git a/routes/willMembers.js b/routes/willMembers.js index 465b2ecd8e22a466b6415abd596e70b4ce6d9659..bc41e5382eb6d720b44c9f3c6fb6e2a25ba07139 100755 --- a/routes/willMembers.js +++ b/routes/willMembers.js @@ -5,8 +5,6 @@ const crypto = require('crypto') const constants = require(__dirname + '/../lib/constants') -const wotb = (constants.USE_WOTB6) ? require('wotb'):null; - const timestampToDatetime = require(__dirname + '/../lib/timestampToDatetime') // Préserver les résultats en cache @@ -58,7 +56,7 @@ module.exports = (req, res, next) => co(function *() { let limitTimestamp = currentBlockchainTimestamp + (days*86400); // Alimenter wotb avec la toile de confiance - const wotbInstance = (constants.USE_WOTB6) ? wotb.newFileInstance(duniterServer.home + '/wotb.bin'):duniterServer.dal.wotb; + const wotbInstance = duniterServer.dal.wotb; // Vérifier si le cache doit être Réinitialiser @@ -380,15 +378,10 @@ module.exports = (req, res, next) => co(function *() { let tmpWot = wotbInstance.memCopy(); // Mesurer la qualité externe de chaque emetteur de chaque certification - if (constants.USE_WOTB6) - { - for (const cert of idtysPendingCertifsList[idMax]) - { - if ( typeof(membersQualityExt[cert.from]) == 'undefined' ) - { - let detailedDistanceQualityExt = tmpWot.detailedDistance(cert.wotb_id, dSen, conf.stepMax-1, conf.xpercent); - membersQualityExt[cert.from] = ((detailedDistanceQualityExt.nbSuccess/detailedDistanceQualityExt.nbSentries)/conf.xpercent).toFixed(2); - } + for (const cert of idtysPendingCertifsList[idMax]) { + if (typeof (membersQualityExt[cert.from]) == 'undefined') { + let detailedDistanceQualityExt = tmpWot.detailedDistance(cert.wotb_id, dSen, conf.stepMax - 1, conf.xpercent); + membersQualityExt[cert.from] = ((detailedDistanceQualityExt.nbSuccess / detailedDistanceQualityExt.nbSentries) / conf.xpercent).toFixed(2); } } @@ -402,14 +395,14 @@ module.exports = (req, res, next) => co(function *() { } } // Récupérer les données de distance du dossier d'adhésion de l'indentité idMax - let detailedDistance = (constants.USE_WOTB6) ? tmpWot.detailedDistance(pendingIdtyWID, dSen, conf.stepMax, conf.xpercent):tmpWot.isOutdistanced(pendingIdtyWID, dSen, conf.stepMax, conf.xpercent); + let detailedDistance = tmpWot.detailedDistance(pendingIdtyWID, dSen, conf.stepMax, conf.xpercent); // Nettoyer la wot temporaire tmpWot.clear(); // Calculer percentSentriesReached et percentMembersReached - let percentSentriesReached = (constants.USE_WOTB6) ? parseFloat(((detailedDistance.nbSuccess/detailedDistance.nbSentries)*100).toFixed(2)):null; - let percentMembersReached = (constants.USE_WOTB6) ? parseFloat(((detailedDistance.nbReached/currentMembersCount)*100).toFixed(2)):null; + let percentSentriesReached = parseFloat(((detailedDistance.nbSuccess/detailedDistance.nbSentries)*100).toFixed(2)); + let percentMembersReached = parseFloat(((detailedDistance.nbReached/currentMembersCount)*100).toFixed(2)); // Pousser l'identité dans le tableau idtysListOrdered idtysListOrdered.push({ @@ -430,7 +423,7 @@ module.exports = (req, res, next) => co(function *() { }); // Si le cache a été réinitialiser, recalculer les sommes meanSentriesReachedByIdtyPerCert et meanMembersReachedByIdtyPerCert - if (constants.USE_WOTB6 && reinitCache && identitiesList[idMax].nbValidPendingCert > 0) + if (reinitCache && identitiesList[idMax].nbValidPendingCert > 0) { let nbReceiveCert = identitiesList[idMax].nbValidPendingCert; meanSentriesReachedByIdtyPerCert[nbReceiveCert-1] += percentSentriesReached; @@ -456,29 +449,22 @@ module.exports = (req, res, next) => co(function *() { idtysListOrdered = idtysListOrdered2; } - if (reinitCache) - { + if (reinitCache) { // Calculate meanSentriesReachedByIdtyPerCert and meanMembersReachedByIdtyPerCert - if (constants.USE_WOTB6) - { - for (let i=0;i<=nbMaxCertifs;i++) - { - if ( countIdtiesPerReceiveCert[i] > 0 ) - { - meanSentriesReachedByIdtyPerCert[i] = parseFloat((meanSentriesReachedByIdtyPerCert[i]/countIdtiesPerReceiveCert[i]).toFixed(2)); - meanMembersReachedByIdtyPerCert[i] = parseFloat((meanMembersReachedByIdtyPerCert[i]/countIdtiesPerReceiveCert[i]).toFixed(2)); - } - else - { - meanSentriesReachedByIdtyPerCert[i] = 0.0; - meanMembersReachedByIdtyPerCert[i] = 0.0; - } - } - } - - // Dévérouiller le cache willMembers - lockWillMembers = false; - } + for (let i = 0; i <= nbMaxCertifs; i++) { + if (countIdtiesPerReceiveCert[i] > 0) { + meanSentriesReachedByIdtyPerCert[i] = parseFloat((meanSentriesReachedByIdtyPerCert[i] / countIdtiesPerReceiveCert[i]).toFixed(2)); + meanMembersReachedByIdtyPerCert[i] = parseFloat((meanMembersReachedByIdtyPerCert[i] / countIdtiesPerReceiveCert[i]).toFixed(2)); + } + else { + meanSentriesReachedByIdtyPerCert[i] = 0.0; + meanMembersReachedByIdtyPerCert[i] = 0.0; + } + } + + // Dévérouiller le cache willMembers + lockWillMembers = false; + } // Si le client demande la réponse au format JSON, le faire if (format == 'JSON') @@ -492,7 +478,6 @@ module.exports = (req, res, next) => co(function *() { res.locals = { // Les varibles à passer au template host: req.headers.host.toString(), - USE_WOTB6: constants.USE_WOTB6, // get parameters days, sort_by, order, sortSig, showIdtyWithZeroCert, diff --git a/views/members.html b/views/members.html index 589de57ded8ffc9a5f8210835517fe531712c11e..53f9abc55f894a82e6310c6ec7c21f36d4c49403 100755 --- a/views/members.html +++ b/views/members.html @@ -37,7 +37,7 @@ ${printMenu(MENU_LANG, help, "MEMBERS")} <option name="sort_by" value ="oldestSig" ${sort_by == 'oldestSig' ? 'selected' : ''}>${LANG["SORT_BY_OLDEST_SIG"]} <option name="sort_by" value ="lastSig" ${sort_by == 'lastSig' ? 'selected' : ''}>${LANG["SORT_BY_LAST_SIG"]} <option name="sort_by" value ="centrality" ${sort_by == 'centrality' ? 'selected' : ''}>${LANG["SORT_BY_CENTRALITY"]} -${(USE_WOTB6) ? `<option name="sort_by" value ="quality" ${sort_by == 'quality' ? 'selected' : ''}>${LANG["SORT_BY_QUALITY"]}`:``} +<option name="sort_by" value ="quality" ${sort_by == 'quality' ? 'selected' : ''}>${LANG["SORT_BY_QUALITY"]} <option name="sort_by" value ="sigCount" ${sort_by == 'sigCount' ? 'selected' : ''}>${LANG["SORT_BY_SIG_COUNT"]} </select> ${LANG["ORDER_BY"]} <select name="order"> <option name="order" value ="asc"> ${LANG["ASC"]} @@ -81,7 +81,6 @@ ${(membersLastCentralityCalcTime==0) ? ` `} `} <br> -${(USE_WOTB6) ? ` <table border="1"> <tr><td align='center' colspan='3'>${LANG["DATA_AT"]} ${timestampToDatetime(membersLastUptime)}</td></tr> <tr><td align='center'>${LANG["meanMembersReachedByMembers"]}</td><td align='center'>${LANG["SENTRIES_REACHED"]}</td><td align='center'>${LANG["MEMBERS_REACHED"]}</td></tr> @@ -91,7 +90,6 @@ ${(USE_WOTB6) ? ` <tr><td align='center'><b>${LANG["PROPORTION_MEMBERS_WITH_QUALITY_UPPER_1"]}</b></td><td align='center'><font color="red"><b>${(proportionMembersWithQualityUpper1*100).toFixed(2)}%</b></font></td><td align='center'><b>${(proportionMembersWithQualityUpper1IfNoSentries*100).toFixed(2)}%</b></td></tr> </table> <br> -`:``} <!-- Afficher le currentBlockchainTimestamp --> <i>${LANG["CURRENT_BLOCKCHAIN_TIME"]} : ${timestampToDatetime(currentBlockchainTimestamp)}.<br> @@ -125,9 +123,7 @@ ${LANG["MEMBER_FILTER"]} : <input type="text" name="filter" id="filter" value="" <td align="center" style="background:hsla(${member.proportion}, 100%, 50%, 1)"><b>${member.uid}</b><br> ${(member.isSentry) ? `<font color="blue">${LANG['REFERRING_MEMBER']} : ${LANG['YES']}</font>`:`${LANG['REFERRING_MEMBER']} : ${LANG['NO']}`}<br> - ${(USE_WOTB6) ? ` ${LANG['QUALITY_EXT']} : <b>${(typeof(membersQuality(member.wotb_id))=='undefined') ? `0.00`:membersQuality(member.wotb_id)}</b><br> - `:``} <b>${(membersLastCentralityCalcTime==0) ? `${LANG['CENTRALITY']} : ?`:` ${LANG['CENTRALITY']} : <b>${(typeof(membersCentrality[member.wotb_id])=='undefined') ? `0`:membersCentrality[member.wotb_id]} `}</b><br> @@ -148,9 +144,7 @@ ${LANG["MEMBER_FILTER"]} : <input type="text" name="filter" id="filter" value="" <font color="${member.detailedDistance.isOutdistanced ? 'red' : 'blue' }"> ${member.detailedDistance.isOutdistanced ? LANG['COL_DISTANCE_isOutdistanced'] : LANG['COL_DISTANCE_isNotOutdistanced'] } - ${(USE_WOTB6) ? ` <br>${member.percentSentriesReached}% (${member.detailedDistance.nbSuccess}/${member.detailedDistance.nbSentries}) - `:``} </font> </td> <td style="background:#000000">-</td> diff --git a/views/printMenu.js b/views/printMenu.js index 984d78b9ab09c1fd0c49d650c662ee071e9a683f..82854f66fd045b972eaf193494820c11f1ef7efb 100644 --- a/views/printMenu.js +++ b/views/printMenu.js @@ -7,10 +7,7 @@ module.exports = function printMenu(lang, help, location) { htmlMenu += `<li class="menu"><a class="${(location=="MEMBERS") ? 'active':'menu'}" href="members?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["MEMBERS"]}</a></li>`; htmlMenu += `<li class="menu"><a class="${(location=="MEMBERS_COUNT") ? 'active':'menu'}" href="membersCount?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["MEMBERS_COUNT"]}</a></li>`; htmlMenu += `<li class="menu"><a class="${(location=="WOTEX") ? 'active':'menu'}" href="wotex?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["WOTEX"]}</a></li>`; - if (constants.USE_WOTB6) - { - htmlMenu += `<li class="menu"><a class="${(location=="GAUSSIAN_WOT_QUALITY") ? 'active':'menu'}" href="gaussianWotQuality?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["GAUSSIAN_WOT_QUALITY"]}</a></li>`; - } + htmlMenu += `<li class="menu"><a class="${(location=="GAUSSIAN_WOT_QUALITY") ? 'active':'menu'}" href="gaussianWotQuality?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["GAUSSIAN_WOT_QUALITY"]}</a></li>`; htmlMenu += `<li class="menu"><a class="${(location=="BLOCK_COUNT") ? 'active':'menu'}" href="blockCount?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["BLOCK_COUNT"]}</a></li>`; htmlMenu += `<li class="menu"><a class="${(location=="MONETARY_MASS") ? 'active':'menu'}" href="monetaryMass?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["MONETARY_MASS"]}</a></li>`; htmlMenu += `<li class="menu"><a class="${(location=="ABOUT") ? 'active':'menu'}" href="about?lg=${lang['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}">${lang["ABOUT"]}</a></li>`; diff --git a/views/willMembers.html b/views/willMembers.html index cc5b85d8794519782b486c476390db3a82a002cd..da3010ddbb056c3aefb9602767c6e10788ba565a 100755 --- a/views/willMembers.html +++ b/views/willMembers.html @@ -86,7 +86,6 @@ ${(help != 'no') ? ` `:''} <!-- Afficher l'état de tension de la toile de confiance --> -${ (USE_WOTB6) ? ` <div id="zone2" style="width: 100%; height: 20px; background: White; border: 1px solid DimGrey; transition: height 1s; -moz-transition: height 1s;-webkit-transition: height 1s;-o-transition: height 1s; overflow: hidden;"> <div id="bandeau2" style="height: 20px; width: 100%; font-size: medium; color: white; background-color: darkgrey;" onmouseover="deroule(2,150);" onmouseout="deroule(2,20);"><b>${LANG["WOT_TENSION_STATE"]}</b> </div> @@ -145,7 +144,6 @@ ${ (USE_WOTB6) ? ` </table> </div> </div> -`:``} <!-- Afficher le currentBlockchainTimestamp et le nombre d'identités au dossier complet --> ${LANG["BLOCKCHAIN_TIME"]} : <b>${timestampToDatetime(currentBlockchainTimestamp)}</b> (#<b>${currentBlockNumber}</b>).<br> @@ -192,12 +190,8 @@ ${ (USE_WOTB6) ? ` `} </td> <td align='center' style="background:${idty.colorPending}"> - ${ (USE_WOTB6) ? ` <font color="${idty.detailedDistance.isOutdistanced ? 'DarkRed' : 'blue' }">${idty.percentSentriesReached}% (${idty.detailedDistance.nbSuccess}/${idty.detailedDistance.nbSentries}) <br>${LANG['QUALITY_CERTIFIERS']} : <b>${(idty.validBlockStamp) ? ((idty.detailedDistance.nbSuccess/idty.detailedDistance.nbSentries)/xpercent).toFixed(2):`0.00`}</b></font> - `:` - <font color="${idty.detailedDistance ? 'DarkRed' : 'blue' }">${LANG['DISTANCE']} : ${idty.detailedDistance ? LANG['KO']:LANG['OK'] }</font> - `} </td> `:` <td align='center' colspan=2 style="background:#FF0000"><b>${LANG['IDTY_REVOKED']}</b></td> @@ -211,9 +205,7 @@ ${ (USE_WOTB6) ? ` ${cert.issuerIsSentry ? '<b>':''} <a href="wotex?lg=${MENU_LANG['LG']}${(typeof(help) != 'undefined' && help == 'no') ? '&help=no':''}&to=${cert['from']}&pending=on&mode=undefined">${cert['from']}</a> ${cert.issuerIsSentry ? '</b>':''} - ${ (USE_WOTB6) ? ` <br>${LANG['QUALITY']} : <b>${(typeof(membersQualityExt[cert.from])=='undefined' || !cert.validBlockStamp) ? `0.00`:membersQualityExt[cert.from]}</b> - `:''} <br><b><span data-tip="${LANG['EMITTED_ON']} ${timestampToDatetime(cert['creationTimestamp'])}">#${cert['blockNumber']}</span></b> <br><span data-tip="${LANG['EXPIRE_TIME']}">${timestampToDatetime(cert.timestampExpire)}</span> ${j==(4+idty.pendingCertifications.length-idty.nbValidPendingCert)?'<b>':''}