embark/lib/contracts/deploy_manager.js

114 lines
3.5 KiB
JavaScript
Raw Normal View History

let async = require('async');
2018-01-05 20:10:47 +00:00
//require("../utils/debug_util.js")(__filename, async);
let Deploy = require('./deploy.js');
2017-03-30 11:12:39 +00:00
class DeployManager {
constructor(options) {
this.config = options.config;
this.logger = options.logger;
this.blockchainConfig = this.config.blockchainConfig;
2017-12-21 16:21:36 +00:00
2017-03-31 11:34:43 +00:00
this.events = options.events;
2017-03-30 11:12:39 +00:00
this.plugins = options.plugins;
2018-05-18 22:31:47 +00:00
this.blockchain = options.blockchain;
2017-03-30 11:12:39 +00:00
this.chainConfig = (options.trackContracts !== false) ? this.config.chainTracker : false;
this.contractsManager = options.contractsManager;
2018-01-13 16:38:10 +00:00
this.gasLimit = false;
this.fatalErrors = false;
this.deployOnlyOnConfig = false;
this.onlyCompile = options.onlyCompile !== undefined ? options.onlyCompile : false;
}
2018-05-29 17:48:07 +00:00
deployContracts(compileOnlyIfNeeded, done) {
if (typeof compileOnlyIfNeeded === 'function') {
done = compileOnlyIfNeeded;
compileOnlyIfNeeded = false;
}
2017-03-30 11:12:39 +00:00
let self = this;
if (self.blockchainConfig === {} || self.blockchainConfig.enabled === false) {
2018-05-08 21:49:46 +00:00
self.logger.info(__("Blockchain component is disabled in the config").underline);
2017-03-31 11:34:43 +00:00
this.events.emit('blockchainDisabled', {});
2017-03-30 11:12:39 +00:00
return done();
}
2017-03-30 11:12:39 +00:00
async.waterfall([
function buildContracts(callback) {
2018-05-29 17:48:07 +00:00
if (compileOnlyIfNeeded) {
if (self.contractsManager.compiledContracts && Object.keys(self.contractsManager.compiledContracts).length) {
// Contracts have already been compiled
return callback();
}
}
console.log('compiling');
self.contractsManager.deployOnlyOnConfig = self.deployOnlyOnConfig; // temporary, should refactor
self.contractsManager.build(() => {
callback();
});
2017-03-30 11:12:39 +00:00
},
// TODO: shouldn't be necessary
function checkCompileOnly(callback){
if(self.onlyCompile){
self.events.emit('contractsDeployed', self.contractsManager);
return done();
}
return callback();
},
2018-05-20 10:46:12 +00:00
// TODO: could be implemented as an event (beforeDeployAll)
function checkIsConnectedToBlockchain(callback) {
self.blockchain.onReady(() => {
2018-05-22 21:34:54 +00:00
self.blockchain.assertNodeConnection((err) => {
callback(err);
});
2018-01-05 20:10:47 +00:00
});
2017-03-30 11:12:39 +00:00
},
// TODO: this can be done on the fly or as part of the initialization
function determineDefaultAccount(callback) {
self.blockchain.determineDefaultAccount((err) => {
callback(err);
2017-03-30 11:12:39 +00:00
});
},
2018-05-20 10:46:12 +00:00
function deployAllContracts(callback) {
2017-03-30 11:12:39 +00:00
let deploy = new Deploy({
2018-05-18 22:31:47 +00:00
blockchain: self.blockchain,
contractsManager: self.contractsManager,
2017-03-30 11:12:39 +00:00
logger: self.logger,
events: self.events,
2017-03-30 11:12:39 +00:00
chainConfig: self.chainConfig,
2018-01-13 16:38:10 +00:00
env: self.config.env,
plugins: self.plugins,
2018-01-13 16:38:10 +00:00
gasLimit: self.gasLimit
2017-03-30 11:12:39 +00:00
});
2018-01-05 20:10:47 +00:00
2018-05-19 02:40:47 +00:00
deploy.deployAll(function (err) {
if (!err) {
self.events.emit('contractsDeployed', self.contractsManager);
2018-05-19 02:40:47 +00:00
}
if (err && self.fatalErrors) {
return callback(err);
}
callback();
2017-03-30 11:12:39 +00:00
});
2017-12-21 16:21:36 +00:00
},
function runAfterDeploy(callback) {
let afterDeployPlugins = self.plugins.getPluginsProperty('afterContractsDeployActions', 'afterContractsDeployActions');
2017-12-21 16:21:36 +00:00
async.eachLimit(afterDeployPlugins, 1, function(plugin, nextEach) {
plugin.call(plugin, nextEach);
}, () => {
callback();
2017-12-21 16:21:36 +00:00
});
2017-02-24 13:20:03 +00:00
}
], function (err, _result) {
done(err);
2017-02-24 13:20:03 +00:00
});
}
2017-03-30 11:12:39 +00:00
}
2017-02-24 13:20:03 +00:00
module.exports = DeployManager;