fix merge

This commit is contained in:
Iuri Matias 2018-05-22 17:34:54 -04:00 committed by Jonathan Rainville
parent f935fee566
commit 315d8c2197
7 changed files with 91 additions and 133 deletions

View File

@ -1,5 +1,6 @@
const Web3 = require('web3'); const Web3 = require('web3');
const Provider = require('./provider.js'); const Provider = require('./provider.js');
const request = require('request');
class Blockchain { class Blockchain {
constructor(options) { constructor(options) {
@ -21,25 +22,26 @@ class Blockchain {
this.registerWeb3Object(); this.registerWeb3Object();
} }
initWeb3() { initWeb3(cb) {
const self = this; const self = this;
this.web3 = new Web3(); this.web3 = new Web3();
if (this.contractsConfig.deployment.type === "rpc") { if (this.contractsConfig.deployment.type === "rpc") {
this.web3.setProvider(new this.web3.providers.HttpProvider(web3Endpoint));
let provider; let provider;
let web3Endpoint = 'http://' + this.contractsConfig.deployment.host + ':' + this.contractsConfig.deployment.port; self.web3Endpoint = 'http://' + this.contractsConfig.deployment.host + ':' + this.contractsConfig.deployment.port;
const providerOptions = { const providerOptions = {
web3: this.web3, web3: this.web3,
accountsConfig: this.contractsConfig.deployment.accounts, accountsConfig: this.contractsConfig.deployment.accounts,
logger: this.logger, logger: this.logger,
isDev: this.isDev, isDev: this.isDev,
web3Endpoint web3Endpoint: self.web3Endpoint
}; };
provider = new Provider(providerOptions); provider = new Provider(providerOptions);
provider.startWeb3Provider(() => { provider.startWeb3Provider(() => {
self.isWeb3Started = true; self.isWeb3Started = true;
if (cb) {
cb();
}
}); });
} else { } else {
throw new Error("contracts config error: unknown deployment type " + this.contractsConfig.deployment.type); throw new Error("contracts config error: unknown deployment type " + this.contractsConfig.deployment.type);
@ -152,7 +154,7 @@ class Blockchain {
} }
// TODO: refactor this // TODO: refactor this
request.get(web3Endpoint, function (err, _response, _body) { request.get(this.web3Endpoint, function (err, _response, _body) {
if (err) { if (err) {
self.logger.error(("Couldn't connect to an Ethereum node are you sure it's on?").red); self.logger.error(("Couldn't connect to an Ethereum node are you sure it's on?").red);
self.logger.info("make sure you have an Ethereum node or simulator running. e.g 'embark blockchain'".magenta); self.logger.info("make sure you have an Ethereum node or simulator running. e.g 'embark blockchain'".magenta);

View File

@ -47,9 +47,11 @@ class DeployManager {
// TODO: could be implemented as an event (beforeDeployAll) // TODO: could be implemented as an event (beforeDeployAll)
function checkIsConnectedToBlockchain(callback) { function checkIsConnectedToBlockchain(callback) {
self.blockchain.initWeb3(() => {
self.blockchain.assertNodeConnection((err) => { self.blockchain.assertNodeConnection((err) => {
callback(err); callback(err);
}); });
});
}, },
// TODO: this can be done on the fly or as part of the initialization // TODO: this can be done on the fly or as part of the initialization

View File

@ -13,13 +13,8 @@ const Pipeline = require('../pipeline/pipeline.js');
const Watch = require('../pipeline/watch.js'); const Watch = require('../pipeline/watch.js');
const LibraryManager = require('../versions/library_manager.js'); const LibraryManager = require('../versions/library_manager.js');
const CodeRunner = require('../coderunner/codeRunner.js'); const CodeRunner = require('../coderunner/codeRunner.js');
const request = require('request');
const ProcessLauncher = require('../process/processLauncher'); const BlockchainProcess = require('../processes/blockchain.js');
const utils = require('../utils/utils');
const constants = require('../constants');
const STARTING_BLOCKCHAIN = 'startBlockchain';
class Engine { class Engine {
constructor(options) { constructor(options) {
@ -126,6 +121,7 @@ class Engine {
"codeRunner": this.codeRunnerService, "codeRunner": this.codeRunnerService,
"codeGenerator": this.codeGeneratorService, "codeGenerator": this.codeGeneratorService,
"deployment": this.deploymentService, "deployment": this.deploymentService,
"processes": this.processesService,
"fileWatcher": this.fileWatchService, "fileWatcher": this.fileWatchService,
"webServer": this.webServerService, "webServer": this.webServerService,
"ipfs": this.ipfsService, "ipfs": this.ipfsService,
@ -170,6 +166,18 @@ class Engine {
}); });
} }
processesService(_options) {
let blockchainProcess = new BlockchainProcess({
events: this.events,
logger: this.logger,
normalizeInput: this.normalizeInput,
blockchainConfig: this.config.blockchainConfig,
locale: this.locale
});
blockchainProcess.startBlockchainNode();
}
codeRunnerService(_options) { codeRunnerService(_options) {
this.codeRunner = new CodeRunner({ this.codeRunner = new CodeRunner({
plugins: this.plugins, plugins: this.plugins,
@ -254,13 +262,6 @@ class Engine {
contractsManager: this.contractsManager, contractsManager: this.contractsManager,
onlyCompile: options.onlyCompile onlyCompile: options.onlyCompile
}); });
if (!options.web3) {
// Web3 object might have been modified
self.onReady(() => {
self.deployManager.web3 = self.web3;
});
}
this.events.on('file-event', function (fileType) { this.events.on('file-event', function (fileType) {
clearTimeout(self.fileTimeout); clearTimeout(self.fileTimeout);
@ -314,74 +315,14 @@ class Engine {
} }
onReady(callback) { onReady(callback) {
if (this.isReady) { //if (this.isReady) {
return callback(); // return callback();
} //}
this.events.once(constants.blockchain.engineReady, () => { //this.events.once(constants.blockchain.engineReady, () => {
callback(); // callback();
}); //});
}
checkWeb3Status(web3Endpoint, callback) { setTimeout(function() { callback(); }, 2000);
const self = this;
const NO_NODE = 'noNode';
const noNodeObj = {name: __("No Blockchain node found"), status: 'off'};
async.waterfall([
function checkCurrentProvider(next) {
if (self.web3.currentProvider === undefined) {
return next(NO_NODE);
}
next();
},
function pingWeb3Endpoint(next) {
// FIXME: this is needed currently because the provider (MetaMask/provider-engine) doesn't callback when there is no node
request.get(web3Endpoint, function (err, _response, _body) {
if (err) {
return next(NO_NODE);
}
next();
});
},
function checkAccount(next) {
self.web3.eth.getAccounts(function(err, _accounts) {
if (err) {
return next(NO_NODE);
}
next();
});
},
function getWeb3ClientVersion(next) {
// TODO: web3_clientVersion method is currently not implemented in web3.js 1.0
self.web3._requestManager.send({method: 'web3_clientVersion', params: []}, (err, version) => {
if (err) {
return next({name: __("Ethereum node (version unknown)"), status: 'on'});
}
if (version.indexOf("/") < 0) {
return next({name: version, status: 'on'});
}
let nodeName = version.split("/")[0];
let versionNumber = version.split("/")[1].split("-")[0];
let name = nodeName + " " + versionNumber + " (Ethereum)";
return next({name: name, status: 'on'});
});
}
], (msg) => {
if (msg === NO_NODE) {
if (self.isRunningBlockchain) {
return callback(noNodeObj);
}
// Start blockchain node ourselves
self.stopWeb3Service();
self.startBlockchainNode();
return callback(STARTING_BLOCKCHAIN);
}
if (!self.isReady) {
self.isReady = true;
self.events.emit(constants.blockchain.engineReady);
}
callback(msg);
});
} }
web3Service(options) { web3Service(options) {
@ -404,41 +345,6 @@ class Engine {
}); });
} }
stopWeb3Service() {
this.servicesMonitor.stopCheck('Ethereum');
if (this.provider) {
this.provider.stop();
}
this.web3 = null;
}
startBlockchainNode() {
this.logger.info(__('Starting Blockchain node in another process').cyan);
this.isRunningBlockchain = true;
this.blockchainProcess = new ProcessLauncher({
modulePath: utils.joinPath(__dirname, '../cmds/blockchain/blockchainProcess.js'),
logger: this.logger,
events: this.events,
normalizeInput: this.normalizeInput,
silent: true
});
this.blockchainProcess.send({
action: constants.blockchain.init, options: {
blockchainConfig: this.config.blockchainConfig,
client: this.client,
env: this.env,
isDev: this.isDev,
locale: this.locale
}
});
this.blockchainProcess.once('result', constants.blockchain.blockchainReady, () => {
this.logger.info(__('Blockchain node is ready').cyan);
this.startService('web3');
});
}
libraryManagerService(_options) { libraryManagerService(_options) {
this.libraryManager = new LibraryManager({ this.libraryManager = new LibraryManager({
plugins: this.plugins, plugins: this.plugins,

View File

@ -120,8 +120,7 @@
"adding %s to ipfs": "adding %s to ipfs", "adding %s to ipfs": "adding %s to ipfs",
"DApp available at": "DApp available at", "DApp available at": "DApp available at",
"successfully uploaded to ipfs": "successfully uploaded to ipfs", "successfully uploaded to ipfs": "successfully uploaded to ipfs",
"finished building DApp and deploying to": "finished building DApp and deploying to",
"instantiated js-ipfs object configured to the current environment (available if ipfs is enabled)": "instantiated js-ipfs object configured to the current environment (available if ipfs is enabled)",
"Starting Blockchain node in another process": "Starting Blockchain node in another process", "Starting Blockchain node in another process": "Starting Blockchain node in another process",
"Blockchain node is ready": "Blockchain node is ready" "Blockchain node is ready": "Blockchain node is ready",
"terminating due to error": "terminating due to error"
} }

View File

@ -129,6 +129,7 @@ class Embark {
} }
engine.startMonitor(); engine.startMonitor();
engine.startService("processes");
engine.startService("libraryManager"); engine.startService("libraryManager");
engine.startService("codeRunner"); engine.startService("codeRunner");
engine.startService("web3"); engine.startService("web3");

View File

@ -0,0 +1,48 @@
const ProcessLauncher = require('../process/processLauncher');
const utils = require('../utils/utils.js');
const constants = require('../constants');
class Blockchain {
constructor (options) {
this.events = options.events;
this.logger = options.logger;
this.normalizeInput = options.normalizeInput;
this.blockchainConfig = options.blockchainConfig;
this.locale = options.locale;
}
startBlockchainNode() {
this.logger.info('Starting Blockchain node in another process'.cyan);
this.isRunningBlockchain = true;
this.blockchainProcess = new ProcessLauncher({
modulePath: utils.joinPath(__dirname, '../cmds/blockchain/blockchainProcess.js'),
logger: this.logger,
events: this.events,
normalizeInput: this.normalizeInput,
//silent: true
silent: false
});
this.blockchainProcess.send({
action: constants.blockchain.init, options: {
blockchainConfig: this.blockchainConfig,
//client: this.client,
// TODO: assume for now it's geth
client: 'geth',
env: this.env,
//isDev: this.isDev,
// TODO: assume for now it's true
isDev: true,
locale: this.locale
}
});
this.blockchainProcess.once('result', constants.blockchain.blockchainReady, () => {
this.logger.info('Blockchain node is ready'.cyan);
});
}
}
module.exports = Blockchain;

View File

@ -89,7 +89,7 @@
"dom-helpers": { "dom-helpers": {
"version": "3.3.1", "version": "3.3.1",
"resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.3.1.tgz",
"integrity": "sha1-/BpOFf/fYN3eA6SAqcD+zoId1KY=" "integrity": "sha512-2Sm+JaYn74OiTM2wHvxJOo3roiq/h25Yi69Fqk269cNUwIXsCvATB6CRSFC9Am/20G2b28hGv/+7NiWydIrPvg=="
}, },
"dotenv": { "dotenv": {
"version": "4.0.0", "version": "4.0.0",
@ -229,7 +229,7 @@
"node-fetch": { "node-fetch": {
"version": "1.7.3", "version": "1.7.3",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
"integrity": "sha1-mA9vcthSEaU0fGsrwYxbhMPrR+8=", "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==",
"requires": { "requires": {
"encoding": "0.1.12", "encoding": "0.1.12",
"is-stream": "1.1.0" "is-stream": "1.1.0"
@ -252,7 +252,7 @@
"promise": { "promise": {
"version": "7.3.1", "version": "7.3.1",
"resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
"integrity": "sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078=", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
"requires": { "requires": {
"asap": "2.0.6" "asap": "2.0.6"
} }
@ -289,7 +289,7 @@
"react-bootstrap": { "react-bootstrap": {
"version": "0.32.1", "version": "0.32.1",
"resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.1.tgz", "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.32.1.tgz",
"integrity": "sha1-YGJMG0ijnXc+9szmQhpPM+zBZrs=", "integrity": "sha512-RbfzKUbsukWsToWqGHfCCyMFq9QQI0TznutdyxyJw6dih2NvIne25Mrssg8LZsprqtPpyQi8bN0L0Fx3fUsL8Q==",
"requires": { "requires": {
"babel-runtime": "6.26.0", "babel-runtime": "6.26.0",
"classnames": "2.2.5", "classnames": "2.2.5",
@ -319,7 +319,7 @@
"react-overlays": { "react-overlays": {
"version": "0.8.3", "version": "0.8.3",
"resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz", "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.8.3.tgz",
"integrity": "sha1-+tZe6lskMBzKGSoWn13dsLINOsU=", "integrity": "sha512-h6GT3jgy90PgctleP39Yu3eK1v9vaJAW73GOA/UbN9dJ7aAN4BTZD6793eI1D5U+ukMk17qiqN/wl3diK1Z5LA==",
"requires": { "requires": {
"classnames": "2.2.5", "classnames": "2.2.5",
"dom-helpers": "3.3.1", "dom-helpers": "3.3.1",
@ -353,7 +353,7 @@
"regenerator-runtime": { "regenerator-runtime": {
"version": "0.11.1", "version": "0.11.1",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
"integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
}, },
"setimmediate": { "setimmediate": {
"version": "1.0.5", "version": "1.0.5",
@ -412,7 +412,7 @@
"zeppelin-solidity": { "zeppelin-solidity": {
"version": "1.8.0", "version": "1.8.0",
"resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.8.0.tgz", "resolved": "https://registry.npmjs.org/zeppelin-solidity/-/zeppelin-solidity-1.8.0.tgz",
"integrity": "sha1-BJ/N59rqn8hSEPjG25+M0auKhTo=", "integrity": "sha512-7Mxq6Y7EES0PSLrRF6v0EVYqBVRRo8hFrr7m3jEs69VbbQ5kpANzizeEdbP1/PWKSOmBOg208qP2vSA0FlzFLA==",
"requires": { "requires": {
"dotenv": "4.0.0", "dotenv": "4.0.0",
"ethjs-abi": "0.2.1" "ethjs-abi": "0.2.1"