[#7158] EIP1193 (new ethereum provider)

Signed-off-by: Andrey Shovkoplyas <motor4ik@gmail.com>
This commit is contained in:
Andrey Shovkoplyas 2018-12-25 15:35:03 +01:00
parent d38fa87818
commit 40aff1da8d
No known key found for this signature in database
GPG Key ID: EAAB7C8622D860A4
2 changed files with 61 additions and 5 deletions

View File

@ -59,13 +59,21 @@ WebViewBridge.onMessage = function (message) {
} }
callback.resolve(data.data); callback.resolve(data.data);
} else { } else {
callback.reject(new Error("Denied")); callback.reject({code: 4001, message: "User denied authorizing any accounts for the dapp."});
} }
} else if (data.type === "web3-send-async-callback") { } else if (data.type === "web3-send-async-callback") {
var id = data.messageId; var id = data.messageId;
var callback = callbacks[id]; var callback = callbacks[id];
if (callback) { if (callback) {
if (callback.results) { if (callback.beta){
if (data.error || data.result.error){
callback.reject(data.error || data.result.error);
}
else{
callback.resolve(data.result.result);
}
}
else if (callback.results) {
callback.results.push(data.error || data.result); callback.results.push(data.error || data.result);
if (callback.results.length == callback.num) if (callback.results.length == callback.num)
callback.callback(undefined, callback.results); callback.callback(undefined, callback.results);
@ -133,7 +141,7 @@ ReadOnlyProvider.prototype.send = function (payload) {
} }
}; };
ReadOnlyProvider.prototype.sendAsync = function (payload, callback) { function sendAsync (payload, callback) {
var syncResponse = getSyncResponse(payload); var syncResponse = getSyncResponse(payload);
if (syncResponse && callback){ if (syncResponse && callback){
callback(null, syncResponse); callback(null, syncResponse);
@ -162,7 +170,55 @@ ReadOnlyProvider.prototype.sendAsync = function (payload, callback) {
} }
}; };
ReadOnlyProvider.prototype.sendAsync = sendAsync;
var ReadOnlyBetaProvider = function () {};
ReadOnlyBetaProvider.prototype.isStatus = true;
ReadOnlyBetaProvider.prototype.status = new StatusAPI();
//web3.js Backwards Compatibility
ReadOnlyBetaProvider.prototype.isConnected = function () { return true; };
ReadOnlyBetaProvider.prototype.sendAsync = sendAsync;
ReadOnlyBetaProvider.prototype.scanQRCode = function (regex) {
return sendAPIrequest('qr-code', {regex: regex});
};
ReadOnlyBetaProvider.prototype.send = function (method, params = []) {
if (!method || typeof method !== 'string') {
return new Error('Method is not a valid string.');
}
if (!(params instanceof Array)) {
return new Error('Params is not a valid array.');
}
if (method == 'eth_requestAccounts'){
return sendAPIrequest('web3');
}
var messageId = callbackId++;
var payload = {id: messageId,
jsonrpc: "2.0",
method: method,
params: params};
bridgeSend({type: 'web3-send-async-read-only',
messageId: messageId,
payload: payload});
return new Promise(function (resolve, reject) {
callbacks[messageId] = {beta: true,
resolve: resolve,
reject: reject};
});
};
} }
console.log("ReadOnlyProvider"); console.log("ReadOnlyProvider");
ethereum = new ReadOnlyProvider(); ethereum = new ReadOnlyProvider();
console.log("ReadOnlyBetaProvider");
ethereumBeta = new ReadOnlyBetaProvider();

View File

@ -294,7 +294,7 @@
(send-to-bridge cofx (send-to-bridge cofx
{:type constants/web3-send-async-callback {:type constants/web3-send-async-callback
:messageId message-id :messageId message-id
:error "Denied"}) :error {:code 4100 :message "The requested account has not been authorized by the user."}})
(web3-send-async cofx payload message-id)))) (web3-send-async cofx payload message-id))))
(fx/defn handle-scanned-qr-code (fx/defn handle-scanned-qr-code