From 45b85b8f11e097ce3f36eb13fc4db2fe618a94b1 Mon Sep 17 00:00:00 2001 From: blavenie <benoit.lavenier@e-is.pro> Date: Fri, 7 Apr 2017 12:13:49 +0200 Subject: [PATCH] [enh] on HTTPS mode, get hardship from the default node --- www/js/services/network-services.js | 83 +++++++++++++++-------------- 1 file changed, 44 insertions(+), 39 deletions(-) diff --git a/www/js/services/network-services.js b/www/js/services/network-services.js index 38e8b20e..a506361c 100644 --- a/www/js/services/network-services.js +++ b/www/js/services/network-services.js @@ -11,7 +11,7 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se constants = { UNKNOWN_BUID: -1 }, - isHttpsMode = ($window.location.protocol === 'https:'), + isHttpsMode = $window.location.protocol === 'https:', api = new Api(this, "csNetwork-" + id), data = { @@ -33,7 +33,8 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se knownBlocks: [], mainBlock: null, uidsByPubkeys: null, - searchingPeersOnNetwork: false + searchingPeersOnNetwork: false, + difficulties: null }, // Return the block uid @@ -61,6 +62,7 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se data.uidsByPubkeys = {}; data.loading = true; data.searchingPeersOnNetwork = false; + data.difficulties = null; }, hasPeers = function() { @@ -105,10 +107,38 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se } }, 1000); - return data.bma.wot.member.uids() - .then(function(uids){ + var initJobs = [data.bma.wot.member.uids() + .then(function(uids) { data.uidsByPubkeys = uids; + }) + ]; + + // When SSL is on, get difficulties from the default node + if (isHttpsMode && data.expertMode) { + var getDifficulties = function() { + return data.bma.blockchain.stats.difficulties() + .then(function (res) { + data.difficulties = res.levels ? res.levels.reduce(function (res, hit) { + if (hit.uid && hit.level) res[hit.uid] = hit.level; + return res; + }, {}) : {}; + }) + .catch(function(err) { + // When too many request, retry in 3s + if (err && err.ucode == BMA.errorCodes.HTTP_LIMITATION) { + return $timeout(function() { + return getDifficulties(); + }, 3000); + } + console.error(err); + data.difficulties = {}; + }); + }; + initJobs.push(getDifficulties()); + } + return $q.all(initJobs) + .then(function(){ // online nodes if (data.filter.online) { /*return data.bma.network.peering.peers({leaves: true}) @@ -261,7 +291,7 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se peer.dns = peer.getDns(); peer.blockNumber = peer.block.replace(/-.+$/, ''); peer.uid = data.uidsByPubkeys[peer.pubkey]; - peer.id = [peer.pubkey, bma.dns, bma.ipv6, bma.ipv4, bma.port, bma.useSsl].join('-'); + peer.id = peer.keyID(); return [peer]; }, @@ -277,7 +307,14 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se // Do not try not SSL node, if Cesium running in SSL if (isHttpsMode && !peer.bma.useSsl) { - return refreshPeerWithoutDirectAccess(peer); + peer.online = (peer.status == 'UP'); + peer.buid = constants.UNKNOWN_BUID; + delete peer.version; + + if (peer.uid && data.expertMode && data.difficulties) { + peer.difficulty = data.difficulties[peer.uid]; + } + return $q.when(peer); } peer.api = peer.api || BMA.lightInstance(peer.getHost(), peer.getPort()); @@ -350,38 +387,6 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se }); }, - refreshPeerWithoutDirectAccess = function(peer) { - - peer.online = (peer.status == 'UP'); - peer.buid = constants.UNKNOWN_BUID; - delete peer.version; - - // Try to get hardship (only in expert mode, because we could not sort as buid is fake) - if (peer.uid && data.expertMode) { - return data.bma.blockchain.stats.hardship({pubkey: peer.pubkey}) - .then(function (res) { - peer.difficulty = res ? res.level : null; - return peer; - }) - .catch(function (err) { - // When too many request, retry in 3s - if (err && err.ucode == BMA.errorCodes.HTTP_LIMITATION) { - $timeout(function() { - data.bma.blockchain.stats.hardship({pubkey: peer.pubkey}) - .then(function (res) { - peer.difficulty = res ? res.level : null; - }); - }, 3000); - } - peer.difficulty = null; // continue - return peer; - }); - } - else { - return $q.when(peer); - } - }, - flushNewPeersAndSort = function(newPeers, updateMainBuid) { newPeers = newPeers || data.newPeers; if (!newPeers.length) return; @@ -461,7 +466,7 @@ angular.module('cesium.network.services', ['ngResource', 'ngApi', 'cesium.bma.se sortScore += (data.sort.type == 'api' ? (peer.isSsl() ? (data.sort.asc ? 1 : -1) : (peer.hasEndpoint('ES_USER_API') ? (data.sort.asc ? 0.5 : -0.5) : 0)) : 0); - sortScore += (data.sort.type == 'difficulty' ? (peer.difficulty ? (data.sort.asc ? (1000-peer.difficulty) : peer.difficulty): 0) : 0); + sortScore += (data.sort.type == 'difficulty' ? (peer.difficulty ? (data.sort.asc ? (10000-peer.difficulty) : peer.difficulty): 0) : 0); sortScore += (data.sort.type == 'current_block' ? (peer.currentNumber ? (data.sort.asc ? (1000000000 - peer.currentNumber) : peer.currentNumber) : 0) : 0); score += (10000000000 * sortScore); } -- GitLab