diff --git a/app/service/PeeringService.js b/app/service/PeeringService.js index 970f114cfcb3f0862fb045394034af3cdfc0298b..5e72b3ddebb3f930ff6bdd4aaeba384b89243b3a 100644 --- a/app/service/PeeringService.js +++ b/app/service/PeeringService.js @@ -42,24 +42,37 @@ function PeeringService(server, pair, dal) { done = eraseIfAlreadyRecorded; eraseIfAlreadyRecorded = false; } + return that.submitP(peering, eraseIfAlreadyRecorded) + .then((res) => done(null, res)) + .catch(done); + }; + + this.submitP = function(peering, eraseIfAlreadyRecorded, cautious){ let thePeer = new Peer(peering); let sp = thePeer.block.split('-'); let blockNumber = sp[0]; let blockHash = sp[1]; let sigTime = 0; let block; + let makeCheckings = cautious || cautious === undefined; return co(function *() { - let goodSignature = localValidator(null).checkPeerSignature(thePeer); - if (!goodSignature) { - throw 'Signature from a peer must match'; + if (makeCheckings) { + let goodSignature = localValidator(null).checkPeerSignature(thePeer); + if (!goodSignature) { + throw 'Signature from a peer must match'; + } } if (thePeer.block == constants.PEER.SPECIAL_BLOCK) { thePeer.statusTS = 0; thePeer.status = 'UP'; } else { block = yield dal.getBlockByNumberAndHashOrNull(blockNumber, blockHash); - if (!block) { + if (!block && makeCheckings) { throw constants.PEER.UNKNOWN_REFERENCE_BLOCK; + } else if (!block) { + thePeer.block = constants.PEER.SPECIAL_BLOCK; + thePeer.statusTS = 0; + thePeer.status = 'UP'; } } sigTime = block ? block.medianTime : 0; @@ -84,10 +97,8 @@ function PeeringService(server, pair, dal) { peerEntity.hash = String(sha1(peerEntity.getRawSigned())).toUpperCase(); yield dal.savePeer(peerEntity); let res = Peer.statics.peerize(peerEntity); - done(null, res); return res; - }) - .catch(done); + }); }; var peerFifo = async.queue(function (task, callback) { diff --git a/bin/ucoind b/bin/ucoind index 92df68f223e7795c4cf1c4e684f2daee62968f6a..ff70da7dd8d7e750cc6376cffd5392268557ac41 100755 --- a/bin/ucoind +++ b/bin/ucoind @@ -156,7 +156,7 @@ program return Q.nfcall(node.network.peering.get) .then(function(peering){ logger.info('Apply peering ...'); - return Q.nfcall(server.PeeringService.submit, peering, ERASE_IF_ALREADY_RECORDED) + return server.PeeringService.submitP(peering, ERASE_IF_ALREADY_RECORDED, !program.nocautious) .then(function() { logger.info('Applied'); return server.dal.getPeer(server.PeeringService.pubkey)