mirror of https://github.com/embarklabs/embark.git
Rebasing changes from develop
This commit is contained in:
parent
05f5a145f1
commit
bf25381fa6
|
@ -76,13 +76,17 @@ var Blockchain = function(options) {
|
||||||
|
|
||||||
Blockchain.prototype.setupProxy = function(){
|
Blockchain.prototype.setupProxy = function(){
|
||||||
if(this.blockchainConfig.proxy){
|
if(this.blockchainConfig.proxy){
|
||||||
const proxy = require('../proxy');
|
const proxy = require('../../core/proxy');
|
||||||
proxy.serve(this.config.rpcHost, this.config.rpcPort, false);
|
const Ipc = require('../../core/ipc');
|
||||||
proxy.serve(this.config.wsHost, this.config.wsPort, true);
|
|
||||||
|
let ipcObject = new Ipc({ipcRole: 'client'});
|
||||||
|
|
||||||
|
proxy.serve(ipcObject, this.config.rpcHost, this.config.rpcPort, false);
|
||||||
|
// proxy.serve(ipcObject, this.config.wsHost, this.config.wsPort, true);
|
||||||
this.config.rpcPort += 10;
|
this.config.rpcPort += 10;
|
||||||
this.config.wsPort += 10;
|
//this.config.wsPort += 10;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
Blockchain.prototype.runCommand = function(cmd, options, callback) {
|
Blockchain.prototype.runCommand = function(cmd, options, callback) {
|
||||||
console.log(__("running: %s", cmd.underline).green);
|
console.log(__("running: %s", cmd.underline).green);
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
const httpProxy = require('http-proxy');
|
|
||||||
const http = require('http');
|
|
||||||
|
|
||||||
exports.serve = function(host, port, ws){
|
|
||||||
let commList = {};
|
|
||||||
|
|
||||||
let proxy = httpProxy.createProxyServer({});
|
|
||||||
let server = http.createServer((req, res) => {
|
|
||||||
|
|
||||||
let reqBody = [];
|
|
||||||
req.on('data', (b) => { reqBody.push(b); })
|
|
||||||
.on('end', () => {
|
|
||||||
reqBody = Buffer.concat(reqBody).toString();
|
|
||||||
if(reqBody){
|
|
||||||
let jsonO = JSON.parse(reqBody);
|
|
||||||
if(jsonO.method == "eth_sendTransaction"){
|
|
||||||
commList[jsonO.id] = {
|
|
||||||
address: jsonO.params[0].to,
|
|
||||||
requestData: jsonO.params[0].data
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
proxy.proxyRequest(req, res, {
|
|
||||||
target: {
|
|
||||||
host: host,
|
|
||||||
port: port + 10,
|
|
||||||
ws: ws
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
proxy.on('proxyRes', (proxyRes, req, res) => {
|
|
||||||
let resBody = [];
|
|
||||||
proxyRes.on('data', (b) => resBody.push(b))
|
|
||||||
proxyRes.on('end', function () {
|
|
||||||
resBody = Buffer.concat(resBody).toString();
|
|
||||||
try {
|
|
||||||
let jsonO = JSON.parse(resBody);
|
|
||||||
if(commList[jsonO.id]){
|
|
||||||
commList[jsonO.id].transactionHash = jsonO.result;
|
|
||||||
// TODO: decode commlist
|
|
||||||
// TODO: send messages to console
|
|
||||||
// ” SimpleStorage> set(5) | tx: 0xef234f16etc ”
|
|
||||||
delete commList[jsonO.id];
|
|
||||||
}
|
|
||||||
} catch(e){
|
|
||||||
//
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
server.listen(port);
|
|
||||||
};
|
|
|
@ -1,5 +1,7 @@
|
||||||
let shelljs = require('shelljs');
|
let shelljs = require('shelljs');
|
||||||
let proxy = require('./proxy');
|
let proxy = require('../core/proxy');
|
||||||
|
const Ipc = require('../core/ipc');
|
||||||
|
|
||||||
class Simulator {
|
class Simulator {
|
||||||
constructor(options) {
|
constructor(options) {
|
||||||
this.blockchainConfig = options.blockchainConfig;
|
this.blockchainConfig = options.blockchainConfig;
|
||||||
|
@ -43,7 +45,8 @@ class Simulator {
|
||||||
shelljs.exec(`${program} ${cmds.join(' ')}`, {async : true});
|
shelljs.exec(`${program} ${cmds.join(' ')}`, {async : true});
|
||||||
|
|
||||||
if(useProxy){
|
if(useProxy){
|
||||||
proxy.serve(host, port);
|
let ipcObject = new Ipc({ipcRole: 'client'});
|
||||||
|
proxy.serve(ipcObject, host, port, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -184,6 +184,11 @@ class Engine {
|
||||||
});
|
});
|
||||||
|
|
||||||
this.ipc = new IPC({logger: this.logger, ipcRole: options.ipcRole});
|
this.ipc = new IPC({logger: this.logger, ipcRole: options.ipcRole});
|
||||||
|
if (this.ipc.isServer()) {
|
||||||
|
this.ipc.serve();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
this.registerModule('solidity', {ipc: this.ipc});
|
this.registerModule('solidity', {ipc: this.ipc});
|
||||||
this.registerModule('vyper');
|
this.registerModule('vyper');
|
||||||
this.registerModule('profiler');
|
this.registerModule('profiler');
|
||||||
|
@ -219,6 +224,40 @@ class Engine {
|
||||||
plugins: this.plugins
|
plugins: this.plugins
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Console logger
|
||||||
|
// TODO: extract to its own file
|
||||||
|
let addressToContract = {};
|
||||||
|
this.ipc.on('log', (jsonObj) => {
|
||||||
|
if(jsonObj.type == 'contract-log'){
|
||||||
|
if(!addressToContract[jsonObj.address]){
|
||||||
|
let contractList = Object.keys(this.config.contractsConfig.contracts);
|
||||||
|
for(let i = 0; i < contractList.length; i++){
|
||||||
|
let cont = this.config.contractsConfig.contracts[contractList[i]];
|
||||||
|
if(!addressToContract[cont.deployedAddress.toLowerCase()]){
|
||||||
|
let funcSignatures = {};
|
||||||
|
cont.abiDefinition
|
||||||
|
.filter(func => func.type == "function")
|
||||||
|
.map(func => func.name + '(' +
|
||||||
|
(func.inputs ? func.inputs.map(input => input.type).join(',') : '') +
|
||||||
|
')')
|
||||||
|
.forEach(func => {
|
||||||
|
funcSignatures[utils.sha3(func).substring(0, 10)] = func;
|
||||||
|
});
|
||||||
|
|
||||||
|
addressToContract[cont.deployedAddress.toLowerCase()] = {
|
||||||
|
name: contractList[i],
|
||||||
|
functions: funcSignatures
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let funcHash = addressToContract[jsonObj.address].functions[jsonObj.data.substring(0, 10)];
|
||||||
|
this.logger.debug(addressToContract[jsonObj.address].name + "." + funcHash + " : " + jsonObj.transactionHash);
|
||||||
|
} else {
|
||||||
|
this.logger.info(jsonObj);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.events.on('file-event', function (fileType) {
|
this.events.on('file-event', function (fileType) {
|
||||||
clearTimeout(self.fileTimeout);
|
clearTimeout(self.fileTimeout);
|
||||||
self.fileTimeout = setTimeout(() => {
|
self.fileTimeout = setTimeout(() => {
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
const httpProxy = require('http-proxy');
|
||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
exports.serve = function(ipc, host, port, ws){
|
||||||
|
let commList = {};
|
||||||
|
|
||||||
|
let proxy = httpProxy.createProxyServer({
|
||||||
|
target: {
|
||||||
|
host: host,
|
||||||
|
port: port + 10,
|
||||||
|
ws: ws
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
proxy.on('proxyRes', (proxyRes) => {
|
||||||
|
let resBody = [];
|
||||||
|
proxyRes.on('data', (b) => resBody.push(b));
|
||||||
|
proxyRes.on('end', function () {
|
||||||
|
resBody = Buffer.concat(resBody).toString();
|
||||||
|
try {
|
||||||
|
let jsonO = JSON.parse(resBody);
|
||||||
|
if(commList[jsonO.id]){
|
||||||
|
commList[jsonO.id].transactionHash = jsonO.result;
|
||||||
|
if(ipc.connected && !ipc.connecting){
|
||||||
|
ipc.request('log', commList[jsonO.id]);
|
||||||
|
} else {
|
||||||
|
ipc.connecting = true;
|
||||||
|
ipc.connect((err) => {
|
||||||
|
ipc.connecting = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
delete commList[jsonO.id];
|
||||||
|
}
|
||||||
|
} catch(e){
|
||||||
|
//
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
let server = http.createServer((req, res) => {
|
||||||
|
let reqBody = [];
|
||||||
|
req.on('data', (b) => { reqBody.push(b); })
|
||||||
|
.on('end', () => {
|
||||||
|
reqBody = Buffer.concat(reqBody).toString();
|
||||||
|
if(reqBody){
|
||||||
|
let jsonO = JSON.parse(reqBody);
|
||||||
|
if(jsonO.method == "eth_sendTransaction"){
|
||||||
|
commList[jsonO.id] = {
|
||||||
|
type: 'contract-log',
|
||||||
|
address: jsonO.params[0].to,
|
||||||
|
data: jsonO.params[0].data
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if(ws){
|
||||||
|
proxy.ws(req, res);
|
||||||
|
} else {
|
||||||
|
proxy.web(req, res);
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
server.listen(port);
|
||||||
|
};
|
|
@ -47,7 +47,6 @@ class SolcW {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.ipc.isServer()) {
|
if (this.ipc.isServer()) {
|
||||||
this.ipc.serve();
|
|
||||||
this.ipc.on('compile', self.compile.bind(this));
|
this.ipc.on('compile', self.compile.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.2.tgz",
|
||||||
"integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==",
|
"integrity": "sha512-Q3FWsbdmkQd1ib11A4XNWQvRD//5KpPoGawA8aB2DR7pWKoW9XQv3+dGxD/Z1eVFze23Okdo27ZQytVFlweKvQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "10.1.4"
|
"@types/node": "10.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/lockfile": {
|
"@types/lockfile": {
|
||||||
|
@ -59,16 +59,16 @@
|
||||||
"integrity": "sha512-pD6JuijPmrfi84qF3/TzGQ7zi0QIX+d7ZdetD6jUA6cp+IsCzAquXZfi5viesew+pfpOTIdAVKuh1SHA7KeKzg=="
|
"integrity": "sha512-pD6JuijPmrfi84qF3/TzGQ7zi0QIX+d7ZdetD6jUA6cp+IsCzAquXZfi5viesew+pfpOTIdAVKuh1SHA7KeKzg=="
|
||||||
},
|
},
|
||||||
"@types/node": {
|
"@types/node": {
|
||||||
"version": "10.1.4",
|
"version": "10.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.1.tgz",
|
||||||
"integrity": "sha512-GpQxofkdlHYxjHad98UUdNoMO7JrmzQZoAaghtNg14Gwg7YkohcrCoJEcEMSgllx4VIZ+mYw7ZHjfaeIagP/rg=="
|
"integrity": "sha512-IsX9aDHDzJohkm3VCDB8tkzl5RQ34E/PFA29TQk6uDGb7Oc869ZBtmdKVDBzY3+h9GnXB8ssrRXEPVZrlIOPOw=="
|
||||||
},
|
},
|
||||||
"@types/node-fetch": {
|
"@types/node-fetch": {
|
||||||
"version": "1.6.9",
|
"version": "1.6.9",
|
||||||
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz",
|
"resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-1.6.9.tgz",
|
||||||
"integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==",
|
"integrity": "sha512-n2r6WLoY7+uuPT7pnEtKJCmPUGyJ+cbyBR8Avnu4+m1nzz7DwBVuyIvvlBzCZ/nrpC7rIgb3D6pNavL7rFEa9g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "10.1.4"
|
"@types/node": "10.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/semver": {
|
"@types/semver": {
|
||||||
|
@ -81,7 +81,7 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.0.tgz",
|
||||||
"integrity": "sha512-YybbEHNngcHlIWVCYsoj7Oo1JU9JqONuAlt1LlTH/lmL8BMhbzdFUgReY87a05rY1j8mfK47Del+TCkaLAXwLw==",
|
"integrity": "sha512-YybbEHNngcHlIWVCYsoj7Oo1JU9JqONuAlt1LlTH/lmL8BMhbzdFUgReY87a05rY1j8mfK47Del+TCkaLAXwLw==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "10.1.4"
|
"@types/node": "10.3.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/url-join": {
|
"@types/url-join": {
|
||||||
|
@ -1913,6 +1913,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
|
||||||
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
|
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
|
||||||
},
|
},
|
||||||
|
"bufferhelper": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bufferhelper/-/bufferhelper-0.2.0.tgz",
|
||||||
|
"integrity": "sha1-7C842SU4dpzqKQFIeTXp4h2Bc7M="
|
||||||
|
},
|
||||||
"builtin-modules": {
|
"builtin-modules": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
|
||||||
|
@ -2842,6 +2847,11 @@
|
||||||
"source-map": "0.5.7"
|
"source-map": "0.5.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ctype": {
|
||||||
|
"version": "0.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
|
||||||
|
"integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8="
|
||||||
|
},
|
||||||
"currently-unhandled": {
|
"currently-unhandled": {
|
||||||
"version": "0.4.1",
|
"version": "0.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
|
||||||
|
@ -5745,6 +5755,23 @@
|
||||||
"resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
|
||||||
"integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs="
|
"integrity": "sha1-L5CN1fHbQGjAWM1ubUzjkskTOJs="
|
||||||
},
|
},
|
||||||
|
"http-proxy": {
|
||||||
|
"version": "1.17.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz",
|
||||||
|
"integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==",
|
||||||
|
"requires": {
|
||||||
|
"eventemitter3": "3.1.0",
|
||||||
|
"follow-redirects": "1.4.1",
|
||||||
|
"requires-port": "1.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"eventemitter3": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"http-shutdown": {
|
"http-shutdown": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.0.tgz",
|
||||||
|
@ -8465,6 +8492,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node-uuid": {
|
||||||
|
"version": "1.4.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
|
||||||
|
"integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc="
|
||||||
|
},
|
||||||
"nodeify": {
|
"nodeify": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz",
|
||||||
|
@ -9144,6 +9176,11 @@
|
||||||
"integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
|
"integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"pm": {
|
||||||
|
"version": "2.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/pm/-/pm-2.2.5.tgz",
|
||||||
|
"integrity": "sha1-IgJZn1m/trOID6naI0rdL0NLYK8="
|
||||||
|
},
|
||||||
"posix-character-classes": {
|
"posix-character-classes": {
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
|
||||||
|
@ -10231,6 +10268,11 @@
|
||||||
"resolve-from": "1.0.1"
|
"resolve-from": "1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"requires-port": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
||||||
|
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
|
||||||
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.5.0",
|
"version": "1.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz",
|
||||||
|
|
Loading…
Reference in New Issue