mirror of
https://github.com/embarklabs/EmbarkJS.git
synced 2025-01-23 10:50:15 +00:00
Merge pull request #19 from embark-framework/feature/metamask-eip-1102
Ready for EIP 1102
This commit is contained in:
commit
b216a5045d
@ -1,5 +1,7 @@
|
|||||||
import {reduce} from './async'
|
import {reduce} from './async'
|
||||||
|
|
||||||
|
let Blockchain = {};
|
||||||
|
|
||||||
function isNewWeb3_1() {
|
function isNewWeb3_1() {
|
||||||
return (typeof(web3.version) === "string");
|
return (typeof(web3.version) === "string");
|
||||||
};
|
};
|
||||||
@ -15,33 +17,74 @@ function getAccounts(cb) {
|
|||||||
web3.eth.getAccounts(cb);
|
web3.eth.getAccounts(cb);
|
||||||
};
|
};
|
||||||
|
|
||||||
let Blockchain = {};
|
|
||||||
|
|
||||||
Blockchain.connect = function(connectionList, opts, doneCb) {
|
Blockchain.connect = function(connectionList, opts, doneCb) {
|
||||||
const self = this;
|
const self = this;
|
||||||
this.web3 = null;
|
|
||||||
|
const checkConnect = (next) => {
|
||||||
|
getAccounts(function(err, a) {
|
||||||
|
if (err) {
|
||||||
|
web3.setProvider(null);
|
||||||
|
}
|
||||||
|
return next(null, !err)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const connectWeb3 = (next) => {
|
||||||
|
let exited = false;
|
||||||
|
if (web3.givenProvider) {
|
||||||
|
web3.setProvider(web3.givenProvider);
|
||||||
|
return checkConnect(next);
|
||||||
|
}
|
||||||
|
window.addEventListener('message', ({ data } = msg) => {
|
||||||
|
if (data && data.type === 'ETHEREUM_PROVIDER_SUCCESS') {
|
||||||
|
if(exited) {
|
||||||
|
return console.warn("%cNote: The application might be in a corrupted state, please reload the page", "font-size: 2em");
|
||||||
|
}
|
||||||
|
exited = true;
|
||||||
|
web3.setProvider(ethereum);
|
||||||
|
checkConnect(next);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
window.postMessage({ type: 'ETHEREUM_PROVIDER_REQUEST' }, '*');
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
if (exited) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
exited = true;
|
||||||
|
next(null, false);
|
||||||
|
}, 20000);
|
||||||
|
}
|
||||||
|
|
||||||
|
const connectWebsocket = (value, next) => {
|
||||||
|
web3.setProvider(new Web3.providers.WebsocketProvider(value));
|
||||||
|
checkConnect(next);
|
||||||
|
}
|
||||||
|
|
||||||
|
const connectHttp = (value, next) => {
|
||||||
|
web3.setProvider(new Web3.providers.HttpProvider(value));
|
||||||
|
checkConnect(next);
|
||||||
|
}
|
||||||
|
|
||||||
this.doFirst(function(cb) {
|
this.doFirst(function(cb) {
|
||||||
reduce(connectionList, '', function(prev, value, next) {
|
reduce(connectionList, false, function(connected, value, next) {
|
||||||
if (prev === false) {
|
if (connected) {
|
||||||
|
return next(null, connected);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof Web3 === 'undefined' || typeof web3 === 'undefined') {
|
||||||
return next(null, false);
|
return next(null, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value === '$WEB3' && (typeof web3 !== 'undefined' && typeof Web3 !== 'undefined')) {
|
if (value === '$WEB3') {
|
||||||
web3.setProvider(web3.givenProvider);
|
connectWeb3(next);
|
||||||
} else if (value !== '$WEB3' && (typeof Web3 !== 'undefined' && ((typeof web3 === 'undefined') || (typeof web3 !== 'undefined' && (!web3.isConnected || (web3.isConnected && !web3.isConnected())))))) {
|
} else if (value.indexOf('ws://') >= 0) {
|
||||||
if (value.indexOf('ws://') >= 0) {
|
connectWebsocket(value, next)
|
||||||
web3.setProvider(new Web3.providers.WebsocketProvider(value));
|
|
||||||
} else {
|
} else {
|
||||||
web3.setProvider(new Web3.providers.HttpProvider(value));
|
connectHttp(value, next)
|
||||||
}
|
}
|
||||||
} else if (value === '$WEB3') {
|
}, function(err, _connected) {
|
||||||
return next(null, '');
|
|
||||||
}
|
|
||||||
|
|
||||||
getAccounts(function(err, account) {
|
|
||||||
return next(null, !!err)
|
|
||||||
});
|
|
||||||
}, function(err, _result) {
|
|
||||||
self.web3 = web3;
|
self.web3 = web3;
|
||||||
getAccounts(function(err, accounts) {
|
getAccounts(function(err, accounts) {
|
||||||
if (opts.warnAboutMetamask) {
|
if (opts.warnAboutMetamask) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user