fix merge
This commit is contained in:
parent
f935fee566
commit
315d8c2197
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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"
|
||||||
}
|
}
|
|
@ -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");
|
||||||
|
|
|
@ -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;
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in New Issue