mirror of https://github.com/embarklabs/embark.git
refactor: upgrade to web3 v1.2.1
Upgrade all dependencies on web3/web3-* v1.0.0-beta.37 to v1.2.1. Make various adjustments related to the previous convention of `"web3": "1.0.0-beta"` in `embark.json` signifying that embark's own web3 dependency should be used in dapp builds. Fix bugs in library manager, including a switch from using the live-plugin-manager package to using npm in a child process to install `"versions"` dependencies specified in `embark.json` when a specified version doesn't match up with embark's own version for that package. Avoid race conditions when installing `"versions"` by completing all installs prior to starting other services. If an install fails, then after all the installs have completed or failed the embark command will exit with error. Change various comments and update docs to reflect the new default of web3 v1.2.1.
This commit is contained in:
parent
0c12097c17
commit
ad30a98169
|
@ -9,7 +9,7 @@
|
||||||
"buildDir": "dist/",
|
"buildDir": "dist/",
|
||||||
"config": "config/",
|
"config": "config/",
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.5.0",
|
"solc": "0.5.0",
|
||||||
"ipfs-api": "17.2.4"
|
"ipfs-api": "17.2.4"
|
||||||
},
|
},
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
"buildDir": "dist/",
|
"buildDir": "dist/",
|
||||||
"config": "config/",
|
"config": "config/",
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.5.0",
|
"solc": "0.5.0",
|
||||||
"ipfs-api": "17.2.4"
|
"ipfs-api": "17.2.4"
|
||||||
},
|
},
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
"config": "config/",
|
"config": "config/",
|
||||||
"versions": {
|
"versions": {
|
||||||
"solc": "0.4.25",
|
"solc": "0.4.25",
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"ipfs-api": "17.2.7"
|
"ipfs-api": "17.2.7"
|
||||||
},
|
},
|
||||||
"plugins": {
|
"plugins": {
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"namesystem": "ens.json"
|
"namesystem": "ens.json"
|
||||||
},
|
},
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.4.24"
|
"solc": "0.4.24"
|
||||||
},
|
},
|
||||||
"plugins": {
|
"plugins": {
|
||||||
|
|
|
@ -55,7 +55,7 @@
|
||||||
"ethereumjs-tx": "1.3.7",
|
"ethereumjs-tx": "1.3.7",
|
||||||
"ethereumjs-util": "6.0.0",
|
"ethereumjs-util": "6.0.0",
|
||||||
"ganache-cli": "6.4.3",
|
"ganache-cli": "6.4.3",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -280,7 +280,7 @@ class BlockchainConnector {
|
||||||
next();
|
next();
|
||||||
},
|
},
|
||||||
function checkVersion(next) {
|
function checkVersion(next) {
|
||||||
// TODO: web3_clientVersion method is currently not implemented in web3.js 1.0
|
// TODO: web3_clientVersion method is currently not implemented in web3.js 1.x
|
||||||
self.web3._requestManager.send({method: 'web3_clientVersion', params: []}, (err, version) => {
|
self.web3._requestManager.send({method: 'web3_clientVersion', params: []}, (err, version) => {
|
||||||
if (err || !version) {
|
if (err || !version) {
|
||||||
self.isWeb3Ready = false;
|
self.isWeb3Ready = false;
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
"embark-core": "^4.1.0-beta.5",
|
"embark-core": "^4.1.0-beta.5",
|
||||||
"embark-process-logs-api": "^4.1.0-beta.5",
|
"embark-process-logs-api": "^4.1.0-beta.5",
|
||||||
"embark-utils": "^4.1.0-beta.5",
|
"embark-utils": "^4.1.0-beta.5",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
"fs-extra": "7.0.1",
|
"fs-extra": "7.0.1",
|
||||||
"parse-json": "4.0.0",
|
"parse-json": "4.0.0",
|
||||||
"vm2": "3.6.4",
|
"vm2": "3.6.4",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -50,13 +50,15 @@
|
||||||
"prettier-plugin-solidity": "1.0.0-alpha.25",
|
"prettier-plugin-solidity": "1.0.0-alpha.25",
|
||||||
"semver": "5.6.0",
|
"semver": "5.6.0",
|
||||||
"solidity-parser-antlr": "0.4.5",
|
"solidity-parser-antlr": "0.4.5",
|
||||||
"web3-eth-contract": "1.0.0-beta.37"
|
"web3-eth-contract": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
"@babel/core": "7.2.2",
|
"@babel/core": "7.2.2",
|
||||||
|
"@types/fs-extra": "7.0.0",
|
||||||
"@types/mocha": "5.2.0",
|
"@types/mocha": "5.2.0",
|
||||||
"@types/prettier": "1.16.4",
|
"@types/prettier": "1.16.4",
|
||||||
|
"@types/semver": "5.5.0",
|
||||||
"@types/web3": "1.0.12",
|
"@types/web3": "1.0.12",
|
||||||
"cross-env": "5.2.0",
|
"cross-env": "5.2.0",
|
||||||
"eslint": "5.7.0",
|
"eslint": "5.7.0",
|
||||||
|
|
|
@ -50,7 +50,8 @@
|
||||||
"colors": "1.3.2",
|
"colors": "1.3.2",
|
||||||
"embark-i18n": "^4.1.0-beta.3",
|
"embark-i18n": "^4.1.0-beta.3",
|
||||||
"embark-utils": "^4.1.0-beta.5",
|
"embark-utils": "^4.1.0-beta.5",
|
||||||
"live-plugin-manager-git-fix": "0.12.1"
|
"fs-extra": "7.0.1",
|
||||||
|
"rimraf": "2.6.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { __ } from 'embark-i18n';
|
import { __ } from 'embark-i18n';
|
||||||
import { dappPath, embarkPath, normalizePath, toForwardSlashes } from 'embark-utils';
|
import { dappPath, embarkPath, normalizePath, toForwardSlashes } from 'embark-utils';
|
||||||
var Npm = require('./npm.js');
|
const Npm = require('./npm.js');
|
||||||
|
const {callbackify} = require('util');
|
||||||
|
|
||||||
class LibraryManager {
|
class LibraryManager {
|
||||||
|
|
||||||
|
@ -10,6 +11,7 @@ class LibraryManager {
|
||||||
this.contractsConfig = this.config.contractsConfig;
|
this.contractsConfig = this.config.contractsConfig;
|
||||||
this.storageConfig = this.config.storageConfig;
|
this.storageConfig = this.config.storageConfig;
|
||||||
this.useDashboard = useDashboard;
|
this.useDashboard = useDashboard;
|
||||||
|
this.npm = new Npm({logger: this.embark.logger, useDashboard});
|
||||||
|
|
||||||
this.determineVersions();
|
this.determineVersions();
|
||||||
|
|
||||||
|
@ -22,7 +24,7 @@ class LibraryManager {
|
||||||
determineVersions() {
|
determineVersions() {
|
||||||
this.versions = {};
|
this.versions = {};
|
||||||
|
|
||||||
let solcVersionInConfig = this.contractsConfig.versions.solc;
|
let solcVersionInConfig = this.contractsConfig.versions["solc"];
|
||||||
let web3VersionInConfig = this.contractsConfig.versions["web3"];
|
let web3VersionInConfig = this.contractsConfig.versions["web3"];
|
||||||
let ipfsApiVersion = this.storageConfig.versions["ipfs-api"];
|
let ipfsApiVersion = this.storageConfig.versions["ipfs-api"];
|
||||||
|
|
||||||
|
@ -39,6 +41,63 @@ class LibraryManager {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
installAll(callback) {
|
||||||
|
const installAll = async () => {
|
||||||
|
const useDashboard = this.npm._useDashboard;
|
||||||
|
this.npm._useDashboard = false;
|
||||||
|
|
||||||
|
const results = await Promise.all(
|
||||||
|
Object.entries(this.versions)
|
||||||
|
.filter(([packageName, version]) => {
|
||||||
|
// NOTE: will behave less than ideally if embark switches to using
|
||||||
|
// a dependency range for the various overridable packages instead
|
||||||
|
// of an exact version
|
||||||
|
if (version === this.embark.config.package.dependencies[packageName]) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
.map(
|
||||||
|
([packageName, version]) => {
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
this.npm.getPackageVersion(packageName, version, (err, location) => {
|
||||||
|
resolve({packageName, version, err, location});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.npm._useDashboard = useDashboard;
|
||||||
|
|
||||||
|
const errors = {};
|
||||||
|
const locations = {};
|
||||||
|
|
||||||
|
results.forEach(({packageName, version, err, location}) => {
|
||||||
|
if (err) {
|
||||||
|
errors[packageName] = {version, err};
|
||||||
|
} else {
|
||||||
|
locations[packageName] = {version, location};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!Object.keys(errors).length) return locations;
|
||||||
|
|
||||||
|
const packages = (Object.entries(errors).reduce((packages, [packageName, {version}]) => {
|
||||||
|
return packages.concat(`${packageName}@${version}`);
|
||||||
|
}, []));
|
||||||
|
|
||||||
|
const err = new Error(`install failed for ${packages.length} packages: ${packages.join(', ')}`);
|
||||||
|
err.results = {errors, locations};
|
||||||
|
throw err;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (callback) {
|
||||||
|
return callbackify(installAll)(callback);
|
||||||
|
}
|
||||||
|
return installAll();
|
||||||
|
}
|
||||||
|
|
||||||
registerCommands() {
|
registerCommands() {
|
||||||
const self = this;
|
const self = this;
|
||||||
const matches = ['versions'];
|
const matches = ['versions'];
|
||||||
|
@ -95,9 +154,8 @@ class LibraryManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
listenToCommandsToGetLibrary() {
|
listenToCommandsToGetLibrary() {
|
||||||
let npm = new Npm({logger: this.embark.logger, useDashboard: this.useDashboard});
|
|
||||||
this.embark.events.setCommandHandler('version:getPackageLocation', (libName, version, cb) => {
|
this.embark.events.setCommandHandler('version:getPackageLocation', (libName, version, cb) => {
|
||||||
npm.getPackageVersion(libName, version, cb);
|
this.npm.getPackageVersion(libName, version, cb);
|
||||||
});
|
});
|
||||||
this.embark.events.setCommandHandler('version:downloadIfNeeded', (libName, cb) => {
|
this.embark.events.setCommandHandler('version:downloadIfNeeded', (libName, cb) => {
|
||||||
this.downloadIfNeeded(libName, cb);
|
this.downloadIfNeeded(libName, cb);
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
const fs = require('fs');
|
const path = require('path');
|
||||||
const PluginManager = require('live-plugin-manager-git-fix').PluginManager;
|
|
||||||
require('colors');
|
require('colors');
|
||||||
import { LongRunningProcessTimer } from 'embark-utils';
|
import { LongRunningProcessTimer } from 'embark-utils';
|
||||||
|
const {exec} = require('child_process');
|
||||||
|
const {existsSync, mkdirpSync, writeFileSync} = require('fs-extra');
|
||||||
|
const rimraf = require('rimraf');
|
||||||
|
|
||||||
|
const FINISHED_INSTALLING_SUCCESSFULLY = 'finished';
|
||||||
|
|
||||||
class Npm {
|
class Npm {
|
||||||
|
|
||||||
|
@ -9,27 +13,54 @@ class Npm {
|
||||||
this._logger = options.logger;
|
this._logger = options.logger;
|
||||||
this._packageName = options.packageName;
|
this._packageName = options.packageName;
|
||||||
this._version = options.version;
|
this._version = options.version;
|
||||||
|
this._installed = {};
|
||||||
this._installing = {};
|
this._installing = {};
|
||||||
|
this._installFailed = {};
|
||||||
this._useDashboard = options.useDashboard;
|
this._useDashboard = options.useDashboard;
|
||||||
}
|
}
|
||||||
|
|
||||||
static getPackagePath(packageName, version) {
|
static getPackagePath(packageName, version) {
|
||||||
return './.embark/versions/' + packageName + '/' + version + '/' + packageName;
|
return path.join('.embark', 'versions', packageName, version, 'node_modules', packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
_isInstallFailure(packageName, version) {
|
||||||
|
return !!this._installFailed[packageName + version];
|
||||||
|
}
|
||||||
|
|
||||||
|
_isInstalled(packageName, version) {
|
||||||
|
if (this._installed[packageName + version]) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
const packagePath = Npm.getPackagePath(packageName, version);
|
||||||
|
const installPath = path.dirname(path.dirname(packagePath));
|
||||||
|
if (existsSync(packagePath) &&
|
||||||
|
!this._isInstalling(packageName, version)) {
|
||||||
|
if (existsSync(path.join(installPath, FINISHED_INSTALLING_SUCCESSFULLY))) {
|
||||||
|
this._installed[packageName + version] = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
rimraf.sync(installPath);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
_isInstalling(packageName, version) {
|
_isInstalling(packageName, version) {
|
||||||
return typeof this._installing[packageName + version] !== 'undefined';
|
return !!this._installing[packageName + version];
|
||||||
}
|
}
|
||||||
|
|
||||||
getPackageVersion(packageName, version, callback) {
|
getPackageVersion(packageName, version, callback) {
|
||||||
const packagePath = Npm.getPackagePath(packageName, version);
|
const packagePath = Npm.getPackagePath(packageName, version);
|
||||||
|
|
||||||
// check if this package already exists in the filesystem
|
// check if this package is already installed
|
||||||
if (fs.existsSync(packagePath)) {
|
if (this._isInstalled(packageName, version)) {
|
||||||
return callback(null, packagePath);
|
return callback(null, packagePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
const pluginManager = new PluginManager({pluginsPath: './.embark/versions/' + packageName + '/' + version + '/'});
|
// check if this package already failed to install
|
||||||
|
if (this._isInstallFailure(packageName, version)) {
|
||||||
|
return callback(this._installFailed[packageName + version]);
|
||||||
|
}
|
||||||
|
|
||||||
// check if we're already installing this package
|
// check if we're already installing this package
|
||||||
if (this._isInstalling(packageName, version)) {
|
if (this._isInstalling(packageName, version)) {
|
||||||
|
@ -41,28 +72,37 @@ class Npm {
|
||||||
this._logger,
|
this._logger,
|
||||||
packageName,
|
packageName,
|
||||||
version,
|
version,
|
||||||
'Downloading and installing {{packageName}} {{version}}...',
|
'Downloading and installing {{packageName}} {{version}}...\n',
|
||||||
'Still downloading and installing {{packageName}} {{version}}... ({{duration}})',
|
'Still downloading and installing {{packageName}} {{version}}... ({{duration}})\n',
|
||||||
'Finished downloading and installing {{packageName}} {{version}} in {{duration}}',
|
'Finished downloading and installing {{packageName}} {{version}} in {{duration}}\n',
|
||||||
{
|
{
|
||||||
showSpinner: !this._useDashboard,
|
showSpinner: !this._useDashboard,
|
||||||
interval: this._useDashboard ? 2000 : 1000,
|
interval: this._useDashboard ? 2000 : 1000,
|
||||||
longRunningThreshold: 10000
|
longRunningThreshold: 120000
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
timer.start();
|
timer.start();
|
||||||
|
|
||||||
// do the package download/install
|
// do the package install
|
||||||
pluginManager.install(packageName, version).then((result) => {
|
const installPath = path.dirname(path.dirname(packagePath));
|
||||||
timer.end();
|
mkdirpSync(installPath);
|
||||||
this._installing[packageName + version].forEach((cb) => {
|
exec(`npm init -y && npm install --no-package-lock --no-save ${packageName}@${version}`, {
|
||||||
cb(null, result.location);
|
cwd: installPath
|
||||||
|
}, (err) => {
|
||||||
|
this._installing[packageName + version].forEach(cb => {
|
||||||
|
setImmediate(() => { return err ? cb(err) : cb(null, packagePath); });
|
||||||
});
|
});
|
||||||
delete this._installing[packageName + version];
|
delete this._installing[packageName + version];
|
||||||
}).catch(err => {
|
|
||||||
this._installing[packageName + version].forEach((cb) => {
|
if (err) {
|
||||||
cb(err);
|
timer.abort();
|
||||||
});
|
this._installFailed[packageName + version] = err;
|
||||||
|
rimraf.sync(installPath);
|
||||||
|
} else {
|
||||||
|
timer.end();
|
||||||
|
this._installed[packageName + version] = true;
|
||||||
|
writeFileSync(path.join(installPath, FINISHED_INSTALLING_SUCCESSFULLY), '');
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ const buildDir = path.join(dappPath, embarkJson.buildDir);
|
||||||
// unexpectedly
|
// unexpectedly
|
||||||
let versions;
|
let versions;
|
||||||
try {
|
try {
|
||||||
versions = glob.sync(path.join(dappPath, '.embark/versions/*/*'));
|
versions = glob.sync(path.join(dappPath, '.embark/versions/*/*/*'));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
versions = [];
|
versions = [];
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
"@babel/runtime-corejs2": "7.3.1",
|
"@babel/runtime-corejs2": "7.3.1",
|
||||||
"ascii-table": "0.0.9",
|
"ascii-table": "0.0.9",
|
||||||
"async": "2.6.1",
|
"async": "2.6.1",
|
||||||
"web3-utils": "1.0.0-beta.37"
|
"web3-utils": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -52,7 +52,6 @@
|
||||||
"embark-i18n": "^4.1.0-beta.3",
|
"embark-i18n": "^4.1.0-beta.3",
|
||||||
"embark-utils": "^4.1.0-beta.5",
|
"embark-utils": "^4.1.0-beta.5",
|
||||||
"fs-extra": "7.0.1",
|
"fs-extra": "7.0.1",
|
||||||
"live-plugin-manager-git-fix": "0.12.1",
|
|
||||||
"semver": "5.6.0",
|
"semver": "5.6.0",
|
||||||
"solc": "0.5.0",
|
"solc": "0.5.0",
|
||||||
"uuid": "3.3.2"
|
"uuid": "3.3.2"
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import { ProcessWrapper } from 'embark-core';
|
import { ProcessWrapper } from 'embark-core';
|
||||||
const fs = require('fs-extra');
|
const fs = require('fs-extra');
|
||||||
const semver = require('semver');
|
const semver = require('semver');
|
||||||
const PluginManager = require('live-plugin-manager-git-fix').PluginManager;
|
|
||||||
import { LongRunningProcessTimer } from 'embark-utils';
|
|
||||||
|
|
||||||
class SolcProcess extends ProcessWrapper {
|
class SolcProcess extends ProcessWrapper {
|
||||||
|
|
||||||
|
@ -20,33 +18,6 @@ class SolcProcess extends ProcessWrapper {
|
||||||
return {error: 'File not found'};
|
return {error: 'File not found'};
|
||||||
}
|
}
|
||||||
|
|
||||||
installAndLoadCompiler(solcVersion, packagePath) {
|
|
||||||
let self = this;
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
let manager = new PluginManager({pluginsPath: packagePath});
|
|
||||||
let timer;
|
|
||||||
if (!fs.existsSync(packagePath)) {
|
|
||||||
timer = new LongRunningProcessTimer(
|
|
||||||
self._logger,
|
|
||||||
'solc',
|
|
||||||
solcVersion,
|
|
||||||
'Downloading and installing {{packageName}} {{version}}...',
|
|
||||||
'Still downloading and installing {{packageName}} {{version}}... ({{duration}})',
|
|
||||||
'Finished downloading and installing {{packageName}} {{version}} in {{duration}}',
|
|
||||||
{ showSpinner: self._showSpinner }
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timer) timer.start();
|
|
||||||
manager.install('solc', solcVersion).then(() => {
|
|
||||||
self.solc = manager.require('solc');
|
|
||||||
if (timer) timer.end();
|
|
||||||
resolve();
|
|
||||||
}).catch(reject);
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
compile(jsonObj, cb) {
|
compile(jsonObj, cb) {
|
||||||
// TODO: only available in 0.4.11; need to make versions warn about this
|
// TODO: only available in 0.4.11; need to make versions warn about this
|
||||||
try {
|
try {
|
||||||
|
@ -60,8 +31,6 @@ class SolcProcess extends ProcessWrapper {
|
||||||
cb(err.message || err);
|
cb(err.message || err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let solcProcess;
|
let solcProcess;
|
||||||
|
@ -73,16 +42,10 @@ process.on('message', (msg) => {
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (msg.action === 'loadCompiler') {
|
else if (msg.action === 'loadCompiler') {
|
||||||
solcProcess.solc = require('solc');
|
solcProcess.solc = require(msg.requirePath);
|
||||||
return process.send({result: "loadedCompiler"});
|
return process.send({result: "loadedCompiler"});
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (msg.action === 'installAndLoadCompiler') {
|
|
||||||
solcProcess.installAndLoadCompiler(msg.solcVersion, msg.packagePath).then(() => {
|
|
||||||
return process.send({result: "loadedCompiler"});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
else if (msg.action === 'compile') {
|
else if (msg.action === 'compile') {
|
||||||
solcProcess.compile(msg.jsonObj, (err, output) => {
|
solcProcess.compile(msg.jsonObj, (err, output) => {
|
||||||
process.send({result: "compilation-" + msg.id, err: err, output: output});
|
process.send({result: "compilation-" + msg.id, err: err, output: output});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { __ } from 'embark-i18n';
|
import { __ } from 'embark-i18n';
|
||||||
import { ProcessLauncher } from 'embark-core';
|
import { ProcessLauncher } from 'embark-core';
|
||||||
import { dappPath, joinPath } from 'embark-utils';
|
import { dappPath, joinPath, toForwardSlashes } from 'embark-utils';
|
||||||
const uuid = require('uuid/v1');
|
const uuid = require('uuid/v1');
|
||||||
|
|
||||||
class SolcW {
|
class SolcW {
|
||||||
|
@ -36,43 +36,44 @@ class SolcW {
|
||||||
}
|
}
|
||||||
|
|
||||||
load_compiler_internally(done) {
|
load_compiler_internally(done) {
|
||||||
const self = this;
|
|
||||||
if (this.compilerLoaded) {
|
if (this.compilerLoaded) {
|
||||||
return done();
|
return done();
|
||||||
}
|
}
|
||||||
this.solcProcess = new ProcessLauncher({
|
this.solcProcess = new ProcessLauncher({
|
||||||
embark: self.embark,
|
embark: this.embark,
|
||||||
modulePath: joinPath(__dirname, 'solcP.js'),
|
modulePath: joinPath(__dirname, 'solcP.js'),
|
||||||
logger: self.logger,
|
logger: this.logger,
|
||||||
events: self.events,
|
events: this.events,
|
||||||
providerUrl: self.providerUrl,
|
providerUrl: this.providerUrl,
|
||||||
silent: false
|
silent: false
|
||||||
});
|
});
|
||||||
|
|
||||||
this.solcProcess.once("result", "initiated", () => {
|
this.solcProcess.once("result", "initiated", () => {
|
||||||
this.events.request("version:get:solc", function(solcVersion) {
|
this.events.request("version:get:solc", (solcVersion) => {
|
||||||
if (solcVersion === self.embark.config.package.dependencies.solc) {
|
if (solcVersion === this.embark.config.package.dependencies.solc) {
|
||||||
return self.solcProcess.send({action: 'loadCompiler', requirePath: 'solc'});
|
return this.solcProcess.send({action: 'loadCompiler', requirePath: 'solc'});
|
||||||
}
|
}
|
||||||
self.events.request("version:getPackagePath", "solc", solcVersion, function(err, path) {
|
this.events.request("version:getPackageLocation", "solc", solcVersion, (err, location) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return done(err);
|
return done(err);
|
||||||
}
|
}
|
||||||
let requirePath = dappPath(path);
|
this.solcProcess.send({
|
||||||
self.solcProcess.send({action: 'installAndLoadCompiler', solcVersion: solcVersion, packagePath: requirePath});
|
action: 'loadCompiler',
|
||||||
|
requirePath: toForwardSlashes(dappPath(location))
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
this.solcProcess.once("result", "loadedCompiler", () => {
|
this.solcProcess.once("result", "loadedCompiler", () => {
|
||||||
self.compilerLoaded = true;
|
this.compilerLoaded = true;
|
||||||
done();
|
done();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.solcProcess.send({action: "init", options: {showSpinner: !self.useDashboard}});
|
this.solcProcess.send({action: "init", options: {showSpinner: !this.useDashboard}});
|
||||||
|
|
||||||
if (this.ipc.isServer()) {
|
if (this.ipc.isServer()) {
|
||||||
this.ipc.on('compile', self.compile.bind(this));
|
this.ipc.on('compile', this.compile.bind(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -127,7 +127,7 @@
|
||||||
"url-loader": "1.1.1",
|
"url-loader": "1.1.1",
|
||||||
"uuid": "3.3.2",
|
"uuid": "3.3.2",
|
||||||
"velocity-react": "^1.4.1",
|
"velocity-react": "^1.4.1",
|
||||||
"web3": "1.0.0-beta.37",
|
"web3": "1.2.1",
|
||||||
"webpack": "4.19.1",
|
"webpack": "4.19.1",
|
||||||
"webpack-dev-server": "3.1.9",
|
"webpack-dev-server": "3.1.9",
|
||||||
"webpack-manifest-plugin": "2.0.4",
|
"webpack-manifest-plugin": "2.0.4",
|
||||||
|
|
|
@ -61,14 +61,15 @@
|
||||||
"ora": "2.1.0",
|
"ora": "2.1.0",
|
||||||
"pretty-ms": "4.0.0",
|
"pretty-ms": "4.0.0",
|
||||||
"shelljs": "0.8.3",
|
"shelljs": "0.8.3",
|
||||||
"web3": "1.0.0-beta.37",
|
"web3": "1.2.1",
|
||||||
"web3-eth": "1.0.0-beta.37",
|
"web3-eth": "1.2.1",
|
||||||
"web3-eth-abi": "1.0.0-beta.37"
|
"web3-eth-abi": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
"@babel/core": "7.2.2",
|
"@babel/core": "7.2.2",
|
||||||
"@types/follow-redirects": "1.5.0",
|
"@types/follow-redirects": "1.5.0",
|
||||||
|
"@types/fs-extra": "7.0.0",
|
||||||
"@types/node": "10.11.7",
|
"@types/node": "10.11.7",
|
||||||
"@types/pretty-ms": "3.2.0",
|
"@types/pretty-ms": "3.2.0",
|
||||||
"cross-env": "5.2.0",
|
"cross-env": "5.2.0",
|
||||||
|
|
|
@ -119,11 +119,19 @@ export default class LongRunningProcessTimer {
|
||||||
}
|
}
|
||||||
|
|
||||||
public end() {
|
public end() {
|
||||||
// stop updating console for ongoing download
|
// stop updating console upon success
|
||||||
clearInterval(this.intOngoingDownload);
|
clearInterval(this.intOngoingDownload);
|
||||||
performance.mark(this.endMark);
|
performance.mark(this.endMark);
|
||||||
performance.measure(this.downloadComplete, this.startMark, this.endMark);
|
performance.measure(this.downloadComplete, this.startMark, this.endMark);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public abort() {
|
||||||
|
if (this.spinner) {
|
||||||
|
this.spinner.fail(`Failed to download and install ${this.packageName} ${this.version}\n`);
|
||||||
|
}
|
||||||
|
// stop updating console upon failure
|
||||||
|
clearInterval(this.intOngoingDownload);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = LongRunningProcessTimer;
|
module.exports = LongRunningProcessTimer;
|
||||||
|
|
|
@ -86,16 +86,24 @@ class EmbarkWeb3 {
|
||||||
getWeb3Location() {
|
getWeb3Location() {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
this.events.request("version:get:web3", (web3Version) => {
|
this.events.request("version:get:web3", (web3Version) => {
|
||||||
|
const embarkWeb3Version = this.embark.config.package.dependencies["web3"];
|
||||||
if (web3Version === "1.0.0-beta") {
|
if (web3Version === "1.0.0-beta") {
|
||||||
|
web3Version = embarkWeb3Version;
|
||||||
|
this.logger.warn(`web3 version in embark.json is 1.0.0-beta, using ${embarkWeb3Version} instead, please update your project's embark.json`);
|
||||||
|
}
|
||||||
|
// NOTE: will behave less than ideally if embark switches to using a
|
||||||
|
// dependency range for the web3 package instead of an exact version
|
||||||
|
if (web3Version === embarkWeb3Version) {
|
||||||
const nodePath = embarkPath('node_modules');
|
const nodePath = embarkPath('node_modules');
|
||||||
const web3Path = require.resolve("web3", {paths: [nodePath]});
|
const web3Path = require.resolve("web3", {paths: [nodePath]});
|
||||||
return resolve(web3Path);
|
return resolve(web3Path);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.events.request("version:getPackageLocation", "web3", web3Version, (err, location) => {
|
this.events.request("version:getPackageLocation", "web3", web3Version, (err, location) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
return reject(err);
|
return reject(err);
|
||||||
}
|
}
|
||||||
const locationPath = embarkPath(location);
|
const locationPath = toForwardSlashes(dappPath(location));
|
||||||
resolve(locationPath);
|
resolve(locationPath);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -158,7 +158,6 @@
|
||||||
"ipfs-api": "17.2.4",
|
"ipfs-api": "17.2.4",
|
||||||
"istanbul": "0.4.5",
|
"istanbul": "0.4.5",
|
||||||
"json-parse-better-errors": "1.0.2",
|
"json-parse-better-errors": "1.0.2",
|
||||||
"live-plugin-manager-git-fix": "0.12.1",
|
|
||||||
"lodash.clonedeep": "4.5.0",
|
"lodash.clonedeep": "4.5.0",
|
||||||
"mocha": "5.2.0",
|
"mocha": "5.2.0",
|
||||||
"neo-blessed": "0.2.0",
|
"neo-blessed": "0.2.0",
|
||||||
|
@ -191,26 +190,26 @@
|
||||||
"url-loader": "1.1.2",
|
"url-loader": "1.1.2",
|
||||||
"viz.js": "1.8.2",
|
"viz.js": "1.8.2",
|
||||||
"vm2": "3.6.4",
|
"vm2": "3.6.4",
|
||||||
"web3": "1.0.0-beta.37",
|
"web3": "1.2.1",
|
||||||
"web3-bzz": "1.0.0-beta.37",
|
"web3-bzz": "1.2.1",
|
||||||
"web3-core": "1.0.0-beta.37",
|
"web3-core": "1.2.1",
|
||||||
"web3-core-helpers": "1.0.0-beta.37",
|
"web3-core-helpers": "1.2.1",
|
||||||
"web3-core-method": "1.0.0-beta.37",
|
"web3-core-method": "1.2.1",
|
||||||
"web3-core-promievent": "1.0.0-beta.37",
|
"web3-core-promievent": "1.2.1",
|
||||||
"web3-core-requestmanager": "1.0.0-beta.37",
|
"web3-core-requestmanager": "1.2.1",
|
||||||
"web3-core-subscriptions": "1.0.0-beta.37",
|
"web3-core-subscriptions": "1.2.1",
|
||||||
"web3-eth": "1.0.0-beta.37",
|
"web3-eth": "1.2.1",
|
||||||
"web3-eth-abi": "1.0.0-beta.37",
|
"web3-eth-abi": "1.2.1",
|
||||||
"web3-eth-accounts": "1.0.0-beta.37",
|
"web3-eth-accounts": "1.2.1",
|
||||||
"web3-eth-contract": "1.0.0-beta.37",
|
"web3-eth-contract": "1.2.1",
|
||||||
"web3-eth-iban": "1.0.0-beta.37",
|
"web3-eth-iban": "1.2.1",
|
||||||
"web3-eth-personal": "1.0.0-beta.37",
|
"web3-eth-personal": "1.2.1",
|
||||||
"web3-net": "1.0.0-beta.37",
|
"web3-net": "1.2.1",
|
||||||
"web3-providers-http": "1.0.0-beta.37",
|
"web3-providers-http": "1.2.1",
|
||||||
"web3-providers-ipc": "1.0.0-beta.37",
|
"web3-providers-ipc": "1.2.1",
|
||||||
"web3-providers-ws": "1.0.0-beta.37",
|
"web3-providers-ws": "1.2.1",
|
||||||
"web3-shh": "1.0.0-beta.37",
|
"web3-shh": "1.2.1",
|
||||||
"web3-utils": "1.0.0-beta.37",
|
"web3-utils": "1.2.1",
|
||||||
"webpack": "4.29.3",
|
"webpack": "4.29.3",
|
||||||
"window-size": "1.1.1",
|
"window-size": "1.1.1",
|
||||||
"ws": "6.1.2"
|
"ws": "6.1.2"
|
||||||
|
|
|
@ -122,6 +122,9 @@ class EmbarkController {
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function (callback) {
|
function (callback) {
|
||||||
let pluginList = engine.plugins.listPlugins();
|
let pluginList = engine.plugins.listPlugins();
|
||||||
if (pluginList.length > 0) {
|
if (pluginList.length > 0) {
|
||||||
|
@ -133,7 +136,6 @@ class EmbarkController {
|
||||||
engine.startService("coreProcess");
|
engine.startService("coreProcess");
|
||||||
engine.startService("blockchainListener");
|
engine.startService("blockchainListener");
|
||||||
engine.startService("serviceMonitor");
|
engine.startService("serviceMonitor");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("codeRunner");
|
engine.startService("codeRunner");
|
||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("deployment");
|
engine.startService("deployment");
|
||||||
|
@ -189,6 +191,7 @@ class EmbarkController {
|
||||||
if (err) {
|
if (err) {
|
||||||
engine.logger.error(err.message);
|
engine.logger.error(err.message);
|
||||||
engine.logger.info(err.stack);
|
engine.logger.info(err.stack);
|
||||||
|
process.exit(1);
|
||||||
} else {
|
} else {
|
||||||
engine.events.emit('firstDeploymentDone');
|
engine.events.emit('firstDeploymentDone');
|
||||||
}
|
}
|
||||||
|
@ -221,6 +224,9 @@ class EmbarkController {
|
||||||
function initEngine(callback) {
|
function initEngine(callback) {
|
||||||
engine.init({}, callback);
|
engine.init({}, callback);
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function startServices(callback) {
|
function startServices(callback) {
|
||||||
if (options.env === 'development') {
|
if (options.env === 'development') {
|
||||||
engine.logger.warn(__('Building using the development environment. Did you forget to add an environment? eg: `embark build testnet`'));
|
engine.logger.warn(__('Building using the development environment. Did you forget to add an environment? eg: `embark build testnet`'));
|
||||||
|
@ -232,7 +238,6 @@ class EmbarkController {
|
||||||
|
|
||||||
if (!options.onlyCompile) engine.startService("web3");
|
if (!options.onlyCompile) engine.startService("web3");
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("codeRunner");
|
engine.startService("codeRunner");
|
||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("codeGenerator");
|
engine.startService("codeGenerator");
|
||||||
|
@ -303,6 +308,9 @@ class EmbarkController {
|
||||||
function initEngine(callback) {
|
function initEngine(callback) {
|
||||||
engine.init({}, callback);
|
engine.init({}, callback);
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function startServices(callback) {
|
function startServices(callback) {
|
||||||
let pluginList = engine.plugins.listPlugins();
|
let pluginList = engine.plugins.listPlugins();
|
||||||
if (pluginList.length > 0) {
|
if (pluginList.length > 0) {
|
||||||
|
@ -322,7 +330,6 @@ class EmbarkController {
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("coreProcess");
|
engine.startService("coreProcess");
|
||||||
engine.startService("serviceMonitor");
|
engine.startService("serviceMonitor");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("storage");
|
engine.startService("storage");
|
||||||
engine.startService("cockpit");
|
engine.startService("cockpit");
|
||||||
|
@ -367,6 +374,7 @@ class EmbarkController {
|
||||||
if (err) {
|
if (err) {
|
||||||
engine.logger.error(err.message);
|
engine.logger.error(err.message);
|
||||||
engine.logger.info(err.stack);
|
engine.logger.info(err.stack);
|
||||||
|
process.exit(1);
|
||||||
} else {
|
} else {
|
||||||
engine.events.emit('firstDeploymentDone');
|
engine.events.emit('firstDeploymentDone');
|
||||||
}
|
}
|
||||||
|
@ -391,6 +399,9 @@ class EmbarkController {
|
||||||
function (callback) {
|
function (callback) {
|
||||||
engine.init({}, callback);
|
engine.init({}, callback);
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function (callback) {
|
function (callback) {
|
||||||
let pluginList = engine.plugins.listPlugins();
|
let pluginList = engine.plugins.listPlugins();
|
||||||
if (pluginList.length > 0) {
|
if (pluginList.length > 0) {
|
||||||
|
@ -399,7 +410,6 @@ class EmbarkController {
|
||||||
|
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("serviceMonitor");
|
engine.startService("serviceMonitor");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("compiler");
|
engine.startService("compiler");
|
||||||
engine.startService("codeGenerator");
|
engine.startService("codeGenerator");
|
||||||
engine.startService("graph");
|
engine.startService("graph");
|
||||||
|
@ -411,11 +421,11 @@ class EmbarkController {
|
||||||
engine.logger.error(err.message);
|
engine.logger.error(err.message);
|
||||||
engine.logger.info(err.stack);
|
engine.logger.info(err.stack);
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
engine.events.request("graph:create", options, () => {
|
engine.events.request("graph:create", options, () => {
|
||||||
engine.logger.info(__("Done. %s generated", options.output).underline);
|
engine.logger.info(__("Done. %s generated", options.output).underline);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
process.exit(err ? 1 : 0);
|
process.exit(err ? 1 : 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -488,6 +498,9 @@ class EmbarkController {
|
||||||
function initEngine(callback) {
|
function initEngine(callback) {
|
||||||
engine.init({}, callback);
|
engine.init({}, callback);
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function startServices(callback) {
|
function startServices(callback) {
|
||||||
engine.startService("scaffolding");
|
engine.startService("scaffolding");
|
||||||
callback();
|
callback();
|
||||||
|
@ -505,7 +518,6 @@ class EmbarkController {
|
||||||
}
|
}
|
||||||
engine.startService("web3");
|
engine.startService("web3");
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("codeRunner");
|
engine.startService("codeRunner");
|
||||||
engine.startService("deployment", {onlyCompile: true});
|
engine.startService("deployment", {onlyCompile: true});
|
||||||
|
|
||||||
|
@ -525,11 +537,11 @@ class EmbarkController {
|
||||||
if (err) {
|
if (err) {
|
||||||
engine.logger.error(__("Error generating the UI: "));
|
engine.logger.error(__("Error generating the UI: "));
|
||||||
engine.logger.error(err.message || err);
|
engine.logger.error(err.message || err);
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
engine.logger.info(__("finished generating the UI").underline);
|
engine.logger.info(__("finished generating the UI").underline);
|
||||||
engine.logger.info(__("To see the result, execute {{cmd}} and go to /{{contract}}.html", {cmd: 'embark run'.underline, contract: options.contract}));
|
engine.logger.info(__("To see the result, execute {{cmd}} and go to /{{contract}}.html", {cmd: 'embark run'.underline, contract: options.contract}));
|
||||||
process.exit(0);
|
|
||||||
|
process.exit(err ? 1 : 0);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -571,12 +583,14 @@ class EmbarkController {
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function startServices(callback) {
|
function startServices(callback) {
|
||||||
|
|
||||||
engine.startService("web3");
|
engine.startService("web3");
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("serviceMonitor");
|
engine.startService("serviceMonitor");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("codeRunner");
|
engine.startService("codeRunner");
|
||||||
engine.startService("pipeline");
|
engine.startService("pipeline");
|
||||||
engine.startService("deployment");
|
engine.startService("deployment");
|
||||||
|
@ -659,10 +673,12 @@ class EmbarkController {
|
||||||
function initEngine(callback) {
|
function initEngine(callback) {
|
||||||
engine.init({}, callback);
|
engine.init({}, callback);
|
||||||
},
|
},
|
||||||
|
function (callback) {
|
||||||
|
engine.startService("libraryManager").installAll((err) => callback(err ? err : null));
|
||||||
|
},
|
||||||
function startServices(callback) {
|
function startServices(callback) {
|
||||||
engine.startService("web3", {wait: true, node: options.node});
|
engine.startService("web3", {wait: true, node: options.node});
|
||||||
engine.startService("processManager");
|
engine.startService("processManager");
|
||||||
engine.startService("libraryManager");
|
|
||||||
engine.startService("codeRunner");
|
engine.startService("codeRunner");
|
||||||
engine.startService("deployment", {
|
engine.startService("deployment", {
|
||||||
trackContracts: false,
|
trackContracts: false,
|
||||||
|
|
|
@ -334,7 +334,7 @@ Config.prototype.loadBlockchainConfigFile = function() {
|
||||||
|
|
||||||
Config.prototype.loadContractsConfigFile = function() {
|
Config.prototype.loadContractsConfigFile = function() {
|
||||||
var defaultVersions = {
|
var defaultVersions = {
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.5.0"
|
"solc": "0.5.0"
|
||||||
};
|
};
|
||||||
var versions = recursiveMerge(defaultVersions, this.embarkConfig.versions || {});
|
var versions = recursiveMerge(defaultVersions, this.embarkConfig.versions || {});
|
||||||
|
|
|
@ -58,7 +58,7 @@ class Engine {
|
||||||
}
|
}
|
||||||
|
|
||||||
registerModulePackage(moduleName, options) {
|
registerModulePackage(moduleName, options) {
|
||||||
this.plugins.loadInternalPlugin(moduleName, options || {}, true);
|
return this.plugins.loadInternalPlugin(moduleName, options || {}, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
startService(serviceName, _options) {
|
startService(serviceName, _options) {
|
||||||
|
@ -300,7 +300,7 @@ class Engine {
|
||||||
}
|
}
|
||||||
|
|
||||||
libraryManagerService(_options) {
|
libraryManagerService(_options) {
|
||||||
this.registerModulePackage('embark-library-manager', {useDashboard: this.useDashboard});
|
return this.registerModulePackage('embark-library-manager', {useDashboard: this.useDashboard});
|
||||||
}
|
}
|
||||||
|
|
||||||
codeCoverageService(_options) {
|
codeCoverageService(_options) {
|
||||||
|
|
|
@ -114,7 +114,7 @@ Plugin.prototype.loadInternalPlugin = function() {
|
||||||
this.pluginModule = this.pluginModule.default;
|
this.pluginModule = this.pluginModule.default;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
new this.pluginModule(this, this.pluginConfig); /*eslint no-new: "off"*/
|
return new this.pluginModule(this, this.pluginConfig); /*eslint no-new: "off"*/
|
||||||
};
|
};
|
||||||
|
|
||||||
Plugin.prototype.loadPluginFile = function(filename) {
|
Plugin.prototype.loadPluginFile = function(filename) {
|
||||||
|
|
|
@ -93,8 +93,9 @@ Plugins.prototype.loadInternalPlugin = function(pluginName, pluginConfig, isPack
|
||||||
context: this.context,
|
context: this.context,
|
||||||
env: this.env
|
env: this.env
|
||||||
});
|
});
|
||||||
pluginWrapper.loadInternalPlugin();
|
const pluginInstance = pluginWrapper.loadInternalPlugin();
|
||||||
this.plugins.push(pluginWrapper);
|
this.plugins.push(pluginWrapper);
|
||||||
|
return pluginInstance;
|
||||||
};
|
};
|
||||||
|
|
||||||
Plugins.prototype.loadPlugin = function(pluginName, pluginConfig) {
|
Plugins.prototype.loadPlugin = function(pluginName, pluginConfig) {
|
||||||
|
|
|
@ -122,7 +122,7 @@ describe('embark.Config', function () {
|
||||||
it('should load contract config correctly', function () {
|
it('should load contract config correctly', function () {
|
||||||
config.loadContractsConfigFile();
|
config.loadContractsConfigFile();
|
||||||
let expectedConfig = {
|
let expectedConfig = {
|
||||||
versions: {'web3': '1.0.0-beta', solc: '0.5.0'},
|
versions: {'web3': '1.2.1', solc: '0.5.0'},
|
||||||
deployment: {host: 'localhost', port: 8545, type: 'rpc', "accounts": [{"mnemonic": "12 word mnemonic", "balance": "5000000000"}]},
|
deployment: {host: 'localhost', port: 8545, type: 'rpc', "accounts": [{"mnemonic": "12 word mnemonic", "balance": "5000000000"}]},
|
||||||
dappConnection: ['$WEB3', 'localhost:8545'],
|
dappConnection: ['$WEB3', 'localhost:8545'],
|
||||||
dappAutoEnable: true,
|
dappAutoEnable: true,
|
||||||
|
@ -145,7 +145,7 @@ describe('embark.Config', function () {
|
||||||
|
|
||||||
it('should replace occourences of `0x0` with full zero addresses', () => {
|
it('should replace occourences of `0x0` with full zero addresses', () => {
|
||||||
let expectedConfig = {
|
let expectedConfig = {
|
||||||
versions: {'web3': '1.0.0-beta', solc: '0.5.0'},
|
versions: {'web3': '1.2.1', solc: '0.5.0'},
|
||||||
deployment: {host: 'localhost', port: 8545, type: 'rpc'},
|
deployment: {host: 'localhost', port: 8545, type: 'rpc'},
|
||||||
dappConnection: ['$WEB3', 'localhost:8545'],
|
dappConnection: ['$WEB3', 'localhost:8545'],
|
||||||
dappAutoEnable: true,
|
dappAutoEnable: true,
|
||||||
|
|
|
@ -89,7 +89,7 @@ describe('embark.Contracts', function() {
|
||||||
|
|
||||||
contractsConfig = {
|
contractsConfig = {
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3.js": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.4.17"
|
"solc": "0.4.17"
|
||||||
},
|
},
|
||||||
"deployment": {
|
"deployment": {
|
||||||
|
@ -213,7 +213,7 @@ describe('embark.Contracts', function() {
|
||||||
|
|
||||||
contractsConfig = {
|
contractsConfig = {
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3.js": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.4.17"
|
"solc": "0.4.17"
|
||||||
},
|
},
|
||||||
"deployment": {
|
"deployment": {
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
"@babel/runtime-corejs2": "7.3.1",
|
"@babel/runtime-corejs2": "7.3.1",
|
||||||
"embarkjs": "^4.1.0-beta.5",
|
"embarkjs": "^4.1.0-beta.5",
|
||||||
"eth-ens-namehash": "2.0.8",
|
"eth-ens-namehash": "2.0.8",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -51,7 +51,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime-corejs2": "7.3.1",
|
"@babel/runtime-corejs2": "7.3.1",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -52,7 +52,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/runtime-corejs2": "7.3.1",
|
"@babel/runtime-corejs2": "7.3.1",
|
||||||
"rxjs": "6.4.0",
|
"rxjs": "6.4.0",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "7.2.3",
|
"@babel/cli": "7.2.3",
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
let Web3 = require('web3');
|
let Web3 = require('web3');
|
||||||
const {sendMessage, listenTo} = require('./communicationFunctions').default;
|
const {sendMessage, listenTo} = require('./communicationFunctions').default;
|
||||||
|
|
||||||
// for the whisper v5 and web3.js 1.0
|
// for the whisper v5 and web3.js 1.x
|
||||||
let __embarkWhisperNewWeb3 = {};
|
let __embarkWhisperNewWeb3 = {};
|
||||||
|
|
||||||
__embarkWhisperNewWeb3.real_sendMessage = sendMessage;
|
__embarkWhisperNewWeb3.real_sendMessage = sendMessage;
|
||||||
|
|
|
@ -73,7 +73,7 @@
|
||||||
"nyc": "13.1.0",
|
"nyc": "13.1.0",
|
||||||
"rimraf": "2.6.3",
|
"rimraf": "2.6.3",
|
||||||
"source-map-support": "0.5.9",
|
"source-map-support": "0.5.9",
|
||||||
"web3": "1.0.0-beta.37"
|
"web3": "1.2.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=8.12.0 <12.0.0",
|
"node": ">=8.12.0 <12.0.0",
|
||||||
|
|
|
@ -25,7 +25,7 @@ EmbarkJS.Contract = function() {
|
||||||
throw new Error('EmbarkJS.Contract is deprecated: please use EmbarkJS.Blockchain.Contract instead');
|
throw new Error('EmbarkJS.Contract is deprecated: please use EmbarkJS.Blockchain.Contract instead');
|
||||||
};
|
};
|
||||||
EmbarkJS.isNewWeb3 = function() {
|
EmbarkJS.isNewWeb3 = function() {
|
||||||
throw new Error('EmbarkJS.isNewWeb3 is deprecated: only Web3 1.0 is supported now');
|
throw new Error('EmbarkJS.isNewWeb3 is deprecated: only Web3 >=1.2.1 is supported now');
|
||||||
};
|
};
|
||||||
|
|
||||||
export default EmbarkJS;
|
export default EmbarkJS;
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
/* global Web3 clearInterval setInterval */
|
/* global clearInterval global require setInterval */
|
||||||
|
|
||||||
|
const Web3 = global.Web3 || require('web3');
|
||||||
|
|
||||||
let Utils = {
|
let Utils = {
|
||||||
fromAscii: function(str) {
|
fromAscii: function(str) {
|
||||||
|
|
|
@ -22,7 +22,7 @@ Every application [created with Embark](create_project.html) comes with an `emba
|
||||||
"generationDir": "embarkArtifacts",
|
"generationDir": "embarkArtifacts",
|
||||||
"config": "config/",
|
"config": "config/",
|
||||||
"versions": {
|
"versions": {
|
||||||
"web3": "1.0.0-beta",
|
"web3": "1.2.1",
|
||||||
"solc": "0.4.25",
|
"solc": "0.4.25",
|
||||||
"ipfs-api": "17.2.4"
|
"ipfs-api": "17.2.4"
|
||||||
},
|
},
|
||||||
|
|
|
@ -90,7 +90,7 @@ This will request account access and if the user grants access to his accounts,
|
||||||
|
|
||||||
### Components
|
### Components
|
||||||
|
|
||||||
* [EmbarkJS.Contract](contracts_javascript.html) - To interact with smart contracts. Typically Embark automatically initializes all your deployed contracts with this. uses web3.js 1.0
|
* [EmbarkJS.Contract](contracts_javascript.html) - To interact with smart contracts. Typically Embark automatically initializes all your deployed contracts with this. uses web3.js 1.2.1
|
||||||
* [EmbarkJS.Storage](storage_javascript.html) - To interact with the configured decentralized storage. Includes bindings to save & retrieve data, upload & download files, etc..
|
* [EmbarkJS.Storage](storage_javascript.html) - To interact with the configured decentralized storage. Includes bindings to save & retrieve data, upload & download files, etc..
|
||||||
* [EmbarkJS.Communication](messages_javascript.html) - To interact with the configured decentralized messages system. Includes bindings to listen to topics and send messages.
|
* [EmbarkJS.Communication](messages_javascript.html) - To interact with the configured decentralized messages system. Includes bindings to listen to topics and send messages.
|
||||||
* [EmbarkJS.Names](naming_javascript.html) - To interact with the configured decentralized naming system such as ENS. Includes bindings to look up the address of a domain name as well as retrieve a domain name given an address.
|
* [EmbarkJS.Names](naming_javascript.html) - To interact with the configured decentralized naming system such as ENS. Includes bindings to look up the address of a domain name as well as retrieve a domain name given an address.
|
||||||
|
|
|
@ -62,7 +62,7 @@ By default, the value of `dappAutoEnable` is `true` which means that Embark will
|
||||||
|
|
||||||
If we want more control over when our application should request account access, we can set `dappAutoEnable` to false and make use of `EmbarkJS.enableEthereum()`.
|
If we want more control over when our application should request account access, we can set `dappAutoEnable` to false and make use of `EmbarkJS.enableEthereum()`.
|
||||||
|
|
||||||
This method will essentially cause our application to request account access, giving us full control over when this should happen.
|
This method will essentially cause our application to request account access, giving us full control over when this should happen.
|
||||||
|
|
||||||
```
|
```
|
||||||
try {
|
try {
|
||||||
|
@ -77,9 +77,7 @@ try {
|
||||||
|
|
||||||
This guide only touched on getting started with EmbarkJS. There are many more APIs to explore, depending on what we're achieving to build. Have a look at the dedicated guides to learn more:
|
This guide only touched on getting started with EmbarkJS. There are many more APIs to explore, depending on what we're achieving to build. Have a look at the dedicated guides to learn more:
|
||||||
|
|
||||||
* [EmbarkJS.Contract](contracts_javascript.html) - To interact with smart contracts. Typically Embark automatically initializes all your deployed contracts with this. uses web3.js 1.0
|
* [EmbarkJS.Contract](contracts_javascript.html) - To interact with smart contracts. Typically Embark automatically initializes all your deployed contracts with this. uses web3.js 1.2.1
|
||||||
* [EmbarkJS.Storage](storage_javascript.html) - To interact with the configured decentralized storage. Includes bindings to save & retrieve data, upload & download files, etc..
|
* [EmbarkJS.Storage](storage_javascript.html) - To interact with the configured decentralized storage. Includes bindings to save & retrieve data, upload & download files, etc..
|
||||||
* [EmbarkJS.Communication](messages_javascript.html) - To interact with the configured decentralized messages system. Includes bindings to listen to topics and send messages.
|
* [EmbarkJS.Communication](messages_javascript.html) - To interact with the configured decentralized messages system. Includes bindings to listen to topics and send messages.
|
||||||
* [EmbarkJS.Names](naming_javascript.html) - To interact with the configured decentralized naming system such as ENS. Includes bindings to look up the address of a domain name as well as retrieve a domain name given an address.
|
* [EmbarkJS.Names](naming_javascript.html) - To interact with the configured decentralized naming system such as ENS. Includes bindings to look up the address of a domain name as well as retrieve a domain name given an address.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,5 +36,4 @@ SimpleStorage.methods.get().call().then(function(value) { console.log(value) });
|
||||||
SimpleStorage.methods.storedData().call().then(function(value) { console.log(value) });
|
SimpleStorage.methods.storedData().call().then(function(value) { console.log(value) });
|
||||||
```
|
```
|
||||||
|
|
||||||
The syntax used is <a href="http://web3js.readthedocs.io/en/1.0/" target="_blank">web3.js 1.0</a>
|
The syntax used is <a href="https://web3js.readthedocs.io/en/v1.2.1/" target="_blank">web3.js 1.2.1</a>
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
title: Web3.js Documentation
|
title: Web3.js Documentation
|
||||||
---
|
---
|
||||||
|
|
||||||
The documentation for Web3.js can be found [here](http://web3js.readthedocs.io/en/1.0/)
|
The documentation for Web3.js can be found [here](https://web3js.readthedocs.io/en/v1.2.1/)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue