diff --git a/app/modules/crawler/index.ts b/app/modules/crawler/index.ts index b51e0a52d2cf88a4b853360e82cd485ae3146f9e..17af752a1d4d2c0dec6dcb2802c0a2ad67c8f250 100644 --- a/app/modules/crawler/index.ts +++ b/app/modules/crawler/index.ts @@ -4,7 +4,6 @@ import {Contacter} from "./lib/contacter" import {Crawler} from "./lib/crawler" import {Synchroniser} from "./lib/sync" import {req2fwd} from "./lib/req2fwd" -import {CrawlerConstants} from "./lib/constants" import {rawer} from "../../lib/common-libs/index" import {PeerDTO} from "../../lib/dto/PeerDTO" import {Buid} from "../../lib/common-libs/buid" @@ -13,7 +12,7 @@ export const CrawlerDependency = { duniter: { service: { - input: (server:Server, conf:ConfDTO, logger:any) => new Crawler(server, conf, logger) + process: (server:Server, conf:ConfDTO, logger:any) => new Crawler(server, conf, logger) }, methods: { diff --git a/app/modules/crawler/lib/crawler.ts b/app/modules/crawler/lib/crawler.ts index 370ce2451bfbdb808c0370f3e05235932e9347e6..55735ea2fdcb9c44abba39f4afdda59218b8793f 100644 --- a/app/modules/crawler/lib/crawler.ts +++ b/app/modules/crawler/lib/crawler.ts @@ -360,6 +360,7 @@ export class BlockCrawler { this.logger && this.logger.trace("Try with %s %s", p.getURL(), p.pubkey.substr(0, 6)); try { let node:any = await connect(p); + let nodeCurrent:BlockDTO|null = null node.pubkey = p.pubkey; await checkPeerValidity(server, p, node); @@ -375,7 +376,8 @@ export class BlockCrawler { return server.dal.getCurrentBlockOrNull() } async remoteCurrent(source?: any): Promise<BlockDTO | null> { - return source.getCurrent() + nodeCurrent = await source.getCurrent() + return nodeCurrent } async remotePeers(source?: any): Promise<PeerDTO[]> { return Promise.resolve([node]) @@ -396,14 +398,17 @@ export class BlockCrawler { return block; } async applyMainBranch(block: BlockDTO): Promise<boolean> { - let addedBlock = await server.BlockchainService.submitBlock(block, true, CrawlerConstants.FORK_ALLOWED); + let addedBlock = await server.writeBlock(block, false) if (!this.lastDownloaded) { this.lastDownloaded = await dao.remoteCurrent(node); } this.crawler.pullingEvent(server, 'applying', {number: block.number, last: this.lastDownloaded && this.lastDownloaded.number}); if (addedBlock) { current = addedBlock; - server.streamPush(addedBlock); + // Emit block events (for sharing with the network) only in forkWindowSize + if (nodeCurrent && nodeCurrent.number - addedBlock.number < server.conf.forksize) { + server.streamPush(addedBlock); + } } return true } diff --git a/package.json b/package.json index a40820a7e83caba4cbdd28aea8873878ce12ea73..356f32c3347a238e5bd7289f6f512a7d26b50906 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "heapdump": "^0.3.9", "inquirer": "3.0.6", "jison": "0.4.17", + "js-yaml": "3.8.2", "merkle": "0.5.1", "moment": "2.18.1", "morgan": "1.8.1", diff --git a/server.ts b/server.ts index f707d0211033195d3f0ab4ad51ce8a3979418ce6..2809e588f32e95446a7a306b7ba7e70a35cf9919 100644 --- a/server.ts +++ b/server.ts @@ -192,9 +192,11 @@ export class Server extends stream.Duplex implements HookableServer { return await this.writeBlock(obj) } - async writeBlock(obj:any) { + async writeBlock(obj:any, notify = true) { const res = await this.BlockchainService.submitBlock(obj, true, CrawlerConstants.FORK_ALLOWED) - this.emitDocument(res, DuniterDocument.ENTITY_BLOCK) + if (notify) { + this.emitDocument(res, DuniterDocument.ENTITY_BLOCK) + } return res } @@ -242,9 +244,11 @@ export class Server extends stream.Duplex implements HookableServer { return await this.writeRevocation(obj) } - async writeRevocation(obj:any) { + async writeRevocation(obj:any, notify = true) { const res = await this.IdentityService.submitRevocation(obj) - this.emitDocument(res, DuniterDocument.ENTITY_REVOCATION) + if (notify) { + this.emitDocument(res, DuniterDocument.ENTITY_REVOCATION) + } return res } @@ -253,9 +257,11 @@ export class Server extends stream.Duplex implements HookableServer { return await this.writeTransaction(obj) } - async writeTransaction(obj:any) { + async writeTransaction(obj:any, notify = true) { const res = await this.TransactionsService.processTx(obj) - this.emitDocument(res, DuniterDocument.ENTITY_TRANSACTION) + if (notify) { + this.emitDocument(res, DuniterDocument.ENTITY_TRANSACTION) + } return res } @@ -264,9 +270,11 @@ export class Server extends stream.Duplex implements HookableServer { return await this.writePeer(obj) } - async writePeer(obj:any) { + async writePeer(obj:any, notify = true) { const res = await this.PeeringService.submitP(obj) - this.emitDocument(res, DuniterDocument.ENTITY_PEER) + if (notify) { + this.emitDocument(res, DuniterDocument.ENTITY_PEER) + } return res } diff --git a/yarn.lock b/yarn.lock index 9ce11698d20f0aea73a5c18d19672ba045a7dbc4..1eb4771b3e9bcb9e2754620a0b6c49a056790519 100644 --- a/yarn.lock +++ b/yarn.lock @@ -803,13 +803,13 @@ debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" -debug@2.6.1: +debug@2.6.1, debug@^2.1.1: version "2.6.1" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351" dependencies: ms "0.7.2" -debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.3: +debug@2.6.8, debug@^2.2.0, debug@^2.6.3: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -1108,9 +1108,9 @@ esprima@1.1.x, esprima@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.1.1.tgz#5b6f1547f4d102e670e140c509be6771d6aeb549" -esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" +esprima@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" "esprima@~ 1.0.2": version "1.0.4" @@ -2008,12 +2008,12 @@ js-yaml@3.0.1: argparse "~ 0.1.11" esprima "~ 1.0.2" -js-yaml@^3.2.5, js-yaml@^3.5.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" +js-yaml@3.8.2, js-yaml@^3.2.5, js-yaml@^3.5.1: + version "3.8.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721" dependencies: argparse "^1.0.7" - esprima "^4.0.0" + esprima "^3.1.1" jsbn@~0.1.0: version "0.1.1"