diff --git a/lib/core/engine.js b/lib/core/engine.js index 56dd62df6..0e0957ef2 100644 --- a/lib/core/engine.js +++ b/lib/core/engine.js @@ -213,7 +213,8 @@ class Engine { web3Service(options) { this.registerModule('blockchain_process', { locale: this.locale, - isDev: this.isDev + isDev: this.isDev, + ipc: this.ipc }); this.registerModule('blockchain_connector', { diff --git a/lib/modules/blockchain_process/index.js b/lib/modules/blockchain_process/index.js index dd7de6775..66fafe469 100644 --- a/lib/modules/blockchain_process/index.js +++ b/lib/modules/blockchain_process/index.js @@ -13,6 +13,7 @@ class BlockchainModule { this.embark = embark; this.locale = options.locale; this.isDev = options.isDev; + this.ipc = options.ipc; this.registerBlockchainProcess(); } @@ -25,6 +26,11 @@ class BlockchainModule { self.startBlockchainNode(cb); }); }); + + if (!this.ipc.isServer()) return; + self.ipc.on('blockchain:node', (_message, cb) => { + cb(null, utils.buildUrlFromConfig(self.contractsConfig.deployment)); + }); } assertNodeConnection(noLogs, cb) { @@ -47,7 +53,7 @@ class BlockchainModule { if (!self.contractsConfig || !self.contractsConfig.deployment || !self.contractsConfig.deployment.host) { return next(); } - const {host, port, type, protocol} = self.contractsConfig.deployment; + const {host, port, type, protocol} = self.contractsConfig.deployment; utils.pingEndpoint(host, port, type, protocol, self.blockchainConfig.wsOrigins.split(',')[0], next); } ], function (err) { diff --git a/lib/modules/solidity/solcW.js b/lib/modules/solidity/solcW.js index 8c3260ca2..355508e33 100644 --- a/lib/modules/solidity/solcW.js +++ b/lib/modules/solidity/solcW.js @@ -21,6 +21,10 @@ class SolcW { return self.load_compiler_internally(done); } + if (self.ipc.connected) { + self.compilerLoaded = true; + return done(); + } self.ipc.connect((err) => { if (err) { return self.load_compiler_internally(done); diff --git a/lib/pipeline/pipeline.js b/lib/pipeline/pipeline.js index b1b818cce..76f69e427 100644 --- a/lib/pipeline/pipeline.js +++ b/lib/pipeline/pipeline.js @@ -136,7 +136,7 @@ class Pipeline { ], function (err, contentFile) { if (err) { - self.logger.error(err); + self.logger.error(err.message || err); return fileCb(err); } diff --git a/lib/tests/test.js b/lib/tests/test.js index e22db40bf..d4b8e1d2b 100644 --- a/lib/tests/test.js +++ b/lib/tests/test.js @@ -139,6 +139,20 @@ class Test { this.initDeployServices(); this.engine.startService("codeGenerator"); + if (this.options.node === 'embark') { + return this.engine.ipc.connect((err) => { + if (err) { + return this.engine.logger.error(err.message || err); + } + this.engine.ipc.request('blockchain:node', {}, (err, node) => { + if (err) { + return this.engine.logger.error(err.message || err); + } + this.options.node = node; + callback(); + }); + }); + } callback(); } diff --git a/lib/utils/utils.js b/lib/utils/utils.js index c1ccbfca6..21b2ec2e5 100644 --- a/lib/utils/utils.js +++ b/lib/utils/utils.js @@ -340,13 +340,18 @@ function normalizeInput(input) { * The URL host, required. * @param {string} port * The URL port, default to empty string. + * @param {string} [type] + * Type of connection * @returns {string} the constructued URL, with defaults */ -function buildUrl(protocol, host, port) { +function buildUrl(protocol, host, port, type) { if (!host) throw new Error('utils.buildUrl: parameter \'host\' is required'); if (port) port = ':' + port; else port = ''; - return `${protocol || 'http'}://${host}${port}`; + if (!protocol) { + protocol = type === 'ws' ? 'ws' : 'http'; + } + return `${protocol}://${host}${port}`; } /** @@ -361,7 +366,7 @@ function buildUrl(protocol, host, port) { function buildUrlFromConfig(configObj) { if (!configObj) throw new Error('[utils.buildUrlFromConfig]: config object must cannot be null'); if (!configObj.host) throw new Error('[utils.buildUrlFromConfig]: object must contain a \'host\' property'); - return this.buildUrl(configObj.protocol, canonicalHost(configObj.host), configObj.port); + return this.buildUrl(configObj.protocol, canonicalHost(configObj.host), configObj.port, configObj.type); } function deconstructUrl(endpoint) {